[flake8-bugbear] Ignore B028 if skip_file_prefixes is present#18047
[flake8-bugbear] Ignore B028 if skip_file_prefixes is present#18047dylwil3 merged 4 commits intoastral-sh:mainfrom
flake8-bugbear] Ignore B028 if skip_file_prefixes is present#18047Conversation
|
dylwil3
left a comment
There was a problem hiding this comment.
Thanks! Small tweak and it should be good to land
crates/ruff_linter/src/rules/flake8_bugbear/rules/no_explicit_stacklevel.rs
Outdated
Show resolved
Hide resolved
| .arguments | ||
| .find_argument_value("stacklevel", 2) | ||
| .is_some() | ||
| || call.arguments.find_keyword("skip_file_prefixes").is_some() |
There was a problem hiding this comment.
I think you have to check that the value is a nonempty tuple of strings. Could you also add a test for if a user directly specifies skip_file_prefixes = () - we should emit the lint in that case, when the stacklevel is not set.
There was a problem hiding this comment.
(If the expression is not a literal tuple of strings, then I think it's okay to skip the lint, even though that might be a false negative).
There was a problem hiding this comment.
I think we need to check if the tuple is nonempty, because if we check for a tuple of strings, this case warnings.warn("test", skip_file_prefixes=(os.path.dirname(__file__),)) will be flagged.
There was a problem hiding this comment.
Sorry maybe I worded that in a confusing way:
- If the keyword argument is used, and the value is not a literal tuple of strings, then skip the lint.
- If the keyword argument is used, and the value is a literal tuple of strings, skip if and only if the tuple is nonempty.
The logic you have in the most recent commit will give a false positive in the case where the user does something like this:
_my_prefixes = ("this","that")
warnings.warn("test", skip_file_prefixes = _my_prefixes)Could you add this as another test case and take another stab at the implementation logic?
There was a problem hiding this comment.
I've updated the implementation logic
crates/ruff_linter/src/rules/flake8_bugbear/rules/no_explicit_stacklevel.rs
Show resolved
Hide resolved
…eepish * origin/main: [ty] Induct into instances and subclasses when finding and applying generics (#18052) [ty] Allow classes to inherit from `type[Any]` or `type[Unknown]` (#18060) [ty] Allow a class to inherit from an intersection if the intersection contains a dynamic type and the intersection is not disjoint from `type` (#18055) [ty] Narrowing for `hasattr()` (#18053) Update reference documentation for `--python-version` (#18056) [`flake8-bugbear`] Ignore `B028` if `skip_file_prefixes` is present (#18047) [`airflow`] Apply try-catch guard to all AIR3 rules (`AIR3`) (#17887) [`pylint`] add fix safety section (`PLW3301`) (#17878) Update `--python` to accept paths to executables in virtual environments (#17954) [`pylint`] add fix safety section (`PLE4703`) (#17824) [`ruff`] Implement a recursive check for `RUF060` (#17976) [`flake8-use-pathlib`] `PTH*` suppress diagnostic for all `os.*` functions that have the `dir_fd` parameter (#17968) [`refurb`] Mark autofix as safe only for number literals in `FURB116` (#17692) [`flake8-simplify`] Fix `SIM905` autofix for `rsplit` creating a reversed list literal (#18045) Avoid initializing progress bars early (#18049)
…eep-dish * origin/main: [ty] Infer parameter specializations of generic aliases (#18021) [ty] Understand homogeneous tuple annotations (#17998) [ty] Induct into instances and subclasses when finding and applying generics (#18052) [ty] Allow classes to inherit from `type[Any]` or `type[Unknown]` (#18060) [ty] Allow a class to inherit from an intersection if the intersection contains a dynamic type and the intersection is not disjoint from `type` (#18055) [ty] Narrowing for `hasattr()` (#18053) Update reference documentation for `--python-version` (#18056) [`flake8-bugbear`] Ignore `B028` if `skip_file_prefixes` is present (#18047) [`airflow`] Apply try-catch guard to all AIR3 rules (`AIR3`) (#17887) [`pylint`] add fix safety section (`PLW3301`) (#17878) Update `--python` to accept paths to executables in virtual environments (#17954) [`pylint`] add fix safety section (`PLE4703`) (#17824) [`ruff`] Implement a recursive check for `RUF060` (#17976) [`flake8-use-pathlib`] `PTH*` suppress diagnostic for all `os.*` functions that have the `dir_fd` parameter (#17968) [`refurb`] Mark autofix as safe only for number literals in `FURB116` (#17692) [`flake8-simplify`] Fix `SIM905` autofix for `rsplit` creating a reversed list literal (#18045) Avoid initializing progress bars early (#18049)
…stral-sh#18047) ## Summary Fixes astral-sh#18011
Summary
Fixes #18011
Test Plan
Snapshot tests.