diff --git a/README.md b/README.md index 2cf7917..ede3111 100644 --- a/README.md +++ b/README.md @@ -5,8 +5,6 @@ [![codecov](https://codecov.io/gh/jrepp/docuchango/branch/main/graph/badge.svg)](https://codecov.io/gh/jrepp/docuchango) [![Python Version](https://img.shields.io/badge/python-3.9%20%7C%203.10%20%7C%203.11%20%7C%203.12%20%7C%203.13-blue)](https://www.python.org/downloads/) [![License: MPL 2.0](https://img.shields.io/badge/License-MPL%202.0-brightgreen.svg)](https://opensource.org/licenses/MPL-2.0) - -[![Tests](https://img.shields.io/badge/tests-628%20passing-brightgreen)](https://github.com/jrepp/docuchango/actions) [![Code style: ruff](https://img.shields.io/badge/code%20style-ruff-000000.svg)](https://github.com/astral-sh/ruff) [![Type checked: mypy](https://img.shields.io/badge/type%20checked-mypy-blue.svg)](http://mypy-lang.org/) diff --git a/docuchango/fixes/whitespace.py b/docuchango/fixes/whitespace.py index 26c7ee5..9c3bf31 100644 --- a/docuchango/fixes/whitespace.py +++ b/docuchango/fixes/whitespace.py @@ -93,12 +93,11 @@ def normalize_empty_values(metadata: dict) -> tuple[dict, list[str]]: return updated, messages -def ensure_required_fields(metadata: dict, doc_type: str | None) -> tuple[dict, list[str]]: # noqa: ARG001 - Reserved for document type-specific required fields +def ensure_required_fields(metadata: dict) -> tuple[dict, list[str]]: """Ensure required fields are present with defaults. Args: metadata: Frontmatter metadata dictionary - doc_type: Document type (adr, rfc, memo, prd) - reserved for future use Returns: Tuple of (updated_metadata, messages) @@ -145,18 +144,6 @@ def fix_whitespace_and_fields(file_path: Path, dry_run: bool = False) -> tuple[b if not post.metadata: return False, ["No frontmatter found"] - # Determine document type from path - doc_type = None - path_str = str(file_path).lower() - if "/adr/" in path_str: - doc_type = "adr" - elif "/rfcs/" in path_str: - doc_type = "rfc" - elif "/memos/" in path_str: - doc_type = "memo" - elif "/prd/" in path_str: - doc_type = "prd" - original = post.metadata.copy() # Apply fixes @@ -171,7 +158,7 @@ def fix_whitespace_and_fields(file_path: Path, dry_run: bool = False) -> tuple[b messages.extend(empty_msgs) # 3. Ensure required fields - metadata, required_msgs = ensure_required_fields(metadata, doc_type) + metadata, required_msgs = ensure_required_fields(metadata) messages.extend(required_msgs) # Check if anything changed diff --git a/tests/test_whitespace_comprehensive.py b/tests/test_whitespace_comprehensive.py index fcd5d73..85466f9 100644 --- a/tests/test_whitespace_comprehensive.py +++ b/tests/test_whitespace_comprehensive.py @@ -226,8 +226,8 @@ def test_uuid_collision_handling(self): metadata1 = {"id": "test1"} metadata2 = {"id": "test2"} - updated1, _ = ensure_required_fields(metadata1, "adr") - updated2, _ = ensure_required_fields(metadata2, "adr") + updated1, _ = ensure_required_fields(metadata1) + updated2, _ = ensure_required_fields(metadata2) # UUIDs should be different assert updated1["doc_uuid"] != updated2["doc_uuid"] @@ -238,7 +238,7 @@ def test_uuid_format_validation(self): metadata = {"id": "test"} - updated, _ = ensure_required_fields(metadata, "adr") + updated, _ = ensure_required_fields(metadata) # Should be valid UUID try: @@ -255,7 +255,7 @@ def test_existing_empty_string_fields(self): "project_id": "", # Should be set } - updated, messages = ensure_required_fields(metadata, "adr") + updated, messages = ensure_required_fields(metadata) # Empty tags left as-is (not our job to fix here) assert updated["tags"] == "" @@ -264,17 +264,16 @@ def test_existing_empty_string_fields(self): # Empty project_id should be replaced assert updated["project_id"] != "" - def test_different_doc_types(self): - """Test required fields for different document types.""" - for doc_type in ["adr", "rfc", "memo", "prd", None]: - metadata = {"id": "test"} + def test_required_fields_basic(self): + """Test basic required fields are added.""" + metadata = {"id": "test"} - updated, messages = ensure_required_fields(metadata, doc_type) + updated, messages = ensure_required_fields(metadata) - # All should get these fields - assert "tags" in updated - assert "doc_uuid" in updated - assert "project_id" in updated + # All should get these fields + assert "tags" in updated + assert "doc_uuid" in updated + assert "project_id" in updated def test_preserving_extra_fields(self): """Test that extra fields are preserved.""" @@ -284,7 +283,7 @@ def test_preserving_extra_fields(self): "another": 123, } - updated, messages = ensure_required_fields(metadata, "adr") + updated, messages = ensure_required_fields(metadata) # Custom fields should be preserved assert updated["custom_field"] == "custom_value" @@ -294,7 +293,7 @@ def test_very_large_metadata(self): """Test metadata with many existing fields.""" metadata = {f"field{i}": f"value{i}" for i in range(1000)} - updated, messages = ensure_required_fields(metadata, "adr") + updated, messages = ensure_required_fields(metadata) # Should add required fields assert "tags" in updated diff --git a/tests/test_whitespace_fixes.py b/tests/test_whitespace_fixes.py index f136f68..e88f7f3 100644 --- a/tests/test_whitespace_fixes.py +++ b/tests/test_whitespace_fixes.py @@ -134,7 +134,7 @@ def test_add_missing_tags(self): """Test adding missing tags field.""" metadata = {"id": "test"} - updated, messages = ensure_required_fields(metadata, "adr") + updated, messages = ensure_required_fields(metadata) assert "tags" in updated assert updated["tags"] == [] @@ -144,7 +144,7 @@ def test_add_missing_doc_uuid(self): """Test adding missing doc_uuid.""" metadata = {"id": "test"} - updated, messages = ensure_required_fields(metadata, "adr") + updated, messages = ensure_required_fields(metadata) assert "doc_uuid" in updated assert isinstance(updated["doc_uuid"], str) @@ -155,7 +155,7 @@ def test_add_missing_project_id(self): """Test adding missing project_id.""" metadata = {"id": "test"} - updated, messages = ensure_required_fields(metadata, "adr") + updated, messages = ensure_required_fields(metadata) assert "project_id" in updated assert updated["project_id"] == "my-project" @@ -165,7 +165,7 @@ def test_replace_empty_doc_uuid(self): """Test replacing empty doc_uuid.""" metadata = {"id": "test", "doc_uuid": ""} - updated, messages = ensure_required_fields(metadata, "adr") + updated, messages = ensure_required_fields(metadata) assert updated["doc_uuid"] != "" assert len(updated["doc_uuid"]) > 0 @@ -179,7 +179,7 @@ def test_preserve_existing_fields(self): "project_id": "my-custom-project", } - updated, messages = ensure_required_fields(metadata, "adr") + updated, messages = ensure_required_fields(metadata) assert updated["tags"] == ["existing"] assert updated["doc_uuid"] == "existing-uuid" diff --git a/uv.lock b/uv.lock index bd5340a..4e84c26 100644 --- a/uv.lock +++ b/uv.lock @@ -318,6 +318,7 @@ test = [ { name = "pytest-cov" }, { name = "pytest-timeout" }, { name = "pytest-xdist" }, + { name = "textstat" }, ] [package.metadata] @@ -336,6 +337,7 @@ requires-dist = [ { name = "rich", specifier = ">=13.0.0" }, { name = "ruff", marker = "extra == 'lint'", specifier = ">=0.1.0" }, { name = "textstat", marker = "extra == 'readability'", specifier = ">=0.7.0" }, + { name = "textstat", marker = "extra == 'test'", specifier = ">=0.7.0" }, { name = "types-pyyaml", marker = "extra == 'lint'", specifier = ">=6.0.0" }, ] provides-extras = ["readability", "test", "lint", "dev"]