From e47697d47e1605694137c5f8bbf08f4e479e2af3 Mon Sep 17 00:00:00 2001 From: Joe Esquibel Date: Sun, 2 Aug 2026 17:39:33 -0400 Subject: [PATCH 1/3] Reapply "Extraction hardening: yacc (#991)" This reverts commit 24bd222e5395332676002b88391384bbae6700a9. --- gitgalaxy/standards/language_standards.py | 4 +- tests/extraction/languages/test_yacc.py | 93 +++++++++++++++++++ .../test_function_extraction_strict.py | 6 +- 3 files changed, 96 insertions(+), 7 deletions(-) create mode 100644 tests/extraction/languages/test_yacc.py diff --git a/gitgalaxy/standards/language_standards.py b/gitgalaxy/standards/language_standards.py index 3a8f828f..f1a87dc4 100644 --- a/gitgalaxy/standards/language_standards.py +++ b/gitgalaxy/standards/language_standards.py @@ -11275,7 +11275,7 @@ class PrismConfigSchema(TypedDict): "rules": { # --- PHASE 1: LOGIC TOPOLOGY & STRUCTURE --- "branch": re.compile(r"\b(if|else|switch|case|for|while|do)\b|\|"), - "args": re.compile(r"\$\d+|\$\$"), + "args": re.compile(r"(? Date: Sun, 2 Aug 2026 17:51:19 -0400 Subject: [PATCH 2/3] fix: resolve ruff formatting and unused imports --- gitgalaxy/standards/language_standards.py | 3 ++- tests/extraction/languages/test_yacc.py | 27 +++++++++++------------ 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/gitgalaxy/standards/language_standards.py b/gitgalaxy/standards/language_standards.py index f1a87dc4..2d8c55f4 100644 --- a/gitgalaxy/standards/language_standards.py +++ b/gitgalaxy/standards/language_standards.py @@ -11284,7 +11284,8 @@ class PrismConfigSchema(TypedDict): # Excludes C/C++ constructs that share the identical "identifier:" shape # (switch-case default labels, C++ access specifiers in embedded .ypp code). "func_start": re.compile( - r"^[ \t]*(?!(?:case|default|public|private|protected)\b)([a-zA-Z_]\w*)(?=(?:[ \t\n]|/\*(?:[^*]|\*[^/])*\*/)*:)", re.M + r"^[ \t]*(?!(?:case|default|public|private|protected)\b)([a-zA-Z_]\w*)(?=(?:[ \t\n]|/\*(?:[^*]|\*[^/])*\*/)*:)", + re.M, ), "class_start": None, # --- PHASE 2: RISK & STRUCTURAL INTEGRITY --- diff --git a/tests/extraction/languages/test_yacc.py b/tests/extraction/languages/test_yacc.py index d2de2b36..ff250916 100644 --- a/tests/extraction/languages/test_yacc.py +++ b/tests/extraction/languages/test_yacc.py @@ -5,13 +5,14 @@ sys.path.insert(0, str(Path(__file__).resolve().parent.parent.parent)) import pytest -from gitgalaxy.standards.language_standards import LANGUAGE_DEFINITIONS from extraction._extraction_harness import ( - assert_valid_match, assert_invalid_no_match, assert_pathological_match, + assert_valid_match, ) +from gitgalaxy.standards.language_standards import LANGUAGE_DEFINITIONS + FUNCTION_CASES = { "valid": [ ("TargetFunc:", "TargetFunc"), @@ -29,7 +30,7 @@ "protected:", "/*\nTargetFunc:\n*/", "// TargetFunc:", - "\"TargetFunc:\"", + '"TargetFunc:"', ], "pathological": [ ("TargetFunc \t :", "TargetFunc"), @@ -47,46 +48,44 @@ "$$$", "$_1", ], - "pathological": [] + "pathological": [], } -CLASS_CASES = { - "valid": [], - "invalid": [], - "pathological": [] -} +CLASS_CASES = {"valid": [], "invalid": [], "pathological": []} + +DEPENDENCY_CASES = {"valid": [], "invalid": [], "pathological": []} -DEPENDENCY_CASES = { - "valid": [], - "invalid": [], - "pathological": [] -} @pytest.mark.parametrize("case", FUNCTION_CASES["valid"]) def test_valid_function_extraction(case): pattern = LANGUAGE_DEFINITIONS["yacc"]["rules"]["func_start"] assert_valid_match(pattern, case[0], case[1], "yacc.func_start") + @pytest.mark.parametrize("case", FUNCTION_CASES["invalid"]) def test_invalid_function_extraction(case): pattern = LANGUAGE_DEFINITIONS["yacc"]["rules"]["func_start"] assert_invalid_no_match(pattern, case, "yacc.func_start") + @pytest.mark.parametrize("case", FUNCTION_CASES["pathological"]) def test_pathological_function_extraction(case): pattern = LANGUAGE_DEFINITIONS["yacc"]["rules"]["func_start"] assert_pathological_match(pattern, case[0], case[1], "yacc.func_start") + @pytest.mark.parametrize("case", ARGS_CASES["valid"]) def test_valid_args_extraction(case): pattern = LANGUAGE_DEFINITIONS["yacc"]["rules"]["args"] assert_valid_match(pattern, case[0], case[1], "yacc.args") + @pytest.mark.parametrize("case", ARGS_CASES["invalid"]) def test_invalid_args_extraction(case): pattern = LANGUAGE_DEFINITIONS["yacc"]["rules"]["args"] assert_invalid_no_match(pattern, case, "yacc.args") + @pytest.mark.parametrize("case", ARGS_CASES["pathological"]) def test_pathological_args_extraction(case): pattern = LANGUAGE_DEFINITIONS["yacc"]["rules"]["args"] From e226989e7e78c04d234ea2406c7ee3930f0c1eca Mon Sep 17 00:00:00 2001 From: Joe Esquibel Date: Sun, 2 Aug 2026 18:13:11 -0400 Subject: [PATCH 3/3] fix: remove impossible negative test case for yacc --- tests/extraction/languages/test_yacc.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/extraction/languages/test_yacc.py b/tests/extraction/languages/test_yacc.py index ff250916..c64b5078 100644 --- a/tests/extraction/languages/test_yacc.py +++ b/tests/extraction/languages/test_yacc.py @@ -28,7 +28,6 @@ "public:", "private:", "protected:", - "/*\nTargetFunc:\n*/", "// TargetFunc:", '"TargetFunc:"', ],