[refurb] Mark autofix as safe only for number literals in FURB116#17692
[refurb] Mark autofix as safe only for number literals in FURB116#17692ntBre merged 12 commits intoastral-sh:mainfrom
refurb] Mark autofix as safe only for number literals in FURB116#17692Conversation
|
|
For |
Good idea, thanks! |
crates/ruff_linter/src/rules/refurb/rules/fstring_number_format.rs
Outdated
Show resolved
Hide resolved
ntBre
left a comment
There was a problem hiding this comment.
Thanks! This looks reasonable to me, just a few fairly minor suggestions.
I think it might be good for @MichaReiser to take a look at the try_create_replacement code too, especially the quoting and f-string handling since he helped find a bunch of issues in my handling of those recently.
Do we need to have a check for negative numbers? That seems like the only remaining part of the issue not covered, unless I missed it.
crates/ruff_linter/src/rules/refurb/rules/fstring_number_format.rs
Outdated
Show resolved
Hide resolved
crates/ruff_linter/src/rules/refurb/rules/fstring_number_format.rs
Outdated
Show resolved
Hide resolved
...linter/src/rules/refurb/snapshots/ruff_linter__rules__refurb__tests__FURB116_FURB116.py.snap
Outdated
Show resolved
Hide resolved
...linter/src/rules/refurb/snapshots/ruff_linter__rules__refurb__tests__FURB116_FURB116.py.snap
Outdated
Show resolved
Hide resolved
...linter/src/rules/refurb/snapshots/ruff_linter__rules__refurb__tests__FURB116_FURB116.py.snap
Outdated
Show resolved
Hide resolved
MichaReiser
left a comment
There was a problem hiding this comment.
I skimmed over it and this looks good to me.
I suspect there might be some edge cases with f-strings if the expression is in a format spec or debug expression but these seem rare enough (and also isn't something we handle in other fixes)
ntBre
left a comment
There was a problem hiding this comment.
Looking good! Just one question about quotes and two about docs/comments.
...linter/src/rules/refurb/snapshots/ruff_linter__rules__refurb__tests__FURB116_FURB116.py.snap
Outdated
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)
…astral-sh#17692) <!-- Thank you for contributing to Ruff! To help us out with reviewing, please consider the following: - Does this pull request include a summary of the change? (See below.) - Does this pull request include a descriptive title? - Does this pull request include references to any relevant issues? --> ## Summary We can only guarantee the safety of the autofix for number literals, all other cases may change the runtime behaviour of the program or introduce a syntax error. For the cases reported in the issue that would result in a syntax error, I disabled the autofix. Follow-up of astral-sh#17661. Fixes astral-sh#16472. <!-- What's the purpose of the change? What does it do, and why? --> ## Test Plan Snapshot tests. <!-- How was it tested? -->
Summary
We can only guarantee the safety of the autofix for number literals, all other cases may change the runtime behaviour of the program or introduce a syntax error. For the cases reported in the issue that would result in a syntax error, I disabled the autofix.
Follow-up of #17661.
Fixes #16472.
Test Plan
Snapshot tests.