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

Move compare-to-empty-string to nursery #5264

Merged
merged 1 commit into from
Jun 21, 2023
Merged

Conversation

charliermarsh
Copy link
Member

Summary

This rule has too many false positives. It has parity with the Pylint version, but the Pylint version is part of an extension, and so requires explicit opt-in.

I'm moving this rule to the nursery to require explicit opt-in, as with Pylint.

Closes #4282.

@charliermarsh charliermarsh enabled auto-merge (squash) June 21, 2023 19:01
@github-actions
Copy link
Contributor

github-actions bot commented Jun 21, 2023

PR Check Results

Ecosystem

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

airflow (+0, -120)

- airflow/cli/commands/connection_command.py:136:36: PLC1901 `urlsplit(uri).scheme != ""` can be simplified to `urlsplit(uri).scheme` as an empty string is falsey
- airflow/models/connection.py:265:30: PLC1901 `host_block == ""` can be simplified to `not host_block` as an empty string is falsey
- airflow/models/connection.py:265:56: PLC1901 `authority_block == ""` can be simplified to `not authority_block` as an empty string is falsey
- airflow/providers/alibaba/cloud/sensors/oss_key.py:74:37: PLC1901 `parsed_url.netloc == ""` can be simplified to `not parsed_url.netloc` as an empty string is falsey
- airflow/providers/alibaba/cloud/sensors/oss_key.py:80:37: PLC1901 `parsed_url.scheme != ""` can be simplified to `parsed_url.scheme` as an empty string is falsey
- airflow/providers/alibaba/cloud/sensors/oss_key.py:80:64: PLC1901 `parsed_url.netloc != ""` can be simplified to `parsed_url.netloc` as an empty string is falsey
- airflow/providers/amazon/aws/hooks/s3.py:257:33: PLC1901 `parsed_url.scheme != ""` can be simplified to `parsed_url.scheme` as an empty string is falsey
- airflow/providers/amazon/aws/hooks/s3.py:257:60: PLC1901 `parsed_url.netloc != ""` can be simplified to `parsed_url.netloc` as an empty string is falsey
- airflow/providers/amazon/aws/operators/eks.py:307:42: PLC1901 `self.nodegroup_subnets != ""` can be simplified to `self.nodegroup_subnets` as an empty string is falsey
- airflow/providers/amazon/aws/utils/waiter_with_logging.py:87:43: PLC1901 `value != ""` can be simplified to `value` as an empty string is falsey
- airflow/providers/apache/hive/hooks/hive.py:135:32: PLC1901 `proxy_user_value != ""` can be simplified to `proxy_user_value` as an empty string is falsey
- airflow/providers/cncf/kubernetes/utils/delete_from.py:108:19: PLC1901 `version == ""` can be simplified to `not version` as an empty string is falsey
- airflow/providers/cncf/kubernetes/utils/delete_from.py:39:24: PLC1901 `kind != ""` can be simplified to `kind` as an empty string is falsey
- airflow/providers/databricks/hooks/databricks_base.py:438:46: PLC1901 `self.databricks_conn.login == ""` can be simplified to `not self.databricks_conn.login` as an empty string is falsey
- airflow/providers/databricks/hooks/databricks_base.py:438:85: PLC1901 `self.databricks_conn.password == ""` can be simplified to `not self.databricks_conn.password` as an empty string is falsey
- airflow/providers/databricks/hooks/databricks_base.py:461:46: PLC1901 `self.databricks_conn.login == ""` can be simplified to `not self.databricks_conn.login` as an empty string is falsey
- airflow/providers/databricks/hooks/databricks_base.py:461:85: PLC1901 `self.databricks_conn.password == ""` can be simplified to `not self.databricks_conn.password` as an empty string is falsey
- airflow/providers/databricks/operators/databricks_sql.py:251:26: PLC1901 `table_name == ""` can be simplified to `not table_name` as an empty string is falsey
- airflow/providers/databricks/operators/databricks_sql.py:253:29: PLC1901 `file_location == ""` can be simplified to `not file_location` as an empty string is falsey
- airflow/providers/google/cloud/hooks/cloud_sql.py:589:28: PLC1901 `line == ""` can be simplified to `not line` as an empty string is falsey
- airflow/providers/google/cloud/hooks/cloud_sql.py:594:28: PLC1901 `line != ""` can be simplified to `line` as an empty string is falsey
- airflow/providers/google/cloud/hooks/cloud_sql.py:790:31: PLC1901 `self.project_id == ""` can be simplified to `not self.project_id` as an empty string is falsey
- airflow/providers/google/cloud/hooks/compute_ssh.py:156:60: PLC1901 `value.strip() == ""` can be simplified to `not value.strip()` as an empty string is falsey
- airflow/providers/google/cloud/operators/cloud_sql.py:255:31: PLC1901 `self.project_id == ""` can be simplified to `not self.project_id` as an empty string is falsey
- airflow/providers/google/cloud/operators/compute.py:68:31: PLC1901 `self.project_id == ""` can be simplified to `not self.project_id` as an empty string is falsey
- airflow/providers/google/cloud/operators/spanner.py:178:31: PLC1901 `self.project_id == ""` can be simplified to `not self.project_id` as an empty string is falsey
- airflow/providers/google/cloud/operators/spanner.py:259:31: PLC1901 `self.project_id == ""` can be simplified to `not self.project_id` as an empty string is falsey
- airflow/providers/google/cloud/operators/spanner.py:306:39: PLC1901 `queries[-1] == ""` can be simplified to `not queries[-1]` as an empty string is falsey
- airflow/providers/google/cloud/operators/spanner.py:370:31: PLC1901 `self.project_id == ""` can be simplified to `not self.project_id` as an empty string is falsey
- airflow/providers/google/cloud/operators/spanner.py:478:31: PLC1901 `self.project_id == ""` can be simplified to `not self.project_id` as an empty string is falsey
- airflow/providers/google/cloud/operators/spanner.py:569:31: PLC1901 `self.project_id == ""` can be simplified to `not self.project_id` as an empty string is falsey
- airflow/providers/google/cloud/operators/spanner.py:98:31: PLC1901 `self.project_id == ""` can be simplified to `not self.project_id` as an empty string is falsey
- airflow/providers/google/cloud/operators/speech_to_text.py:103:26: PLC1901 `self.audio == ""` can be simplified to `not self.audio` as an empty string is falsey
- airflow/providers/google/cloud/operators/speech_to_text.py:105:27: PLC1901 `self.config == ""` can be simplified to `not self.config` as an empty string is falsey
- airflow/providers/google/cloud/operators/text_to_speech.py:123:44: PLC1901 `getattr(self, parameter) == ""` can be simplified to `not getattr(self, parameter)` as an empty string is falsey
- airflow/providers/google/common/hooks/base_google.py:368:68: PLC1901 `field_value.strip() == ""` can be simplified to `not field_value.strip()` as an empty string is falsey
- airflow/providers/hashicorp/secrets/vault.py:179:37: PLC1901 `self.connections_path == ""` can be simplified to `not self.connections_path` as an empty string is falsey
- airflow/providers/hashicorp/secrets/vault.py:241:35: PLC1901 `self.variables_path == ""` can be simplified to `not self.variables_path` as an empty string is falsey
- airflow/providers/hashicorp/secrets/vault.py:260:32: PLC1901 `self.config_path == ""` can be simplified to `not self.config_path` as an empty string is falsey
- airflow/providers/microsoft/azure/hooks/fileshare.py:132:25: PLC1901 `value == ""` can be simplified to `not value` as an empty string is falsey
- airflow/providers/microsoft/azure/secrets/key_vault.py:173:27: PLC1901 `path_prefix == ""` can be simplified to `not path_prefix` as an empty string is falsey
- airflow/providers/microsoft/azure/utils.py:72:15: PLC1901 `ret == ""` can be simplified to `not ret` as an empty string is falsey
- airflow/providers/slack/transfers/sql_to_slack.py:179:52: PLC1901 `self.sql.strip() == ""` can be simplified to `not self.sql.strip()` as an empty string is falsey
- airflow/providers/slack/transfers/sql_to_slack.py:181:72: PLC1901 `self.slack_message.strip() == ""` can be simplified to `not self.slack_message.strip()` as an empty string is falsey
- airflow/stats.py:62:56: PLC1901 `tags_in_string == ""` can be simplified to `not tags_in_string` as an empty string is falsey
- airflow/utils/helpers.py:94:22: PLC1901 `choice == ""` can be simplified to `not choice` as an empty string is falsey
- airflow/www/app.py:110:34: PLC1901 `cookie_samesite_config == ""` can be simplified to `not cookie_samesite_config` as an empty string is falsey
- airflow/www/fab_security/manager.py:1068:46: PLC1901 `username == ""` can be simplified to `not username` as an empty string is falsey
- airflow/www/fab_security/manager.py:1332:46: PLC1901 `username == ""` can be simplified to `not username` as an empty string is falsey
- airflow/www/fab_security/manager.py:913:44: PLC1901 `username == ""` can be simplified to `not username` as an empty string is falsey
- airflow/www/views.py:4764:33: PLC1901 `value != ""` can be simplified to `value` as an empty string is falsey
- dev/breeze/src/airflow_breeze/commands/setup_commands.py:371:30: PLC1901 `strip_line == ""` can be simplified to `not strip_line` as an empty string is falsey
- dev/breeze/src/airflow_breeze/commands/setup_commands.py:389:34: PLC1901 `strip_line.strip() == ""` can be simplified to `not strip_line.strip()` as an empty string is falsey
- dev/breeze/src/airflow_breeze/utils/confirm.py:77:35: PLC1901 `user_status == ""` can be simplified to `not user_status` as an empty string is falsey
- dev/breeze/src/airflow_breeze/utils/docker_command_utils.py:245:30: PLC1901 `docker_version == ""` can be simplified to `not docker_version` as an empty string is falsey
- dev/breeze/tests/test_find_airflow_directory.py:34:22: PLC1901 `output == ""` can be simplified to `not output` as an empty string is falsey
- dev/breeze/tests/test_find_airflow_directory.py:42:22: PLC1901 `output == ""` can be simplified to `not output` as an empty string is falsey
- dev/provider_packages/prepare_provider_packages.py:1398:28: PLC1901 `old_text != ""` can be simplified to `old_text` as an empty string is falsey
- dev/provider_packages/prepare_provider_packages.py:1758:93: PLC1901 `version_suffix == ""` can be simplified to `not version_suffix` as an empty string is falsey
- dev/provider_packages/prepare_provider_packages.py:338:105: PLC1901 `version_suffix != ""` can be simplified to `version_suffix` as an empty string is falsey
- dev/provider_packages/prepare_provider_packages.py:486:20: PLC1901 `line == ""` can be simplified to `not line` as an empty string is falsey
- dev/provider_packages/prepare_provider_packages.py:528:36: PLC1901 `version_required != ""` can be simplified to `version_required` as an empty string is falsey
- dev/provider_packages/prepare_provider_packages.py:657:35: PLC1901 `current_release_version == ""` can be simplified to `not current_release_version` as an empty string is falsey
- docs/conf.py:502:21: PLC1901 `value == ""` can be simplified to `not value` as an empty string is falsey
- scripts/ci/pre_commit/pre_commit_newsfragments.py:62:24: PLC1901 `lines[1] != ""` can be simplified to `lines[1]` as an empty string is falsey
- scripts/ci/pre_commit/pre_commit_sort_in_the_wild.py:51:32: PLC1901 `line.strip() == ""` can be simplified to `not line.strip()` as an empty string is falsey
- scripts/ci/pre_commit/pre_commit_update_common_sql_api_stubs.py:136:31: PLC1901 `stripped_line == ""` can be simplified to `not stripped_line` as an empty string is falsey
- scripts/ci/pre_commit/pre_commit_yaml_to_cfg.py:101:36: PLC1901 `single_line_desc == ""` can be simplified to `not single_line_desc` as an empty string is falsey
- scripts/ci/pre_commit/pre_commit_yaml_to_cfg.py:122:36: PLC1901 `single_line_desc == ""` can be simplified to `not single_line_desc` as an empty string is falsey
- scripts/ci/pre_commit/pre_commit_yaml_to_cfg.py:96:54: PLC1901 `x != ""` can be simplified to `x` as an empty string is falsey
- scripts/in_container/verify_providers.py:701:36: PLC1901 `os.environ.get("CI") != ""` can be simplified to `os.environ.get("CI")` as an empty string is falsey
- scripts/in_container/verify_providers.py:709:36: PLC1901 `os.environ.get("CI") != ""` can be simplified to `os.environ.get("CI")` as an empty string is falsey
- setup.py:572:67: PLC1901 `extra != ""` can be simplified to `extra` as an empty string is falsey
- tests/always/test_secrets_backends.py:102:16: PLC1901 `"" == metastore_backend.get_variable(key="empty_str")` can be simplified to `not metastore_backend.get_variable(key="empty_str")` as an empty string is falsey
- tests/always/test_secrets_backends.py:93:16: PLC1901 `"" == env_secrets_backend.get_variable(key="empty_str")` can be simplified to `not env_secrets_backend.get_variable(key="empty_str")` as an empty string is falsey
- tests/api_connexion/endpoints/test_user_endpoint.py:557:37: PLC1901 `data["last_name"] == ""` can be simplified to `not data["last_name"]` as an empty string is falsey
- tests/api_experimental/common/experimental/test_pool.py:75:36: PLC1901 `pool.description == ""` can be simplified to `not pool.description` as an empty string is falsey
- tests/api_experimental/common/experimental/test_pool.py:83:36: PLC1901 `pool.description == ""` can be simplified to `not pool.description` as an empty string is falsey
- tests/charts/airflow_aux/test_configmap.py:74:20: PLC1901 `"" == jmespath.search('data."airflow_local_settings.py"', docs[0]).strip()` can be simplified to `not jmespath.search('data."airflow_local_settings.py"', docs[0]).strip()` as an empty string is falsey
- tests/models/test_dag.py:1447:16: PLC1901 `"" != dag_run.run_id` can be simplified to `dag_run.run_id` as an empty string is falsey
- tests/models/test_pool.py:200:36: PLC1901 `pool.description == ""` can be simplified to `not pool.description` as an empty string is falsey
- tests/models/test_pool.py:208:36: PLC1901 `pool.description == ""` can be simplified to `not pool.description` as an empty string is falsey
- tests/models/test_variable.py:171:16: PLC1901 `"" == Variable.get("test_key")` can be simplified to `not Variable.get("test_key")` as an empty string is falsey
- tests/models/test_xcom_arg.py:79:30: PLC1901 `actual.key == ""` can be simplified to `not actual.key` as an empty string is falsey
- tests/providers/amazon/aws/links/test_links.py:114:67: PLC1901 `ti.task.get_extra_links(ti, extra_link_class.name) == ""` can be simplified to `not ti.task.get_extra_links(ti, extra_link_class.name)` as an empty string is falsey
- tests/providers/amazon/aws/links/test_links.py:118:77: PLC1901 `deserialized_task.get_extra_links(ti, extra_link_class.name) == ""` can be simplified to `not deserialized_task.get_extra_links(ti, extra_link_class.name)` as an empty string is falsey
- tests/providers/apache/beam/operators/test_beam.py:317:49: PLC1901 `self.operator.launcher_binary == ""` can be simplified to `not self.operator.launcher_binary` as an empty string is falsey
- tests/providers/apache/beam/operators/test_beam.py:318:47: PLC1901 `self.operator.worker_binary == ""` can be simplified to `not self.operator.worker_binary` as an empty string is falsey
- tests/providers/apache/beam/operators/test_beam.py:333:36: PLC1901 `operator.go_file == ""` can be simplified to `not operator.go_file` as an empty string is falsey
- tests/providers/apache/beam/operators/test_beam.py:354:36: PLC1901 `operator.go_file == ""` can be simplified to `not operator.go_file` as an empty string is falsey
- tests/providers/apache/pig/hooks/test_pig.py:54:26: PLC1901 `stdout == ""` can be simplified to `not stdout` as an empty string is falsey
- tests/providers/apache/pig/hooks/test_pig.py:82:26: PLC1901 `stdout == ""` can be simplified to `not stdout` as an empty string is falsey
- tests/providers/cncf/kubernetes/operators/test_pod.py:1183:35: PLC1901 `caplog.text == ""` can be simplified to `not caplog.text` as an empty string is falsey
- tests/providers/cncf/kubernetes/operators/test_pod.py:1193:31: PLC1901 `caplog.text == ""` can be simplified to `not caplog.text` as an empty string is falsey
- tests/providers/cncf/kubernetes/operators/test_pod.py:1203:31: PLC1901 `caplog.text == ""` can be simplified to `not caplog.text` as an empty string is falsey
- tests/providers/cncf/kubernetes/operators/test_pod.py:1218:31: PLC1901 `caplog.text == ""` can be simplified to `not caplog.text` as an empty string is falsey
- tests/providers/elasticsearch/log/elasticmock/fake_elasticsearch.py:372:46: PLC1901 `target == ""` can be simplified to `not target` as an empty string is falsey
- tests/providers/google/cloud/operators/test_bigquery.py:744:16: PLC1901 `"" == bigquery_task.get_extra_links(ti, BigQueryConsoleLink.name)` can be simplified to `not bigquery_task.get_extra_links(ti, BigQueryConsoleLink.name)` as an empty string is falsey
- tests/providers/google/cloud/operators/test_dataproc.py:1191:62: PLC1901 `ti.task.get_extra_links(ti, DataprocLink.name) == ""` can be simplified to `not ti.task.get_extra_links(ti, DataprocLink.name)` as an empty string is falsey
- tests/providers/google/cloud/operators/test_dataproc.py:1194:72: PLC1901 `deserialized_task.get_extra_links(ti, DataprocLink.name) == ""` can be simplified to `not deserialized_task.get_extra_links(ti, DataprocLink.name)` as an empty string is falsey
- tests/providers/google/cloud/operators/test_dataproc.py:1348:62: PLC1901 `ti.task.get_extra_links(ti, DataprocLink.name) == ""` can be simplified to `not ti.task.get_extra_links(ti, DataprocLink.name)` as an empty string is falsey
- tests/providers/google/cloud/operators/test_dataproc.py:1351:72: PLC1901 `deserialized_task.get_extra_links(ti, DataprocLink.name) == ""` can be simplified to `not deserialized_task.get_extra_links(ti, DataprocLink.name)` as an empty string is falsey
- tests/providers/google/cloud/operators/test_dataproc.py:1454:62: PLC1901 `ti.task.get_extra_links(ti, DataprocLink.name) == ""` can be simplified to `not ti.task.get_extra_links(ti, DataprocLink.name)` as an empty string is falsey
- tests/providers/google/cloud/operators/test_dataproc.py:1457:72: PLC1901 `deserialized_task.get_extra_links(ti, DataprocLink.name) == ""` can be simplified to `not deserialized_task.get_extra_links(ti, DataprocLink.name)` as an empty string is falsey
- tests/providers/google/cloud/operators/test_dataproc.py:1554:62: PLC1901 `ti.task.get_extra_links(ti, DataprocLink.name) == ""` can be simplified to `not ti.task.get_extra_links(ti, DataprocLink.name)` as an empty string is falsey
- tests/providers/google/cloud/operators/test_dataproc.py:1557:72: PLC1901 `deserialized_task.get_extra_links(ti, DataprocLink.name) == ""` can be simplified to `not deserialized_task.get_extra_links(ti, DataprocLink.name)` as an empty string is falsey
- tests/providers/google/cloud/operators/test_dataproc.py:1867:62: PLC1901 `ti.task.get_extra_links(ti, DataprocLink.name) == ""` can be simplified to `not ti.task.get_extra_links(ti, DataprocLink.name)` as an empty string is falsey
- tests/providers/google/cloud/operators/test_dataproc.py:1870:72: PLC1901 `deserialized_task.get_extra_links(ti, DataprocLink.name) == ""` can be simplified to `not deserialized_task.get_extra_links(ti, DataprocLink.name)` as an empty string is falsey
- tests/providers/google/cloud/operators/test_dataproc.py:748:62: PLC1901 `ti.task.get_extra_links(ti, DataprocLink.name) == ""` can be simplified to `not ti.task.get_extra_links(ti, DataprocLink.name)` as an empty string is falsey
- tests/providers/google/cloud/operators/test_dataproc.py:751:72: PLC1901 `deserialized_task.get_extra_links(ti, DataprocLink.name) == ""` can be simplified to `not deserialized_task.get_extra_links(ti, DataprocLink.name)` as an empty string is falsey
- tests/providers/google/cloud/operators/test_dataproc.py:841:62: PLC1901 `ti.task.get_extra_links(ti, DataprocLink.name) == ""` can be simplified to `not ti.task.get_extra_links(ti, DataprocLink.name)` as an empty string is falsey
- tests/providers/google/cloud/operators/test_dataproc.py:844:72: PLC1901 `deserialized_task.get_extra_links(ti, DataprocLink.name) == ""` can be simplified to `not deserialized_task.get_extra_links(ti, DataprocLink.name)` as an empty string is falsey
- tests/providers/microsoft/azure/transfers/test_sftp_to_wasb.py:88:29: PLC1901 `delimiter == ""` can be simplified to `not delimiter` as an empty string is falsey
- tests/providers/sftp/hooks/test_sftp.py:430:26: PLC1901 `output == ""` can be simplified to `not output` as an empty string is falsey
- tests/system/providers/docker/example_docker_copy_data.py:64:64: PLC1901 `task_output == ""` can be simplified to `not task_output` as an empty string is falsey
- tests/utils/test_logging_mixin.py:105:31: PLC1901 `log._buffer == ""` can be simplified to `not log._buffer` as an empty string is falsey
- tests/utils/test_logging_mixin.py:121:31: PLC1901 `log._buffer == ""` can be simplified to `not log._buffer` as an empty string is falsey
- tests/www/api/experimental/test_endpoints.py:436:39: PLC1901 `pool["description"] == ""` can be simplified to `not pool["description"]` as an empty string is falsey
- tests/www/test_utils.py:123:16: PLC1901 `"" == utils.get_params()` can be simplified to `not utils.get_params()` as an empty string is falsey
- tests/www/test_utils.py:218:16: PLC1901 `"" == rendered` can be simplified to `not rendered` as an empty string is falsey

bokeh (+0, -91)

- examples/server/app/movies/main.py:83:25: PLC1901 `director_val != ''` can be simplified to `director_val` as an empty string is falsey
- examples/server/app/movies/main.py:85:21: PLC1901 `cast_val != ''` can be simplified to `cast_val` as an empty string is falsey
- release/checks.py:102:45: PLC1901 `x != ""` can be simplified to `x` as an empty string is falsey
- src/bokeh/command/subcommands/serve.py:969:69: PLC1901 `server.address != ''` can be simplified to `server.address` as an empty string is falsey
- src/bokeh/command/subcommands/static.py:86:65: PLC1901 `server.address != ''` can be simplified to `server.address` as an empty string is falsey
- src/bokeh/plotting/_tools.py:188:20: PLC1901 `tool == ''` can be simplified to `not tool` as an empty string is falsey
- src/bokeh/server/server.py:275:57: PLC1901 `self.address != ''` can be simplified to `self.address` as an empty string is falsey
- src/bokeh/server/util.py:151:28: PLC1901 `parts[0] == ''` can be simplified to `not parts[0]` as an empty string is falsey
- src/bokeh/server/util.py:159:28: PLC1901 `parts[0] == ''` can be simplified to `not parts[0]` as an empty string is falsey
- tests/integration/widgets/test_autocomplete_input.py:266:36: PLC1901 `text_input.value == ""` can be simplified to `not text_input.value` as an empty string is falsey
- tests/integration/widgets/test_autocomplete_input.py:86:51: PLC1901 `el.get_attribute("placeholder") == ""` can be simplified to `not el.get_attribute("placeholder")` as an empty string is falsey
- tests/integration/widgets/test_multi_choice.py:78:51: PLC1901 `el.get_attribute("placeholder") == ""` can be simplified to `not el.get_attribute("placeholder")` as an empty string is falsey
- tests/integration/widgets/test_numeric_input.py:86:27: PLC1901 `el.text == ""` can be simplified to `not el.text` as an empty string is falsey
- tests/integration/widgets/test_password_input.py:72:51: PLC1901 `el.get_attribute("placeholder") == ""` can be simplified to `not el.get_attribute("placeholder")` as an empty string is falsey
- tests/integration/widgets/test_password_input.py:82:27: PLC1901 `el.text == ""` can be simplified to `not el.text` as an empty string is falsey
- tests/integration/widgets/test_select.py:117:27: PLC1901 `el.text == ""` can be simplified to `not el.text` as an empty string is falsey
- tests/integration/widgets/test_select.py:135:27: PLC1901 `el.text == ""` can be simplified to `not el.text` as an empty string is falsey
- tests/integration/widgets/test_select.py:157:33: PLC1901 `label_el.text == ""` can be simplified to `not label_el.text` as an empty string is falsey
- tests/integration/widgets/test_select.py:181:27: PLC1901 `el.text == ""` can be simplified to `not el.text` as an empty string is falsey
- tests/integration/widgets/test_select.py:203:33: PLC1901 `label_el.text == ""` can be simplified to `not label_el.text` as an empty string is falsey
- tests/integration/widgets/test_select.py:62:27: PLC1901 `el.text == ""` can be simplified to `not el.text` as an empty string is falsey
- tests/integration/widgets/test_select.py:80:27: PLC1901 `el.text == ""` can be simplified to `not el.text` as an empty string is falsey
- tests/integration/widgets/test_select.py:99:27: PLC1901 `el.text == ""` can be simplified to `not el.text` as an empty string is falsey
- tests/integration/widgets/test_text_input.py:72:51: PLC1901 `el.get_attribute("placeholder") == ""` can be simplified to `not el.get_attribute("placeholder")` as an empty string is falsey
- tests/integration/widgets/test_text_input.py:82:27: PLC1901 `el.text == ""` can be simplified to `not el.text` as an empty string is falsey
- tests/unit/bokeh/command/subcommands/test_info.py:77:24: PLC1901 `lines[8] == ""` can be simplified to `not lines[8]` as an empty string is falsey
- tests/unit/bokeh/command/subcommands/test_info.py:78:19: PLC1901 `err == ""` can be simplified to `not err` as an empty string is falsey
- tests/unit/bokeh/command/subcommands/test_info.py:83:19: PLC1901 `err == ""` can be simplified to `not err` as an empty string is falsey
- tests/unit/bokeh/command/subcommands/test_json__subcommands.py:101:23: PLC1901 `out == ""` can be simplified to `not out` as an empty string is falsey
- tests/unit/bokeh/command/subcommands/test_json__subcommands.py:108:23: PLC1901 `err == ""` can be simplified to `not err` as an empty string is falsey
- tests/unit/bokeh/command/subcommands/test_json__subcommands.py:109:23: PLC1901 `out == ""` can be simplified to `not out` as an empty string is falsey
- tests/unit/bokeh/command/subcommands/test_json__subcommands.py:120:23: PLC1901 `err == ""` can be simplified to `not err` as an empty string is falsey
- tests/unit/bokeh/command/subcommands/test_json__subcommands.py:121:23: PLC1901 `out == ""` can be simplified to `not out` as an empty string is falsey
- tests/unit/bokeh/command/subcommands/test_json__subcommands.py:132:23: PLC1901 `err == ""` can be simplified to `not err` as an empty string is falsey
- tests/unit/bokeh/command/subcommands/test_json__subcommands.py:133:23: PLC1901 `out == ""` can be simplified to `not out` as an empty string is falsey
- tests/unit/bokeh/command/subcommands/test_secret.py:58:19: PLC1901 `err == ""` can be simplified to `not err` as an empty string is falsey
- tests/unit/bokeh/command/test_bootstrap.py:54:19: PLC1901 `out == ""` can be simplified to `not out` as an empty string is falsey
- tests/unit/bokeh/command/test_util__command.py:47:19: PLC1901 `out == ""` can be simplified to `not out` as an empty string is falsey
- tests/unit/bokeh/core/property/test_bases.py:125:23: PLC1901 `err == ''` can be simplified to `not err` as an empty string is falsey
- tests/unit/bokeh/core/property/test_bases.py:137:23: PLC1901 `err == ''` can be simplified to `not err` as an empty string is falsey
- tests/unit/bokeh/core/property/test_bases.py:163:23: PLC1901 `err == ''` can be simplified to `not err` as an empty string is falsey
- tests/unit/bokeh/core/property/test_bases.py:178:23: PLC1901 `err == ''` can be simplified to `not err` as an empty string is falsey
- tests/unit/bokeh/core/property/test_bases.py:195:23: PLC1901 `err == ''` can be simplified to `not err` as an empty string is falsey
- tests/unit/bokeh/core/property/test_bases.py:212:23: PLC1901 `err == ''` can be simplified to `not err` as an empty string is falsey
- tests/unit/bokeh/core/property/test_validation__property.py:270:33: PLC1901 `str(e.value) == ''` can be simplified to `not str(e.value)` as an empty string is falsey
- tests/unit/bokeh/core/property/test_validation__property.py:275:33: PLC1901 `str(e.value) == ''` can be simplified to `not str(e.value)` as an empty string is falsey
- tests/unit/bokeh/core/property/test_validation__property.py:280:33: PLC1901 `str(e.value) == ''` can be simplified to `not str(e.value)` as an empty string is falsey
- tests/unit/bokeh/core/property/test_validation__property.py:285:33: PLC1901 `str(e.value) == ''` can be simplified to `not str(e.value)` as an empty string is falsey
- tests/unit/bokeh/core/property/test_validation__property.py:290:33: PLC1901 `str(e.value) == ''` can be simplified to `not str(e.value)` as an empty string is falsey
- tests/unit/bokeh/core/property/test_validation__property.py:295:33: PLC1901 `str(e.value) == ''` can be simplified to `not str(e.value)` as an empty string is falsey
- tests/unit/bokeh/core/property/test_validation__property.py:300:33: PLC1901 `str(e.value) == ''` can be simplified to `not str(e.value)` as an empty string is falsey
- tests/unit/bokeh/core/property/test_validation__property.py:305:33: PLC1901 `str(e.value) == ''` can be simplified to `not str(e.value)` as an empty string is falsey
- tests/unit/bokeh/core/property/test_validation__property.py:312:33: PLC1901 `str(e.value) == ''` can be simplified to `not str(e.value)` as an empty string is falsey
- tests/unit/bokeh/core/property/test_validation__property.py:317:33: PLC1901 `str(e.value) == ''` can be simplified to `not str(e.value)` as an empty string is falsey
- tests/unit/bokeh/core/property/test_validation__property.py:322:33: PLC1901 `str(e.value) == ''` can be simplified to `not str(e.value)` as an empty string is falsey
- tests/unit/bokeh/core/property/test_validation__property.py:327:33: PLC1901 `str(e.value) == ''` can be simplified to `not str(e.value)` as an empty string is falsey
- tests/unit/bokeh/core/property/test_validation__property.py:334:33: PLC1901 `str(e.value) == ''` can be simplified to `not str(e.value)` as an empty string is falsey
- tests/unit/bokeh/core/property/test_validation__property.py:339:33: PLC1901 `str(e.value) == ''` can be simplified to `not str(e.value)` as an empty string is falsey
- tests/unit/bokeh/core/property/test_validation__property.py:344:33: PLC1901 `str(e.value) == ''` can be simplified to `not str(e.value)` as an empty string is falsey
- tests/unit/bokeh/core/property/test_validation__property.py:349:33: PLC1901 `str(e.value) == ''` can be simplified to `not str(e.value)` as an empty string is falsey
- tests/unit/bokeh/core/property/test_validation__property.py:354:33: PLC1901 `str(e.value) == ''` can be simplified to `not str(e.value)` as an empty string is falsey
- tests/unit/bokeh/core/property/test_validation__property.py:359:33: PLC1901 `str(e.value) == ''` can be simplified to `not str(e.value)` as an empty string is falsey
- tests/unit/bokeh/core/property/test_validation__property.py:364:33: PLC1901 `str(e.value) == ''` can be simplified to `not str(e.value)` as an empty string is falsey
- tests/unit/bokeh/core/property/test_validation__property.py:369:33: PLC1901 `str(e.value) == ''` can be simplified to `not str(e.value)` as an empty string is falsey
- tests/unit/bokeh/core/property/test_validation__property.py:374:33: PLC1901 `str(e.value) == ''` can be simplified to `not str(e.value)` as an empty string is falsey
- tests/unit/bokeh/core/property/test_validation__property.py:379:33: PLC1901 `str(e.value) == ''` can be simplified to `not str(e.value)` as an empty string is falsey
- tests/unit/bokeh/core/property/test_validation__property.py:384:33: PLC1901 `str(e.value) == ''` can be simplified to `not str(e.value)` as an empty string is falsey
- tests/unit/bokeh/core/property/test_validation__property.py:389:33: PLC1901 `str(e.value) == ''` can be simplified to `not str(e.value)` as an empty string is falsey
- tests/unit/bokeh/core/property/test_validation__property.py:397:33: PLC1901 `str(e.value) == ''` can be simplified to `not str(e.value)` as an empty string is falsey
- tests/unit/bokeh/document/test_callbacks__document.py:142:35: PLC1901 `caplog.text == ""` can be simplified to `not caplog.text` as an empty string is falsey
- tests/unit/bokeh/document/test_callbacks__document.py:146:35: PLC1901 `caplog.text == ""` can be simplified to `not caplog.text` as an empty string is falsey
- tests/unit/bokeh/embed/test_server__embed.py:209:48: PLC1901 `bes._process_arguments(None) == ""` can be simplified to `not bes._process_arguments(None)` as an empty string is falsey
- tests/unit/bokeh/embed/test_server__embed.py:227:46: PLC1901 `bes._process_app_path("/") == ""` can be simplified to `not bes._process_app_path("/")` as an empty string is falsey
- tests/unit/bokeh/embed/test_server__embed.py:235:56: PLC1901 `bes._process_relative_urls(True, "") == ""` can be simplified to `not bes._process_relative_urls(True, "")` as an empty string is falsey
- tests/unit/bokeh/embed/test_server__embed.py:236:62: PLC1901 `bes._process_relative_urls(True, "/stuff") == ""` can be simplified to `not bes._process_relative_urls(True, "/stuff")` as an empty string is falsey
- tests/unit/bokeh/embed/test_server__embed.py:251:53: PLC1901 `bes._process_resources("default") == ""` can be simplified to `not bes._process_resources("default")` as an empty string is falsey
- tests/unit/bokeh/embed/test_standalone.py:124:57: PLC1901 `script.get_attribute("integrity") == ""` can be simplified to `not script.get_attribute("integrity")` as an empty string is falsey
- tests/unit/bokeh/embed/test_standalone.py:150:57: PLC1901 `script.get_attribute("integrity") == ""` can be simplified to `not script.get_attribute("integrity")` as an empty string is falsey
- tests/unit/bokeh/embed/test_standalone.py:173:57: PLC1901 `script.get_attribute("integrity") == ""` can be simplified to `not script.get_attribute("integrity")` as an empty string is falsey
- tests/unit/bokeh/embed/test_standalone.py:194:57: PLC1901 `script.get_attribute("integrity") == ""` can be simplified to `not script.get_attribute("integrity")` as an empty string is falsey
- tests/unit/bokeh/embed/test_standalone.py:418:39: PLC1901 `out["doc"]["title"] == ""` can be simplified to `not out["doc"]["title"]` as an empty string is falsey
- tests/unit/bokeh/embed/test_util__embed.py:549:35: PLC1901 `caplog.text != ''` can be simplified to `caplog.text` as an empty string is falsey
- tests/unit/bokeh/embed/test_util__embed.py:563:35: PLC1901 `caplog.text != ''` can be simplified to `caplog.text` as an empty string is falsey
- tests/unit/bokeh/embed/test_util__embed.py:581:35: PLC1901 `caplog.text == ''` can be simplified to `not caplog.text` as an empty string is falsey
- tests/unit/bokeh/models/test_annotations.py:325:26: PLC1901 `label.text == ""` can be simplified to `not label.text` as an empty string is falsey
- tests/unit/bokeh/models/test_annotations.py:480:26: PLC1901 `title.text == ""` can be simplified to `not title.text` as an empty string is falsey
- tests/unit/bokeh/models/test_plots.py:270:31: PLC1901 `plot.title.text == ''` can be simplified to `not plot.title.text` as an empty string is falsey
- tests/unit/bokeh/models/test_transforms.py:38:40: PLC1901 `custom_js_transform.func == ""` can be simplified to `not custom_js_transform.func` as an empty string is falsey
- tests/unit/bokeh/models/test_transforms.py:39:42: PLC1901 `custom_js_transform.v_func == ""` can be simplified to `not custom_js_transform.v_func` as an empty string is falsey
- tests/unit/bokeh/server/test_server__server.py:152:33: PLC1901 `server.prefix == ""` can be simplified to `not server.prefix` as an empty string is falsey
- tests/unit/bokeh/server/test_tornado__server.py:114:42: PLC1901 `server._tornado.prefix == ""` can be simplified to `not server._tornado.prefix` as an empty string is falsey

zulip (+0, -93)

- tools/documentation_crawler/documentation_crawler/spiders/common/spiders.py:184:36: PLC1901 `split_url.fragment != ""` can be simplified to `split_url.fragment` as an empty string is falsey
- tools/lib/html_branches.py:66:21: PLC1901 `s != ""` can be simplified to `s` as an empty string is falsey
- tools/lib/html_branches.py:71:13: PLC1901 `s != ""` can be simplified to `s` as an empty string is falsey
- tools/lib/template_parser.py:126:25: PLC1901 `s == ""` can be simplified to `not s` as an empty string is falsey
- tools/lib/template_parser.py:234:25: PLC1901 `s == ""` can be simplified to `not s` as an empty string is falsey
- zerver/actions/default_streams.py:20:30: PLC1901 `group_name.strip() == ""` can be simplified to `not group_name.strip()` as an empty string is falsey
- zerver/actions/invites.py:244:21: PLC1901 `email == ""` can be simplified to `not email` as an empty string is falsey
- zerver/actions/message_edit.py:1227:32: PLC1901 `content.rstrip() == ""` can be simplified to `not content.rstrip()` as an empty string is falsey
- zerver/actions/streams.py:1166:31: PLC1901 `new_description == ""` can be simplified to `not new_description` as an empty string is falsey
- zerver/actions/streams.py:1168:31: PLC1901 `old_description == ""` can be simplified to `not old_description` as an empty string is falsey
- zerver/data_import/slack.py:414:30: PLC1901 `value["value"] == ""` can be simplified to `not value["value"]` as an empty string is falsey
- zerver/lib/camo.py:19:29: PLC1901 `settings.CAMO_URI == ""` can be simplified to `not settings.CAMO_URI` as an empty string is falsey
- zerver/lib/email_mirror.py:130:42: PLC1901 `settings.EMAIL_GATEWAY_PATTERN == ""` can be simplified to `not settings.EMAIL_GATEWAY_PATTERN` as an empty string is falsey
- zerver/lib/email_mirror.py:168:21: PLC1901 `postamble != ""` can be simplified to `postamble` as an empty string is falsey
- zerver/lib/email_mirror_helpers.py:55:42: PLC1901 `settings.EMAIL_GATEWAY_PATTERN == ""` can be simplified to `not settings.EMAIL_GATEWAY_PATTERN` as an empty string is falsey
- zerver/lib/email_notifications.py:700:19: PLC1901 `user_tz == ""` can be simplified to `not user_tz` as an empty string is falsey
- zerver/lib/events.py:1403:31: PLC1901 `status_text == ""` can be simplified to `not status_text` as an empty string is falsey
- zerver/lib/events.py:1409:34: PLC1901 `emoji_name == ""` can be simplified to `not emoji_name` as an empty string is falsey
- zerver/lib/events.py:1415:38: PLC1901 `emoji_code == ""` can be simplified to `not emoji_code` as an empty string is falsey
- zerver/lib/events.py:1421:84: PLC1901 `emoji_name == ""` can be simplified to `not emoji_name` as an empty string is falsey
- zerver/lib/generate_test_data.py:196:20: PLC1901 `text != ""` can be simplified to `text` as an empty string is falsey
- zerver/lib/markdown/__init__.py:1172:28: PLC1901 `host != ""` can be simplified to `host` as an empty string is falsey
- zerver/lib/markdown/__init__.py:1229:26: PLC1901 `netloc == ""` can be simplified to `not netloc` as an empty string is falsey
- zerver/lib/markdown/__init__.py:1497:18: PLC1901 `scheme == ""` can be simplified to `not scheme` as an empty string is falsey
- zerver/lib/markdown/__init__.py:1497:35: PLC1901 `netloc == ""` can be simplified to `not netloc` as an empty string is falsey
- zerver/lib/markdown/__init__.py:1499:20: PLC1901 `scheme == ""` can be simplified to `not scheme` as an empty string is falsey
- zerver/lib/markdown/__init__.py:1499:37: PLC1901 `netloc == ""` can be simplified to `not netloc` as an empty string is falsey
- zerver/lib/markdown/api_arguments_table_generator.py:91:70: PLC1901 `get_parameters_description(endpoint, method) == ""` can be simplified to `not get_parameters_description(endpoint, method)` as an empty string is falsey
- zerver/lib/markdown/fenced_code.py:439:46: PLC1901 `output[-2] != ""` can be simplified to `output[-2]` as an empty string is falsey
- zerver/lib/outgoing_webhook.py:320:25: PLC1901 `response_json == ""` can be simplified to `not response_json` as an empty string is falsey
- zerver/lib/outgoing_webhook.py:336:46: PLC1901 `content.strip() == ""` can be simplified to `not content.strip()` as an empty string is falsey
- zerver/lib/rate_limiter.py:130:32: PLC1901 `self.rate_limits != ""` can be simplified to `self.rate_limits` as an empty string is falsey
- zerver/lib/string_validation.py:37:31: PLC1901 `stream_name.strip() == ""` can be simplified to `not stream_name.strip()` as an empty string is falsey
- zerver/lib/string_validation.py:53:25: PLC1901 `topic.strip() == ""` can be simplified to `not topic.strip()` as an empty string is falsey
- zerver/lib/subdomains.py:79:28: PLC1901 `split_url.netloc == ""` can be simplified to `not split_url.netloc` as an empty string is falsey
- zerver/lib/subdomains.py:79:55: PLC1901 `split_url.scheme == ""` can be simplified to `not split_url.scheme` as an empty string is falsey
- zerver/lib/upload/__init__.py:41:48: PLC1901 `content_type == ""` can be simplified to `not content_type` as an empty string is falsey
- zerver/lib/url_preview/parsers/generic.py:20:46: PLC1901 `soup.title.text != ""` can be simplified to `soup.title.text` as an empty string is falsey
- zerver/lib/url_preview/parsers/generic.py:22:40: PLC1901 `soup.h1.text != ""` can be simplified to `soup.h1.text` as an empty string is falsey
- zerver/lib/url_preview/parsers/generic.py:29:89: PLC1901 `meta_description.get("content", "") != ""` can be simplified to `meta_description.get("content", "")` as an empty string is falsey
- zerver/lib/url_preview/parsers/generic.py:35:44: PLC1901 `first_p.text != ""` can be simplified to `first_p.text` as an empty string is falsey
- zerver/lib/url_preview/parsers/generic.py:38:40: PLC1901 `first_p.text != ""` can be simplified to `first_p.text` as an empty string is falsey
- zerver/lib/url_preview/parsers/generic.py:51:71: PLC1901 `first_image["src"] != ""` can be simplified to `first_image["src"]` as an empty string is falsey
- zerver/lib/zephyr.py:14:31: PLC1901 `hesiod_name != ""` can be simplified to `hesiod_name` as an empty string is falsey
- zerver/management/commands/compilemessages.py:150:29: PLC1901 `value == ""` can be simplified to `not value` as an empty string is falsey
- zerver/management/commands/list_realms.py:34:75: PLC1901 `realm.string_id != ""` can be simplified to `realm.string_id` as an empty string is falsey
- zerver/management/commands/register_server.py:77:68: PLC1901 `tos_prompt.lower() == ""` can be simplified to `not tos_prompt.lower()` as an empty string is falsey
- zerver/migrations/0371_invalid_characters_in_topics.py:53:35: PLC1901 `fixed_topic == ""` can be simplified to `not fixed_topic` as an empty string is falsey
- zerver/migrations/0373_fix_deleteduser_dummies.py:13:21: PLC1901 `subdomain == ""` can be simplified to `not subdomain` as an empty string is falsey
- zerver/migrations/0375_invalid_characters_in_stream_names.py:48:37: PLC1901 `fixed_stream_name == ""` can be simplified to `not fixed_stream_name` as an empty string is falsey
- zerver/migrations/0439_fix_deleteduser_email.py:22:21: PLC1901 `subdomain == ""` can be simplified to `not subdomain` as an empty string is falsey
- zerver/models.py:4420:41: PLC1901 `self.topic_name() == ""` can be simplified to `not self.topic_name()` as an empty string is falsey
- zerver/models.py:972:30: PLC1901 `self.string_id == ""` can be simplified to `not self.string_id` as an empty string is falsey
- zerver/signals.py:87:23: PLC1901 `user_tz == ""` can be simplified to `not user_tz` as an empty string is falsey
- zerver/tests/test_auth_backends.py:942:25: PLC1901 `subdomain == ""` can be simplified to `not subdomain` as an empty string is falsey
- zerver/tests/test_email_notifications.py:597:46: PLC1901 `settings.EMAIL_GATEWAY_PATTERN != ""` can be simplified to `settings.EMAIL_GATEWAY_PATTERN` as an empty string is falsey
- zerver/tests/test_outgoing_webhook_system.py:102:27: PLC1901 `content == ""` can be simplified to `not content` as an empty string is falsey
- zerver/tests/test_upload.py:978:39: PLC1901 `content_disposition != ""` can be simplified to `content_disposition` as an empty string is falsey
- zerver/views/alert_words.py:19:44: PLC1901 `w != ""` can be simplified to `w` as an empty string is falsey
- zerver/views/documentation.py:76:23: PLC1901 `article == ""` can be simplified to `not article` as an empty string is falsey
- zerver/views/presence.py:87:22: PLC1901 `emoji_name == ""` can be simplified to `not emoji_name` as an empty string is falsey
- zerver/views/push_notifications.py:18:21: PLC1901 `token_str == ""` can be simplified to `not token_str` as an empty string is falsey
- zerver/views/realm.py:326:43: PLC1901 `default_code_block_language == ""` can be simplified to `not default_code_block_language` as an empty string is falsey
- zerver/views/streams.py:792:42: PLC1901 `stream.description == ""` can be simplified to `not stream.description` as an empty string is falsey
- zerver/views/users.py:243:89: PLC1901 `full_name.strip() != ""` can be simplified to `full_name.strip()` as an empty string is falsey
- zerver/views/users.py:390:38: PLC1901 `default_sending_stream == ""` can be simplified to `not default_sending_stream` as an empty string is falsey
- zerver/views/users.py:396:46: PLC1901 `default_events_register_stream == ""` can be simplified to `not default_events_register_stream` as an empty string is falsey
- zerver/webhooks/clubhouse/view.py:470:26: PLC1901 `label_name == ""` can be simplified to `not label_name` as an empty string is falsey
- zerver/webhooks/jira/view.py:130:26: PLC1901 `assignee_email != ""` can be simplified to `assignee_email` as an empty string is falsey
- zerver/webhooks/jira/view.py:175:21: PLC1901 `sub_event == ""` can be simplified to `not sub_event` as an empty string is falsey
- zerver/webhooks/jira/view.py:213:28: PLC1901 `assignee_mention != ""` can be simplified to `assignee_mention` as an empty string is falsey
- zerver/webhooks/jira/view.py:249:64: PLC1901 `assignee_mention != ""` can be simplified to `assignee_mention` as an empty string is falsey
- zerver/webhooks/newrelic/view.py:137:29: PLC1901 `info["owner"] != ""` can be simplified to `info["owner"]` as an empty string is falsey
- zerver/webhooks/newrelic/view.py:86:29: PLC1901 `info["owner"] != ""` can be simplified to `info["owner"]` as an empty string is falsey
- zerver/webhooks/opbeat/view.py:69:20: PLC1901 `title[0] != ""` can be simplified to `title[0]` as an empty string is falsey
- zerver/webhooks/pivotal/view.py:59:24: PLC1901 `estimate != ""` can be simplified to `estimate` as an empty string is falsey
- zerver/webhooks/raygun/view.py:104:56: PLC1901 `message != ""` can be simplified to `message` as an empty string is falsey
- zerver/webhooks/sentry/view.py:101:31: PLC1901 `syntax_highlight_as == ""` can be simplified to `not syntax_highlight_as` as an empty string is falsey
- zerver/webhooks/sentry/view.py:88:24: PLC1901 `line == ""` can be simplified to `not line` as an empty string is falsey
- zerver/webhooks/slack_incoming/view.py:103:82: PLC1901 `piece.strip() != ""` can be simplified to `piece.strip()` as an empty string is falsey
- zerver/webhooks/slack_incoming/view.py:147:82: PLC1901 `piece.strip() != ""` can be simplified to `piece.strip()` as an empty string is falsey
- zerver/webhooks/slack_incoming/view.py:231:78: PLC1901 `piece.strip() != ""` can be simplified to `piece.strip()` as an empty string is falsey
- zerver/webhooks/slack_incoming/view.py:70:78: PLC1901 `piece.strip() != ""` can be simplified to `piece.strip()` as an empty string is falsey
- zerver/webhooks/slack_incoming/view.py:72:16: PLC1901 `body == ""` can be simplified to `not body` as an empty string is falsey
- zerver/webhooks/slack_incoming/view.py:78:16: PLC1901 `body != ""` can be simplified to `body` as an empty string is falsey
- zerver/webhooks/thinkst/view.py:52:80: PLC1901 `message["ReverseDNS"].tame(check_string) != ""` can be simplified to `message["ReverseDNS"].tame(check_string)` as an empty string is falsey
- zerver/webhooks/trello/view/card_actions.py:94:70: PLC1901 `old_data.get("desc").tame(check_none_or(check_string)) == ""` can be simplified to `not old_data.get("desc").tame(check_none_or(check_string))` as an empty string is falsey
- zerver/webhooks/trello/view/card_actions.py:97:75: PLC1901 `card_data.get("desc").tame(check_none_or(check_string)) == ""` can be simplified to `not card_data.get("desc").tame(check_none_or(check_string))` as an empty string is falsey
- zproject/backends.py:455:20: PLC1901 `password == ""` can be simplified to `not password` as an empty string is falsey
- zproject/backends.py:495:24: PLC1901 `password == ""` can be simplified to `not password` as an empty string is falsey
- zproject/computed_settings.py:295:30: PLC1901 `REMOTE_POSTGRES_HOST != ""` can be simplified to `REMOTE_POSTGRES_HOST` as an empty string is falsey
- zproject/computed_settings.py:304:35: PLC1901 `REMOTE_POSTGRES_SSLMODE != ""` can be simplified to `REMOTE_POSTGRES_SSLMODE` as an empty string is falsey
- zproject/computed_settings.py:523:50: PLC1901 `CAMO_URI != ""` can be simplified to `CAMO_URI` as an empty string is falsey

Rules changed: 1
Rule Changes Additions Removals
PLC1901 304 0 304

Benchmark

Linux

group                                      main                                   pr
-----                                      ----                                   --
formatter/large/dataset.py                 1.02      7.1±0.03ms     5.8 MB/sec    1.00      6.9±0.01ms     5.9 MB/sec
formatter/numpy/ctypeslib.py               1.02   1409.5±2.08µs    11.8 MB/sec    1.00   1387.8±4.05µs    12.0 MB/sec
formatter/numpy/globals.py                 1.02    136.2±0.20µs    21.7 MB/sec    1.00    134.0±0.21µs    22.0 MB/sec
formatter/pydantic/types.py                1.01      2.9±0.01ms     8.7 MB/sec    1.00      2.9±0.00ms     8.8 MB/sec
linter/all-rules/large/dataset.py          1.00     13.7±0.04ms     3.0 MB/sec    1.01     13.8±0.05ms     3.0 MB/sec
linter/all-rules/numpy/ctypeslib.py        1.00      3.5±0.00ms     4.8 MB/sec    1.00      3.5±0.00ms     4.8 MB/sec
linter/all-rules/numpy/globals.py          1.00   369.4±13.19µs     8.0 MB/sec    1.00    370.8±3.86µs     8.0 MB/sec
linter/all-rules/pydantic/types.py         1.00      6.1±0.01ms     4.2 MB/sec    1.01      6.1±0.02ms     4.2 MB/sec
linter/default-rules/large/dataset.py      1.00      7.1±0.01ms     5.8 MB/sec    1.00      7.1±0.01ms     5.8 MB/sec
linter/default-rules/numpy/ctypeslib.py    1.00   1467.9±2.91µs    11.3 MB/sec    1.01   1476.0±2.31µs    11.3 MB/sec
linter/default-rules/numpy/globals.py      1.00    154.7±0.35µs    19.1 MB/sec    1.02    157.9±0.29µs    18.7 MB/sec
linter/default-rules/pydantic/types.py     1.00      3.2±0.00ms     8.0 MB/sec    1.01      3.2±0.01ms     8.0 MB/sec

Windows

group                                      main                                   pr
-----                                      ----                                   --
formatter/large/dataset.py                 1.00      7.9±0.02ms     5.1 MB/sec    1.00      7.9±0.03ms     5.1 MB/sec
formatter/numpy/ctypeslib.py               1.00   1560.1±9.45µs    10.7 MB/sec    1.01  1570.2±11.66µs    10.6 MB/sec
formatter/numpy/globals.py                 1.00    152.4±1.42µs    19.4 MB/sec    1.00    153.1±1.98µs    19.3 MB/sec
formatter/pydantic/types.py                1.00      3.3±0.02ms     7.8 MB/sec    1.00      3.3±0.02ms     7.7 MB/sec
linter/all-rules/large/dataset.py          1.00     15.1±0.15ms     2.7 MB/sec    1.00     15.1±0.06ms     2.7 MB/sec
linter/all-rules/numpy/ctypeslib.py        1.00      4.0±0.03ms     4.1 MB/sec    1.01      4.1±0.02ms     4.1 MB/sec
linter/all-rules/numpy/globals.py          1.00    419.7±9.76µs     7.0 MB/sec    1.00    420.2±4.81µs     7.0 MB/sec
linter/all-rules/pydantic/types.py         1.00      6.8±0.05ms     3.7 MB/sec    1.00      6.8±0.03ms     3.8 MB/sec
linter/default-rules/large/dataset.py      1.00      7.9±0.09ms     5.2 MB/sec    1.03      8.1±0.26ms     5.0 MB/sec
linter/default-rules/numpy/ctypeslib.py    1.00  1629.5±11.31µs    10.2 MB/sec    1.06  1724.7±80.55µs     9.7 MB/sec
linter/default-rules/numpy/globals.py      1.00    172.5±1.49µs    17.1 MB/sec    1.02    176.7±1.05µs    16.7 MB/sec
linter/default-rules/pydantic/types.py     1.00      3.6±0.04ms     7.2 MB/sec    1.03      3.7±0.15ms     7.0 MB/sec

@charliermarsh charliermarsh merged commit 62e2c46 into main Jun 21, 2023
@charliermarsh charliermarsh deleted the charlie/nightly branch June 21, 2023 19:47
jankatins referenced this pull request in jankatins/pr-workflow-example Jun 22, 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://beta.ruff.rs/docs)
([source](https://github.com/astral-sh/ruff),
[changelog](https://github.com/astral-sh/ruff/releases)) | `0.0.274`
-> `0.0.275` |
[![age](https://badges.renovateapi.com/packages/pypi/ruff/0.0.275/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/pypi/ruff/0.0.275/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/pypi/ruff/0.0.275/compatibility-slim/0.0.274)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/pypi/ruff/0.0.275/confidence-slim/0.0.274)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>astral-sh/ruff</summary>

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

[Compare
Source](https://github.com/astral-sh/ruff/compare/v0.0.274...v0.0.275)

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

#### What's Changed

Highlights include a 7-10x decrease in Ruff's cache size.

##### Rules

- Add support for top-level quoted annotations in RUF013 by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5235](https://github.com/astral-sh/ruff/pull/5235)
- Add support for nested quoted annotations in RUF013 by
[@&#8203;dhruvmanila](https://github.com/dhruvmanila) in
[https://github.com/astral-sh/ruff/pull/5254](https://github.com/astral-sh/ruff/pull/5254)
- Move `compare-to-empty-string` (`PLC1901`) to nursery by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5264](https://github.com/astral-sh/ruff/pull/5264)
- Ignore Pydantic classes when evaluating `mutable-class-default`
(`RUF012`) by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5273](https://github.com/astral-sh/ruff/pull/5273)
- Allow `typing.Final` for `mutable-class-default annotations`
(`RUF012`) by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5274](https://github.com/astral-sh/ruff/pull/5274)
- Modify `deprecated-import` (`UP035`) to prefer `typing_extensions` in
some versions by [@&#8203;tjkuson](https://github.com/tjkuson) in
[https://github.com/astral-sh/ruff/pull/5291](https://github.com/astral-sh/ruff/pull/5291)

##### Bug Fixes

- Restore existing bindings when unbinding caught exceptions by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5256](https://github.com/astral-sh/ruff/pull/5256)
- Avoid including nursery rules in linter-level selectors by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5268](https://github.com/astral-sh/ruff/pull/5268)

#### New Contributors

- [@&#8203;jgberry](https://github.com/jgberry) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/5221](https://github.com/astral-sh/ruff/pull/5221)

**Full Changelog**:
astral-sh/ruff@v0.0.274...v0.0.275

</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://developer.mend.io/github/jankatins/pr-workflow-example).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNS4xMzEuMCIsInVwZGF0ZWRJblZlciI6IjM1LjEzMS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->
renovate bot referenced this pull request in ixm-one/pytest-cmake-presets Jun 22, 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://beta.ruff.rs/docs)
([source](https://github.com/astral-sh/ruff),
[changelog](https://github.com/astral-sh/ruff/releases)) | `^0.0.274`
-> `^0.0.275` |
[![age](https://badges.renovateapi.com/packages/pypi/ruff/0.0.275/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/pypi/ruff/0.0.275/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/pypi/ruff/0.0.275/compatibility-slim/0.0.274)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/pypi/ruff/0.0.275/confidence-slim/0.0.274)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>astral-sh/ruff</summary>

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

[Compare
Source](https://github.com/astral-sh/ruff/compare/v0.0.274...v0.0.275)

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

#### What's Changed

Highlights include a 7-10x decrease in Ruff's cache size.

##### Rules

- Add support for top-level quoted annotations in RUF013 by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5235](https://github.com/astral-sh/ruff/pull/5235)
- Add support for nested quoted annotations in RUF013 by
[@&#8203;dhruvmanila](https://github.com/dhruvmanila) in
[https://github.com/astral-sh/ruff/pull/5254](https://github.com/astral-sh/ruff/pull/5254)
- Move `compare-to-empty-string` (`PLC1901`) to nursery by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5264](https://github.com/astral-sh/ruff/pull/5264)
- Ignore Pydantic classes when evaluating `mutable-class-default`
(`RUF012`) by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5273](https://github.com/astral-sh/ruff/pull/5273)
- Allow `typing.Final` for `mutable-class-default annotations`
(`RUF012`) by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5274](https://github.com/astral-sh/ruff/pull/5274)
- Modify `deprecated-import` (`UP035`) to prefer `typing_extensions` in
some versions by [@&#8203;tjkuson](https://github.com/tjkuson) in
[https://github.com/astral-sh/ruff/pull/5291](https://github.com/astral-sh/ruff/pull/5291)

##### Bug Fixes

- Restore existing bindings when unbinding caught exceptions by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5256](https://github.com/astral-sh/ruff/pull/5256)
- Avoid including nursery rules in linter-level selectors by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5268](https://github.com/astral-sh/ruff/pull/5268)

#### New Contributors

- [@&#8203;jgberry](https://github.com/jgberry) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/5221](https://github.com/astral-sh/ruff/pull/5221)

**Full Changelog**:
astral-sh/ruff@v0.0.274...v0.0.275

</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://developer.mend.io/github/ixm-one/pytest-cmake-presets).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNS4xMzEuMCIsInVwZGF0ZWRJblZlciI6IjM1LjEzMS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
renovate bot referenced this pull request in allenporter/flux-local Jun 23, 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://beta.ruff.rs/docs)
([source](https://github.com/astral-sh/ruff),
[changelog](https://github.com/astral-sh/ruff/releases)) | `==0.0.272`
-> `==0.0.275` |
[![age](https://badges.renovateapi.com/packages/pypi/ruff/0.0.275/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/pypi/ruff/0.0.275/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/pypi/ruff/0.0.275/compatibility-slim/0.0.272)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/pypi/ruff/0.0.275/confidence-slim/0.0.272)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>astral-sh/ruff</summary>

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

[Compare
Source](https://github.com/astral-sh/ruff/compare/v0.0.274...v0.0.275)

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

#### What's Changed

Highlights include a 7-10x decrease in Ruff's cache size.

##### Rules

- Add support for top-level quoted annotations in RUF013 by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5235](https://github.com/astral-sh/ruff/pull/5235)
- Add support for nested quoted annotations in RUF013 by
[@&#8203;dhruvmanila](https://github.com/dhruvmanila) in
[https://github.com/astral-sh/ruff/pull/5254](https://github.com/astral-sh/ruff/pull/5254)
- Move `compare-to-empty-string` (`PLC1901`) to nursery by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5264](https://github.com/astral-sh/ruff/pull/5264)
- Ignore Pydantic classes when evaluating `mutable-class-default`
(`RUF012`) by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5273](https://github.com/astral-sh/ruff/pull/5273)
- Allow `typing.Final` for `mutable-class-default annotations`
(`RUF012`) by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5274](https://github.com/astral-sh/ruff/pull/5274)
- Modify `deprecated-import` (`UP035`) to prefer `typing_extensions` in
some versions by [@&#8203;tjkuson](https://github.com/tjkuson) in
[https://github.com/astral-sh/ruff/pull/5291](https://github.com/astral-sh/ruff/pull/5291)

##### Bug Fixes

- Restore existing bindings when unbinding caught exceptions by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5256](https://github.com/astral-sh/ruff/pull/5256)
- Avoid including nursery rules in linter-level selectors by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5268](https://github.com/astral-sh/ruff/pull/5268)

#### New Contributors

- [@&#8203;jgberry](https://github.com/jgberry) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/5221](https://github.com/astral-sh/ruff/pull/5221)

**Full Changelog**:
astral-sh/ruff@v0.0.274...v0.0.275

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

[Compare
Source](https://github.com/astral-sh/ruff/compare/v0.0.273...v0.0.274)

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

#### What's Changed

Follow-up release to `v0.0.273` to fix a panic in cache accesses.

##### Bug Fixes

- Use package roots rather than package members for cache initialization
by [@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5233](https://github.com/astral-sh/ruff/pull/5233)
- Avoid `.unwrap()` on cache access by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5229](https://github.com/astral-sh/ruff/pull/5229)
- Revert change to `RUF010` to remove unnecessary `str` calls by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5232](https://github.com/astral-sh/ruff/pull/5232)
- Avoid erroneous RUF013 violations for quoted annotations by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5234](https://github.com/astral-sh/ruff/pull/5234)

**Full Changelog**:
astral-sh/ruff@v0.0.273...v0.0.274

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

[Compare
Source](https://github.com/astral-sh/ruff/compare/v0.0.272...v0.0.273)

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

#### What's Changed

Highlights include:

- Autofix capabilities for rules like `flake8-import-conventions`, which
require symbol renames across a file.
- Significant decrease in Ruff's cache size (e.g., a ~50% decrease for
FastAPI).
-   Dozens and dozens of bug fixes + performance improvements.

##### Rules

- \[`copyright`] Implement copyright notice detection by
[@&#8203;Ryang20718](https://github.com/Ryang20718) in
[https://github.com/astral-sh/ruff/pull/4701](https://github.com/astral-sh/ruff/pull/4701)
- \[`flake8-datetimez`] Enable UTC-import for `datetime-utc-alias` fix
by [@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5100](https://github.com/astral-sh/ruff/pull/5100)
- \[`flake8-implicit-str-concat`] Add autofix for `ISC001` by
[@&#8203;tkukushkin](https://github.com/tkukushkin) in
[https://github.com/astral-sh/ruff/pull/4853](https://github.com/astral-sh/ruff/pull/4853)
- \[`flake8-import-conventions`] Enable autofix for unconventional
imports rule by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5152](https://github.com/astral-sh/ruff/pull/5152)
- \[`flake8-pyi`] Add autofix for `Set`-to-`AbstractSet` rewrite using
reference tracking by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5074](https://github.com/astral-sh/ruff/pull/5074)
- \[`flake8-pyi`] Implement PYI044 by
[@&#8203;Thomasdezeeuw](https://github.com/Thomasdezeeuw) in
[https://github.com/astral-sh/ruff/pull/5021](https://github.com/astral-sh/ruff/pull/5021)
- \[`flake8-return`] Extend revised `RET504` implementation to `with`
statements by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/4998](https://github.com/astral-sh/ruff/pull/4998)
- \[`flake8-return`] Implement autofix for revised `RET504` rule by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/4999](https://github.com/astral-sh/ruff/pull/4999)
- \[`flake8-return`] Refactor `RET504` to only enforce
assignment-then-return pattern by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/4997](https://github.com/astral-sh/ruff/pull/4997)
- \[`flake8-slots`] Add plugin, add `SLOT000`, `SLOT001` and `SLOT002`
by [@&#8203;qdegraaf](https://github.com/qdegraaf) in
[https://github.com/astral-sh/ruff/pull/4909](https://github.com/astral-sh/ruff/pull/4909)
- \[`perflint`] Add `perflint` plugin, add first rule `PERF102` by
[@&#8203;qdegraaf](https://github.com/qdegraaf) in
[https://github.com/astral-sh/ruff/pull/4821](https://github.com/astral-sh/ruff/pull/4821)
- \[`pylint`] Add Pylint rule `comparison-with-itself` (`R0124`) by
[@&#8203;tjkuson](https://github.com/tjkuson) in
[https://github.com/astral-sh/ruff/pull/4957](https://github.com/astral-sh/ruff/pull/4957)
- \[`pyupgrade`] Add a rule to remove unnecessary parentheses in class
definitions by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5032](https://github.com/astral-sh/ruff/pull/5032)
- \[`ruff`] Add a rule for static keys in dict comprehensions by
[@&#8203;rodjunger](https://github.com/rodjunger) in
[https://github.com/astral-sh/ruff/pull/4929](https://github.com/astral-sh/ruff/pull/4929)
- \[`ruff`] Add rule to disallow implicit optional with autofix by
[@&#8203;dhruvmanila](https://github.com/dhruvmanila) in
[https://github.com/astral-sh/ruff/pull/4831](https://github.com/astral-sh/ruff/pull/4831)
- \[`ruff`] Expand RUF008 to all classes, but to a new code (RUF012) by
[@&#8203;adampauls](https://github.com/adampauls) in
[https://github.com/astral-sh/ruff/pull/4390](https://github.com/astral-sh/ruff/pull/4390)
- \[`ruff`] Remove unannotated attributes from RUF008 by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5049](https://github.com/astral-sh/ruff/pull/5049)
- \[`ruff`] Upgrade explicit-type-conversion rule (`RUF010`) to remove
unnecessary `str` calls by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/4971](https://github.com/astral-sh/ruff/pull/4971)

##### Settings

- Option (`-o`/`--output-file`) to write output to a file by
[@&#8203;dhruvmanila](https://github.com/dhruvmanila) in
[https://github.com/astral-sh/ruff/pull/4950](https://github.com/astral-sh/ruff/pull/4950)
- Add JSON Lines (NDJSON) message serialization by
[@&#8203;akx](https://github.com/akx) in
[https://github.com/astral-sh/ruff/pull/5048](https://github.com/astral-sh/ruff/pull/5048)
- Add rule documentation URL to JSON output by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5187](https://github.com/astral-sh/ruff/pull/5187)

##### Caching

- Only use a single cache file per Python package by
[@&#8203;Thomasdezeeuw](https://github.com/Thomasdezeeuw) in
[https://github.com/astral-sh/ruff/pull/5117](https://github.com/astral-sh/ruff/pull/5117)
- Open cache files in parallel by
[@&#8203;Thomasdezeeuw](https://github.com/Thomasdezeeuw) in
[https://github.com/astral-sh/ruff/pull/5120](https://github.com/astral-sh/ruff/pull/5120)

##### Jupyter

- Add support for auto-fix in Jupyter notebooks by
[@&#8203;dhruvmanila](https://github.com/dhruvmanila) in
[https://github.com/astral-sh/ruff/pull/4665](https://github.com/astral-sh/ruff/pull/4665)
- Add roundtrip support for Jupyter notebook by
[@&#8203;dhruvmanila](https://github.com/dhruvmanila) in
[https://github.com/astral-sh/ruff/pull/5028](https://github.com/astral-sh/ruff/pull/5028)

##### Bug Fixes

- Handle decorators in class-parenthesis-modifying rules by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5034](https://github.com/astral-sh/ruff/pull/5034)
- Allow re-assignments to `__all__` by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/4967](https://github.com/astral-sh/ruff/pull/4967)
- Handled dict and set inside f-string
([#&#8203;4249](https://github.com/astral-sh/ruff/issues/4249)) by
[@&#8203;DavideCanton](https://github.com/DavideCanton) in
[https://github.com/astral-sh/ruff/pull/4563](https://github.com/astral-sh/ruff/pull/4563)
- Support concatenated string key removals by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/4976](https://github.com/astral-sh/ruff/pull/4976)
- Respect 'is not' operators split across newlines by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/4977](https://github.com/astral-sh/ruff/pull/4977)
- Parenthesize expressions prior to lexing in F632 by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5001](https://github.com/astral-sh/ruff/pull/5001)
- Ignore pyproject.toml for adding noqa directives by
[@&#8203;dhruvmanila](https://github.com/dhruvmanila) in
[https://github.com/astral-sh/ruff/pull/5013](https://github.com/astral-sh/ruff/pull/5013)
- Support 'reason' argument to `pytest.fail` by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5040](https://github.com/astral-sh/ruff/pull/5040)
- Allow `async with` in `redefined-loop-name` by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5125](https://github.com/astral-sh/ruff/pull/5125)
- Skip `DJ008` enforcement in stub files by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5139](https://github.com/astral-sh/ruff/pull/5139)
- Detect continuations at start-of-file by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5173](https://github.com/astral-sh/ruff/pull/5173)
- Fix allowed-ellipsis detection by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5174](https://github.com/astral-sh/ruff/pull/5174)
- Remove continuations before trailing semicolons by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5199](https://github.com/astral-sh/ruff/pull/5199)
- Support parenthesized expressions when splitting compound assertions
by [@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5219](https://github.com/astral-sh/ruff/pull/5219)
- Use phf for confusables to reduce llvm lines by
[@&#8203;konstin](https://github.com/konstin) in
[https://github.com/astral-sh/ruff/pull/4926](https://github.com/astral-sh/ruff/pull/4926)
- Allow private accesses within special dunder methods by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/4968](https://github.com/astral-sh/ruff/pull/4968)
- Support concatenated literals in format-literals by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/4974](https://github.com/astral-sh/ruff/pull/4974)
- Fix line numbers in source frames by
[@&#8203;MichaReiser](https://github.com/MichaReiser) in
[https://github.com/astral-sh/ruff/pull/4984](https://github.com/astral-sh/ruff/pull/4984)
- Suggest combining async with statements by
[@&#8203;Thomasdezeeuw](https://github.com/Thomasdezeeuw) in
[https://github.com/astral-sh/ruff/pull/5022](https://github.com/astral-sh/ruff/pull/5022)
- Improve `TypedDict` conversion logic for shadowed builtins and dunder
methods by [@&#8203;charliermarsh](https://github.com/charliermarsh)
in
[https://github.com/astral-sh/ruff/pull/5038](https://github.com/astral-sh/ruff/pull/5038)
- Support glob patterns in pep8\_naming ignore-names by
[@&#8203;Thomasdezeeuw](https://github.com/Thomasdezeeuw) in
[https://github.com/astral-sh/ruff/pull/5024](https://github.com/astral-sh/ruff/pull/5024)
- Respect all `__all__` definitions for docstring visibility by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5052](https://github.com/astral-sh/ruff/pull/5052)
- Don't treat annotations as resolved in forward references by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5060](https://github.com/astral-sh/ruff/pull/5060)
- Consider ignore-names in all pep8 naming rules by
[@&#8203;Thomasdezeeuw](https://github.com/Thomasdezeeuw) in
[https://github.com/astral-sh/ruff/pull/5079](https://github.com/astral-sh/ruff/pull/5079)
- Ignore `reimplemented-builtin` if using `await` by
[@&#8203;tjkuson](https://github.com/tjkuson) in
[https://github.com/astral-sh/ruff/pull/5101](https://github.com/astral-sh/ruff/pull/5101)
- Allow space in filename for powershell + windows + python module by
[@&#8203;konstin](https://github.com/konstin) in
[https://github.com/astral-sh/ruff/pull/5115](https://github.com/astral-sh/ruff/pull/5115)
- Don't treat straight imports of **future** as `__future__` imports by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5128](https://github.com/astral-sh/ruff/pull/5128)
- Remove continuations when deleting statements by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5198](https://github.com/astral-sh/ruff/pull/5198)
- Fix corner case involving terminal backslash after fixing `W293` by
[@&#8203;evanrittenhouse](https://github.com/evanrittenhouse) in
[https://github.com/astral-sh/ruff/pull/5172](https://github.com/astral-sh/ruff/pull/5172)
- Fix subprocess.run on Windows Python 3.7 by
[@&#8203;konstin](https://github.com/konstin) in
[https://github.com/astral-sh/ruff/pull/5220](https://github.com/astral-sh/ruff/pull/5220)

#### New Contributors

- [@&#8203;rodjunger](https://github.com/rodjunger) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/4929](https://github.com/astral-sh/ruff/pull/4929)
- [@&#8203;DavideCanton](https://github.com/DavideCanton) made their
first contribution in
[https://github.com/astral-sh/ruff/pull/4563](https://github.com/astral-sh/ruff/pull/4563)
- [@&#8203;Thomasdezeeuw](https://github.com/Thomasdezeeuw) made their
first contribution in
[https://github.com/astral-sh/ruff/pull/5021](https://github.com/astral-sh/ruff/pull/5021)
- [@&#8203;adampauls](https://github.com/adampauls) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/4390](https://github.com/astral-sh/ruff/pull/4390)
- [@&#8203;tkukushkin](https://github.com/tkukushkin) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/4853](https://github.com/astral-sh/ruff/pull/4853)
- [@&#8203;Taybou](https://github.com/Taybou) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/5088](https://github.com/astral-sh/ruff/pull/5088)
- [@&#8203;davidszotten](https://github.com/davidszotten) made their
first contribution in
[https://github.com/astral-sh/ruff/pull/5158](https://github.com/astral-sh/ruff/pull/5158)
- [@&#8203;dosisod](https://github.com/dosisod) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/5203](https://github.com/astral-sh/ruff/pull/5203)

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

</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://developer.mend.io/github/allenporter/flux-local).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNS4xMzEuMCIsInVwZGF0ZWRJblZlciI6IjM1LjEzMS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
renovate bot referenced this pull request in allenporter/pyrainbird Jun 24, 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://beta.ruff.rs/docs)
([source](https://github.com/astral-sh/ruff),
[changelog](https://github.com/astral-sh/ruff/releases)) | `==0.0.274`
-> `==0.0.275` |
[![age](https://badges.renovateapi.com/packages/pypi/ruff/0.0.275/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/pypi/ruff/0.0.275/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/pypi/ruff/0.0.275/compatibility-slim/0.0.274)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/pypi/ruff/0.0.275/confidence-slim/0.0.274)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>astral-sh/ruff</summary>

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

[Compare
Source](https://github.com/astral-sh/ruff/compare/v0.0.274...v0.0.275)

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

#### What's Changed

Highlights include a 7-10x decrease in Ruff's cache size.

##### Rules

- Add support for top-level quoted annotations in RUF013 by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5235](https://github.com/astral-sh/ruff/pull/5235)
- Add support for nested quoted annotations in RUF013 by
[@&#8203;dhruvmanila](https://github.com/dhruvmanila) in
[https://github.com/astral-sh/ruff/pull/5254](https://github.com/astral-sh/ruff/pull/5254)
- Move `compare-to-empty-string` (`PLC1901`) to nursery by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5264](https://github.com/astral-sh/ruff/pull/5264)
- Ignore Pydantic classes when evaluating `mutable-class-default`
(`RUF012`) by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5273](https://github.com/astral-sh/ruff/pull/5273)
- Allow `typing.Final` for `mutable-class-default annotations`
(`RUF012`) by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5274](https://github.com/astral-sh/ruff/pull/5274)
- Modify `deprecated-import` (`UP035`) to prefer `typing_extensions` in
some versions by [@&#8203;tjkuson](https://github.com/tjkuson) in
[https://github.com/astral-sh/ruff/pull/5291](https://github.com/astral-sh/ruff/pull/5291)

##### Bug Fixes

- Restore existing bindings when unbinding caught exceptions by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5256](https://github.com/astral-sh/ruff/pull/5256)
- Avoid including nursery rules in linter-level selectors by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5268](https://github.com/astral-sh/ruff/pull/5268)

#### New Contributors

- [@&#8203;jgberry](https://github.com/jgberry) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/5221](https://github.com/astral-sh/ruff/pull/5221)

**Full Changelog**:
astral-sh/ruff@v0.0.274...v0.0.275

</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://developer.mend.io/github/allenporter/pyrainbird).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNS4xMzEuMCIsInVwZGF0ZWRJblZlciI6IjM1LjEzMS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
AlexWaygood referenced this pull request in AlexWaygood/typeshed-stats Jul 1, 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 |
|---|---|---|---|---|---|
| [docs/MarkDown](https://github.com/Python-Markdown/markdown)
([changelog](https://github.com/Python-Markdown/markdown/blob/master/docs/change_log/index.md))
| `==3.3.7` -> `==3.4.3` |
[![age](https://badges.renovateapi.com/packages/pypi/docs%2fMarkDown/3.4.3/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/pypi/docs%2fMarkDown/3.4.3/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/pypi/docs%2fMarkDown/3.4.3/compatibility-slim/3.3.7)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/pypi/docs%2fMarkDown/3.4.3/confidence-slim/3.3.7)](https://docs.renovatebot.com/merge-confidence/)
|
| [docs/mkdocs-material](https://github.com/squidfunk/mkdocs-material)
| `==9.1.14` -> `==9.1.17` |
[![age](https://badges.renovateapi.com/packages/pypi/docs%2fmkdocs-material/9.1.17/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/pypi/docs%2fmkdocs-material/9.1.17/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/pypi/docs%2fmkdocs-material/9.1.17/compatibility-slim/9.1.14)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/pypi/docs%2fmkdocs-material/9.1.17/confidence-slim/9.1.14)](https://docs.renovatebot.com/merge-confidence/)
|
| [docs/mkdocstrings](https://github.com/mkdocstrings/mkdocstrings)
([changelog](https://mkdocstrings.github.io/changelog)) | `==0.21.2` ->
`==0.22.0` |
[![age](https://badges.renovateapi.com/packages/pypi/docs%2fmkdocstrings/0.22.0/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/pypi/docs%2fmkdocstrings/0.22.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/pypi/docs%2fmkdocstrings/0.22.0/compatibility-slim/0.21.2)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/pypi/docs%2fmkdocstrings/0.22.0/confidence-slim/0.21.2)](https://docs.renovatebot.com/merge-confidence/)
|
| [misc-lint/blacken-docs](https://github.com/asottile/blacken-docs)
([changelog](https://github.com/adamchainz/blacken-docs/blob/main/CHANGELOG.rst))
| `==1.13.0` -> `==1.14.0` |
[![age](https://badges.renovateapi.com/packages/pypi/misc-lint%2fblacken-docs/1.14.0/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/pypi/misc-lint%2fblacken-docs/1.14.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/pypi/misc-lint%2fblacken-docs/1.14.0/compatibility-slim/1.13.0)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/pypi/misc-lint%2fblacken-docs/1.14.0/confidence-slim/1.13.0)](https://docs.renovatebot.com/merge-confidence/)
|
| [misc-lint/pycln](https://hadialqattan.github.io/pycln)
([source](https://github.com/hadialqattan/pycln)) | `==2.1.3` ->
`==2.1.5` |
[![age](https://badges.renovateapi.com/packages/pypi/misc-lint%2fpycln/2.1.5/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/pypi/misc-lint%2fpycln/2.1.5/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/pypi/misc-lint%2fpycln/2.1.5/compatibility-slim/2.1.3)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/pypi/misc-lint%2fpycln/2.1.5/confidence-slim/2.1.3)](https://docs.renovatebot.com/merge-confidence/)
|
| [misc-lint/ruff](https://beta.ruff.rs/docs)
([source](https://github.com/astral-sh/ruff),
[changelog](https://github.com/astral-sh/ruff/releases)) | `==0.0.272`
-> `==0.0.275` |
[![age](https://badges.renovateapi.com/packages/pypi/misc-lint%2fruff/0.0.275/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/pypi/misc-lint%2fruff/0.0.275/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/pypi/misc-lint%2fruff/0.0.275/compatibility-slim/0.0.272)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/pypi/misc-lint%2fruff/0.0.275/confidence-slim/0.0.272)](https://docs.renovatebot.com/merge-confidence/)
|
| [pytest/pytest](https://docs.pytest.org/en/latest/)
([source](https://github.com/pytest-dev/pytest),
[changelog](https://docs.pytest.org/en/stable/changelog.html)) |
`==7.3.1` -> `==7.4.0` |
[![age](https://badges.renovateapi.com/packages/pypi/pytest%2fpytest/7.4.0/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/pypi/pytest%2fpytest/7.4.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/pypi/pytest%2fpytest/7.4.0/compatibility-slim/7.3.1)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/pypi/pytest%2fpytest/7.4.0/confidence-slim/7.3.1)](https://docs.renovatebot.com/merge-confidence/)
|
| [pytest/pytest-mock](https://github.com/pytest-dev/pytest-mock)
([changelog](https://pytest-mock.readthedocs.io/en/latest/changelog.html))
| `==3.10.0` -> `==3.11.1` |
[![age](https://badges.renovateapi.com/packages/pypi/pytest%2fpytest-mock/3.11.1/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/pypi/pytest%2fpytest-mock/3.11.1/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/pypi/pytest%2fpytest-mock/3.11.1/compatibility-slim/3.10.0)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/pypi/pytest%2fpytest-mock/3.11.1/confidence-slim/3.10.0)](https://docs.renovatebot.com/merge-confidence/)
|
| [typecheck/mypy](https://www.mypy-lang.org/)
([source](https://github.com/python/mypy),
[changelog](https://mypy-lang.blogspot.com/)) | `==1.3.0` -> `==1.4.0` |
[![age](https://badges.renovateapi.com/packages/pypi/typecheck%2fmypy/1.4.0/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/pypi/typecheck%2fmypy/1.4.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/pypi/typecheck%2fmypy/1.4.0/compatibility-slim/1.3.0)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/pypi/typecheck%2fmypy/1.4.0/confidence-slim/1.3.0)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>Python-Markdown/markdown (docs/MarkDown)</summary>

###
[`v3.4.3`](https://github.com/Python-Markdown/markdown/compare/3.4.2...3.4.3)

[Compare
Source](https://github.com/Python-Markdown/markdown/compare/3.4.2...3.4.3)

###
[`v3.4.2`](https://github.com/Python-Markdown/markdown/compare/3.4.1...3.4.2)

[Compare
Source](https://github.com/Python-Markdown/markdown/compare/3.4.1...3.4.2)

###
[`v3.4.1`](https://github.com/Python-Markdown/markdown/compare/3.4...3.4.1)

[Compare
Source](https://github.com/Python-Markdown/markdown/compare/3.4...3.4.1)

###
[`v3.4`](https://github.com/Python-Markdown/markdown/compare/3.3.7...3.4)

[Compare
Source](https://github.com/Python-Markdown/markdown/compare/3.3.7...3.4)

</details>

<details>
<summary>squidfunk/mkdocs-material (docs/mkdocs-material)</summary>

###
[`v9.1.17`](https://github.com/squidfunk/mkdocs-material/releases/tag/9.1.17):
mkdocs-material-9.1.17

[Compare
Source](https://github.com/squidfunk/mkdocs-material/compare/9.1.16...9.1.17)

- Fixed
[#&#8203;5633](https://github.com/squidfunk/mkdocs-material/issues/5633):
Code annotations with nested lists incorrectly mounted
- Fixed
[#&#8203;5628](https://github.com/squidfunk/mkdocs-material/issues/5628):
Regression in new social plugin configuration scheme

###
[`v9.1.16`](https://github.com/squidfunk/mkdocs-material/releases/tag/9.1.16):
mkdocs-material-9.1.16

[Compare
Source](https://github.com/squidfunk/mkdocs-material/compare/9.1.15...9.1.16)

-   Updated Indonesian translations
-   Ensure scroll bar follows color scheme of operating system

###
[`v9.1.15`](https://github.com/squidfunk/mkdocs-material/releases/tag/9.1.15):
mkdocs-material-9.1.15

[Compare
Source](https://github.com/squidfunk/mkdocs-material/compare/9.1.14...9.1.15)

- Fixed
[#&#8203;5566](https://github.com/squidfunk/mkdocs-material/issues/5566):
Indicate color scheme to operating system
- Fixed
[#&#8203;5565](https://github.com/squidfunk/mkdocs-material/issues/5565):
Update `Dockerfile` to latest version of base image
- Fixed
[#&#8203;5554](https://github.com/squidfunk/mkdocs-material/issues/5554):
Add additional version tags (`9`, `9.1`) to Docker image
- Fixed
[#&#8203;5536](https://github.com/squidfunk/mkdocs-material/issues/5536):
Strip tags of ARIA labels in table of contents

</details>

<details>
<summary>mkdocstrings/mkdocstrings (docs/mkdocstrings)</summary>

###
[`v0.22.0`](https://github.com/mkdocstrings/mkdocstrings/blob/HEAD/CHANGELOG.md#&#8203;0220-httpsgithubcommkdocstringsmkdocstringsreleasestag0220---2023-05-25)

[Compare
Source](https://github.com/mkdocstrings/mkdocstrings/compare/0.21.2...0.22.0)

<small>[Compare with
0.21.2](https://github.com/mkdocstrings/mkdocstrings/compare/0.21.2...0.22.0)</small>

##### Features

- Allow extensions to add templates
([cf0af05](https://github.com/mkdocstrings/mkdocstrings/commit/cf0af059eb89240eba0437de417c124389e2f20e)
by Timothée Mazzucotelli). [PR
#&#8203;569](https://github.com/mkdocstrings/mkdocstrings/pull/569)

##### Code Refactoring

- Report inventory loading errors
([2c05d78](https://github.com/mkdocstrings/mkdocstrings/commit/2c05d7854b87251e26c1a2e1810b85702ff110f3)
by Timothée Mazzucotelli). Co-authored-by: Oleh Prypin <oleh@pryp.in>

</details>

<details>
<summary>asottile/blacken-docs (misc-lint/blacken-docs)</summary>

###
[`v1.14.0`](https://github.com/asottile/blacken-docs/blob/HEAD/CHANGELOG.rst#&#8203;1140-2023-06-13)

[Compare
Source](https://github.com/asottile/blacken-docs/compare/1.13.0...1.14.0)

-   Support Python 3.12.

</details>

<details>
<summary>hadialqattan/pycln (misc-lint/pycln)</summary>

###
[`v2.1.5`](https://github.com/hadialqattan/pycln/releases/tag/v2.1.5)

[Compare
Source](https://github.com/hadialqattan/pycln/compare/v2.1.4...v2.1.5)

##### Changed

- [Widen `pathspec` version artificial lock by
@&#8203;hadialqattan](https://github.com/hadialqattan/pycln/pull/203)

###
[`v2.1.4`](https://github.com/hadialqattan/pycln/releases/tag/v2.1.4)

[Compare
Source](https://github.com/hadialqattan/pycln/compare/v2.1.3...v2.1.4)

##### Fixed

- [Detect third-party libs installed in editable mode by
@&#8203;hadialqattan](https://github.com/hadialqattan/pycln/pull/200)
- [Preserve the original line break format by @&#8203;maxbachmann &
@&#8203;hadialqattan](https://github.com/hadialqattan/pycln/pull/197)

##### Changed

- [Bump JRubics/poetry-publish from 1.16 to 1.17 by
@&#8203;dependabot\[bot\]](https://github.com/hadialqattan/pycln/pull/201)
- [Remove `pathspec` version artificial lock by
@&#8203;hadialqattan](https://github.com/hadialqattan/pycln/pull/199)
- [Bump codecov/codecov-action from 3.1.1 to 3.1.4 by
@&#8203;dependabot\[bot\]](https://github.com/hadialqattan/pycln/pull/198)
- [Bump typer from 0.7.0 to 0.9.0 by
@&#8203;dependabot\[bot\]](https://github.com/hadialqattan/pycln/pull/195)

</details>

<details>
<summary>astral-sh/ruff (misc-lint/ruff)</summary>

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

[Compare
Source](https://github.com/astral-sh/ruff/compare/v0.0.274...v0.0.275)

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

#### What's Changed

Highlights include a 7-10x decrease in Ruff's cache size.

##### Rules

- Add support for top-level quoted annotations in RUF013 by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5235](https://github.com/astral-sh/ruff/pull/5235)
- Add support for nested quoted annotations in RUF013 by
[@&#8203;dhruvmanila](https://github.com/dhruvmanila) in
[https://github.com/astral-sh/ruff/pull/5254](https://github.com/astral-sh/ruff/pull/5254)
- Move `compare-to-empty-string` (`PLC1901`) to nursery by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5264](https://github.com/astral-sh/ruff/pull/5264)
- Ignore Pydantic classes when evaluating `mutable-class-default`
(`RUF012`) by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5273](https://github.com/astral-sh/ruff/pull/5273)
- Allow `typing.Final` for `mutable-class-default annotations`
(`RUF012`) by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5274](https://github.com/astral-sh/ruff/pull/5274)
- Modify `deprecated-import` (`UP035`) to prefer `typing_extensions` in
some versions by [@&#8203;tjkuson](https://github.com/tjkuson) in
[https://github.com/astral-sh/ruff/pull/5291](https://github.com/astral-sh/ruff/pull/5291)

##### Bug Fixes

- Restore existing bindings when unbinding caught exceptions by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5256](https://github.com/astral-sh/ruff/pull/5256)
- Avoid including nursery rules in linter-level selectors by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5268](https://github.com/astral-sh/ruff/pull/5268)

#### New Contributors

- [@&#8203;jgberry](https://github.com/jgberry) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/5221](https://github.com/astral-sh/ruff/pull/5221)

**Full Changelog**:
astral-sh/ruff@v0.0.274...v0.0.275

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

[Compare
Source](https://github.com/astral-sh/ruff/compare/v0.0.273...v0.0.274)

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

#### What's Changed

Follow-up release to `v0.0.273` to fix a panic in cache accesses.

##### Bug Fixes

- Use package roots rather than package members for cache initialization
by [@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5233](https://github.com/astral-sh/ruff/pull/5233)
- Avoid `.unwrap()` on cache access by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5229](https://github.com/astral-sh/ruff/pull/5229)
- Revert change to `RUF010` to remove unnecessary `str` calls by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5232](https://github.com/astral-sh/ruff/pull/5232)
- Avoid erroneous RUF013 violations for quoted annotations by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5234](https://github.com/astral-sh/ruff/pull/5234)

**Full Changelog**:
astral-sh/ruff@v0.0.273...v0.0.274

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

[Compare
Source](https://github.com/astral-sh/ruff/compare/v0.0.272...v0.0.273)

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

#### What's Changed

Highlights include:

- Autofix capabilities for rules like `flake8-import-conventions`, which
require symbol renames across a file.
- Significant decrease in Ruff's cache size (e.g., a ~50% decrease for
FastAPI).
-   Dozens and dozens of bug fixes + performance improvements.

##### Rules

- \[`copyright`] Implement copyright notice detection by
[@&#8203;Ryang20718](https://github.com/Ryang20718) in
[https://github.com/astral-sh/ruff/pull/4701](https://github.com/astral-sh/ruff/pull/4701)
- \[`flake8-datetimez`] Enable UTC-import for `datetime-utc-alias` fix
by [@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5100](https://github.com/astral-sh/ruff/pull/5100)
- \[`flake8-implicit-str-concat`] Add autofix for `ISC001` by
[@&#8203;tkukushkin](https://github.com/tkukushkin) in
[https://github.com/astral-sh/ruff/pull/4853](https://github.com/astral-sh/ruff/pull/4853)
- \[`flake8-import-conventions`] Enable autofix for unconventional
imports rule by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5152](https://github.com/astral-sh/ruff/pull/5152)
- \[`flake8-pyi`] Add autofix for `Set`-to-`AbstractSet` rewrite using
reference tracking by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5074](https://github.com/astral-sh/ruff/pull/5074)
- \[`flake8-pyi`] Implement PYI044 by
[@&#8203;Thomasdezeeuw](https://github.com/Thomasdezeeuw) in
[https://github.com/astral-sh/ruff/pull/5021](https://github.com/astral-sh/ruff/pull/5021)
- \[`flake8-return`] Extend revised `RET504` implementation to `with`
statements by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/4998](https://github.com/astral-sh/ruff/pull/4998)
- \[`flake8-return`] Implement autofix for revised `RET504` rule by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/4999](https://github.com/astral-sh/ruff/pull/4999)
- \[`flake8-return`] Refactor `RET504` to only enforce
assignment-then-return pattern by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/4997](https://github.com/astral-sh/ruff/pull/4997)
- \[`flake8-slots`] Add plugin, add `SLOT000`, `SLOT001` and `SLOT002`
by [@&#8203;qdegraaf](https://github.com/qdegraaf) in
[https://github.com/astral-sh/ruff/pull/4909](https://github.com/astral-sh/ruff/pull/4909)
- \[`perflint`] Add `perflint` plugin, add first rule `PERF102` by
[@&#8203;qdegraaf](https://github.com/qdegraaf) in
[https://github.com/astral-sh/ruff/pull/4821](https://github.com/astral-sh/ruff/pull/4821)
- \[`pylint`] Add Pylint rule `comparison-with-itself` (`R0124`) by
[@&#8203;tjkuson](https://github.com/tjkuson) in
[https://github.com/astral-sh/ruff/pull/4957](https://github.com/astral-sh/ruff/pull/4957)
- \[`pyupgrade`] Add a rule to remove unnecessary parentheses in class
definitions by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5032](https://github.com/astral-sh/ruff/pull/5032)
- \[`ruff`] Add a rule for static keys in dict comprehensions by
[@&#8203;rodjunger](https://github.com/rodjunger) in
[https://github.com/astral-sh/ruff/pull/4929](https://github.com/astral-sh/ruff/pull/4929)
- \[`ruff`] Add rule to disallow implicit optional with autofix by
[@&#8203;dhruvmanila](https://github.com/dhruvmanila) in
[https://github.com/astral-sh/ruff/pull/4831](https://github.com/astral-sh/ruff/pull/4831)
- \[`ruff`] Expand RUF008 to all classes, but to a new code (RUF012) by
[@&#8203;adampauls](https://github.com/adampauls) in
[https://github.com/astral-sh/ruff/pull/4390](https://github.com/astral-sh/ruff/pull/4390)
- \[`ruff`] Remove unannotated attributes from RUF008 by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5049](https://github.com/astral-sh/ruff/pull/5049)
- \[`ruff`] Upgrade explicit-type-conversion rule (`RUF010`) to remove
unnecessary `str` calls by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/4971](https://github.com/astral-sh/ruff/pull/4971)

##### Settings

- Option (`-o`/`--output-file`) to write output to a file by
[@&#8203;dhruvmanila](https://github.com/dhruvmanila) in
[https://github.com/astral-sh/ruff/pull/4950](https://github.com/astral-sh/ruff/pull/4950)
- Add JSON Lines (NDJSON) message serialization by
[@&#8203;akx](https://github.com/akx) in
[https://github.com/astral-sh/ruff/pull/5048](https://github.com/astral-sh/ruff/pull/5048)
- Add rule documentation URL to JSON output by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5187](https://github.com/astral-sh/ruff/pull/5187)

##### Caching

- Only use a single cache file per Python package by
[@&#8203;Thomasdezeeuw](https://github.com/Thomasdezeeuw) in
[https://github.com/astral-sh/ruff/pull/5117](https://github.com/astral-sh/ruff/pull/5117)
- Open cache files in parallel by
[@&#8203;Thomasdezeeuw](https://github.com/Thomasdezeeuw) in
[https://github.com/astral-sh/ruff/pull/5120](https://github.com/astral-sh/ruff/pull/5120)

##### Jupyter

- Add support for auto-fix in Jupyter notebooks by
[@&#8203;dhruvmanila](https://github.com/dhruvmanila) in
[https://github.com/astral-sh/ruff/pull/4665](https://github.com/astral-sh/ruff/pull/4665)
- Add roundtrip support for Jupyter notebook by
[@&#8203;dhruvmanila](https://github.com/dhruvmanila) in
[https://github.com/astral-sh/ruff/pull/5028](https://github.com/astral-sh/ruff/pull/5028)

##### Bug Fixes

- Handle decorators in class-parenthesis-modifying rules by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5034](https://github.com/astral-sh/ruff/pull/5034)
- Allow re-assignments to `__all__` by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/4967](https://github.com/astral-sh/ruff/pull/4967)
- Handled dict and set inside f-string
([#&#8203;4249](https://github.com/astral-sh/ruff/issues/4249)) by
[@&#8203;DavideCanton](https://github.com/DavideCanton) in
[https://github.com/astral-sh/ruff/pull/4563](https://github.com/astral-sh/ruff/pull/4563)
- Support concatenated string key removals by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/4976](https://github.com/astral-sh/ruff/pull/4976)
- Respect 'is not' operators split across newlines by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/4977](https://github.com/astral-sh/ruff/pull/4977)
- Parenthesize expressions prior to lexing in F632 by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5001](https://github.com/astral-sh/ruff/pull/5001)
- Ignore pyproject.toml for adding noqa directives by
[@&#8203;dhruvmanila](https://github.com/dhruvmanila) in
[https://github.com/astral-sh/ruff/pull/5013](https://github.com/astral-sh/ruff/pull/5013)
- Support 'reason' argument to `pytest.fail` by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5040](https://github.com/astral-sh/ruff/pull/5040)
- Allow `async with` in `redefined-loop-name` by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5125](https://github.com/astral-sh/ruff/pull/5125)
- Skip `DJ008` enforcement in stub files by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5139](https://github.com/astral-sh/ruff/pull/5139)
- Detect continuations at start-of-file by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5173](https://github.com/astral-sh/ruff/pull/5173)
- Fix allowed-ellipsis detection by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5174](https://github.com/astral-sh/ruff/pull/5174)
- Remove continuations before trailing semicolons by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5199](https://github.com/astral-sh/ruff/pull/5199)
- Support parenthesized expressions when splitting compound assertions
by [@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5219](https://github.com/astral-sh/ruff/pull/5219)
- Use phf for confusables to reduce llvm lines by
[@&#8203;konstin](https://github.com/konstin) in
[https://github.com/astral-sh/ruff/pull/4926](https://github.com/astral-sh/ruff/pull/4926)
- Allow private accesses within special dunder methods by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/4968](https://github.com/astral-sh/ruff/pull/4968)
- Support concatenated literals in format-literals by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/4974](https://github.com/astral-sh/ruff/pull/4974)
- Fix line numbers in source frames by
[@&#8203;MichaReiser](https://github.com/MichaReiser) in
[https://github.com/astral-sh/ruff/pull/4984](https://github.com/astral-sh/ruff/pull/4984)
- Suggest combining async with statements by
[@&#8203;Thomasdezeeuw](https://github.com/Thomasdezeeuw) in
[https://github.com/astral-sh/ruff/pull/5022](https://github.com/astral-sh/ruff/pull/5022)
- Improve `TypedDict` conversion logic for shadowed builtins and dunder
methods by [@&#8203;charliermarsh](https://github.com/charliermarsh)
in
[https://github.com/astral-sh/ruff/pull/5038](https://github.com/astral-sh/ruff/pull/5038)
- Support glob patterns in pep8\_naming ignore-names by
[@&#8203;Thomasdezeeuw](https://github.com/Thomasdezeeuw) in
[https://github.com/astral-sh/ruff/pull/5024](https://github.com/astral-sh/ruff/pull/5024)
- Respect all `__all__` definitions for docstring visibility by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5052](https://github.com/astral-sh/ruff/pull/5052)
- Don't treat annotations as resolved in forward references by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5060](https://github.com/astral-sh/ruff/pull/5060)
- Consider ignore-names in all pep8 naming rules by
[@&#8203;Thomasdezeeuw](https://github.com/Thomasdezeeuw) in
[https://github.com/astral-sh/ruff/pull/5079](https://github.com/astral-sh/ruff/pull/5079)
- Ignore `reimplemented-builtin` if using `await` by
[@&#8203;tjkuson](https://github.com/tjkuson) in
[https://github.com/astral-sh/ruff/pull/5101](https://github.com/astral-sh/ruff/pull/5101)
- Allow space in filename for powershell + windows + python module by
[@&#8203;konstin](https://github.com/konstin) in
[https://github.com/astral-sh/ruff/pull/5115](https://github.com/astral-sh/ruff/pull/5115)
- Don't treat straight imports of **future** as `__future__` imports by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5128](https://github.com/astral-sh/ruff/pull/5128)
- Remove continuations when deleting statements by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/5198](https://github.com/astral-sh/ruff/pull/5198)
- Fix corner case involving terminal backslash after fixing `W293` by
[@&#8203;evanrittenhouse](https://github.com/evanrittenhouse) in
[https://github.com/astral-sh/ruff/pull/5172](https://github.com/astral-sh/ruff/pull/5172)
- Fix subprocess.run on Windows Python 3.7 by
[@&#8203;konstin](https://github.com/konstin) in
[https://github.com/astral-sh/ruff/pull/5220](https://github.com/astral-sh/ruff/pull/5220)

#### New Contributors

- [@&#8203;rodjunger](https://github.com/rodjunger) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/4929](https://github.com/astral-sh/ruff/pull/4929)
- [@&#8203;DavideCanton](https://github.com/DavideCanton) made their
first contribution in
[https://github.com/astral-sh/ruff/pull/4563](https://github.com/astral-sh/ruff/pull/4563)
- [@&#8203;Thomasdezeeuw](https://github.com/Thomasdezeeuw) made their
first contribution in
[https://github.com/astral-sh/ruff/pull/5021](https://github.com/astral-sh/ruff/pull/5021)
- [@&#8203;adampauls](https://github.com/adampauls) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/4390](https://github.com/astral-sh/ruff/pull/4390)
- [@&#8203;tkukushkin](https://github.com/tkukushkin) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/4853](https://github.com/astral-sh/ruff/pull/4853)
- [@&#8203;Taybou](https://github.com/Taybou) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/5088](https://github.com/astral-sh/ruff/pull/5088)
- [@&#8203;davidszotten](https://github.com/davidszotten) made their
first contribution in
[https://github.com/astral-sh/ruff/pull/5158](https://github.com/astral-sh/ruff/pull/5158)
- [@&#8203;dosisod](https://github.com/dosisod) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/5203](https://github.com/astral-sh/ruff/pull/5203)

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

</details>

<details>
<summary>pytest-dev/pytest (pytest/pytest)</summary>

###
[`v7.4.0`](https://github.com/pytest-dev/pytest/releases/tag/7.4.0)

[Compare
Source](https://github.com/pytest-dev/pytest/compare/7.3.2...7.4.0)

# pytest 7.4.0 (2023-06-23)

## Features

- [#&#8203;10901](https://github.com/pytest-dev/pytest/issues/10901):
Added `ExceptionInfo.from_exception()
<pytest.ExceptionInfo.from_exception>`{.interpreted-text role="func"}, a
simpler way to create an `~pytest.ExceptionInfo`{.interpreted-text
role="class"} from an exception.
This can replace `ExceptionInfo.from_exc_info()
<pytest.ExceptionInfo.from_exc_info()>`{.interpreted-text role="func"}
for most uses.

## Improvements

- [#&#8203;10872](https://github.com/pytest-dev/pytest/issues/10872):
Update test log report annotation to named tuple and fixed inconsistency
in docs for `pytest_report_teststatus`{.interpreted-text role="hook"}
hook.

- [#&#8203;10907](https://github.com/pytest-dev/pytest/issues/10907):
When an exception traceback to be displayed is completely filtered out
(by mechanisms such as `__tracebackhide__`, internal frames, and
similar), now only the exception string and the following message are
shown:

"All traceback entries are hidden. Pass \[--full-trace]{.title-ref} to
see hidden and internal frames.".

Previously, the last frame of the traceback was shown, even though it
was hidden.

- [#&#8203;10940](https://github.com/pytest-dev/pytest/issues/10940):
Improved verbose output (`-vv`) of `skip` and `xfail` reasons by
performing text wrapping while leaving a clear margin for progress
output.

    Added `TerminalReporter.wrap_write()` as a helper for that.

- [#&#8203;10991](https://github.com/pytest-dev/pytest/issues/10991):
Added handling of `%f` directive to print microseconds in log format
options, such as `log-date-format`.

- [#&#8203;11005](https://github.com/pytest-dev/pytest/issues/11005):
Added the underlying exception to the cache provider's path creation and
write warning messages.

- [#&#8203;11013](https://github.com/pytest-dev/pytest/issues/11013):
Added warning when `testpaths`{.interpreted-text role="confval"} is set,
but paths are not found by glob. In this case, pytest will fall back to
searching from the current directory.

- [#&#8203;11043](https://github.com/pytest-dev/pytest/issues/11043):
When \[--confcutdir]{.title-ref} is not specified, and there is no
config file present, the conftest cutoff directory
(\[--confcutdir]{.title-ref}) is now set to the `rootdir
<rootdir>`{.interpreted-text role="ref"}.
Previously in such cases, \[conftest.py]{.title-ref} files would be
probed all the way to the root directory of the filesystem.
If you are badly affected by this change, consider adding an empty
config file to your desired cutoff directory, or explicitly set
\[--confcutdir]{.title-ref}.

- [#&#8203;11081](https://github.com/pytest-dev/pytest/issues/11081):
The `norecursedirs`{.interpreted-text role="confval"} check is now
performed in a `pytest_ignore_collect`{.interpreted-text role="hook"}
implementation, so plugins can affect it.

If after updating to this version you see that your
\[norecursedirs]{.title-ref} setting is not being respected,
it means that a conftest or a plugin you use has a bad
\[pytest_ignore_collect]{.title-ref} implementation.
Most likely, your hook returns \[False]{.title-ref} for paths it does
not want to ignore,
which ends the processing and doesn't allow other plugins, including
pytest itself, to ignore the path.
The fix is to return \[None]{.title-ref} instead of \[False]{.title-ref}
for paths your hook doesn't want to ignore.

- [#&#8203;8711](https://github.com/pytest-dev/pytest/issues/8711):
`caplog.set_level()
<pytest.LogCaptureFixture.set_level>`{.interpreted-text role="func"} and
`caplog.at_level()
<pytest.LogCaptureFixture.at_level>`{.interpreted-text role="func"}
will temporarily enable the requested `level` if `level` was disabled
globally via
    `logging.disable(LEVEL)`.

## Bug Fixes

- [#&#8203;10831](https://github.com/pytest-dev/pytest/issues/10831):
Terminal Reporting: Fixed bug when running in `--tb=line` mode where
`pytest.fail(pytrace=False)` tests report `None`.
- [#&#8203;11068](https://github.com/pytest-dev/pytest/issues/11068):
Fixed the `--last-failed` whole-file skipping functionality ("skipped N
files") for `non-python test files <non-python tests>`{.interpreted-text
role="ref"}.
- [#&#8203;11104](https://github.com/pytest-dev/pytest/issues/11104):
Fixed a regression in pytest 7.3.2 which caused to
`testpaths`{.interpreted-text role="confval"} to be considered for
loading initial conftests,
even when it was not utilized (e.g. when explicit paths were given on
the command line).
    Now the `testpaths` are only considered when they are in use.
- [#&#8203;1904](https://github.com/pytest-dev/pytest/issues/1904):
Fixed traceback entries hidden with `__tracebackhide__ = True` still
being shown for chained exceptions (parts after "... the above exception
..." message).
- [#&#8203;7781](https://github.com/pytest-dev/pytest/issues/7781):
Fix writing non-encodable text to log file when using `--debug`.

## Improved Documentation

- [#&#8203;9146](https://github.com/pytest-dev/pytest/issues/9146):
Improved documentation for `caplog.set_level()
<pytest.LogCaptureFixture.set_level>`{.interpreted-text role="func"}.

## Trivial/Internal Changes

- [#&#8203;11031](https://github.com/pytest-dev/pytest/issues/11031):
Enhanced the CLI flag for `-c` to now include `--config-file` to make it
clear that this flag applies to the usage of a custom config file.

###
[`v7.3.2`](https://github.com/pytest-dev/pytest/releases/tag/7.3.2)

[Compare
Source](https://github.com/pytest-dev/pytest/compare/7.3.1...7.3.2)

# pytest 7.3.2 (2023-06-10)

## Bug Fixes

- [#&#8203;10169](https://github.com/pytest-dev/pytest/issues/10169):
Fix bug where very long option names could cause pytest to break with
`OSError: [Errno 36] File name too long` on some systems.
- [#&#8203;10894](https://github.com/pytest-dev/pytest/issues/10894):
Support for Python 3.12 (beta at the time of writing).
- [#&#8203;10987](https://github.com/pytest-dev/pytest/issues/10987):
`testpaths`{.interpreted-text role="confval"} is now honored to load
root `conftests`.
- [#&#8203;10999](https://github.com/pytest-dev/pytest/issues/10999):
The \[monkeypatch]{.title-ref}
\[setitem]{.title-ref}/\[delitem]{.title-ref} type annotations now allow
\[TypedDict]{.title-ref} arguments.
- [#&#8203;11028](https://github.com/pytest-dev/pytest/issues/11028):
Fixed bug in assertion rewriting where a variable assigned with the
walrus operator could not be used later in a function call.
- [#&#8203;11054](https://github.com/pytest-dev/pytest/issues/11054):
Fixed `--last-failed`'s "(skipped N files)" functionality for files
inside of packages (directories with \[\__init\_\_.py]{.title-ref}
files).

</details>

<details>
<summary>pytest-dev/pytest-mock (pytest/pytest-mock)</summary>

###
[`v3.11.1`](https://github.com/pytest-dev/pytest-mock/blob/HEAD/CHANGELOG.rst#&#8203;3111-2023-06-15)

[Compare
Source](https://github.com/pytest-dev/pytest-mock/compare/v3.11.0...v3.11.1)

(This release source code is identical to `3.11.0` except a small
internal fix to deployment/CI)

-   Fixed introspection for failed `assert_has_calls` (`#365`\_).

- Updated type annotations for `mocker.patch` and `mocker.spy`
(`#364`\_).

..
\_#&#820[https://github.com/pytest-dev/pytest-mock/pull/365](https://github.com/pytest-dev/pytest-mock/pull/365)ull/365
..
\[https://github.com/pytest-dev/pytest-mock/pull/364](https://github.com/pytest-dev/pytest-mock/pull/364)-mock/pull/364

###
[`v3.11.0`](https://github.com/pytest-dev/pytest-mock/blob/HEAD/CHANGELOG.rst#&#8203;3110-2023-06-15)

[Compare
Source](https://github.com/pytest-dev/pytest-mock/compare/v3.10.0...v3.11.0)

-   Fixed introspection for failed `assert_has_calls` (`#365`\_).

- Updated type annotations for `mocker.patch` and `mocker.spy`
(`#364`\_).

..
\_#&#820[https://github.com/pytest-dev/pytest-mock/pull/365](https://github.com/pytest-dev/pytest-mock/pull/365)ull/365
..
\[https://github.com/pytest-dev/pytest-mock/pull/364](https://github.com/pytest-dev/pytest-mock/pull/364)-mock/pull/364

</details>

<details>
<summary>python/mypy (typecheck/mypy)</summary>

### [`v1.4.0`](https://github.com/python/mypy/compare/v1.3.0...v1.4.0)

[Compare
Source](https://github.com/python/mypy/compare/v1.3.0...v1.4.0)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "every 3 months on the first day of
the month" (UTC), 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.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config help](https://github.com/renovatebot/renovate/discussions) if
that's undesired.

---

- [ ] <!-- 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://developer.mend.io/github/AlexWaygood/typeshed-stats).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNS4xNDQuMiIsInVwZGF0ZWRJblZlciI6IjM1LjE0NC4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.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.

PLC1901 false positive in __bool__ methods
1 participant