Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Change TODO directive detection to work with multiple pound signs on the same line #4558

Merged
merged 5 commits into from May 25, 2023

Conversation

evanrittenhouse
Copy link
Contributor

@evanrittenhouse evanrittenhouse commented May 21, 2023

Should fix #4549.

Basically, the initial implementation of flake8-todos hinged on a regex anchoring the # in a Python comment to the start of a line. If no TODO tags were found just after that #, the line would not throw a diagnostic.

In the case of something like # noqa: A003 # TODO: something, the TODO is actually demarcated by a second #. As such, we need to check the characters after each # in the comment in order to find Directives.

@evanrittenhouse evanrittenhouse marked this pull request as ready for review May 21, 2023 04:04
@github-actions
Copy link

github-actions bot commented May 21, 2023

PR Check Results

Ecosystem

ℹ️ ecosystem check detected changes. (+95, -105, 0 error(s))

airflow (+15, -11)

- airflow/cli/commands/task_command.py:456:7: TD005 Missing issue description after `TODO`
- airflow/cli/commands/task_command.py:663:11: TD005 Missing issue description after `TODO`
- airflow/decorators/base.py:216:11: TD005 Missing issue description after `TODO`
- airflow/jobs/local_task_job_runner.py:79:41: TD005 Missing issue description after `TODO`
+ airflow/jobs/scheduler_job_runner.py:1183:11: TD004 Missing colon in TODO
+ airflow/jobs/scheduler_job_runner.py:1427:11: TD004 Missing colon in TODO
+ airflow/jobs/scheduler_job_runner.py:402:15: TD004 Missing colon in TODO
+ airflow/jobs/scheduler_job_runner.py:592:19: TD004 Missing colon in TODO
- airflow/models/baseoperator.py:1235:40: TD005 Missing issue description after `TODO`
- airflow/models/dag.py:1477:19: TD005 Missing issue description after `TODO`
+ airflow/models/dagrun.py:1184:15: TD004 Missing colon in TODO
+ airflow/providers/google/cloud/sensors/tasks.py:80:11: TD004 Missing colon in TODO
- airflow/providers/google/cloud/sensors/tasks.py:80:11: TD007 Missing space after colon in TODO
- airflow/providers/jenkins/operators/jenkins_job_trigger.py:153:11: TD005 Missing issue description after `TODO`
- airflow/task/task_runner/cgroup_task_runner.py:171:11: TD005 Missing issue description after `TODO`
- airflow/www/views.py:4091:11: TD005 Missing issue description after `TODO`
+ airflow/www/views.py:5196:22: TD002 Missing author in TODO; try: `# TODO(<author_name>): ...`
+ airflow/www/views.py:5196:22: TD003 Missing issue link on the line following this TODO
+ airflow/www/views.py:5196:22: TD006 [*] Invalid TODO capitalization: `todo` should be `TODO`
+ airflow/www/views.py:5223:21: TD002 Missing author in TODO; try: `# TODO(<author_name>): ...`
+ airflow/www/views.py:5223:21: TD003 Missing issue link on the line following this TODO
+ airflow/www/views.py:5223:21: TD006 [*] Invalid TODO capitalization: `todo` should be `TODO`
+ airflow/www/views.py:5594:22: TD002 Missing author in TODO; try: `# TODO(<author_name>): ...`
+ airflow/www/views.py:5594:22: TD003 Missing issue link on the line following this TODO
+ airflow/www/views.py:5594:22: TD006 [*] Invalid TODO capitalization: `todo` should be `TODO`
- tests/utils/test_config.py:27:3: TD005 Missing issue description after `TODO`

bokeh (+62, -84)

- release/credentials.py:77:7: TD005 Missing issue description after `TODO`
- release/credentials.py:84:7: TD005 Missing issue description after `TODO`
- src/bokeh/application/application.py:187:15: TD005 Missing issue description after `TODO`
- src/bokeh/application/handlers/code.py:168:11: TD005 Missing issue description after `TODO`
- src/bokeh/application/handlers/directory.py:313:15: TD005 Missing issue description after `TODO`
- src/bokeh/application/handlers/server_lifecycle.py:127:15: TD005 Missing issue description after `TODO`
- src/bokeh/application/handlers/server_request_handler.py:120:15: TD005 Missing issue description after `TODO`
- src/bokeh/client/connection.py:349:19: TD005 Missing issue description after `TODO`
+ src/bokeh/core/has_props.py:440:99: TD002 Missing author in TODO; try: `# TODO(<author_name>): ...`
+ src/bokeh/core/has_props.py:440:99: TD003 Missing issue link on the line following this TODO
- src/bokeh/core/has_props.py:630:15: TD005 Missing issue description after `TODO`
- src/bokeh/core/property/wrappers.py:466:11: TD005 Missing issue description after `TODO`
- src/bokeh/core/property_mixins.py:374:41: TD005 Missing issue description after `TODO`
- src/bokeh/document/document.py:401:11: TD005 Missing issue description after `TODO`
- src/bokeh/document/models.py:241:7: TD005 Missing issue description after `TODO`
+ src/bokeh/embed/standalone.py:137:79: TD001 Invalid TODO tag: `XXX`
+ src/bokeh/embed/standalone.py:137:79: TD002 Missing author in TODO; try: `# TODO(<author_name>): ...`
+ src/bokeh/embed/standalone.py:137:79: TD003 Missing issue link on the line following this TODO
+ src/bokeh/embed/standalone.py:144:89: TD001 Invalid TODO tag: `XXX`
+ src/bokeh/embed/standalone.py:144:89: TD002 Missing author in TODO; try: `# TODO(<author_name>): ...`
+ src/bokeh/embed/standalone.py:144:89: TD003 Missing issue link on the line following this TODO
+ src/bokeh/embed/standalone.py:151:90: TD001 Invalid TODO tag: `XXX`
+ src/bokeh/embed/standalone.py:151:90: TD002 Missing author in TODO; try: `# TODO(<author_name>): ...`
+ src/bokeh/embed/standalone.py:151:90: TD003 Missing issue link on the line following this TODO
+ src/bokeh/embed/standalone.py:255:61: TD001 Invalid TODO tag: `XXX`
+ src/bokeh/embed/standalone.py:255:61: TD002 Missing author in TODO; try: `# TODO(<author_name>): ...`
+ src/bokeh/embed/standalone.py:255:61: TD003 Missing issue link on the line following this TODO
- src/bokeh/io/showing.py:148:48: TD005 Missing issue description after `TODO`
+ src/bokeh/layouts.py:303:3: TD004 Missing colon in TODO
- src/bokeh/layouts.py:303:3: TD007 Missing space after colon in TODO
- src/bokeh/models/map_plots.py:172:7: TD005 Missing issue description after `TODO`
- src/bokeh/models/sources.py:224:11: TD005 Missing issue description after `TODO`
- src/bokeh/models/tools.py:884:7: TD005 Missing issue description after `TODO`
- src/bokeh/plotting/_docstring.py:107:7: TD005 Missing issue description after `TODO`
+ src/bokeh/server/tornado.py:432:86: TD002 Missing author in TODO; try: `# TODO(<author_name>): ...`
+ src/bokeh/server/tornado.py:432:86: TD003 Missing issue link on the line following this TODO
+ src/bokeh/server/tornado.py:449:82: TD002 Missing author in TODO; try: `# TODO(<author_name>): ...`
+ src/bokeh/server/tornado.py:449:82: TD003 Missing issue link on the line following this TODO
+ src/bokeh/server/tornado.py:452:78: TD002 Missing author in TODO; try: `# TODO(<author_name>): ...`
+ src/bokeh/server/tornado.py:452:78: TD003 Missing issue link on the line following this TODO
+ src/bokeh/server/tornado.py:458:67: TD002 Missing author in TODO; try: `# TODO(<author_name>): ...`
+ src/bokeh/server/tornado.py:458:67: TD003 Missing issue link on the line following this TODO
- src/bokeh/server/tornado.py:653:11: TD005 Missing issue description after `TODO`
- src/bokeh/sphinxext/util.py:47:3: TD005 Missing issue description after `TODO`
- src/bokeh/util/callback_manager.py:61:3: TD005 Missing issue description after `TODO`
- src/bokeh/util/serialization.py:202:7: TD005 Missing issue description after `TODO`
- src/bokeh/util/serialization.py:239:7: TD005 Missing issue description after `TODO`
+ src/typings/IPython/core/history.pyi:5:89: TD001 Invalid TODO tag: `XXX`
+ src/typings/IPython/core/history.pyi:5:89: TD002 Missing author in TODO; try: `# TODO(<author_name>): ...`
+ src/typings/IPython/core/history.pyi:5:89: TD003 Missing issue link on the line following this TODO
- tests/integration/tools/test_range_tool.py:36:3: TD005 Missing issue description after `TODO`
- tests/integration/tools/test_range_tool.py:37:3: TD005 Missing issue description after `TODO`
- tests/integration/tools/test_reset_tool.py:104:11: TD005 Missing issue description after `TODO`
- tests/integration/tools/test_reset_tool.py:125:61: TD005 Missing issue description after `TODO`
- tests/integration/tools/test_tap_tool.py:34:3: TD007 Missing space after colon in TODO
+ tests/integration/widgets/tables/test_cell_editors.py:101:13: TD002 Missing author in TODO; try: `# TODO(<author_name>): ...`
+ tests/integration/widgets/tables/test_cell_editors.py:101:13: TD003 Missing issue link on the line following this TODO
+ tests/integration/widgets/tables/test_cell_editors.py:101:13: TD004 Missing colon in TODO
+ tests/integration/widgets/tables/test_cell_editors.py:101:13: TD005 Missing issue description after `TODO`
- tests/integration/widgets/tables/test_cell_editors.py:351:3: TD005 Missing issue description after `TODO`
- tests/integration/widgets/tables/test_cell_editors.py:59:3: TD005 Missing issue description after `TODO`
+ tests/integration/widgets/tables/test_cell_editors.py:79:13: TD002 Missing author in TODO; try: `# TODO(<author_name>): ...`
+ tests/integration/widgets/tables/test_cell_editors.py:79:13: TD003 Missing issue link on the line following this TODO
+ tests/integration/widgets/tables/test_cell_editors.py:79:13: TD004 Missing colon in TODO
+ tests/integration/widgets/tables/test_cell_editors.py:79:13: TD005 Missing issue description after `TODO`
- tests/integration/widgets/tables/test_copy_paste.py:143:11: TD005 Missing issue description after `TODO`
+ tests/integration/widgets/test_color_picker.py:107:11: TD004 Missing colon in TODO
- tests/integration/widgets/test_color_picker.py:107:11: TD007 Missing space after colon in TODO
+ tests/integration/widgets/test_daterange_slider.py:160:13: TD001 Invalid TODO tag: `XXX`
+ tests/integration/widgets/test_daterange_slider.py:160:13: TD003 Missing issue link on the line following this TODO
+ tests/integration/widgets/test_daterange_slider.py:160:13: TD004 Missing colon in TODO
+ tests/integration/widgets/test_daterange_slider.py:169:13: TD001 Invalid TODO tag: `XXX`
+ tests/integration/widgets/test_daterange_slider.py:169:13: TD003 Missing issue link on the line following this TODO
+ tests/integration/widgets/test_daterange_slider.py:169:13: TD004 Missing colon in TODO
+ tests/integration/widgets/test_daterange_slider.py:192:11: TD004 Missing colon in TODO
- tests/integration/widgets/test_daterange_slider.py:192:11: TD007 Missing space after colon in TODO
- tests/integration/widgets/test_dateslider.py:154:11: TD005 Missing issue description after `TODO`
+ tests/integration/widgets/test_dateslider.py:163:11: TD004 Missing colon in TODO
- tests/integration/widgets/test_dateslider.py:163:11: TD007 Missing space after colon in TODO
+ tests/integration/widgets/test_dateslider.py:197:11: TD004 Missing colon in TODO
- tests/integration/widgets/test_dateslider.py:197:11: TD007 Missing space after colon in TODO
+ tests/integration/widgets/test_dateslider.py:220:11: TD004 Missing colon in TODO
- tests/integration/widgets/test_dateslider.py:220:11: TD007 Missing space after colon in TODO
+ tests/integration/widgets/test_dateslider.py:243:11: TD004 Missing colon in TODO
- tests/integration/widgets/test_dateslider.py:243:11: TD007 Missing space after colon in TODO
- tests/integration/widgets/test_dropdown.py:42:3: TD005 Missing issue description after `TODO`
- tests/integration/widgets/test_range_slider.py:211:11: TD005 Missing issue description after `TODO`
+ tests/integration/widgets/test_range_slider.py:220:11: TD004 Missing colon in TODO
- tests/integration/widgets/test_range_slider.py:220:11: TD007 Missing space after colon in TODO
+ tests/integration/widgets/test_range_slider.py:243:11: TD004 Missing colon in TODO
- tests/integration/widgets/test_range_slider.py:243:11: TD007 Missing space after colon in TODO
- tests/integration/widgets/test_slider.py:177:11: TD005 Missing issue description after `TODO`
+ tests/integration/widgets/test_slider.py:186:11: TD004 Missing colon in TODO
- tests/integration/widgets/test_slider.py:186:11: TD007 Missing space after colon in TODO
+ tests/integration/widgets/test_slider.py:220:11: TD004 Missing colon in TODO
- tests/integration/widgets/test_slider.py:220:11: TD007 Missing space after colon in TODO
+ tests/integration/widgets/test_slider.py:243:11: TD004 Missing colon in TODO
- tests/integration/widgets/test_slider.py:243:11: TD007 Missing space after colon in TODO
+ tests/integration/widgets/test_slider.py:266:11: TD004 Missing colon in TODO
- tests/integration/widgets/test_slider.py:266:11: TD007 Missing space after colon in TODO
+ tests/integration/widgets/test_spinner.py:228:11: TD004 Missing colon in TODO
- tests/integration/widgets/test_spinner.py:228:11: TD007 Missing space after colon in TODO
- tests/integration/widgets/test_toggle.py:105:7: TD005 Missing issue description after `TODO`
+ tests/support/plugins/bokeh_server.py:103:66: TD001 Invalid TODO tag: `XXX`
+ tests/support/plugins/bokeh_server.py:103:66: TD002 Missing author in TODO; try: `# TODO(<author_name>): ...`
+ tests/support/plugins/bokeh_server.py:103:66: TD003 Missing issue link on the line following this TODO
+ tests/support/plugins/bokeh_server.py:86:48: TD001 Invalid TODO tag: `XXX`
+ tests/support/plugins/bokeh_server.py:86:48: TD002 Missing author in TODO; try: `# TODO(<author_name>): ...`
+ tests/support/plugins/bokeh_server.py:86:48: TD003 Missing issue link on the line following this TODO
+ tests/support/plugins/project.py:162:15: TD004 Missing colon in TODO
- tests/support/plugins/project.py:162:15: TD007 Missing space after colon in TODO
- tests/unit/bokeh/core/property/test_aliases.py:78:3: TD005 Missing issue description after `TODO`
- tests/unit/bokeh/core/property/test_bases.py:156:11: TD005 Missing issue description after `TODO`
- tests/unit/bokeh/core/property/test_bases.py:188:11: TD005 Missing issue description after `TODO`
- tests/unit/bokeh/core/property/test_bases.py:205:11: TD005 Missing issue description after `TODO`
- tests/unit/bokeh/core/property/test_container.py:62:3: TD005 Missing issue description after `TODO`
- tests/unit/bokeh/core/property/test_datetime.py:170:3: TD005 Missing issue description after `TODO`
- tests/unit/bokeh/core/property/test_either.py:66:11: TD005 Missing issue description after `TODO`
- tests/unit/bokeh/core/property/test_numeric.py:122:11: TD005 Missing issue description after `TODO`
- tests/unit/bokeh/core/property/test_numeric.py:160:11: TD005 Missing issue description after `TODO`
- tests/unit/bokeh/core/property/test_numeric.py:199:11: TD005 Missing issue description after `TODO`
- tests/unit/bokeh/core/property/test_numeric.py:237:11: TD005 Missing issue description after `TODO`
- tests/unit/bokeh/core/property/test_numeric.py:286:11: TD005 Missing issue description after `TODO`
- tests/unit/bokeh/core/property/test_numeric.py:53:11: TD005 Missing issue description after `TODO`
- tests/unit/bokeh/core/property/test_numeric.py:94:11: TD005 Missing issue description after `TODO`
- tests/unit/bokeh/core/property/test_primitive.py:155:11: TD005 Missing issue description after `TODO`
- tests/unit/bokeh/core/property/test_primitive.py:214:11: TD005 Missing issue description after `TODO`
- tests/unit/bokeh/core/property/test_primitive.py:344:11: TD005 Missing issue description after `TODO`
- tests/unit/bokeh/core/property/test_validation__property.py:120:7: TD005 Missing issue description after `TODO`
- tests/unit/bokeh/core/property/test_validation__property.py:264:7: TD005 Missing issue description after `TODO`
- tests/unit/bokeh/core/test_properties.py:152:3: TD005 Missing issue description after `TODO`
- tests/unit/bokeh/document/test_callbacks__document.py:179:52: TD005 Missing issue description after `TODO`
- tests/unit/bokeh/document/test_callbacks__document.py:378:7: TD005 Missing issue description after `TODO`
- tests/unit/bokeh/document/test_callbacks__document.py:379:7: TD005 Missing issue description after `TODO`
- tests/unit/bokeh/document/test_document.py:1014:7: TD005 Missing issue description after `TODO`
- tests/unit/bokeh/document/test_document.py:1016:7: TD005 Missing issue description after `TODO`
- tests/unit/bokeh/document/test_events__document.py:159:7: TD005 Missing issue description after `TODO`
- tests/unit/bokeh/model/test_util_model.py:127:7: TD005 Missing issue description after `TODO`
- tests/unit/bokeh/model/test_util_model.py:61:3: TD005 Missing issue description after `TODO`
- tests/unit/bokeh/models/test_tools.py:7:3: TD005 Missing issue description after `TODO`
+ tests/unit/bokeh/plotting/test__renderer.py:115:5: TD002 Missing author in TODO; try: `# TODO(<author_name>): ...`
+ tests/unit/bokeh/plotting/test__renderer.py:115:5: TD003 Missing issue link on the line following this TODO
- tests/unit/bokeh/plotting/test_figure.py:536:7: TD005 Missing issue description after `TODO`
- tests/unit/bokeh/test___init__.py:101:7: TD005 Missing issue description after `TODO`
- tests/unit/bokeh/test_client_server.py:670:58: TD005 Missing issue description after `TODO`
- tests/unit/bokeh/test_tile_providers.py:79:3: TD005 Missing issue description after `TODO`

zulip (+18, -10)

- corporate/lib/stripe.py:603:7: TD005 Missing issue description after `TODO`
- corporate/models.py:264:7: TD005 Missing issue description after `TODO`
- tools/lib/provision.py:290:15: TD005 Missing issue description after `TODO`
- zerver/data_import/gitter.py:132:7: TD005 Missing issue description after `TODO`
- zerver/data_import/slack.py:570:15: TD005 Missing issue description after `TODO`
+ zerver/lib/compatibility.py:150:7: TD004 Missing colon in TODO
+ zerver/lib/email_notifications.py:610:11: TD004 Missing colon in TODO
+ zerver/lib/events.py:470:11: TD004 Missing colon in TODO
- zerver/lib/import_realm.py:682:7: TD005 Missing issue description after `TODO`
+ zerver/lib/message.py:1157:35: TD002 Missing author in TODO; try: `# TODO(<author_name>): ...`
+ zerver/lib/message.py:1157:35: TD003 Missing issue link on the line following this TODO
+ zerver/lib/narrow.py:278:15: TD004 Missing colon in TODO
+ zerver/lib/push_notifications.py:1049:11: TD004 Missing colon in TODO
- zerver/lib/push_notifications.py:155:7: TD005 Missing issue description after `TODO`
- zerver/lib/push_notifications.py:227:11: TD005 Missing issue description after `TODO`
+ zerver/lib/retention.py:365:32: TD002 Missing author in TODO; try: `# TODO(<author_name>): ...`
+ zerver/lib/retention.py:365:32: TD003 Missing issue link on the line following this TODO
+ zerver/lib/retention.py:365:32: TD004 Missing colon in TODO
+ zerver/lib/retention.py:365:32: TD005 Missing issue description after `TODO`
+ zerver/lib/sessions.py:66:54: TD002 Missing author in TODO; try: `# TODO(<author_name>): ...`
+ zerver/lib/sessions.py:66:54: TD003 Missing issue link on the line following this TODO
- zerver/lib/test_helpers.py:535:28: TD005 Missing issue description after `TODO`
- zerver/management/commands/convert_gitter_data.py:46:15: TD005 Missing issue description after `TODO`
+ zerver/tornado/event_queue.py:1141:7: TD004 Missing colon in TODO
+ zerver/tornado/event_queue.py:1153:7: TD004 Missing colon in TODO
+ zerver/tornado/event_queue.py:1326:11: TD004 Missing colon in TODO
+ zerver/tornado/event_queue.py:1345:15: TD004 Missing colon in TODO
+ zerver/tornado/event_queue.py:1360:15: TD004 Missing colon in TODO

Rules changed: 7
Rule Changes Additions Removals
TD005 91 3 88
TD004 36 36 0
TD003 23 23 0
TD002 21 21 0
TD007 17 0 17
TD001 9 9 0
TD006 3 3 0

Benchmark

Linux

group                                      main                                   pr
-----                                      ----                                   --
linter/all-rules/large/dataset.py          1.00     14.9±0.03ms     2.7 MB/sec    1.01     15.1±0.09ms     2.7 MB/sec
linter/all-rules/numpy/ctypeslib.py        1.00      3.7±0.01ms     4.5 MB/sec    1.00      3.7±0.01ms     4.6 MB/sec
linter/all-rules/numpy/globals.py          1.00    375.8±1.55µs     7.9 MB/sec    1.00    375.8±0.96µs     7.9 MB/sec
linter/all-rules/pydantic/types.py         1.00      6.3±0.02ms     4.1 MB/sec    1.00      6.3±0.01ms     4.1 MB/sec
linter/default-rules/large/dataset.py      1.01      7.5±0.01ms     5.4 MB/sec    1.00      7.4±0.01ms     5.5 MB/sec
linter/default-rules/numpy/ctypeslib.py    1.02   1616.3±4.32µs    10.3 MB/sec    1.00   1590.0±3.30µs    10.5 MB/sec
linter/default-rules/numpy/globals.py      1.01    177.3±0.99µs    16.6 MB/sec    1.00    175.8±0.21µs    16.8 MB/sec
linter/default-rules/pydantic/types.py     1.01      3.4±0.01ms     7.5 MB/sec    1.00      3.4±0.01ms     7.6 MB/sec
parser/large/dataset.py                    1.01      5.8±0.01ms     7.0 MB/sec    1.00      5.7±0.01ms     7.1 MB/sec
parser/numpy/ctypeslib.py                  1.01   1135.6±1.94µs    14.7 MB/sec    1.00   1123.6±0.54µs    14.8 MB/sec
parser/numpy/globals.py                    1.01    115.7±0.25µs    25.5 MB/sec    1.00    114.6±0.34µs    25.7 MB/sec
parser/pydantic/types.py                   1.01      2.5±0.00ms    10.2 MB/sec    1.00      2.5±0.00ms    10.4 MB/sec

Windows

group                                      main                                   pr
-----                                      ----                                   --
linter/all-rules/large/dataset.py          1.01     17.3±0.27ms     2.3 MB/sec    1.00     17.1±0.26ms     2.4 MB/sec
linter/all-rules/numpy/ctypeslib.py        1.00      4.3±0.06ms     3.9 MB/sec    1.00      4.3±0.07ms     3.9 MB/sec
linter/all-rules/numpy/globals.py          1.00    508.4±9.85µs     5.8 MB/sec    1.00   510.6±11.45µs     5.8 MB/sec
linter/all-rules/pydantic/types.py         1.00      7.2±0.12ms     3.5 MB/sec    1.00      7.2±0.12ms     3.5 MB/sec
linter/default-rules/large/dataset.py      1.00      8.5±0.10ms     4.8 MB/sec    1.00      8.5±0.11ms     4.8 MB/sec
linter/default-rules/numpy/ctypeslib.py    1.00  1806.0±27.22µs     9.2 MB/sec    1.00  1811.4±59.24µs     9.2 MB/sec
linter/default-rules/numpy/globals.py      1.02    210.4±4.30µs    14.0 MB/sec    1.00    205.4±4.83µs    14.4 MB/sec
linter/default-rules/pydantic/types.py     1.01      3.8±0.04ms     6.7 MB/sec    1.00      3.8±0.05ms     6.7 MB/sec
parser/large/dataset.py                    1.07      7.0±0.05ms     5.8 MB/sec    1.00      6.5±0.07ms     6.2 MB/sec
parser/numpy/ctypeslib.py                  1.05  1316.9±30.12µs    12.6 MB/sec    1.00  1251.7±21.56µs    13.3 MB/sec
parser/numpy/globals.py                    1.05    132.0±2.41µs    22.3 MB/sec    1.00    126.3±2.38µs    23.4 MB/sec
parser/pydantic/types.py                   1.06      3.0±0.04ms     8.6 MB/sec    1.00      2.8±0.06ms     9.0 MB/sec

Copy link
Member

@MichaReiser MichaReiser left a comment

Choose a reason for hiding this comment

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

Would you mind adding a short description to your summary of what this PR fixes. I read the issue and I believe I know what it is about, but I'm unsure.

@evanrittenhouse did you review the ecosystem checks. Do the new violations look legit?

@evanrittenhouse
Copy link
Contributor Author

evanrittenhouse commented May 22, 2023

@MichaReiser PR updated!

I reviewed some of the violations yesterday, but finished looking at them today. The only one that looks slightly wonky is this one, where MissingSpaceAfterColon is thrown in a URL when there's no colon after the author block. It's technically correct, since the first colon after the author block isn't followed by a colon, but obviously incorrect in spirit. This could also occur outside of URLs: # TODO (evanrittenhouse) fruits:apple, banana, cranberry.

The line causing the issue is here, where we split_once() after the author block is concluded. I'm thinking that, for a fix, we could check the first non-whitespace character after the author block's closing ). That character has to a be colon in a valid TODO. We could then treat that byte offset as we do the current split_once() call results. What do you think?

@MichaReiser
Copy link
Member

@evanrittenhouse thanks for the explanation. To double check. Do you mean this line https://github.com/bokeh/bokeh/blob/f4c7a9787f0fd93db6987cfbb46409098ddb3107/tests/integration/widgets/test_daterange_slider.py#L169 ?

The line causing the issue is here, where we split_once() after the author block is concluded. I'm thinking that, for a fix, we could check the first non-whitespace character after the author block's closing )

That makes sense. Trimming the leading whitespace and then testing the character should give us better results.

@evanrittenhouse
Copy link
Contributor Author

evanrittenhouse commented May 23, 2023

@MichaReiser Yep, that's the one! Sorry, misclicked the copy-paste.

I've pushed a fix to this PR just now. Seems like there have been some changes, so I'll have to investigate them after work and make sure that they're valid

E: Seems like the big issue is a bunch of TD005 (missing issue link) rules are disappearing now. Have to figure out why that's the case since the changes here shouldn't touch any of the logic around detecting the issue...

@evanrittenhouse evanrittenhouse changed the title Change tag detection to work with multiple pound signs on the same line Change TODO directive detection to work with multiple pound signs on the same line May 23, 2023
@evanrittenhouse
Copy link
Contributor Author

evanrittenhouse commented May 23, 2023

Hmm. So I copied one of the files that changed according to the ecosystem check (credentials.py) locally to see if I could reproduce the issues. The ecosystem checks report that the TD003 diagnostics on lines 77 and 84 are both gone. When I run cargo run -p ruff_cli -- test.py --select ALL, they both show up as expected.

@MichaReiser do you have any idea what could be happening?

@MichaReiser
Copy link
Member

@evanrittenhouse the results from the ecosystem check seem correct.

On Add test for colons that don't terminate the tag/author block.

cargo run --bin ruff -- check --no-cache ~/Downloads/credentials.py --select TD
    Finished dev [unoptimized + debuginfo] target(s) in 0.10s
     Running `target/debug/ruff check --no-cache /home/micha/Downloads/credentials.py --select TD`
/home/micha/Downloads/credentials.py:77:7: TD002 Missing author in TODO; try: `# TODO(<author_name>): ...`
/home/micha/Downloads/credentials.py:77:7: TD003 Missing issue link on the line following this TODO
/home/micha/Downloads/credentials.py:77:7: TD004 Missing colon in TODO
/home/micha/Downloads/credentials.py:77:7: TD005 Missing issue description after `TODO`
/home/micha/Downloads/credentials.py:84:7: TD002 Missing author in TODO; try: `# TODO(<author_name>): ...`
/home/micha/Downloads/credentials.py:84:7: TD003 Missing issue link on the line following this TODO
/home/micha/Downloads/credentials.py:84:7: TD004 Missing colon in TODO
/home/micha/Downloads/credentials.py:84:7: TD005 Missing issue description after `TODO`
Found 8 errors.

On the latest commit

cargo run --bin ruff -- check --no-cache ~/Downloads/credentials.py --select TD
   Compiling ruff v0.0.269 (/home/micha/astral/ruff/crates/ruff)
   Compiling ruff_cli v0.0.269 (/home/micha/astral/ruff/crates/ruff_cli)
    Finished dev [unoptimized + debuginfo] target(s) in 6.78s
     Running `target/debug/ruff check --no-cache /home/micha/Downloads/credentials.py --select TD`
/home/micha/Downloads/credentials.py:77:7: TD002 Missing author in TODO; try: `# TODO(<author_name>): ...`
/home/micha/Downloads/credentials.py:77:7: TD003 Missing issue link on the line following this TODO
/home/micha/Downloads/credentials.py:77:7: TD004 Missing colon in TODO
/home/micha/Downloads/credentials.py:84:7: TD002 Missing author in TODO; try: `# TODO(<author_name>): ...`
/home/micha/Downloads/credentials.py:84:7: TD003 Missing issue link on the line following this TODO
/home/micha/Downloads/credentials.py:84:7: TD004 Missing colon in TODO
Found 6 errors.

You can see that the diagnostics for TD005 are missing. I think this is correct because there's a description.

crates/ruff/src/rules/flake8_todos/rules.rs Outdated Show resolved Hide resolved
crates/ruff/src/rules/flake8_todos/rules.rs Outdated Show resolved Hide resolved
crates/ruff/src/rules/flake8_todos/rules.rs Outdated Show resolved Hide resolved
crates/ruff/src/rules/flake8_todos/rules.rs Outdated Show resolved Hide resolved
@evanrittenhouse
Copy link
Contributor Author

@MichaReiser Thanks for the suggestions!

@MichaReiser MichaReiser merged commit 741e180 into astral-sh:main May 25, 2023
15 checks passed
@evanrittenhouse evanrittenhouse deleted the 4549_flake8_todo_falseneg branch May 25, 2023 17:12
renovate bot added a commit to ixm-one/pytest-cmake-presets that referenced this pull request Jun 7, 2023
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [ruff](https://togithub.com/charliermarsh/ruff)
([changelog](https://togithub.com/charliermarsh/ruff/releases)) |
`^0.0.270` -> `^0.0.271` |
[![age](https://badges.renovateapi.com/packages/pypi/ruff/0.0.271/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/pypi/ruff/0.0.271/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/pypi/ruff/0.0.271/compatibility-slim/0.0.270)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/pypi/ruff/0.0.271/confidence-slim/0.0.270)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>charliermarsh/ruff</summary>

###
[`v0.0.271`](https://togithub.com/charliermarsh/ruff/releases/tag/v0.0.271)

[Compare
Source](https://togithub.com/charliermarsh/ruff/compare/v0.0.270...v0.0.271)

<!-- Release notes generated using configuration in .github/release.yml
at main -->

#### What's Changed

##### Rules

- Add autofix for flake8-type-checking by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4742
- \[`airflow`] Add AIR001: task variable name should be same as task_id
arg by [@&#8203;jlaneve](https://togithub.com/jlaneve) in
[astral-sh/ruff#4687
- \[`flake8-bandit`] Implement S609, linux_commands_wildcard_injection
by [@&#8203;scop](https://togithub.com/scop) in
[astral-sh/ruff#4504
- \[`flake8-bugbear`] Move duplicate-value rule to flake8-bugbear by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4882
- \[`flake8-fixme`] Implement `flake8_fixme` and refactor
`TodoDirective` by
[@&#8203;evanrittenhouse](https://togithub.com/evanrittenhouse) in
[astral-sh/ruff#4681
- \[`flake8-future-annotations`] Implement `FA102` by
[@&#8203;akx](https://togithub.com/akx) in
[astral-sh/ruff#4702
- \[`flake8-pyi`] Add PYI024 for `flake8-pyi` plugin by
[@&#8203;qdegraaf](https://togithub.com/qdegraaf) in
[astral-sh/ruff#4756
- \[`flake8-pyi`] Add PYI034 for `flake8-pyi` plugin by
[@&#8203;qdegraaf](https://togithub.com/qdegraaf) in
[astral-sh/ruff#4764
- \[`flake8-pyi`] Add `PYI032` rule with autofix by
[@&#8203;qdegraaf](https://togithub.com/qdegraaf) in
[astral-sh/ruff#4695
- \[`flake8-pyi`] Add autofix for PYI010 by
[@&#8203;qdegraaf](https://togithub.com/qdegraaf) in
[astral-sh/ruff#4634
- \[`flake8-pyi`] Implement PYI029 by
[@&#8203;density](https://togithub.com/density) in
[astral-sh/ruff#4851
- \[`flake8-pyi`] Implement PYI035 by
[@&#8203;density](https://togithub.com/density) in
[astral-sh/ruff#4820
- \[`flake8-pyi`] Implement PYI048 for `flake8-pyi` plugin by
[@&#8203;qdegraaf](https://togithub.com/qdegraaf) in
[astral-sh/ruff#4645
- \[`flake8-pyi`] Implement PYI053 by
[@&#8203;density](https://togithub.com/density) in
[astral-sh/ruff#4770
- \[`flake8-pyi`] Implement PYI054 by
[@&#8203;density](https://togithub.com/density) in
[astral-sh/ruff#4775
- \[`flake8-pyi`] Implement `PYI025` by
[@&#8203;qdegraaf](https://togithub.com/qdegraaf) in
[astral-sh/ruff#4791
- \[`flake8-pyi`] Implement `PYI045` by
[@&#8203;density](https://togithub.com/density) in
[astral-sh/ruff#4700
- \[`pylint`] Add Pylint rule `C0208` (`use-sequence-for-iteration`) as
`PLC0208` (`iteration-over-set`) by
[@&#8203;tjkuson](https://togithub.com/tjkuson) in
[astral-sh/ruff#4706
- \[`pylint`] Add autofix for `PLR1701` (repeated-isinstance-calls) by
[@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[astral-sh/ruff#4792
- \[`pylint`] Implement Pylint's `yield-inside-async-function` rule
(`PLE1700`) by [@&#8203;chanman3388](https://togithub.com/chanman3388)
in
[astral-sh/ruff#4668
- \[`pylint`] implement E307 for pylint invalid str return type by
[@&#8203;Ryang20718](https://togithub.com/Ryang20718) in
[astral-sh/ruff#4854
- \[`ruff`] Lint pyproject.toml by
[@&#8203;konstin](https://togithub.com/konstin) in
[astral-sh/ruff#4496
- \[`tryceratops`] Ignore error calls with `exc_info` in TRY400 by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4797

##### Settings

- Add `pyflakes.extend-generics` setting by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[astral-sh/ruff#4677

##### Bug Fixes

- Fix PLW3301 false positive single argument nested min/max by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[astral-sh/ruff#4683
- Handle dotted alias imports to check for implicit imports by
[@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[astral-sh/ruff#4685
- Flag empty strings in flake8-errmsg rules by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4745
- Exclude function definition from too-many-statements rule by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4794
- Preserve quotes in F523 fixer by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4836
- Fix round-tripping of nested functions by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4875
- Avoid early-exit in explicit-f-string-type-conversion by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4886
- Avoid no-op fix for nested with expressions by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4906
- Fix UP036 auto-fix error by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[astral-sh/ruff#4679
- Use class name as range for `B024` by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4647
- Change TODO directive detection to work with multiple pound signs on
the same line by
[@&#8203;evanrittenhouse](https://togithub.com/evanrittenhouse) in
[astral-sh/ruff#4558
- Allow more immutable funcs for RUF009 by
[@&#8203;qdegraaf](https://togithub.com/qdegraaf) in
[astral-sh/ruff#4660
- Avoid using typing-imported symbols for runtime edits by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4649
- Fix `async for` formatting by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4675
- Ignore **setattr** in FBT003 by
[@&#8203;alexfikl](https://togithub.com/alexfikl) in
[astral-sh/ruff#4752
- Include ImportError in non-fixable try-catch imports by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4793
- Avoid extra newline between diagnostics in grouped mode by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4776
- Avoid enforcing native-literals rule within nested f-strings by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4488
- Respect mixed variable assignment in RET504 by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4835
- Make FLY002 autofix into a constant string instead of an f-string if
all `join()` arguments are strings by
[@&#8203;evanrittenhouse](https://togithub.com/evanrittenhouse) in
[astral-sh/ruff#4834
- Add some exceptions for FBT003
([#&#8203;3247](https://togithub.com/charliermarsh/ruff/issues/3247)) by
[@&#8203;allisonkarlitskaya](https://togithub.com/allisonkarlitskaya) in
[astral-sh/ruff#4867
- Avoid running RUF100 rules when code contains syntax errors by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4869
- Avoid index-out-of-bands panic for positional placeholders by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4872
- Remove destructive fixes for F523 by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4883
- Respect shadowed exports in `__all__` by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4885
- Track symbol deletions separately from bindings by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4888
- Change fixable_set to include RuleSelector::All/Nursery by
[@&#8203;evanrittenhouse](https://togithub.com/evanrittenhouse) in
[astral-sh/ruff#4852

#### New Contributors

- [@&#8203;bersbersbers](https://togithub.com/bersbersbers) made their
first contribution in
[astral-sh/ruff#4644
- [@&#8203;jlaneve](https://togithub.com/jlaneve) made their first
contribution in
[astral-sh/ruff#4690
- [@&#8203;suharnikov](https://togithub.com/suharnikov) made their first
contribution in
[astral-sh/ruff#4678
- [@&#8203;alexfikl](https://togithub.com/alexfikl) made their first
contribution in
[astral-sh/ruff#4752
- [@&#8203;allisonkarlitskaya](https://togithub.com/allisonkarlitskaya)
made their first contribution in
[astral-sh/ruff#4867
- [@&#8203;Ryang20718](https://togithub.com/Ryang20718) made their first
contribution in
[astral-sh/ruff#4854
- [@&#8203;addisoncrump](https://togithub.com/addisoncrump) made their
first contribution in
[astral-sh/ruff#4893

**Full Changelog**:
astral-sh/ruff@v0.0.270...v0.0.271

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://app.renovatebot.com/dashboard#github/ixm-one/pytest-cmake-presets).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNS4xMTAuMCIsInVwZGF0ZWRJblZlciI6IjM1LjExMC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
jankatins added a commit to jankatins/pr-workflow-example that referenced this pull request Jun 8, 2023
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [ruff](https://togithub.com/charliermarsh/ruff)
([changelog](https://togithub.com/charliermarsh/ruff/releases)) |
`0.0.270` -> `0.0.272` |
[![age](https://badges.renovateapi.com/packages/pypi/ruff/0.0.272/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/pypi/ruff/0.0.272/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/pypi/ruff/0.0.272/compatibility-slim/0.0.270)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/pypi/ruff/0.0.272/confidence-slim/0.0.270)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>charliermarsh/ruff</summary>

###
[`v0.0.272`](https://togithub.com/astral-sh/ruff/releases/tag/v0.0.272)

[Compare
Source](https://togithub.com/charliermarsh/ruff/compare/v0.0.271...v0.0.272)

<!-- Release notes generated using configuration in .github/release.yml
at main -->

#### What's Changed

##### Breaking Changes

- Move flake8-fixme rules to FIX prefix by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4917

##### Rules

- \[`flake8-pyi`] Implement PYI050 by
[@&#8203;density](https://togithub.com/density) in
[astral-sh/ruff#4884

##### Bug Fixes

- Avoid attributing runtime references to module-level imports by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4942
- Skip class scopes when resolving nonlocal references by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4943
- Apply `dict.get` fix before ternary rewrite by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4944
- Handle implicit string concatenations in conversion-flag rewrites by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4947
- Make `C413` fix as suggested for `reversed` call by
[@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[astral-sh/ruff#4891
- ignore if using infinite iterators in `B905` by
[@&#8203;kyoto7250](https://togithub.com/kyoto7250) in
[astral-sh/ruff#4914

**Full Changelog**:
astral-sh/ruff@v0.0.271...v0.0.272

###
[`v0.0.271`](https://togithub.com/astral-sh/ruff/releases/tag/v0.0.271)

[Compare
Source](https://togithub.com/charliermarsh/ruff/compare/v0.0.270...v0.0.271)

<!-- Release notes generated using configuration in .github/release.yml
at main -->

#### What's Changed

##### Rules

- Add autofix for flake8-type-checking by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4742
- \[`airflow`] Add AIR001: task variable name should be same as task_id
arg by [@&#8203;jlaneve](https://togithub.com/jlaneve) in
[astral-sh/ruff#4687
- \[`flake8-bandit`] Implement S609, linux_commands_wildcard_injection
by [@&#8203;scop](https://togithub.com/scop) in
[astral-sh/ruff#4504
- \[`flake8-bugbear`] Move duplicate-value rule to flake8-bugbear by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4882
- \[`flake8-fixme`] Implement `flake8_fixme` and refactor
`TodoDirective` by
[@&#8203;evanrittenhouse](https://togithub.com/evanrittenhouse) in
[astral-sh/ruff#4681
- \[`flake8-future-annotations`] Implement `FA102` by
[@&#8203;akx](https://togithub.com/akx) in
[astral-sh/ruff#4702
- \[`flake8-pyi`] Add PYI024 for `flake8-pyi` plugin by
[@&#8203;qdegraaf](https://togithub.com/qdegraaf) in
[astral-sh/ruff#4756
- \[`flake8-pyi`] Add PYI034 for `flake8-pyi` plugin by
[@&#8203;qdegraaf](https://togithub.com/qdegraaf) in
[astral-sh/ruff#4764
- \[`flake8-pyi`] Add `PYI032` rule with autofix by
[@&#8203;qdegraaf](https://togithub.com/qdegraaf) in
[astral-sh/ruff#4695
- \[`flake8-pyi`] Add autofix for PYI010 by
[@&#8203;qdegraaf](https://togithub.com/qdegraaf) in
[astral-sh/ruff#4634
- \[`flake8-pyi`] Implement PYI029 by
[@&#8203;density](https://togithub.com/density) in
[astral-sh/ruff#4851
- \[`flake8-pyi`] Implement PYI035 by
[@&#8203;density](https://togithub.com/density) in
[astral-sh/ruff#4820
- \[`flake8-pyi`] Implement PYI048 for `flake8-pyi` plugin by
[@&#8203;qdegraaf](https://togithub.com/qdegraaf) in
[astral-sh/ruff#4645
- \[`flake8-pyi`] Implement PYI053 by
[@&#8203;density](https://togithub.com/density) in
[astral-sh/ruff#4770
- \[`flake8-pyi`] Implement PYI054 by
[@&#8203;density](https://togithub.com/density) in
[astral-sh/ruff#4775
- \[`flake8-pyi`] Implement `PYI025` by
[@&#8203;qdegraaf](https://togithub.com/qdegraaf) in
[astral-sh/ruff#4791
- \[`flake8-pyi`] Implement `PYI045` by
[@&#8203;density](https://togithub.com/density) in
[astral-sh/ruff#4700
- \[`pylint`] Add Pylint rule `C0208` (`use-sequence-for-iteration`) as
`PLC0208` (`iteration-over-set`) by
[@&#8203;tjkuson](https://togithub.com/tjkuson) in
[astral-sh/ruff#4706
- \[`pylint`] Add autofix for `PLR1701` (repeated-isinstance-calls) by
[@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[astral-sh/ruff#4792
- \[`pylint`] Implement Pylint's `yield-inside-async-function` rule
(`PLE1700`) by [@&#8203;chanman3388](https://togithub.com/chanman3388)
in
[astral-sh/ruff#4668
- \[`pylint`] implement E307 for pylint invalid str return type by
[@&#8203;Ryang20718](https://togithub.com/Ryang20718) in
[astral-sh/ruff#4854
- \[`ruff`] Lint pyproject.toml by
[@&#8203;konstin](https://togithub.com/konstin) in
[astral-sh/ruff#4496
- \[`tryceratops`] Ignore error calls with `exc_info` in TRY400 by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4797

##### Settings

- Add `pyflakes.extend-generics` setting by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[astral-sh/ruff#4677

##### Bug Fixes

- Fix PLW3301 false positive single argument nested min/max by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[astral-sh/ruff#4683
- Handle dotted alias imports to check for implicit imports by
[@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[astral-sh/ruff#4685
- Flag empty strings in flake8-errmsg rules by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4745
- Exclude function definition from too-many-statements rule by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4794
- Preserve quotes in F523 fixer by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4836
- Fix round-tripping of nested functions by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4875
- Avoid early-exit in explicit-f-string-type-conversion by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4886
- Avoid no-op fix for nested with expressions by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4906
- Fix UP036 auto-fix error by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[astral-sh/ruff#4679
- Use class name as range for `B024` by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4647
- Change TODO directive detection to work with multiple pound signs on
the same line by
[@&#8203;evanrittenhouse](https://togithub.com/evanrittenhouse) in
[astral-sh/ruff#4558
- Allow more immutable funcs for RUF009 by
[@&#8203;qdegraaf](https://togithub.com/qdegraaf) in
[astral-sh/ruff#4660
- Avoid using typing-imported symbols for runtime edits by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4649
- Fix `async for` formatting by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4675
- Ignore **setattr** in FBT003 by
[@&#8203;alexfikl](https://togithub.com/alexfikl) in
[astral-sh/ruff#4752
- Include ImportError in non-fixable try-catch imports by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4793
- Avoid extra newline between diagnostics in grouped mode by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4776
- Avoid enforcing native-literals rule within nested f-strings by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4488
- Respect mixed variable assignment in RET504 by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4835
- Make FLY002 autofix into a constant string instead of an f-string if
all `join()` arguments are strings by
[@&#8203;evanrittenhouse](https://togithub.com/evanrittenhouse) in
[astral-sh/ruff#4834
- Add some exceptions for FBT003
([#&#8203;3247](https://togithub.com/charliermarsh/ruff/issues/3247)) by
[@&#8203;allisonkarlitskaya](https://togithub.com/allisonkarlitskaya) in
[astral-sh/ruff#4867
- Avoid running RUF100 rules when code contains syntax errors by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4869
- Avoid index-out-of-bands panic for positional placeholders by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4872
- Remove destructive fixes for F523 by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4883
- Respect shadowed exports in `__all__` by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4885
- Track symbol deletions separately from bindings by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4888
- Change fixable_set to include RuleSelector::All/Nursery by
[@&#8203;evanrittenhouse](https://togithub.com/evanrittenhouse) in
[astral-sh/ruff#4852

#### New Contributors

- [@&#8203;bersbersbers](https://togithub.com/bersbersbers) made their
first contribution in
[astral-sh/ruff#4644
- [@&#8203;jlaneve](https://togithub.com/jlaneve) made their first
contribution in
[astral-sh/ruff#4690
- [@&#8203;suharnikov](https://togithub.com/suharnikov) made their first
contribution in
[astral-sh/ruff#4678
- [@&#8203;alexfikl](https://togithub.com/alexfikl) made their first
contribution in
[astral-sh/ruff#4752
- [@&#8203;allisonkarlitskaya](https://togithub.com/allisonkarlitskaya)
made their first contribution in
[astral-sh/ruff#4867
- [@&#8203;Ryang20718](https://togithub.com/Ryang20718) made their first
contribution in
[astral-sh/ruff#4854
- [@&#8203;addisoncrump](https://togithub.com/addisoncrump) made their
first contribution in
[astral-sh/ruff#4893

**Full Changelog**:
astral-sh/ruff@v0.0.270...v0.0.271

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://app.renovatebot.com/dashboard#github/jankatins/pr-workflow-example).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNS4xMTAuMCIsInVwZGF0ZWRJblZlciI6IjM1LjExMC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->
renovate bot added a commit to allenporter/flux-local that referenced this pull request Jun 10, 2023
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [ruff](https://togithub.com/charliermarsh/ruff)
([changelog](https://togithub.com/charliermarsh/ruff/releases)) |
`==0.0.270` -> `==0.0.272` |
[![age](https://badges.renovateapi.com/packages/pypi/ruff/0.0.272/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/pypi/ruff/0.0.272/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/pypi/ruff/0.0.272/compatibility-slim/0.0.270)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/pypi/ruff/0.0.272/confidence-slim/0.0.270)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>charliermarsh/ruff</summary>

###
[`v0.0.272`](https://togithub.com/astral-sh/ruff/releases/tag/v0.0.272)

[Compare
Source](https://togithub.com/charliermarsh/ruff/compare/v0.0.271...v0.0.272)

<!-- Release notes generated using configuration in .github/release.yml
at main -->

#### What's Changed

##### Breaking Changes

- Move flake8-fixme rules to FIX prefix by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4917

##### Rules

- \[`flake8-pyi`] Implement PYI050 by
[@&#8203;density](https://togithub.com/density) in
[astral-sh/ruff#4884

##### Bug Fixes

- Avoid attributing runtime references to module-level imports by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4942
- Skip class scopes when resolving nonlocal references by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4943
- Apply `dict.get` fix before ternary rewrite by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4944
- Handle implicit string concatenations in conversion-flag rewrites by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4947
- Make `C413` fix as suggested for `reversed` call by
[@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[astral-sh/ruff#4891
- ignore if using infinite iterators in `B905` by
[@&#8203;kyoto7250](https://togithub.com/kyoto7250) in
[astral-sh/ruff#4914

**Full Changelog**:
astral-sh/ruff@v0.0.271...v0.0.272

###
[`v0.0.271`](https://togithub.com/astral-sh/ruff/releases/tag/v0.0.271)

[Compare
Source](https://togithub.com/charliermarsh/ruff/compare/v0.0.270...v0.0.271)

<!-- Release notes generated using configuration in .github/release.yml
at main -->

#### What's Changed

##### Rules

- Add autofix for flake8-type-checking by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4742
- \[`airflow`] Add AIR001: task variable name should be same as task_id
arg by [@&#8203;jlaneve](https://togithub.com/jlaneve) in
[astral-sh/ruff#4687
- \[`flake8-bandit`] Implement S609, linux_commands_wildcard_injection
by [@&#8203;scop](https://togithub.com/scop) in
[astral-sh/ruff#4504
- \[`flake8-bugbear`] Move duplicate-value rule to flake8-bugbear by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4882
- \[`flake8-fixme`] Implement `flake8_fixme` and refactor
`TodoDirective` by
[@&#8203;evanrittenhouse](https://togithub.com/evanrittenhouse) in
[astral-sh/ruff#4681
- \[`flake8-future-annotations`] Implement `FA102` by
[@&#8203;akx](https://togithub.com/akx) in
[astral-sh/ruff#4702
- \[`flake8-pyi`] Add PYI024 for `flake8-pyi` plugin by
[@&#8203;qdegraaf](https://togithub.com/qdegraaf) in
[astral-sh/ruff#4756
- \[`flake8-pyi`] Add PYI034 for `flake8-pyi` plugin by
[@&#8203;qdegraaf](https://togithub.com/qdegraaf) in
[astral-sh/ruff#4764
- \[`flake8-pyi`] Add `PYI032` rule with autofix by
[@&#8203;qdegraaf](https://togithub.com/qdegraaf) in
[astral-sh/ruff#4695
- \[`flake8-pyi`] Add autofix for PYI010 by
[@&#8203;qdegraaf](https://togithub.com/qdegraaf) in
[astral-sh/ruff#4634
- \[`flake8-pyi`] Implement PYI029 by
[@&#8203;density](https://togithub.com/density) in
[astral-sh/ruff#4851
- \[`flake8-pyi`] Implement PYI035 by
[@&#8203;density](https://togithub.com/density) in
[astral-sh/ruff#4820
- \[`flake8-pyi`] Implement PYI048 for `flake8-pyi` plugin by
[@&#8203;qdegraaf](https://togithub.com/qdegraaf) in
[astral-sh/ruff#4645
- \[`flake8-pyi`] Implement PYI053 by
[@&#8203;density](https://togithub.com/density) in
[astral-sh/ruff#4770
- \[`flake8-pyi`] Implement PYI054 by
[@&#8203;density](https://togithub.com/density) in
[astral-sh/ruff#4775
- \[`flake8-pyi`] Implement `PYI025` by
[@&#8203;qdegraaf](https://togithub.com/qdegraaf) in
[astral-sh/ruff#4791
- \[`flake8-pyi`] Implement `PYI045` by
[@&#8203;density](https://togithub.com/density) in
[astral-sh/ruff#4700
- \[`pylint`] Add Pylint rule `C0208` (`use-sequence-for-iteration`) as
`PLC0208` (`iteration-over-set`) by
[@&#8203;tjkuson](https://togithub.com/tjkuson) in
[astral-sh/ruff#4706
- \[`pylint`] Add autofix for `PLR1701` (repeated-isinstance-calls) by
[@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[astral-sh/ruff#4792
- \[`pylint`] Implement Pylint's `yield-inside-async-function` rule
(`PLE1700`) by [@&#8203;chanman3388](https://togithub.com/chanman3388)
in
[astral-sh/ruff#4668
- \[`pylint`] implement E307 for pylint invalid str return type by
[@&#8203;Ryang20718](https://togithub.com/Ryang20718) in
[astral-sh/ruff#4854
- \[`ruff`] Lint pyproject.toml by
[@&#8203;konstin](https://togithub.com/konstin) in
[astral-sh/ruff#4496
- \[`tryceratops`] Ignore error calls with `exc_info` in TRY400 by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4797

##### Settings

- Add `pyflakes.extend-generics` setting by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[astral-sh/ruff#4677

##### Bug Fixes

- Fix PLW3301 false positive single argument nested min/max by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[astral-sh/ruff#4683
- Handle dotted alias imports to check for implicit imports by
[@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[astral-sh/ruff#4685
- Flag empty strings in flake8-errmsg rules by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4745
- Exclude function definition from too-many-statements rule by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4794
- Preserve quotes in F523 fixer by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4836
- Fix round-tripping of nested functions by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4875
- Avoid early-exit in explicit-f-string-type-conversion by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4886
- Avoid no-op fix for nested with expressions by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4906
- Fix UP036 auto-fix error by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[astral-sh/ruff#4679
- Use class name as range for `B024` by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4647
- Change TODO directive detection to work with multiple pound signs on
the same line by
[@&#8203;evanrittenhouse](https://togithub.com/evanrittenhouse) in
[astral-sh/ruff#4558
- Allow more immutable funcs for RUF009 by
[@&#8203;qdegraaf](https://togithub.com/qdegraaf) in
[astral-sh/ruff#4660
- Avoid using typing-imported symbols for runtime edits by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4649
- Fix `async for` formatting by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4675
- Ignore **setattr** in FBT003 by
[@&#8203;alexfikl](https://togithub.com/alexfikl) in
[astral-sh/ruff#4752
- Include ImportError in non-fixable try-catch imports by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4793
- Avoid extra newline between diagnostics in grouped mode by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4776
- Avoid enforcing native-literals rule within nested f-strings by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4488
- Respect mixed variable assignment in RET504 by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4835
- Make FLY002 autofix into a constant string instead of an f-string if
all `join()` arguments are strings by
[@&#8203;evanrittenhouse](https://togithub.com/evanrittenhouse) in
[astral-sh/ruff#4834
- Add some exceptions for FBT003
([#&#8203;3247](https://togithub.com/charliermarsh/ruff/issues/3247)) by
[@&#8203;allisonkarlitskaya](https://togithub.com/allisonkarlitskaya) in
[astral-sh/ruff#4867
- Avoid running RUF100 rules when code contains syntax errors by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4869
- Avoid index-out-of-bands panic for positional placeholders by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4872
- Remove destructive fixes for F523 by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4883
- Respect shadowed exports in `__all__` by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4885
- Track symbol deletions separately from bindings by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4888
- Change fixable_set to include RuleSelector::All/Nursery by
[@&#8203;evanrittenhouse](https://togithub.com/evanrittenhouse) in
[astral-sh/ruff#4852

#### New Contributors

- [@&#8203;bersbersbers](https://togithub.com/bersbersbers) made their
first contribution in
[astral-sh/ruff#4644
- [@&#8203;jlaneve](https://togithub.com/jlaneve) made their first
contribution in
[astral-sh/ruff#4690
- [@&#8203;suharnikov](https://togithub.com/suharnikov) made their first
contribution in
[astral-sh/ruff#4678
- [@&#8203;alexfikl](https://togithub.com/alexfikl) made their first
contribution in
[astral-sh/ruff#4752
- [@&#8203;allisonkarlitskaya](https://togithub.com/allisonkarlitskaya)
made their first contribution in
[astral-sh/ruff#4867
- [@&#8203;Ryang20718](https://togithub.com/Ryang20718) made their first
contribution in
[astral-sh/ruff#4854
- [@&#8203;addisoncrump](https://togithub.com/addisoncrump) made their
first contribution in
[astral-sh/ruff#4893

**Full Changelog**:
astral-sh/ruff@v0.0.270...v0.0.271

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://app.renovatebot.com/dashboard#github/allenporter/flux-local).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNS4xMTAuMCIsInVwZGF0ZWRJblZlciI6IjM1LjExMC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
renovate bot added a commit to allenporter/pyrainbird that referenced this pull request Jun 10, 2023
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [ruff](https://togithub.com/charliermarsh/ruff)
([changelog](https://togithub.com/charliermarsh/ruff/releases)) |
`==0.0.270` -> `==0.0.272` |
[![age](https://badges.renovateapi.com/packages/pypi/ruff/0.0.272/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/pypi/ruff/0.0.272/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/pypi/ruff/0.0.272/compatibility-slim/0.0.270)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/pypi/ruff/0.0.272/confidence-slim/0.0.270)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>charliermarsh/ruff</summary>

###
[`v0.0.272`](https://togithub.com/astral-sh/ruff/releases/tag/v0.0.272)

[Compare
Source](https://togithub.com/charliermarsh/ruff/compare/v0.0.271...v0.0.272)

<!-- Release notes generated using configuration in .github/release.yml
at main -->

#### What's Changed

##### Breaking Changes

- Move flake8-fixme rules to FIX prefix by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4917

##### Rules

- \[`flake8-pyi`] Implement PYI050 by
[@&#8203;density](https://togithub.com/density) in
[astral-sh/ruff#4884

##### Bug Fixes

- Avoid attributing runtime references to module-level imports by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4942
- Skip class scopes when resolving nonlocal references by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4943
- Apply `dict.get` fix before ternary rewrite by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4944
- Handle implicit string concatenations in conversion-flag rewrites by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4947
- Make `C413` fix as suggested for `reversed` call by
[@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[astral-sh/ruff#4891
- ignore if using infinite iterators in `B905` by
[@&#8203;kyoto7250](https://togithub.com/kyoto7250) in
[astral-sh/ruff#4914

**Full Changelog**:
astral-sh/ruff@v0.0.271...v0.0.272

###
[`v0.0.271`](https://togithub.com/astral-sh/ruff/releases/tag/v0.0.271)

[Compare
Source](https://togithub.com/charliermarsh/ruff/compare/v0.0.270...v0.0.271)

<!-- Release notes generated using configuration in .github/release.yml
at main -->

#### What's Changed

##### Rules

- Add autofix for flake8-type-checking by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4742
- \[`airflow`] Add AIR001: task variable name should be same as task_id
arg by [@&#8203;jlaneve](https://togithub.com/jlaneve) in
[astral-sh/ruff#4687
- \[`flake8-bandit`] Implement S609, linux_commands_wildcard_injection
by [@&#8203;scop](https://togithub.com/scop) in
[astral-sh/ruff#4504
- \[`flake8-bugbear`] Move duplicate-value rule to flake8-bugbear by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4882
- \[`flake8-fixme`] Implement `flake8_fixme` and refactor
`TodoDirective` by
[@&#8203;evanrittenhouse](https://togithub.com/evanrittenhouse) in
[astral-sh/ruff#4681
- \[`flake8-future-annotations`] Implement `FA102` by
[@&#8203;akx](https://togithub.com/akx) in
[astral-sh/ruff#4702
- \[`flake8-pyi`] Add PYI024 for `flake8-pyi` plugin by
[@&#8203;qdegraaf](https://togithub.com/qdegraaf) in
[astral-sh/ruff#4756
- \[`flake8-pyi`] Add PYI034 for `flake8-pyi` plugin by
[@&#8203;qdegraaf](https://togithub.com/qdegraaf) in
[astral-sh/ruff#4764
- \[`flake8-pyi`] Add `PYI032` rule with autofix by
[@&#8203;qdegraaf](https://togithub.com/qdegraaf) in
[astral-sh/ruff#4695
- \[`flake8-pyi`] Add autofix for PYI010 by
[@&#8203;qdegraaf](https://togithub.com/qdegraaf) in
[astral-sh/ruff#4634
- \[`flake8-pyi`] Implement PYI029 by
[@&#8203;density](https://togithub.com/density) in
[astral-sh/ruff#4851
- \[`flake8-pyi`] Implement PYI035 by
[@&#8203;density](https://togithub.com/density) in
[astral-sh/ruff#4820
- \[`flake8-pyi`] Implement PYI048 for `flake8-pyi` plugin by
[@&#8203;qdegraaf](https://togithub.com/qdegraaf) in
[astral-sh/ruff#4645
- \[`flake8-pyi`] Implement PYI053 by
[@&#8203;density](https://togithub.com/density) in
[astral-sh/ruff#4770
- \[`flake8-pyi`] Implement PYI054 by
[@&#8203;density](https://togithub.com/density) in
[astral-sh/ruff#4775
- \[`flake8-pyi`] Implement `PYI025` by
[@&#8203;qdegraaf](https://togithub.com/qdegraaf) in
[astral-sh/ruff#4791
- \[`flake8-pyi`] Implement `PYI045` by
[@&#8203;density](https://togithub.com/density) in
[astral-sh/ruff#4700
- \[`pylint`] Add Pylint rule `C0208` (`use-sequence-for-iteration`) as
`PLC0208` (`iteration-over-set`) by
[@&#8203;tjkuson](https://togithub.com/tjkuson) in
[astral-sh/ruff#4706
- \[`pylint`] Add autofix for `PLR1701` (repeated-isinstance-calls) by
[@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[astral-sh/ruff#4792
- \[`pylint`] Implement Pylint's `yield-inside-async-function` rule
(`PLE1700`) by [@&#8203;chanman3388](https://togithub.com/chanman3388)
in
[astral-sh/ruff#4668
- \[`pylint`] implement E307 for pylint invalid str return type by
[@&#8203;Ryang20718](https://togithub.com/Ryang20718) in
[astral-sh/ruff#4854
- \[`ruff`] Lint pyproject.toml by
[@&#8203;konstin](https://togithub.com/konstin) in
[astral-sh/ruff#4496
- \[`tryceratops`] Ignore error calls with `exc_info` in TRY400 by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4797

##### Settings

- Add `pyflakes.extend-generics` setting by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[astral-sh/ruff#4677

##### Bug Fixes

- Fix PLW3301 false positive single argument nested min/max by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[astral-sh/ruff#4683
- Handle dotted alias imports to check for implicit imports by
[@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[astral-sh/ruff#4685
- Flag empty strings in flake8-errmsg rules by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4745
- Exclude function definition from too-many-statements rule by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4794
- Preserve quotes in F523 fixer by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4836
- Fix round-tripping of nested functions by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4875
- Avoid early-exit in explicit-f-string-type-conversion by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4886
- Avoid no-op fix for nested with expressions by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4906
- Fix UP036 auto-fix error by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[astral-sh/ruff#4679
- Use class name as range for `B024` by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4647
- Change TODO directive detection to work with multiple pound signs on
the same line by
[@&#8203;evanrittenhouse](https://togithub.com/evanrittenhouse) in
[astral-sh/ruff#4558
- Allow more immutable funcs for RUF009 by
[@&#8203;qdegraaf](https://togithub.com/qdegraaf) in
[astral-sh/ruff#4660
- Avoid using typing-imported symbols for runtime edits by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4649
- Fix `async for` formatting by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4675
- Ignore **setattr** in FBT003 by
[@&#8203;alexfikl](https://togithub.com/alexfikl) in
[astral-sh/ruff#4752
- Include ImportError in non-fixable try-catch imports by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4793
- Avoid extra newline between diagnostics in grouped mode by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4776
- Avoid enforcing native-literals rule within nested f-strings by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4488
- Respect mixed variable assignment in RET504 by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4835
- Make FLY002 autofix into a constant string instead of an f-string if
all `join()` arguments are strings by
[@&#8203;evanrittenhouse](https://togithub.com/evanrittenhouse) in
[astral-sh/ruff#4834
- Add some exceptions for FBT003
([#&#8203;3247](https://togithub.com/charliermarsh/ruff/issues/3247)) by
[@&#8203;allisonkarlitskaya](https://togithub.com/allisonkarlitskaya) in
[astral-sh/ruff#4867
- Avoid running RUF100 rules when code contains syntax errors by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4869
- Avoid index-out-of-bands panic for positional placeholders by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4872
- Remove destructive fixes for F523 by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4883
- Respect shadowed exports in `__all__` by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4885
- Track symbol deletions separately from bindings by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4888
- Change fixable_set to include RuleSelector::All/Nursery by
[@&#8203;evanrittenhouse](https://togithub.com/evanrittenhouse) in
[astral-sh/ruff#4852

#### New Contributors

- [@&#8203;bersbersbers](https://togithub.com/bersbersbers) made their
first contribution in
[astral-sh/ruff#4644
- [@&#8203;jlaneve](https://togithub.com/jlaneve) made their first
contribution in
[astral-sh/ruff#4690
- [@&#8203;suharnikov](https://togithub.com/suharnikov) made their first
contribution in
[astral-sh/ruff#4678
- [@&#8203;alexfikl](https://togithub.com/alexfikl) made their first
contribution in
[astral-sh/ruff#4752
- [@&#8203;allisonkarlitskaya](https://togithub.com/allisonkarlitskaya)
made their first contribution in
[astral-sh/ruff#4867
- [@&#8203;Ryang20718](https://togithub.com/Ryang20718) made their first
contribution in
[astral-sh/ruff#4854
- [@&#8203;addisoncrump](https://togithub.com/addisoncrump) made their
first contribution in
[astral-sh/ruff#4893

**Full Changelog**:
astral-sh/ruff@v0.0.270...v0.0.271

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://app.renovatebot.com/dashboard#github/allenporter/pyrainbird).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNS4xMTAuMCIsInVwZGF0ZWRJblZlciI6IjM1LjExMC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

flake8-todos false negatives
3 participants