Skip to content

Comments

[pyupgrade] Stabilize behavior to show diagnostic even when unfixable in printf-string-formatting (UP031)#14406

Merged
AlexWaygood merged 4 commits intoastral-sh:ruff-0.8from
dylwil3:stabilize-up031
Nov 18, 2024
Merged

[pyupgrade] Stabilize behavior to show diagnostic even when unfixable in printf-string-formatting (UP031)#14406
AlexWaygood merged 4 commits intoastral-sh:ruff-0.8from
dylwil3:stabilize-up031

Conversation

@dylwil3
Copy link
Collaborator

@dylwil3 dylwil3 commented Nov 17, 2024

This PR stabilizes the behavior to show a diagnostic even when no autofix is available for printf-string-formatting (UP031), which was introduced in #11229.

Documentation was not changed because the preview behavior was never documented

Finally, while several issues remain open regarding this rule, none are relevant to the stabilization of this behavior as far as I can tell.

@github-actions
Copy link
Contributor

ruff-ecosystem results

Linter (stable)

ℹ️ ecosystem check detected linter changes. (+62 -0 violations, +0 -0 fixes in 8 projects; 1 project error; 45 projects unchanged)

bokeh/bokeh (+9 -0 violations, +0 -0 fixes)

ruff check --no-cache --exit-zero --ignore RUF9 --output-format concise --no-preview --select ALL

+ examples/models/widgets.py:84:37: UP031 Use format specifiers instead of percent format
+ examples/models/widgets.py:86:37: UP031 Use format specifiers instead of percent format
+ src/bokeh/command/subcommands/file_output.py:154:17: UP031 Use format specifiers instead of percent format
+ src/bokeh/command/subcommands/serve.py:984:26: UP031 Use format specifiers instead of percent format
+ src/bokeh/models/sources.py:678:42: UP031 Use format specifiers instead of percent format
+ src/bokeh/models/sources.py:684:42: UP031 Use format specifiers instead of percent format
+ src/bokeh/models/sources.py:699:42: UP031 Use format specifiers instead of percent format
+ src/bokeh/models/sources.py:710:46: UP031 Use format specifiers instead of percent format
+ tests/support/util/selenium.py:379:49: UP031 Use format specifiers instead of percent format

freedomofpress/securedrop (+1 -0 violations, +0 -0 fixes)

+ securedrop/source_app/utils.py:86:17: UP031 Use format specifiers instead of percent format

ibis-project/ibis (+5 -0 violations, +0 -0 fixes)

+ ibis/backends/impala/tests/test_exprs.py:135:29: UP031 Use format specifiers instead of percent format
+ ibis/backends/impala/tests/test_exprs.py:421:29: UP031 Use format specifiers instead of percent format
+ ibis/backends/impala/tests/test_exprs.py:477:26: UP031 Use format specifiers instead of percent format
+ ibis/backends/impala/tests/test_exprs.py:514:29: UP031 Use format specifiers instead of percent format
+ ibis/tests/expr/test_window_functions.py:41:24: UP031 Use format specifiers instead of percent format

mlflow/mlflow (+3 -0 violations, +0 -0 fixes)

+ mlflow/cli.py:609:17: UP031 Use format specifiers instead of percent format
+ mlflow/store/tracking/file_store.py:506:17: UP031 Use format specifiers instead of percent format
+ mlflow/utils/autologging_utils/events.py:66:17: UP031 Use format specifiers instead of percent format

pandas-dev/pandas (+0 -0 violations, +0 -0 fixes)


pypa/pip (+1 -0 violations, +0 -0 fixes)

+ src/pip/_internal/cli/progress_bars.py:66:26: UP031 Use format specifiers instead of percent format

pytest-dev/pytest (+38 -0 violations, +0 -0 fixes)

+ bench/empty.py:5:10: UP031 Use format specifiers instead of percent format
+ src/_pytest/_code/code.py:224:16: UP031 Use format specifiers instead of percent format
+ src/_pytest/_code/code.py:310:16: UP031 Use format specifiers instead of percent format
+ src/_pytest/_io/pprint.py:543:26: UP031 Use format specifiers instead of percent format
+ src/_pytest/_py/error.py:72:48: UP031 Use format specifiers instead of percent format
+ src/_pytest/assertion/util.py:409:17: UP031 Use format specifiers instead of percent format
+ src/_pytest/assertion/util.py:513:13: UP031 Use format specifiers instead of percent format
+ src/_pytest/assertion/util.py:523:13: UP031 Use format specifiers instead of percent format
+ src/_pytest/cacheprovider.py:391:39: UP031 Use format specifiers instead of percent format
+ src/_pytest/compat.py:79:20: UP031 Use format specifiers instead of percent format
+ src/_pytest/compat.py:80:12: UP031 Use format specifiers instead of percent format
+ src/_pytest/doctest.py:356:21: UP031 Use format specifiers instead of percent format
+ src/_pytest/fixtures.py:888:17: UP031 Use format specifiers instead of percent format
+ src/_pytest/main.py:353:13: UP031 Use format specifiers instead of percent format
+ src/_pytest/main.py:589:16: UP031 Use format specifiers instead of percent format
+ src/_pytest/main.py:658:35: UP031 Use format specifiers instead of percent format
+ src/_pytest/mark/structures.py:51:14: UP031 Use format specifiers instead of percent format
+ src/_pytest/mark/structures.py:67:13: UP031 Use format specifiers instead of percent format
+ src/_pytest/pytester.py:550:13: UP031 Use format specifiers instead of percent format
+ src/_pytest/terminal.py:1258:25: UP031 Use format specifiers instead of percent format
+ src/_pytest/terminal.py:1261:34: UP031 Use format specifiers instead of percent format
+ src/_pytest/terminal.py:1378:31: UP031 Use format specifiers instead of percent format
+ src/_pytest/terminal.py:1397:32: UP031 Use format specifiers instead of percent format
+ src/_pytest/terminal.py:1413:24: UP031 Use format specifiers instead of percent format
+ src/_pytest/terminal.py:769:21: UP031 Use format specifiers instead of percent format
+ src/_pytest/terminal.py:771:21: UP031 Use format specifiers instead of percent format
+ src/_pytest/terminal.py:773:21: UP031 Use format specifiers instead of percent format
+ src/_pytest/terminal.py:775:21: UP031 Use format specifiers instead of percent format
+ src/_pytest/terminal.py:865:35: UP031 Use format specifiers instead of percent format
+ testing/_py/test_local.py:951:39: UP031 Use format specifiers instead of percent format
... 8 additional changes omitted for project

pdm-project/pdm (+5 -0 violations, +0 -0 fixes)

+ src/pdm/cli/utils.py:108:26: UP031 Use format specifiers instead of percent format
+ src/pdm/cli/utils.py:110:30: UP031 Use format specifiers instead of percent format
+ src/pdm/cli/utils.py:79:29: UP031 Use format specifiers instead of percent format
+ src/pdm/cli/utils.py:84:29: UP031 Use format specifiers instead of percent format
+ src/pdm/cli/utils.py:90:29: UP031 Use format specifiers instead of percent format

pypa/setuptools (error)

ruff failed
  Cause: Failed to parse /home/runner/work/ruff/ruff/checkouts/pypa:setuptools/ruff.toml
  Cause: TOML parse error at line 8, column 1
  |
8 | [lint]
  | ^^^^^^
Unknown rule selector: `UP027`

Changes by rule (1 rules affected)

code total + violation - violation + fix - fix
UP031 62 62 0 0 0

Linter (preview)

ℹ️ ecosystem check detected linter changes. (+8304 -8323 violations, +0 -66 fixes in 8 projects; 1 project error; 45 projects unchanged)

apache/airflow (+6151 -6154 violations, +0 -58 fixes)

ruff check --no-cache --exit-zero --ignore RUF9 --output-format concise --preview --select ALL

- airflow/api/__init__.py:32:5: DOC201 `return` is not documented in docstring
- airflow/api/__init__.py:32:5: DOC501 Raised exception `AirflowException` missing from docstring
+ airflow/api/__init__.py:43:15: DOC501 Raised exception `AirflowException` missing from docstring
+ airflow/api/__init__.py:44:5: DOC201 `return` is not documented in docstring
- airflow/api/auth/backend/deny_all.py:38:5: DOC201 `return` is not documented in docstring
+ airflow/api/auth/backend/deny_all.py:44:5: DOC201 `return` is not documented in docstring
- airflow/api/client/__init__.py:27:5: DOC201 `return` is not documented in docstring
+ airflow/api/client/__init__.py:38:5: DOC201 `return` is not documented in docstring
- airflow/api/common/airflow_health.py:30:5: DOC201 `return` is not documented in docstring
... 9012 additional changes omitted for rule DOC201
- airflow/api/common/delete_dag.py:43:5: DOC501 Raised exception `AirflowException` missing from docstring
- airflow/api/common/delete_dag.py:43:5: DOC501 Raised exception `DagNotFound` missing from docstring
+ airflow/api/common/delete_dag.py:61:15: DOC501 Raised exception `AirflowException` missing from docstring
+ airflow/api/common/delete_dag.py:64:15: DOC501 Raised exception `DagNotFound` missing from docstring
+ airflow/api/common/mark_tasks.py:125:15: DOC501 Raised exception `ValueError` missing from docstring
... 2944 additional changes omitted for rule DOC501
- airflow/api/common/mark_tasks.py:186:5: DOC402 `yield` is not documented in docstring
+ airflow/api/common/mark_tasks.py:190:13: DOC402 `yield` is not documented in docstring
- airflow/api_fastapi/common/db/common.py:33:5: DOC402 `yield` is not documented in docstring
+ airflow/api_fastapi/common/db/common.py:47:9: DOC402 `yield` is not documented in docstring
- airflow/assets/__init__.py:238:9: DOC402 `yield` is not documented in docstring
+ airflow/assets/__init__.py:243:9: DOC402 `yield` is not documented in docstring
- airflow/assets/__init__.py:358:9: DOC402 `yield` is not documented in docstring
... 328 additional changes omitted for rule DOC402
+ airflow/decorators/__init__.pyi:117:25: PYI041 Use `float` instead of `int | float`
- airflow/decorators/__init__.pyi:117:25: PYI041 [*] Use `float` instead of `int | float`
+ airflow/decorators/__init__.pyi:256:25: PYI041 Use `float` instead of `int | float`
- airflow/decorators/__init__.pyi:256:25: PYI041 [*] Use `float` instead of `int | float`
+ airflow/jobs/job.py:308:39: PYI041 Use `float` instead of `int | float`
- airflow/jobs/job.py:308:39: PYI041 [*] Use `float` instead of `int | float`
+ airflow/metrics/base_stats_logger.py:39:15: PYI041 Use `float` instead of `int | float`
... 52 additional changes omitted for rule PYI041
- airflow/models/dag.py:1038:36: PYI061 `Literal[None, ...]` can be replaced with `Literal[...] | None`
- airflow/models/dagrun.py:1317:23: RUF038 `Literal[True, False]` can be replaced with `bool`
- airflow/models/dagrun.py:1439:23: RUF038 `Literal[True, False]` can be replaced with `bool`
... 12332 additional changes omitted for project

apache/superset (+1166 -1168 violations, +0 -8 fixes)

ruff check --no-cache --exit-zero --ignore RUF9 --output-format concise --preview --select ALL

+ RELEASING/changelog.py:104:9: DOC201 `return` is not documented in docstring
- RELEASING/changelog.py:107:9: DOC201 `return` is not documented in docstring
+ RELEASING/changelog.py:113:13: DOC201 `return` is not documented in docstring
- RELEASING/changelog.py:52:9: DOC201 `return` is not documented in docstring
+ RELEASING/changelog.py:54:13: DOC201 `return` is not documented in docstring
- RELEASING/changelog.py:87:9: DOC201 `return` is not documented in docstring
... 1824 additional changes omitted for rule DOC201
- scripts/benchmark_migration.py:43:5: DOC501 Raised exception `Exception` missing from docstring
+ scripts/benchmark_migration.py:51:11: DOC501 Raised exception `Exception` missing from docstring
- scripts/cancel_github_workflows.py:162:5: DOC501 Raised exception `ClickException` missing from docstring
+ scripts/cancel_github_workflows.py:164:15: DOC501 Raised exception `ClickException` missing from docstring
... 2332 additional changes omitted for project

bokeh/bokeh (+402 -402 violations, +0 -0 fixes)

ruff check --no-cache --exit-zero --ignore RUF9 --output-format concise --preview --select ALL

+ examples/advanced/extensions/parallel_plot/parallel_plot.py:107:5: DOC201 `return` is not documented in docstring
- examples/advanced/extensions/parallel_plot/parallel_plot.py:15:5: DOC201 `return` is not documented in docstring
- examples/basic/data/server_sent_events_source.py:53:9: DOC402 `yield` is not documented in docstring
+ examples/basic/data/server_sent_events_source.py:60:13: DOC402 `yield` is not documented in docstring
- examples/interaction/js_callbacks/js_on_event.py:16:5: DOC201 `return` is not documented in docstring
+ examples/interaction/js_callbacks/js_on_event.py:21:5: DOC201 `return` is not documented in docstring
- examples/models/gauges.py:33:5: DOC201 `return` is not documented in docstring
+ examples/models/gauges.py:34:5: DOC201 `return` is not documented in docstring
... 395 additional changes omitted for rule DOC201
- src/bokeh/__init__.py:63:5: DOC202 Docstring should not have a returns section because the function doesn't return anything
+ src/bokeh/__init__.py:65:1: DOC202 Docstring should not have a returns section because the function doesn't return anything
... 794 additional changes omitted for project

latchbio/latch (+0 -1 violations, +0 -0 fixes)

ruff check --no-cache --exit-zero --ignore RUF9 --output-format concise --preview

- src/latch/types/metadata.py:500:45: PYI061 `Literal[None, ...]` can be replaced with `Literal[...] | None`

pandas-dev/pandas (+0 -4 violations, +0 -0 fixes)

ruff check --no-cache --exit-zero --ignore RUF9 --output-format concise --preview

- pandas/core/groupby/groupby.py:4069:39: PYI061 `Literal[None, ...]` can be replaced with `Literal[...] | None`
- pandas/core/groupby/indexing.py:299:39: PYI061 `Literal[None, ...]` can be replaced with `Literal[...] | None`
- pandas/io/html.py:1027:28: PYI061 `Literal[None, ...]` can be replaced with `Literal[...] | None`
- pandas/io/html.py:223:32: PYI061 `Literal[None, ...]` can be replaced with `Literal[...] | None`

python/typeshed (+4 -4 violations, +0 -0 fixes)

ruff check --no-cache --exit-zero --ignore RUF9 --output-format concise --preview --select E,F,FA,I,PYI,RUF,UP,W

- stdlib/ast.pyi:1480:16: RUF038 `Literal[True, False]` can be replaced with `bool`
- stdlib/ast.pyi:1481:35: RUF038 `Literal[True, False]` can be replaced with `bool`
- stdlib/ast.pyi:1484:45: RUF038 `Literal[True, False]` can be replaced with `bool`
+ stdlib/random.pyi:45:31: PYI041 Use `float` instead of `int | float`
+ stdlib/random.pyi:52:27: PYI041 Use `float` instead of `int | float`
+ stdlib/turtle.pyi:443:16: PYI041 Use `float` instead of `int | float`
+ stdlib/turtle.pyi:444:17: PYI041 Use `float` instead of `int | float`
- stubs/pyxdg/xdg/Menu.pyi:97:11: RUF038 `Literal[True, False, ...]` can be replaced with `Literal[...] | bool`

zulip/zulip (+581 -589 violations, +0 -0 fixes)

ruff check --no-cache --exit-zero --ignore RUF9 --output-format concise --preview --select ALL

- analytics/lib/fixtures.py:19:5: DOC201 `return` is not documented in docstring
- analytics/lib/fixtures.py:19:5: DOC501 Raised exception `AssertionError` missing from docstring
+ analytics/lib/fixtures.py:56:15: DOC501 Raised exception `AssertionError` missing from docstring
+ analytics/lib/fixtures.py:77:5: DOC201 `return` is not documented in docstring
+ confirmation/models.py:125:5: DOC201 `return` is not documented in docstring
- confirmation/models.py:279:5: DOC201 `return` is not documented in docstring
+ confirmation/models.py:283:5: DOC201 `return` is not documented in docstring
- confirmation/models.py:298:5: DOC201 `return` is not documented in docstring
... 857 additional changes omitted for rule DOC201
- confirmation/models.py:298:5: DOC501 Raised exception `InvalidError` missing from docstring
+ confirmation/models.py:304:15: DOC501 Raised exception `InvalidError` missing from docstring
... 1160 additional changes omitted for project

wntrblm/nox (+0 -1 violations, +0 -0 fixes)

ruff check --no-cache --exit-zero --ignore RUF9 --output-format concise --preview

- nox/command.py:33:16: RUF038 `Literal[True, False, ...]` can be replaced with `Literal[...] | bool`

pypa/setuptools (error)

ruff check --no-cache --exit-zero --ignore RUF9 --output-format concise --preview

ruff failed
  Cause: Failed to parse /home/runner/work/ruff/ruff/checkouts/pypa:setuptools/ruff.toml
  Cause: TOML parse error at line 8, column 1
  |
8 | [lint]
  | ^^^^^^
Unknown rule selector: `UP027`

Changes by rule (10 rules affected)

code total + violation - violation + fix - fix
DOC201 12109 6054 6055 0 0
DOC501 3920 1960 1960 0 0
DOC402 408 204 204 0 0
DOC202 158 79 79 0 0
PYI041 70 4 0 0 66
PYI061 14 0 14 0 0
RUF038 7 0 7 0 0
DOC502 4 2 2 0 0
DOC403 2 1 1 0 0
RUF100 1 0 1 0 0

@MichaReiser MichaReiser added the rule Implementing or modifying a lint rule label Nov 18, 2024
@AlexWaygood AlexWaygood added this to the v0.8 milestone Nov 18, 2024
Copy link
Member

@AlexWaygood AlexWaygood left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you!

@AlexWaygood AlexWaygood merged commit aa9ecbd into astral-sh:ruff-0.8 Nov 18, 2024
@AlexWaygood AlexWaygood mentioned this pull request Nov 18, 2024
MichaReiser pushed a commit that referenced this pull request Nov 19, 2024
AlexWaygood pushed a commit that referenced this pull request Nov 19, 2024
MichaReiser pushed a commit that referenced this pull request Nov 20, 2024
MichaReiser pushed a commit that referenced this pull request Nov 20, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

rule Implementing or modifying a lint rule

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants