From c76df50d9dca36a026e74f0bead0ca7697e65cb8 Mon Sep 17 00:00:00 2001 From: Dan Date: Mon, 20 Oct 2025 15:44:31 -0400 Subject: [PATCH] Expand Jira-style issue ID detection in TD003 Updated the regex patterns to recognize Jira-style issue IDs at the end of lines, followed by spaces, and within parentheses. Added new test cases to ensure broader coverage and updated snapshot outputs to reflect the improved detection. --- .../test/fixtures/flake8_todos/TD003.py | 10 +++-- .../src/rules/flake8_todos/rules/todos.rs | 4 +- ...os__tests__missing-todo-link_TD003.py.snap | 41 ++++++++----------- 3 files changed, 25 insertions(+), 30 deletions(-) diff --git a/crates/ruff_linter/resources/test/fixtures/flake8_todos/TD003.py b/crates/ruff_linter/resources/test/fixtures/flake8_todos/TD003.py index 0423e5f481..e41dbfcbc0 100644 --- a/crates/ruff_linter/resources/test/fixtures/flake8_todos/TD003.py +++ b/crates/ruff_linter/resources/test/fixtures/flake8_todos/TD003.py @@ -42,17 +42,17 @@ def foo(x): # TODO: here's a TODO on the last line with no link +# Valid Jira-style patterns (should pass) # TODO: Move this part to the other place RFFU-6877 - # TODO: PROJ-123 Another Jira-style example - -# TODO: Valid Jira-style issue IDs (should pass) # TODO: Fix bug ABC-123 # TODO: Implement feature XYZ-456 # TODO: Update documentation DEF-789 # TODO: Refactor code GHI-101112 +# TODO: Fix this (AIRFLOW-123) +# TODO: Update config (SUPERSET-456) -# TODO: Invalid patterns that should still trigger TD003 (should fail) +# Invalid patterns that should still trigger TD003 (should fail) # TODO: Single letter project key A-1 # TODO: No hyphen pattern ABC123 # TODO: Lowercase project key abc-123 @@ -61,3 +61,5 @@ def foo(x): # TODO: Number before letters 123-ABC # TODO: Multiple hyphens ABC-123-456 # TODO: Empty project key -123 +# TODO: This is about PROJ-123 server config (ID in middle of sentence) +# TODO: Working on PROJ-123 and PROJ-456 (multiple IDs) diff --git a/crates/ruff_linter/src/rules/flake8_todos/rules/todos.rs b/crates/ruff_linter/src/rules/flake8_todos/rules/todos.rs index 8334d9de81..77f97d87d4 100644 --- a/crates/ruff_linter/src/rules/flake8_todos/rules/todos.rs +++ b/crates/ruff_linter/src/rules/flake8_todos/rules/todos.rs @@ -248,7 +248,9 @@ static ISSUE_LINK_TODO_LINE_REGEX_SET: LazyLock = LazyLock::new(|| { RegexSet::new([ r"\s*(http|https)://.*", // issue link r"\s*#\d+.*", // issue code - like "#003" - r"\s*[A-Z]{2,}-\d+.*", // Jira-style issue code - like "RFFU-6877" + r"\s*[A-Z]{2,}-\d+\s*$", // Jira-style issue code at end of line - like "RFFU-6877" + r"\s*[A-Z]{2,}-\d+\s", // Jira-style issue code followed by space - like "RFFU-6877 " + r"\s*\([A-Z]{2,}-\d+\)", // Jira-style issue code in parentheses - like "(RFFU-6877)" ]) .unwrap() }); diff --git a/crates/ruff_linter/src/rules/flake8_todos/snapshots/ruff_linter__rules__flake8_todos__tests__missing-todo-link_TD003.py.snap b/crates/ruff_linter/src/rules/flake8_todos/snapshots/ruff_linter__rules__flake8_todos__tests__missing-todo-link_TD003.py.snap index 6bd240fac2..47714f4ce9 100644 --- a/crates/ruff_linter/src/rules/flake8_todos/snapshots/ruff_linter__rules__flake8_todos__tests__missing-todo-link_TD003.py.snap +++ b/crates/ruff_linter/src/rules/flake8_todos/snapshots/ruff_linter__rules__flake8_todos__tests__missing-todo-link_TD003.py.snap @@ -62,35 +62,13 @@ TD003 Missing issue link for this TODO 43 | # TODO: here's a TODO on the last line with no link | ^^^^ 44 | -45 | # TODO: Move this part to the other place RFFU-6877 - | - -TD003 Missing issue link for this TODO - --> TD003.py:49:3 - | -47 | # TODO: PROJ-123 Another Jira-style example -48 | -49 | # TODO: Valid Jira-style issue IDs (should pass) - | ^^^^ -50 | # TODO: Fix bug ABC-123 -51 | # TODO: Implement feature XYZ-456 - | - -TD003 Missing issue link for this TODO - --> TD003.py:55:3 - | -53 | # TODO: Refactor code GHI-101112 -54 | -55 | # TODO: Invalid patterns that should still trigger TD003 (should fail) - | ^^^^ -56 | # TODO: Single letter project key A-1 -57 | # TODO: No hyphen pattern ABC123 +45 | # Valid Jira-style patterns (should pass) | TD003 Missing issue link for this TODO --> TD003.py:56:3 | -55 | # TODO: Invalid patterns that should still trigger TD003 (should fail) +55 | # Invalid patterns that should still trigger TD003 (should fail) 56 | # TODO: Single letter project key A-1 | ^^^^ 57 | # TODO: No hyphen pattern ABC123 @@ -100,7 +78,7 @@ TD003 Missing issue link for this TODO TD003 Missing issue link for this TODO --> TD003.py:57:3 | -55 | # TODO: Invalid patterns that should still trigger TD003 (should fail) +55 | # Invalid patterns that should still trigger TD003 (should fail) 56 | # TODO: Single letter project key A-1 57 | # TODO: No hyphen pattern ABC123 | ^^^^ @@ -152,6 +130,17 @@ TD003 Missing issue link for this TODO 63 | # TODO: Empty project key -123 | +TD003 Missing issue link for this TODO + --> TD003.py:62:3 + | +60 | # TODO: Just a random word with hyphen and number random-123 +61 | # TODO: Number before letters 123-ABC +62 | # TODO: Multiple hyphens ABC-123-456 + | ^^^^ +63 | # TODO: Empty project key -123 +64 | # TODO: This is about PROJ-123 server config (ID in middle of sentence) + | + TD003 Missing issue link for this TODO --> TD003.py:63:3 | @@ -159,4 +148,6 @@ TD003 Missing issue link for this TODO 62 | # TODO: Multiple hyphens ABC-123-456 63 | # TODO: Empty project key -123 | ^^^^ +64 | # TODO: This is about PROJ-123 server config (ID in middle of sentence) +65 | # TODO: Working on PROJ-123 and PROJ-456 (multiple IDs) |