From 4373ea34d99e91485af07faa9686b52c77203b28 Mon Sep 17 00:00:00 2001 From: Patrick Dahlke Date: Wed, 10 Dec 2025 08:51:20 +0100 Subject: [PATCH 1/3] [#51] Fix leading and trailing space handling in oneline_parser and add corresponding test cases --- .../analyse/oneline_parser.py | 2 +- tests/test_oneline_parser.py | 48 +++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/src/sphinx_codelinks/analyse/oneline_parser.py b/src/sphinx_codelinks/analyse/oneline_parser.py index 2e993db..3395a1e 100644 --- a/src/sphinx_codelinks/analyse/oneline_parser.py +++ b/src/sphinx_codelinks/analyse/oneline_parser.py @@ -54,7 +54,7 @@ def oneline_parser( # noqa: PLR0912, PLR0911 # handel warnings # extract the string wrapped by start and end start_idx = start_idx + len(oneline_config.start_sequence) - string = oneline[start_idx:end_idx] + string = oneline[start_idx:end_idx].strip() # numbers of needs_fields which are required cnt_required_fields = oneline_config.get_cnt_required_fields() diff --git a/tests/test_oneline_parser.py b/tests/test_oneline_parser.py index e0e55a3..b443ed0 100644 --- a/tests/test_oneline_parser.py +++ b/tests/test_oneline_parser.py @@ -25,6 +25,54 @@ "end_column": 17, }, ), + # Test case for leading space after start sequence (bug fix) + ( + f"@ title 1, IMPL_1 {UNIX_NEWLINE}", + { + "title": "title 1", + "id": "IMPL_1", + "type": "impl", + "links": [], + "start_column": 1, + "end_column": 18, + }, + ), + # Test case for multiple leading spaces after start sequence + ( + f"@ title 1, IMPL_1 {UNIX_NEWLINE}", + { + "title": "title 1", + "id": "IMPL_1", + "type": "impl", + "links": [], + "start_column": 1, + "end_column": 20, + }, + ), + # Test case for trailing space before end sequence + ( + f"@title 1, IMPL_1 {UNIX_NEWLINE}", + { + "title": "title 1", + "id": "IMPL_1", + "type": "impl", + "links": [], + "start_column": 1, + "end_column": 18, + }, + ), + # Test case for both leading and trailing spaces + ( + f"@ title 1, IMPL_1 {UNIX_NEWLINE}", + { + "title": "title 1", + "id": "IMPL_1", + "type": "impl", + "links": [], + "start_column": 1, + "end_column": 21, + }, + ), ], ) def test_oneline_parser_default_config_positive( From 4dab2df3e582526d861c26b3abf713e6bb257fb9 Mon Sep 17 00:00:00 2001 From: Patrick Dahlke Date: Wed, 10 Dec 2025 11:02:16 +0100 Subject: [PATCH 2/3] Add test cases for space as field separator in oneline parser --- tests/test_oneline_parser.py | 82 ++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) diff --git a/tests/test_oneline_parser.py b/tests/test_oneline_parser.py index b443ed0..baf4ddc 100644 --- a/tests/test_oneline_parser.py +++ b/tests/test_oneline_parser.py @@ -82,6 +82,88 @@ def test_oneline_parser_default_config_positive( assert oneline_need == result +# Test case for space as field separator (as mentioned by Kilian) +# Example: @Implementation +ONELINE_COMMENT_STYLE_SPACE_SEPARATOR = OneLineCommentStyle( + start_sequence="@", + end_sequence=UNIX_NEWLINE, + field_split_char=" ", + needs_fields=[ + {"name": "title"}, + {"name": "id"}, + {"name": "type", "default": "impl"}, + ], +) + + +@pytest.mark.parametrize( + "oneline, result", + [ + # Basic space-separated fields + ( + f"@Implementation IMPL_1{UNIX_NEWLINE}", + { + "title": "Implementation", + "id": "IMPL_1", + "type": "impl", + "start_column": 1, + "end_column": 22, + }, + ), + # Space separator with explicit type + ( + f"@MyFeature FEAT_001 feature{UNIX_NEWLINE}", + { + "title": "MyFeature", + "id": "FEAT_001", + "type": "feature", + "start_column": 1, + "end_column": 27, + }, + ), + # Leading space after @ (the bug Kilian reported) + ( + f"@ Implementation IMPL_2{UNIX_NEWLINE}", + { + "title": "Implementation", + "id": "IMPL_2", + "type": "impl", + "start_column": 1, + "end_column": 23, + }, + ), + # Trailing space before newline + ( + f"@Implementation IMPL_3 {UNIX_NEWLINE}", + { + "title": "Implementation", + "id": "IMPL_3", + "type": "impl", + "start_column": 1, + "end_column": 23, + }, + ), + # Multiple leading spaces after @ + ( + f"@ Title ID_456{UNIX_NEWLINE}", + { + "title": "Title", + "id": "ID_456", + "type": "impl", + "start_column": 1, + "end_column": 15, + }, + ), + ], +) +def test_oneline_parser_space_separator( + oneline: str, result: dict[str, str | list[str]] +) -> None: + """Test oneline parser with space as field separator.""" + oneline_need = oneline_parser(oneline, ONELINE_COMMENT_STYLE_SPACE_SEPARATOR) + assert oneline_need == result + + @pytest.mark.parametrize( "oneline, result", [ From 65b725b4dc2d5f6d8315aabd73b85c7bc843452a Mon Sep 17 00:00:00 2001 From: Patrick Dahlke Date: Thu, 11 Dec 2025 10:22:35 +0100 Subject: [PATCH 3/3] Add escaping test-case --- tests/test_oneline_parser.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tests/test_oneline_parser.py b/tests/test_oneline_parser.py index baf4ddc..ee5ae07 100644 --- a/tests/test_oneline_parser.py +++ b/tests/test_oneline_parser.py @@ -154,6 +154,17 @@ def test_oneline_parser_default_config_positive( "end_column": 15, }, ), + # Title contain spaces + ( + f"@ Title\ escape\ space ID_456{UNIX_NEWLINE}", + { + "title": "Title escape space", + "id": "ID_456", + "type": "impl", + "start_column": 1, + "end_column": 30, + }, + ), ], ) def test_oneline_parser_space_separator(