From 59307417e9d18b5e0e5985095f4a65e6e0de5ee0 Mon Sep 17 00:00:00 2001 From: Dan Date: Tue, 14 Oct 2025 23:30:39 -0400 Subject: [PATCH 1/4] fix-20809 --- .../ruff_linter/resources/test/fixtures/flake8_todos/TD003.py | 4 ++++ crates/ruff_linter/src/rules/flake8_todos/rules/todos.rs | 1 + ...ules__flake8_todos__tests__missing-todo-link_TD003.py.snap | 2 ++ 3 files changed, 7 insertions(+) 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 87bf5291aa..7d6b91bc40 100644 --- a/crates/ruff_linter/resources/test/fixtures/flake8_todos/TD003.py +++ b/crates/ruff_linter/resources/test/fixtures/flake8_todos/TD003.py @@ -41,3 +41,7 @@ def foo(x): # TODO: A todo with a random number, 5431 # TODO: here's a TODO on the last line with no link + +# TODO: Move this part to the other place RFFU-6877 + +# TODO: PROJ-123 Another Jira-style example 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 24125023a6..a07992e24e 100644 --- a/crates/ruff_linter/src/rules/flake8_todos/rules/todos.rs +++ b/crates/ruff_linter/src/rules/flake8_todos/rules/todos.rs @@ -244,6 +244,7 @@ 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]+-\d+.*", // Jira-style issue code - 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 6786d440b6..4833012f2d 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 @@ -61,4 +61,6 @@ TD003 Missing issue link for this TODO 42 | 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 | From eee916e1b61eac0772130a737c6cb4411fde8836 Mon Sep 17 00:00:00 2001 From: Dan Date: Sun, 19 Oct 2025 16:34:56 -0400 Subject: [PATCH 2/4] Refine Jira-style TODO pattern and expand test coverage --- .../test/fixtures/flake8_todos/TD003.py | 16 ++++ .../src/rules/flake8_todos/rules/todos.rs | 6 +- ...os__tests__missing-todo-link_TD003.py.snap | 96 +++++++++++++++++++ 3 files changed, 117 insertions(+), 1 deletion(-) 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 7d6b91bc40..0423e5f481 100644 --- a/crates/ruff_linter/resources/test/fixtures/flake8_todos/TD003.py +++ b/crates/ruff_linter/resources/test/fixtures/flake8_todos/TD003.py @@ -45,3 +45,19 @@ def foo(x): # 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: 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 +# TODO: Mixed case project key AbC-123 +# TODO: Just a random word with hyphen and number random-123 +# TODO: Number before letters 123-ABC +# TODO: Multiple hyphens ABC-123-456 +# TODO: Empty project key -123 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 a07992e24e..8334d9de81 100644 --- a/crates/ruff_linter/src/rules/flake8_todos/rules/todos.rs +++ b/crates/ruff_linter/src/rules/flake8_todos/rules/todos.rs @@ -100,6 +100,10 @@ impl Violation for MissingTodoAuthor { /// /// # TODO(charlie): this comment has an issue code (matches the regex `[A-Z]+\-?\d+`) /// # SIXCHR-003 +/// +/// # TODO(charlie): PROJ-123 this comment has a Jira-style issue ID on the same line +/// +/// # TODO(charlie): Fix bug ABC-456 another Jira-style example /// ``` #[derive(ViolationMetadata)] pub(crate) struct MissingTodoLink; @@ -244,7 +248,7 @@ 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]+-\d+.*", // Jira-style issue code - like "RFFU-6877" + r"\s*[A-Z]{2,}-\d+.*", // Jira-style issue code - 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 4833012f2d..6bd240fac2 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 @@ -64,3 +64,99 @@ TD003 Missing issue link for this TODO 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 + | + +TD003 Missing issue link for this TODO + --> TD003.py:56:3 + | +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 +58 | # TODO: Lowercase project key abc-123 + | + +TD003 Missing issue link for this TODO + --> TD003.py:57:3 + | +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 + | ^^^^ +58 | # TODO: Lowercase project key abc-123 +59 | # TODO: Mixed case project key AbC-123 + | + +TD003 Missing issue link for this TODO + --> TD003.py:58:3 + | +56 | # TODO: Single letter project key A-1 +57 | # TODO: No hyphen pattern ABC123 +58 | # TODO: Lowercase project key abc-123 + | ^^^^ +59 | # TODO: Mixed case project key AbC-123 +60 | # TODO: Just a random word with hyphen and number random-123 + | + +TD003 Missing issue link for this TODO + --> TD003.py:59:3 + | +57 | # TODO: No hyphen pattern ABC123 +58 | # TODO: Lowercase project key abc-123 +59 | # TODO: Mixed case project key AbC-123 + | ^^^^ +60 | # TODO: Just a random word with hyphen and number random-123 +61 | # TODO: Number before letters 123-ABC + | + +TD003 Missing issue link for this TODO + --> TD003.py:60:3 + | +58 | # TODO: Lowercase project key abc-123 +59 | # TODO: Mixed case project key AbC-123 +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 + | + +TD003 Missing issue link for this TODO + --> TD003.py:61:3 + | +59 | # TODO: Mixed case project key AbC-123 +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 + | + +TD003 Missing issue link for this TODO + --> TD003.py:63:3 + | +61 | # TODO: Number before letters 123-ABC +62 | # TODO: Multiple hyphens ABC-123-456 +63 | # TODO: Empty project key -123 + | ^^^^ + | From c76df50d9dca36a026e74f0bead0ca7697e65cb8 Mon Sep 17 00:00:00 2001 From: Dan Date: Mon, 20 Oct 2025 15:44:31 -0400 Subject: [PATCH 3/4] 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) | From ee5e83081de38495903f2e9eb2e03bcf130e1580 Mon Sep 17 00:00:00 2001 From: Dan Date: Thu, 23 Oct 2025 21:11:15 -0400 Subject: [PATCH 4/4] Support Jira-style TODOs with colon in TD003 rule Extend the TD003 rule to recognize Jira-style issue codes followed by a colon (e.g., 'PROJ-123:') as valid TODO patterns. Updated test fixtures and snapshots to cover the new pattern. --- .../test/fixtures/flake8_todos/TD003.py | 10 +- .../src/rules/flake8_todos/rules/todos.rs | 2 +- ...os__tests__missing-todo-link_TD003.py.snap | 122 +++++++++++------- 3 files changed, 83 insertions(+), 51 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 e41dbfcbc0..d9e6d7992e 100644 --- a/crates/ruff_linter/resources/test/fixtures/flake8_todos/TD003.py +++ b/crates/ruff_linter/resources/test/fixtures/flake8_todos/TD003.py @@ -44,15 +44,17 @@ def foo(x): # Valid Jira-style patterns (should pass) # TODO: Move this part to the other place RFFU-6877 +# TODO: Fix this (AIRFLOW-123) +# TODO: Update config (SUPERSET-456) +# TODO: PROJ-123: Another Jira-style example with colon +# TODO: ABC-456: Fix bug with colon + +# Invalid patterns that should still trigger TD003 (should fail) # TODO: PROJ-123 Another Jira-style example # 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) - -# 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 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 77f97d87d4..d3285dfcab 100644 --- a/crates/ruff_linter/src/rules/flake8_todos/rules/todos.rs +++ b/crates/ruff_linter/src/rules/flake8_todos/rules/todos.rs @@ -249,8 +249,8 @@ static ISSUE_LINK_TODO_LINE_REGEX_SET: LazyLock = LazyLock::new(|| { r"\s*(http|https)://.*", // issue link r"\s*#\d+.*", // issue code - like "#003" 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)" + r"\s*[A-Z]{2,}-\d+\s*:", // Jira-style issue code followed by colon - 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 47714f4ce9..6009401dfd 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 @@ -66,88 +66,118 @@ TD003 Missing issue link for this TODO | TD003 Missing issue link for this TODO - --> TD003.py:56:3 + --> TD003.py:53:3 | -55 | # Invalid patterns that should still trigger TD003 (should fail) -56 | # TODO: Single letter project key A-1 +52 | # Invalid patterns that should still trigger TD003 (should fail) +53 | # TODO: PROJ-123 Another Jira-style example | ^^^^ -57 | # TODO: No hyphen pattern ABC123 -58 | # TODO: Lowercase project key abc-123 - | - -TD003 Missing issue link for this TODO - --> TD003.py:57:3 - | -55 | # Invalid patterns that should still trigger TD003 (should fail) -56 | # TODO: Single letter project key A-1 -57 | # TODO: No hyphen pattern ABC123 - | ^^^^ -58 | # TODO: Lowercase project key abc-123 -59 | # TODO: Mixed case project key AbC-123 +54 | # TODO: Fix bug ABC-123 +55 | # TODO: Implement feature XYZ-456 | TD003 Missing issue link for this TODO --> TD003.py:58:3 | -56 | # TODO: Single letter project key A-1 -57 | # TODO: No hyphen pattern ABC123 -58 | # TODO: Lowercase project key abc-123 +56 | # TODO: Update documentation DEF-789 +57 | # TODO: Refactor code GHI-101112 +58 | # TODO: Single letter project key A-1 | ^^^^ -59 | # TODO: Mixed case project key AbC-123 -60 | # TODO: Just a random word with hyphen and number random-123 +59 | # TODO: No hyphen pattern ABC123 +60 | # TODO: Lowercase project key abc-123 | TD003 Missing issue link for this TODO --> TD003.py:59:3 | -57 | # TODO: No hyphen pattern ABC123 -58 | # TODO: Lowercase project key abc-123 -59 | # TODO: Mixed case project key AbC-123 +57 | # TODO: Refactor code GHI-101112 +58 | # TODO: Single letter project key A-1 +59 | # TODO: No hyphen pattern ABC123 | ^^^^ -60 | # TODO: Just a random word with hyphen and number random-123 -61 | # TODO: Number before letters 123-ABC +60 | # TODO: Lowercase project key abc-123 +61 | # TODO: Mixed case project key AbC-123 | TD003 Missing issue link for this TODO --> TD003.py:60:3 | -58 | # TODO: Lowercase project key abc-123 -59 | # TODO: Mixed case project key AbC-123 -60 | # TODO: Just a random word with hyphen and number random-123 +58 | # TODO: Single letter project key A-1 +59 | # TODO: No hyphen pattern ABC123 +60 | # TODO: Lowercase project key abc-123 | ^^^^ -61 | # TODO: Number before letters 123-ABC -62 | # TODO: Multiple hyphens ABC-123-456 +61 | # TODO: Mixed case project key AbC-123 +62 | # TODO: Just a random word with hyphen and number random-123 | TD003 Missing issue link for this TODO --> TD003.py:61:3 | -59 | # TODO: Mixed case project key AbC-123 -60 | # TODO: Just a random word with hyphen and number random-123 -61 | # TODO: Number before letters 123-ABC +59 | # TODO: No hyphen pattern ABC123 +60 | # TODO: Lowercase project key abc-123 +61 | # TODO: Mixed case project key AbC-123 | ^^^^ -62 | # TODO: Multiple hyphens ABC-123-456 -63 | # TODO: Empty project key -123 +62 | # TODO: Just a random word with hyphen and number random-123 +63 | # TODO: Number before letters 123-ABC | 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 +60 | # TODO: Lowercase project key abc-123 +61 | # TODO: Mixed case project key AbC-123 +62 | # TODO: Just a random word with hyphen and number random-123 | ^^^^ -63 | # TODO: Empty project key -123 -64 | # TODO: This is about PROJ-123 server config (ID in middle of sentence) +63 | # TODO: Number before letters 123-ABC +64 | # TODO: Multiple hyphens ABC-123-456 | TD003 Missing issue link for this TODO --> TD003.py:63:3 | -61 | # TODO: Number before letters 123-ABC -62 | # TODO: Multiple hyphens ABC-123-456 -63 | # TODO: Empty project key -123 +61 | # TODO: Mixed case project key AbC-123 +62 | # TODO: Just a random word with hyphen and number random-123 +63 | # TODO: Number before letters 123-ABC + | ^^^^ +64 | # TODO: Multiple hyphens ABC-123-456 +65 | # TODO: Empty project key -123 + | + +TD003 Missing issue link for this TODO + --> TD003.py:64:3 + | +62 | # TODO: Just a random word with hyphen and number random-123 +63 | # TODO: Number before letters 123-ABC +64 | # TODO: Multiple hyphens ABC-123-456 + | ^^^^ +65 | # TODO: Empty project key -123 +66 | # TODO: This is about PROJ-123 server config (ID in middle of sentence) + | + +TD003 Missing issue link for this TODO + --> TD003.py:65:3 + | +63 | # TODO: Number before letters 123-ABC +64 | # TODO: Multiple hyphens ABC-123-456 +65 | # TODO: Empty project key -123 + | ^^^^ +66 | # TODO: This is about PROJ-123 server config (ID in middle of sentence) +67 | # TODO: Working on PROJ-123 and PROJ-456 (multiple IDs) + | + +TD003 Missing issue link for this TODO + --> TD003.py:66:3 + | +64 | # TODO: Multiple hyphens ABC-123-456 +65 | # TODO: Empty project key -123 +66 | # TODO: This is about PROJ-123 server config (ID in middle of sentence) + | ^^^^ +67 | # TODO: Working on PROJ-123 and PROJ-456 (multiple IDs) + | + +TD003 Missing issue link for this TODO + --> TD003.py:67:3 + | +65 | # TODO: Empty project key -123 +66 | # TODO: This is about PROJ-123 server config (ID in middle of sentence) +67 | # TODO: Working on PROJ-123 and PROJ-456 (multiple IDs) | ^^^^ -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) |