diff --git a/gitgalaxy/standards/language_standards/languages/swift.py b/gitgalaxy/standards/language_standards/languages/swift.py index 041005b8..7618a012 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 37152785..89721baa 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)