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

Implement Flynt static string join transform as FLY002 #4196

Merged
merged 3 commits into from
May 9, 2023

Conversation

akx
Copy link
Contributor

@akx akx commented May 2, 2023

Refs #2102 (being one half of it).

I removed the concatenation feature (FLY001) from this PR because I found tricky corner cases that were kind of tough to gracefully handle, so this PR concentrates on turning "x".join([a, "foo", b]) to f"{a}xfoox{b}".

@akx akx force-pushed the flynt-static-string-joins branch 4 times, most recently from 3beb1d6 to e373352 Compare May 2, 2023 20:28
@charliermarsh
Copy link
Member

Sadly the best way to debug is to print out transformed where you see the {}: Autofix introduced a syntax error. Reverting all changes. error logging.

@charliermarsh
Copy link
Member

We should change it to print the syntax-erroring code in debug mode, since I find myself doing this a lot.

@github-actions
Copy link
Contributor

github-actions bot commented May 2, 2023

PR Check Results

Ecosystem

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

airflow (+25, -0)

+ airflow/api/auth/backend/kerberos_auth.py:150:60: FLY002 [*] Consider `f"negotiate {ctx.kerberos_token}"` instead of string join
+ airflow/providers/amazon/aws/log/s3_task_handler.py:203:23: FLY002 [*] Consider `f"{old_log}\n{log}"` instead of string join
+ airflow/providers/cncf/kubernetes/decorators/kubernetes.py:103:13: FLY002 [*] Consider `f"{write_local_script_file_cmd} && {write_local_input_file_cmd} && {make_xcom_dir_cmd} && {exec_python_cmd}"` instead of string join
+ airflow/providers/google/cloud/log/gcs_task_handler.py:243:19: FLY002 [*] Consider `f"{old_log}\n{log}"` instead of string join
+ airflow/providers/microsoft/azure/log/wasb_task_handler.py:238:19: FLY002 [*] Consider `f"{old_log}\n{log}"` instead of string join
+ airflow/settings.py:63:10: FLY002 [*] Consider `f"  ____________       _____________\n ____    |__( )_________  __/__  /________      __\n____  /| |_  /__  ___/_  /_ __  /_  __ \\_ | /| / /\n___  ___ |  / _  /   _  __/ _  / / /_/ /_ |/ |/ /\n _/_/  |_/_/  /_/    /_/    /_/  \\____/____/|__/"` instead of string join
+ airflow/www/views.py:1388:39: FLY002 [*] Consider `f"{template_field}.{key}"` instead of string join
+ airflow/www/views.py:1390:39: FLY002 [*] Consider `f"{template_field}.{key}"` instead of string join
+ airflow/www/views.py:1395:41: FLY002 [*] Consider `f"{template_field}.{dict_keys}"` instead of string join
+ airflow/www/views.py:496:23: FLY002 [*] Consider `f"{key}.{sub_key}"` instead of string join
+ tests/always/test_connection.py:106:49: FLY002 [*] Consider `f"{key2.decode()},{key1.decode()}"` instead of string join
+ tests/cli/commands/test_kubernetes_command.py:60:22: FLY002 [*] Consider `f"dag_id,task_id,try_number,airflow_version"` instead of string join
+ tests/cli/commands/test_rotate_fernet_key_command.py:100:38: FLY002 [*] Consider `f"{fernet_key2.decode()},{fernet_key1.decode()}"` instead of string join
+ tests/cli/commands/test_rotate_fernet_key_command.py:64:38: FLY002 [*] Consider `f"{fernet_key2.decode()},{fernet_key1.decode()}"` instead of string join
+ tests/dags/test_clear_subdag.py:32:16: FLY002 [*] Consider `f"{dag_name}.{subdag_name}"` instead of string join
+ tests/models/test_variable.py:87:49: FLY002 [*] Consider `f"{key2.decode()},{key1.decode()}"` instead of string join
+ tests/providers/cncf/kubernetes/utils/test_pod_manager.py:250:59: FLY002 [*] Consider `f"{real_timestamp} {log_message}"` instead of string join
+ tests/providers/google/common/hooks/test_base_google.py:522:17: FLY002 [*] Consider `f"https://www.googleapis.com/auth/bigquery,https://www.googleapis.com/auth/devstorage.read_only"` instead of string join
+ tests/providers/google/common/hooks/test_base_google.py:589:17: FLY002 [*] Consider `f"https://www.googleapis.com/auth/bigquery,https://www.googleapis.com/auth/devstorage.read_only"` instead of string join
+ tests/utils/test_dot_renderer.py:181:38: FLY002 [*] Consider `f'digraph example_task_group {{\n\tgraph [label=example_task_group labelloc=t rankdir=LR]\n\tend [color="#000000" fillcolor="#e8f7e4" label=end shape=rectangle style="filled,rounded"]\n\tsubgraph cluster_section_1 {{\n\t\tcolor="#000000" fillcolor="#6495ed7f" label=section_1 shape=rectangle style=filled\n\t\t"section_1.upstream_join_id" [color="#000000" fillcolor=CornflowerBlue height=0.2 label="" shape=circle style="filled,rounded" width=0.2]\n\t\t"section_1.downstream_join_id" [color="#000000" fillcolor=CornflowerBlue height=0.2 label="" shape=circle style="filled,rounded" width=0.2]\n\t\t"section_1.task_1" [color="#000000" fillcolor="#e8f7e4" label=task_1 shape=rectangle style="filled,rounded"]\n\t\t"section_1.task_2" [color="#000000" fillcolor="#f0ede4" label=task_2 shape=rectangle style="filled,rounded"]\n\t\t"section_1.task_3" [color="#000000" fillcolor="#e8f7e4" label=task_3 shape=rectangle style="filled,rounded"]\n\t}}\n\tsubgraph cluster_section_2 {{\n\t\tcolor="#000000" fillcolor="#6495ed7f" label=section_2 shape=rectangle style=filled\n\t\t"section_2.upstream_join_id" [color="#000000" fillcolor=CornflowerBlue height=0.2 label="" shape=circle style="filled,rounded" width=0.2]\n\t\t"section_2.downstream_join_id" [color="#000000" fillcolor=CornflowerBlue height=0.2 label="" shape=circle style="filled,rounded" width=0.2]\n\t\tsubgraph "cluster_section_2.inner_section_2" {{\n\t\t\tcolor="#000000" fillcolor="#6495ed7f" label=inner_section_2 shape=rectangle style=filled\n\t\t\t"section_2.inner_section_2.task_2" [color="#000000" fillcolor="#f0ede4" label=task_2 shape=rectangle style="filled,rounded"]\n\t\t\t"section_2.inner_section_2.task_3" [color="#000000" fillcolor="#e8f7e4" label=task_3 shape=rectangle style="filled,rounded"]\n\t\t\t"section_2.inner_section_2.task_4" [color="#000000" fillcolor="#e8f7e4" label=task_4 shape=rectangle style="filled,rounded"]\n\t\t}}\n\t\t"section_2.task_1" [color="#000000" fillcolor="#e8f7e4" label=task_1 shape=rectangle style="filled,rounded"]\n\t}}\n\tstart [color="#000000" fillcolor="#e8f7e4" label=start shape=rectangle style="filled,rounded"]\n\t"section_1.downstream_join_id" -> "section_2.upstream_join_id"\n\t"section_1.task_1" -> "section_1.task_2"\n\t"section_1.task_1" -> "section_1.task_3"\n\t"section_1.task_2" -> "section_1.downstream_join_id"\n\t"section_1.task_3" -> "section_1.downstream_join_id"\n\t"section_1.upstream_join_id" -> "section_1.task_1"\n\t"section_2.downstream_join_id" -> end\n\t"section_2.inner_section_2.task_2" -> "section_2.inner_section_2.task_4"\n\t"section_2.inner_section_2.task_3" -> "section_2.inner_section_2.task_4"\n\t"section_2.inner_section_2.task_4" -> "section_2.downstream_join_id"\n\t"section_2.task_1" -> "section_2.downstream_join_id"\n\t"section_2.upstream_join_id" -> "section_2.inner_section_2.task_2"\n\t"section_2.upstream_join_id" -> "section_2.inner_section_2.task_3"\n\t"section_2.upstream_join_id" -> "section_2.task_1"\n\tstart -> "section_1.upstream_join_id"\n}}'` instead of string join
+ tests/utils/test_log_handlers.py:368:13: FLY002 [*] Consider `f"airflow_version=.+?,dag_id=dag_for_testing_file_task_handler,kubernetes_executor=True,run_id=manual__2016-01-01T0000000000-2b88d1d57,task_id=task_for_testing_file_log_handler,try_number=2,airflow-worker"` instead of string join
+ tests/utils/test_log_handlers.py:543:19: FLY002 [*] Consider `f"[2022-11-16T00:05:54.278-0800] {{taskinstance.py:1258}} INFO - Starting attempt 1 of 1"` instead of string join
+ tests/utils/test_log_handlers.py:548:19: FLY002 [*] Consider `f"[2022-11-16T00:05:54.295-0800] {{taskinstance.py:1278}} INFO - Executing <Task(TimeDeltaSensorAsync): wait> on 2022-11-16 08:05:52.324532+00:00\n[2022-11-16T00:05:54.300-0800] {{standard_task_runner.py:55}} INFO - Started process 52536 to run task\n[2022-11-16T00:05:54.300-0800] {{standard_task_runner.py:55}} INFO - Started process 52536 to run task\n[2022-11-16T00:05:54.300-0800] {{standard_task_runner.py:55}} INFO - Started process 52536 to run task\n[2022-11-16T00:05:54.306-0800] {{standard_task_runner.py:82}} INFO - Running: ['airflow', 'tasks', 'run', 'simple_async_timedelta', 'wait', 'manual__2022-11-16T08:05:52.324532+00:00', '--job-id', '33648', '--raw', '--subdir', '/Users/dstandish/code/airflow/airflow/example_dags/example_time_delta_sensor_async.py', '--cfg-path', '/var/folders/7_/1xx0hqcs3txd7kqt0ngfdjth0000gn/T/tmp725r305n']\n[2022-11-16T00:05:54.309-0800] {{standard_task_runner.py:83}} INFO - Job 33648: Subtask wait"` instead of string join
+ tests/utils/test_log_handlers.py:558:19: FLY002 [*] Consider `f"[2022-11-16T00:05:54.457-0800] {{task_command.py:376}} INFO - Running <TaskInstance: simple_async_timedelta.wait manual__2022-11-16T08:05:52.324532+00:00 [running]> on host daniels-mbp-2.lan\n[2022-11-16T00:05:54.592-0800] {{taskinstance.py:1485}} INFO - Exporting env vars: AIRFLOW_CTX_DAG_OWNER=airflow\nAIRFLOW_CTX_DAG_ID=simple_async_timedelta\nAIRFLOW_CTX_TASK_ID=wait\nAIRFLOW_CTX_EXECUTION_DATE=2022-11-16T08:05:52.324532+00:00\nAIRFLOW_CTX_TRY_NUMBER=1\nAIRFLOW_CTX_DAG_RUN_ID=manual__2022-11-16T08:05:52.324532+00:00\n[2022-11-16T00:05:54.604-0800] {{taskinstance.py:1360}} INFO - Pausing task as DEFERRED. dag_id=simple_async_timedelta, task_id=wait, execution_date=20221116T080552, start_date=20221116T080554"` instead of string join
+ tests/utils/test_log_handlers.py:570:16: FLY002 [*] Consider `f"[2022-11-16T00:05:54.278-0800] {{taskinstance.py:1258}} INFO - Starting attempt 1 of 1\n[2022-11-16T00:05:54.295-0800] {{taskinstance.py:1278}} INFO - Executing <Task(TimeDeltaSensorAsync): wait> on 2022-11-16 08:05:52.324532+00:00\n[2022-11-16T00:05:54.300-0800] {{standard_task_runner.py:55}} INFO - Started process 52536 to run task\n[2022-11-16T00:05:54.306-0800] {{standard_task_runner.py:82}} INFO - Running: ['airflow', 'tasks', 'run', 'simple_async_timedelta', 'wait', 'manual__2022-11-16T08:05:52.324532+00:00', '--job-id', '33648', '--raw', '--subdir', '/Users/dstandish/code/airflow/airflow/example_dags/example_time_delta_sensor_async.py', '--cfg-path', '/var/folders/7_/1xx0hqcs3txd7kqt0ngfdjth0000gn/T/tmp725r305n']\n[2022-11-16T00:05:54.309-0800] {{standard_task_runner.py:83}} INFO - Job 33648: Subtask wait\n[2022-11-16T00:05:54.457-0800] {{task_command.py:376}} INFO - Running <TaskInstance: simple_async_timedelta.wait manual__2022-11-16T08:05:52.324532+00:00 [running]> on host daniels-mbp-2.lan\n[2022-11-16T00:05:54.592-0800] {{taskinstance.py:1485}} INFO - Exporting env vars: AIRFLOW_CTX_DAG_OWNER=airflow\nAIRFLOW_CTX_DAG_ID=simple_async_timedelta\nAIRFLOW_CTX_TASK_ID=wait\nAIRFLOW_CTX_EXECUTION_DATE=2022-11-16T08:05:52.324532+00:00\nAIRFLOW_CTX_TRY_NUMBER=1\nAIRFLOW_CTX_DAG_RUN_ID=manual__2022-11-16T08:05:52.324532+00:00\n[2022-11-16T00:05:54.604-0800] {{taskinstance.py:1360}} INFO - Pausing task as DEFERRED. dag_id=simple_async_timedelta, task_id=wait, execution_date=20221116T080552, start_date=20221116T080554"` instead of string join

zulip (+9, -0)

+ zerver/lib/request.py:351:27: FLY002 [*] Consider `f"{req_func.__module__}.{req_func.__name__}"` instead of string join
+ zerver/lib/upload/local.py:239:37: FLY002 [*] Consider `f"{emoji_path}.original"` instead of string join
+ zerver/lib/upload/s3.py:449:13: FLY002 [*] Consider `f"{emoji_path}.original"` instead of string join
+ zerver/migrations/0149_realm_emoji_drop_unique_constraint.py:85:12: FLY002 [*] Consider `f"{new_name}{image_ext}"` instead of string join
+ zerver/tests/test_invite.py:479:26: FLY002 [*] Consider `f"{cross_realm_bot_email},{legit_new_email}"` instead of string join
+ zerver/tests/test_message_fetch.py:329:28: FLY002 [*] Consider `f"{self.example_user('hamlet').email},{self.example_user('othello').email}"` instead of string join
+ zerver/tests/test_message_fetch.py:342:22: FLY002 [*] Consider `f"{self.example_user('cordelia').email},{self.example_user('othello').email}"` instead of string join
+ zerver/tests/test_message_fetch.py:354:28: FLY002 [*] Consider `f"{self.example_user('hamlet').email},{self.example_user('othello').email}"` instead of string join
+ zerver/tests/test_message_fetch.py:369:22: FLY002 [*] Consider `f"{self.example_user('cordelia').email},{self.example_user('othello').email}"` instead of string join

Benchmark

Linux

group                                      main                                   pr
-----                                      ----                                   --
linter/all-rules/large/dataset.py          1.00     14.0±0.04ms     2.9 MB/sec    1.00     14.0±0.04ms     2.9 MB/sec
linter/all-rules/numpy/ctypeslib.py        1.00      3.4±0.01ms     4.9 MB/sec    1.00      3.4±0.00ms     4.9 MB/sec
linter/all-rules/numpy/globals.py          1.01    423.5±0.83µs     7.0 MB/sec    1.00    421.1±1.07µs     7.0 MB/sec
linter/all-rules/pydantic/types.py         1.00      5.8±0.01ms     4.4 MB/sec    1.01      5.9±0.09ms     4.3 MB/sec
linter/default-rules/large/dataset.py      1.00      6.9±0.01ms     5.9 MB/sec    1.02      7.1±0.01ms     5.8 MB/sec
linter/default-rules/numpy/ctypeslib.py    1.00   1490.6±2.78µs    11.2 MB/sec    1.01   1511.5±2.69µs    11.0 MB/sec
linter/default-rules/numpy/globals.py      1.00    166.6±0.36µs    17.7 MB/sec    1.02    169.1±0.64µs    17.5 MB/sec
linter/default-rules/pydantic/types.py     1.00      3.1±0.01ms     8.3 MB/sec    1.02      3.1±0.02ms     8.1 MB/sec
parser/large/dataset.py                    1.00      5.4±0.02ms     7.5 MB/sec    1.02      5.6±0.01ms     7.3 MB/sec
parser/numpy/ctypeslib.py                  1.00   1060.3±3.34µs    15.7 MB/sec    1.02   1079.0±0.86µs    15.4 MB/sec
parser/numpy/globals.py                    1.00    108.0±0.18µs    27.3 MB/sec    1.02    110.0±1.95µs    26.8 MB/sec
parser/pydantic/types.py                   1.00      2.3±0.00ms    11.0 MB/sec    1.02      2.4±0.01ms    10.8 MB/sec

Windows

group                                      main                                   pr
-----                                      ----                                   --
linter/all-rules/large/dataset.py          1.00     16.7±0.11ms     2.4 MB/sec    1.01     16.8±0.14ms     2.4 MB/sec
linter/all-rules/numpy/ctypeslib.py        1.00      4.3±0.02ms     3.9 MB/sec    1.00      4.3±0.02ms     3.9 MB/sec
linter/all-rules/numpy/globals.py          1.02   439.4±29.07µs     6.7 MB/sec    1.00    430.4±5.33µs     6.9 MB/sec
linter/all-rules/pydantic/types.py         1.00      7.1±0.07ms     3.6 MB/sec    1.01      7.2±0.08ms     3.5 MB/sec
linter/default-rules/large/dataset.py      1.00      8.5±0.05ms     4.8 MB/sec    1.02      8.6±0.05ms     4.7 MB/sec
linter/default-rules/numpy/ctypeslib.py    1.00  1802.8±13.54µs     9.2 MB/sec    1.01   1827.9±9.98µs     9.1 MB/sec
linter/default-rules/numpy/globals.py      1.00    191.9±2.66µs    15.4 MB/sec    1.01    194.2±4.77µs    15.2 MB/sec
linter/default-rules/pydantic/types.py     1.00      3.8±0.03ms     6.6 MB/sec    1.01      3.9±0.03ms     6.5 MB/sec
parser/large/dataset.py                    1.00      7.0±0.04ms     5.8 MB/sec    1.00      7.0±0.02ms     5.8 MB/sec
parser/numpy/ctypeslib.py                  1.00   1322.1±9.67µs    12.6 MB/sec    1.00   1323.9±9.59µs    12.6 MB/sec
parser/numpy/globals.py                    1.00    135.3±1.05µs    21.8 MB/sec    1.00    135.1±1.01µs    21.8 MB/sec
parser/pydantic/types.py                   1.00      3.0±0.07ms     8.6 MB/sec    1.00      3.0±0.01ms     8.6 MB/sec

@MichaReiser
Copy link
Member

Autofix introduced a syntax error. Revertin

I made some changes to our test infra so that should help you narrow down the issue #4202

@akx akx force-pushed the flynt-static-string-joins branch from e373352 to 814ae01 Compare May 4, 2023 07:50
@akx akx changed the title Implement Flynt's static string join transforms Implement Flynt static string join transform as FLY002 May 4, 2023
@akx akx marked this pull request as ready for review May 4, 2023 07:54
@akx akx force-pushed the flynt-static-string-joins branch 2 times, most recently from e1ec45e to 129d55a Compare May 4, 2023 08:02
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.

Impressive work! I only have a few nit comments.

crates/ruff/src/checkers/ast/mod.rs Outdated Show resolved Hide resolved
crates/ruff/src/rules/flynt/helpers.rs Outdated Show resolved Hide resolved
crates/ruff/src/rules/flynt/helpers.rs Outdated Show resolved Hide resolved
@akx akx force-pushed the flynt-static-string-joins branch from 783eed0 to fdff76d Compare May 5, 2023 07:13
@akx akx force-pushed the flynt-static-string-joins branch from fdff76d to b988b59 Compare May 5, 2023 07:22
@akx akx requested a review from MichaReiser May 5, 2023 07:27
@charliermarsh charliermarsh merged commit efdf383 into astral-sh:main May 9, 2023
14 checks passed
renovate bot added a commit to ixm-one/pytest-cmake-presets that referenced this pull request May 12, 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.265` -> `^0.0.267` |
[![age](https://badges.renovateapi.com/packages/pypi/ruff/0.0.267/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/pypi/ruff/0.0.267/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/pypi/ruff/0.0.267/compatibility-slim/0.0.265)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/pypi/ruff/0.0.267/confidence-slim/0.0.265)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

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

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

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

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

#### Summary

Follow-up release to v0.0.266 to fix an issue with `python -m ruff`- and
`import ruff`-based workflows.

(No new rules or functionality.)

#### What's Changed

##### Rules

- Implement `RUF010` to detect explicit type conversions within
f-strings by [@&#8203;LotemAm](https://togithub.com/LotemAm) in
[astral-sh/ruff#4387

##### Other Changes

- Workaround for maturin bug by
[@&#8203;konstin](https://togithub.com/konstin) in
[astral-sh/ruff#4399

#### New Contributors

- [@&#8203;OMEGARAZER](https://togithub.com/OMEGARAZER) made their first
contribution in
[astral-sh/ruff#3938
- [@&#8203;LotemAm](https://togithub.com/LotemAm) made their first
contribution in
[astral-sh/ruff#4387

**Full Changelog**:
astral-sh/ruff@v0.0.266...v0.0.267

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

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

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

#### What's Changed

##### Breaking Changes

- Remove deprecated `update-check` setting by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4313
- JSON Emitter: Use one indexed column numbers for edits by
[@&#8203;MichaReiser](https://togithub.com/MichaReiser) in
[astral-sh/ruff#4007

##### Rules

- \[`pygrep-hooks`] Implement pygrep-hook's Mock-mistake diagnostic by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4366
- \[`pylint`] Implement `nested-min-max` (`W3301`) by
[@&#8203;mccullocht](https://togithub.com/mccullocht) in
[astral-sh/ruff#4200
- \[`flynt`] Implement Flynt static string join transform as FLY002 by
[@&#8203;akx](https://togithub.com/akx) in
[astral-sh/ruff#4196
- \[`pylint`] Include positional- and keyword-only arguments in
too-many-arguments by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4329
- \[`ruff`] Update confusable character mapping by
[@&#8203;akx](https://togithub.com/akx) in
[astral-sh/ruff#4274

##### Settings

- Add .git-rewrite folder to default ignored folder paths by
[@&#8203;jleclanche](https://togithub.com/jleclanche) in
[astral-sh/ruff#4261
- Feat: detect changes also in configuration files by
[@&#8203;mikeleppane](https://togithub.com/mikeleppane) in
[astral-sh/ruff#4169

##### Bug Fixes

- Revert the B027 autofix logic by
[@&#8203;aacunningham](https://togithub.com/aacunningham) in
[astral-sh/ruff#4310
- Consider Flask app logger as logger candidate by
[@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[astral-sh/ruff#4253
- Enforce max-doc-length for multi-line docstrings by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4347
- Avoid re-using imports beyond current edit site by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4378
- Respect insertion location when importing symbols by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4258
- Fix jemalloc page size on aarch64 by
[@&#8203;MichaReiser](https://togithub.com/MichaReiser) in
[astral-sh/ruff#4247
- Fix replace_whitespace() tabulation to space by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[astral-sh/ruff#4226
- Avoid fixing `PD002` in a lambda expression by
[@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[astral-sh/ruff#4286
- Avoid `D403` if first char cannot be uppercased by
[@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[astral-sh/ruff#4283
- Avoid panics for f-string rewrites at start-of-file by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4291
- Rewrite `not not a` as `bool(a)` in boolean contexts by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4294
- Include static and class methods in in abstract decorator list by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4298
- Specify exact command in incorrect parentheses suggestion by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4300
- Ignore `TRY301` exceptions without except handlers by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4301
- Preserve whitespace around `ListComp` brackets in `C419` by
[@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[astral-sh/ruff#4099
- Tweak capitalization of B021 message by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4350
- Avoid debug panic with empty indent replacement by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4364
- Use target name in hardcoded-password diagnostics by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4365
- Avoid underflow in expected-special-method-signature by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4377
- Respect `__all__` imports when determining definition visibility by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4357
- Ignore some methods on list in `flake8-boolean-trap` by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4385
- Fix false positives in PD002 by
[@&#8203;evanrittenhouse](https://togithub.com/evanrittenhouse) in
[astral-sh/ruff#4337
- Run autofix on initial watcher pass by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4311
- Avoid SIM105 autofixes that would remove comments by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4330
- Handle `.encode` calls on parenthesized expressions by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4338
- Truncate `SyntaxError`s before newline character by
[@&#8203;MichaReiser](https://togithub.com/MichaReiser) in
[astral-sh/ruff#4124
- Use non-empty ranges for logical-lines diagnostics by
[@&#8203;MichaReiser](https://togithub.com/MichaReiser) in
[astral-sh/ruff#4133

#### New Contributors

- [@&#8203;jleclanche](https://togithub.com/jleclanche) made their first
contribution in
[astral-sh/ruff#4261
- [@&#8203;aureliojargas](https://togithub.com/aureliojargas) made their
first contribution in
[astral-sh/ruff#4306
- [@&#8203;intgr](https://togithub.com/intgr) made their first
contribution in
[astral-sh/ruff#4304
- [@&#8203;mikeleppane](https://togithub.com/mikeleppane) made their
first contribution in
[astral-sh/ruff#4169
- [@&#8203;dependabot](https://togithub.com/dependabot) made their first
contribution in
[astral-sh/ruff#4354

**Full Changelog**:
astral-sh/ruff@v0.0.265...v0.0.266

</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:eyJjcmVhdGVkSW5WZXIiOiIzNS43OS4xIiwidXBkYXRlZEluVmVyIjoiMzUuNzkuMSIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==-->

Signed-off-by: Renovate Bot <bot@renovateapp.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
renovate bot added a commit to allenporter/flux-local that referenced this pull request May 14, 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.265` -> `==0.0.267` |
[![age](https://badges.renovateapi.com/packages/pypi/ruff/0.0.267/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/pypi/ruff/0.0.267/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/pypi/ruff/0.0.267/compatibility-slim/0.0.265)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/pypi/ruff/0.0.267/confidence-slim/0.0.265)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

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

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

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

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

#### Summary

Follow-up release to v0.0.266 to fix an issue with `python -m ruff`- and
`import ruff`-based workflows.

(No new rules or functionality.)

#### What's Changed

##### Rules

- Implement `RUF010` to detect explicit type conversions within
f-strings by [@&#8203;LotemAm](https://togithub.com/LotemAm) in
[astral-sh/ruff#4387

##### Other Changes

- Workaround for maturin bug by
[@&#8203;konstin](https://togithub.com/konstin) in
[astral-sh/ruff#4399

#### New Contributors

- [@&#8203;OMEGARAZER](https://togithub.com/OMEGARAZER) made their first
contribution in
[astral-sh/ruff#3938
- [@&#8203;LotemAm](https://togithub.com/LotemAm) made their first
contribution in
[astral-sh/ruff#4387

**Full Changelog**:
astral-sh/ruff@v0.0.266...v0.0.267

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

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

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

#### What's Changed

##### Breaking Changes

- Remove deprecated `update-check` setting by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4313
- JSON Emitter: Use one indexed column numbers for edits by
[@&#8203;MichaReiser](https://togithub.com/MichaReiser) in
[astral-sh/ruff#4007

##### Rules

- \[`pygrep-hooks`] Implement pygrep-hook's Mock-mistake diagnostic by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4366
- \[`pylint`] Implement `nested-min-max` (`W3301`) by
[@&#8203;mccullocht](https://togithub.com/mccullocht) in
[astral-sh/ruff#4200
- \[`flynt`] Implement Flynt static string join transform as FLY002 by
[@&#8203;akx](https://togithub.com/akx) in
[astral-sh/ruff#4196
- \[`pylint`] Include positional- and keyword-only arguments in
too-many-arguments by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4329
- \[`ruff`] Update confusable character mapping by
[@&#8203;akx](https://togithub.com/akx) in
[astral-sh/ruff#4274

##### Settings

- Add .git-rewrite folder to default ignored folder paths by
[@&#8203;jleclanche](https://togithub.com/jleclanche) in
[astral-sh/ruff#4261
- Feat: detect changes also in configuration files by
[@&#8203;mikeleppane](https://togithub.com/mikeleppane) in
[astral-sh/ruff#4169

##### Bug Fixes

- Revert the B027 autofix logic by
[@&#8203;aacunningham](https://togithub.com/aacunningham) in
[astral-sh/ruff#4310
- Consider Flask app logger as logger candidate by
[@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[astral-sh/ruff#4253
- Enforce max-doc-length for multi-line docstrings by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4347
- Avoid re-using imports beyond current edit site by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4378
- Respect insertion location when importing symbols by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4258
- Fix jemalloc page size on aarch64 by
[@&#8203;MichaReiser](https://togithub.com/MichaReiser) in
[astral-sh/ruff#4247
- Fix replace_whitespace() tabulation to space by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[astral-sh/ruff#4226
- Avoid fixing `PD002` in a lambda expression by
[@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[astral-sh/ruff#4286
- Avoid `D403` if first char cannot be uppercased by
[@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[astral-sh/ruff#4283
- Avoid panics for f-string rewrites at start-of-file by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4291
- Rewrite `not not a` as `bool(a)` in boolean contexts by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4294
- Include static and class methods in in abstract decorator list by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4298
- Specify exact command in incorrect parentheses suggestion by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4300
- Ignore `TRY301` exceptions without except handlers by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4301
- Preserve whitespace around `ListComp` brackets in `C419` by
[@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[astral-sh/ruff#4099
- Tweak capitalization of B021 message by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4350
- Avoid debug panic with empty indent replacement by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4364
- Use target name in hardcoded-password diagnostics by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4365
- Avoid underflow in expected-special-method-signature by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4377
- Respect `__all__` imports when determining definition visibility by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4357
- Ignore some methods on list in `flake8-boolean-trap` by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4385
- Fix false positives in PD002 by
[@&#8203;evanrittenhouse](https://togithub.com/evanrittenhouse) in
[astral-sh/ruff#4337
- Run autofix on initial watcher pass by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4311
- Avoid SIM105 autofixes that would remove comments by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4330
- Handle `.encode` calls on parenthesized expressions by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4338
- Truncate `SyntaxError`s before newline character by
[@&#8203;MichaReiser](https://togithub.com/MichaReiser) in
[astral-sh/ruff#4124
- Use non-empty ranges for logical-lines diagnostics by
[@&#8203;MichaReiser](https://togithub.com/MichaReiser) in
[astral-sh/ruff#4133

#### New Contributors

- [@&#8203;jleclanche](https://togithub.com/jleclanche) made their first
contribution in
[astral-sh/ruff#4261
- [@&#8203;aureliojargas](https://togithub.com/aureliojargas) made their
first contribution in
[astral-sh/ruff#4306
- [@&#8203;intgr](https://togithub.com/intgr) made their first
contribution in
[astral-sh/ruff#4304
- [@&#8203;mikeleppane](https://togithub.com/mikeleppane) made their
first contribution in
[astral-sh/ruff#4169
- [@&#8203;dependabot](https://togithub.com/dependabot) made their first
contribution in
[astral-sh/ruff#4354

**Full Changelog**:
astral-sh/ruff@v0.0.265...v0.0.266

</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:eyJjcmVhdGVkSW5WZXIiOiIzNS43OS4xIiwidXBkYXRlZEluVmVyIjoiMzUuNzkuMSIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==-->

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 May 14, 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.265` -> `==0.0.267` |
[![age](https://badges.renovateapi.com/packages/pypi/ruff/0.0.267/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/pypi/ruff/0.0.267/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/pypi/ruff/0.0.267/compatibility-slim/0.0.265)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/pypi/ruff/0.0.267/confidence-slim/0.0.265)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

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

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

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

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

#### Summary

Follow-up release to v0.0.266 to fix an issue with `python -m ruff`- and
`import ruff`-based workflows.

(No new rules or functionality.)

#### What's Changed

##### Rules

- Implement `RUF010` to detect explicit type conversions within
f-strings by [@&#8203;LotemAm](https://togithub.com/LotemAm) in
[astral-sh/ruff#4387

##### Other Changes

- Workaround for maturin bug by
[@&#8203;konstin](https://togithub.com/konstin) in
[astral-sh/ruff#4399

#### New Contributors

- [@&#8203;OMEGARAZER](https://togithub.com/OMEGARAZER) made their first
contribution in
[astral-sh/ruff#3938
- [@&#8203;LotemAm](https://togithub.com/LotemAm) made their first
contribution in
[astral-sh/ruff#4387

**Full Changelog**:
astral-sh/ruff@v0.0.266...v0.0.267

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

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

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

#### What's Changed

##### Breaking Changes

- Remove deprecated `update-check` setting by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4313
- JSON Emitter: Use one indexed column numbers for edits by
[@&#8203;MichaReiser](https://togithub.com/MichaReiser) in
[astral-sh/ruff#4007

##### Rules

- \[`pygrep-hooks`] Implement pygrep-hook's Mock-mistake diagnostic by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4366
- \[`pylint`] Implement `nested-min-max` (`W3301`) by
[@&#8203;mccullocht](https://togithub.com/mccullocht) in
[astral-sh/ruff#4200
- \[`flynt`] Implement Flynt static string join transform as FLY002 by
[@&#8203;akx](https://togithub.com/akx) in
[astral-sh/ruff#4196
- \[`pylint`] Include positional- and keyword-only arguments in
too-many-arguments by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4329
- \[`ruff`] Update confusable character mapping by
[@&#8203;akx](https://togithub.com/akx) in
[astral-sh/ruff#4274

##### Settings

- Add .git-rewrite folder to default ignored folder paths by
[@&#8203;jleclanche](https://togithub.com/jleclanche) in
[astral-sh/ruff#4261
- Feat: detect changes also in configuration files by
[@&#8203;mikeleppane](https://togithub.com/mikeleppane) in
[astral-sh/ruff#4169

##### Bug Fixes

- Revert the B027 autofix logic by
[@&#8203;aacunningham](https://togithub.com/aacunningham) in
[astral-sh/ruff#4310
- Consider Flask app logger as logger candidate by
[@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[astral-sh/ruff#4253
- Enforce max-doc-length for multi-line docstrings by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4347
- Avoid re-using imports beyond current edit site by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4378
- Respect insertion location when importing symbols by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4258
- Fix jemalloc page size on aarch64 by
[@&#8203;MichaReiser](https://togithub.com/MichaReiser) in
[astral-sh/ruff#4247
- Fix replace_whitespace() tabulation to space by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[astral-sh/ruff#4226
- Avoid fixing `PD002` in a lambda expression by
[@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[astral-sh/ruff#4286
- Avoid `D403` if first char cannot be uppercased by
[@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[astral-sh/ruff#4283
- Avoid panics for f-string rewrites at start-of-file by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4291
- Rewrite `not not a` as `bool(a)` in boolean contexts by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4294
- Include static and class methods in in abstract decorator list by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4298
- Specify exact command in incorrect parentheses suggestion by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4300
- Ignore `TRY301` exceptions without except handlers by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4301
- Preserve whitespace around `ListComp` brackets in `C419` by
[@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[astral-sh/ruff#4099
- Tweak capitalization of B021 message by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4350
- Avoid debug panic with empty indent replacement by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4364
- Use target name in hardcoded-password diagnostics by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4365
- Avoid underflow in expected-special-method-signature by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4377
- Respect `__all__` imports when determining definition visibility by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4357
- Ignore some methods on list in `flake8-boolean-trap` by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4385
- Fix false positives in PD002 by
[@&#8203;evanrittenhouse](https://togithub.com/evanrittenhouse) in
[astral-sh/ruff#4337
- Run autofix on initial watcher pass by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4311
- Avoid SIM105 autofixes that would remove comments by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4330
- Handle `.encode` calls on parenthesized expressions by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#4338
- Truncate `SyntaxError`s before newline character by
[@&#8203;MichaReiser](https://togithub.com/MichaReiser) in
[astral-sh/ruff#4124
- Use non-empty ranges for logical-lines diagnostics by
[@&#8203;MichaReiser](https://togithub.com/MichaReiser) in
[astral-sh/ruff#4133

#### New Contributors

- [@&#8203;jleclanche](https://togithub.com/jleclanche) made their first
contribution in
[astral-sh/ruff#4261
- [@&#8203;aureliojargas](https://togithub.com/aureliojargas) made their
first contribution in
[astral-sh/ruff#4306
- [@&#8203;intgr](https://togithub.com/intgr) made their first
contribution in
[astral-sh/ruff#4304
- [@&#8203;mikeleppane](https://togithub.com/mikeleppane) made their
first contribution in
[astral-sh/ruff#4169
- [@&#8203;dependabot](https://togithub.com/dependabot) made their first
contribution in
[astral-sh/ruff#4354

**Full Changelog**:
astral-sh/ruff@v0.0.265...v0.0.266

</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:eyJjcmVhdGVkSW5WZXIiOiIzNS43OS4xIiwidXBkYXRlZEluVmVyIjoiMzUuNzkuMSIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==-->

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.

None yet

3 participants