From 4e6eef44d1edb6e385c9575baf421f2454a28a95 Mon Sep 17 00:00:00 2001 From: kanishk083 Date: Tue, 1 Sep 2026 13:07:15 +0530 Subject: [PATCH] fix(swift): capture single-letter imports Allow Swift dependency capture to retain modules such as a by accepting an empty identifier tail after the initial character. Add regression and adversarial scaling coverage. Refs #2543 Co-authored-by: Codex --- gitgalaxy/standards/language_standards/languages/swift.py | 2 +- tests/extraction/languages/test_swift.py | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/gitgalaxy/standards/language_standards/languages/swift.py b/gitgalaxy/standards/language_standards/languages/swift.py index 041005b83..7618a0122 100644 --- a/gitgalaxy/standards/language_standards/languages/swift.py +++ b/gitgalaxy/standards/language_standards/languages/swift.py @@ -196,7 +196,7 @@ # 24. import (Dependency Inclusions) "import": re.compile(r"^[ \t]*(?:@_exported[ \t]+)?import\s+[a-zA-Z_]\w*", re.M), "_dependency_capture": re.compile( - r"^[ \t]*(?:@_exported[ \t]+)?import\s+(?:(?:typealias|struct|class|enum|protocol|let|var|func)\s+)?([a-zA-Z_][\w.]+)", + r"^[ \t]*(?:@_exported[ \t]+)?import\s+(?:(?:typealias|struct|class|enum|protocol|let|var|func)\s+)?([a-zA-Z_][\w.]*)", re.M, ), # 25. ownership (Authorship Metadata) diff --git a/tests/extraction/languages/test_swift.py b/tests/extraction/languages/test_swift.py index 37152785b..89721baa4 100644 --- a/tests/extraction/languages/test_swift.py +++ b/tests/extraction/languages/test_swift.py @@ -235,10 +235,12 @@ def test_swift_class_start_pathological(payload, expected_name): # ============================================================================== DEPENDENCY_CASES: dict[str, Any] = { "valid": [ + ("import a", "a"), # issue #2543: single-letter module ("import Foundation", "Foundation"), ("@_exported import UIKit", "UIKit"), ], "invalid": [ + "import", "var importData = true", ], "pathological": [ @@ -267,3 +269,7 @@ def test_swift_dependency_capture_pathological(payload, expected_path): assert_pathological_dependency_match( SWIFT_RULES["_dependency_capture"], payload, expected_path, "swift._dependency_capture" ) + + +def test_swift_dependency_capture_redos_immunity(): + assert_redos_immune(SWIFT_RULES["_dependency_capture"], "import " + "a." * 50000, timeout_sec=3.0)