ruff
f1d4ba32 - Fix RUF100 to detect unused file-level noqa directives with specific codes (#17042) (#17061)

Commit
170 days ago
Fix RUF100 to detect unused file-level noqa directives with specific codes (#17042) (#17061) Closes #17042 ## Summary This PR fixes the issue outlined in #17042 where RUF100 (unused-noqa) fails to detect unused file-level noqa directives (`# ruff: noqa` or `# ruff: noqa: {code}`). The issue stems from two underlying causes: 1. For blanket file-level directives (`# ruff: noqa`), there's a circular dependency: the directive exempts all rules including RUF100 itself, which prevents checking for usage. This isn't changed by this PR. I would argue it is intendend behavior - a blanket `# ruff: noqa` directive should exempt all rules including RUF100 itself. 2. For code-specific file-level directives (e.g. `# ruff: noqa: F841`), the handling was missing in the `check_noqa` function. This is added in this PR. ## Notes - For file-level directives, the `matches` array is pre-populated with the specified codes during parsing, unlike line-level directives which only populate their `matches` array when actually suppressing diagnostics. This difference requires the somewhat clunky handling of both cases. I would appreciate guidance on a cleaner design :) - A more fundamental solution would be to change how file-level directives initialize the `matches` array in `FileNoqaDirectives::extract()`, but that requires more substantial changes as it breaks existing functionality. I suspect discussions in #16483 are relevant for this. ## Test Plan - Local verification - Added a test case and fixture
Author
Parents
Loading