simplint 0.1.0__tar.gz → 0.2.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- simplint-0.2.2/CHANGELOG.md +520 -0
- simplint-0.2.2/CONTRIBUTING.md +157 -0
- simplint-0.2.2/Cargo.lock +3944 -0
- simplint-0.2.2/Cargo.toml +84 -0
- simplint-0.2.2/PKG-INFO +410 -0
- simplint-0.2.2/README.md +35 -0
- simplint-0.2.2/README.rst +379 -0
- simplint-0.2.2/docs/_static/apple-touch-icon.png +0 -0
- simplint-0.2.2/docs/_static/favicon.ico +0 -0
- simplint-0.2.2/docs/_static/favicon.svg +9 -0
- simplint-0.2.2/docs/_static/logo-192.png +0 -0
- simplint-0.2.2/docs/_static/logo-512.png +0 -0
- simplint-0.2.2/docs/_static/logo.png +0 -0
- simplint-0.2.2/docs/_static/rules.js +54 -0
- simplint-0.2.2/docs/_static/simplint.css +634 -0
- simplint-0.2.2/docs/_static/site.webmanifest +1 -0
- simplint-0.2.2/docs/_static/wordmark-dark.png +0 -0
- simplint-0.2.2/docs/_static/wordmark-light.png +0 -0
- simplint-0.2.2/docs/_templates/base.html +6 -0
- simplint-0.2.2/docs/cli.rst +11 -0
- simplint-0.2.2/docs/conf.py +297 -0
- simplint-0.2.2/docs/configuration.rst +257 -0
- simplint-0.2.2/docs/index.rst +190 -0
- simplint-0.2.2/docs/rules.rst +60 -0
- simplint-0.2.2/docs/simplint_cli.py +78 -0
- {simplint-0.1.0 → simplint-0.2.2}/pylock.toml +129 -12
- {simplint-0.1.0 → simplint-0.2.2}/pyproject.toml +11 -15
- simplint-0.2.2/src/cli/args.rs +611 -0
- simplint-0.2.2/src/cli/check.rs +517 -0
- simplint-0.2.2/src/cli/diagnostics.rs +178 -0
- simplint-0.2.2/src/cli/mod.rs +6 -0
- simplint-0.2.2/src/cli/printer.rs +373 -0
- simplint-0.2.2/src/cli/subcommands.rs +290 -0
- simplint-0.2.2/src/cli/watch.rs +70 -0
- simplint-0.2.2/src/fix/apply.rs +128 -0
- simplint-0.2.2/src/fix/errors.rs +104 -0
- simplint-0.2.2/src/fix/layout.rs +510 -0
- simplint-0.2.2/src/fix/mod.rs +274 -0
- simplint-0.2.2/src/fix/ruff.rs +320 -0
- simplint-0.2.2/src/lint/checker.rs +235 -0
- simplint-0.2.2/src/lint/mod.rs +112 -0
- simplint-0.2.2/src/lint/noqa.rs +262 -0
- simplint-0.2.2/src/lint/registry.rs +237 -0
- simplint-0.2.2/src/lint/walker.rs +144 -0
- simplint-0.2.2/src/main.rs +123 -0
- simplint-0.2.2/src/project/cache.rs +330 -0
- simplint-0.2.2/src/project/constructors.rs +457 -0
- simplint-0.2.2/src/project/facts.rs +343 -0
- simplint-0.2.2/src/project/index.rs +546 -0
- simplint-0.2.2/src/project/mod.rs +8 -0
- simplint-0.2.2/src/project/receivers.rs +545 -0
- simplint-0.1.0/src/rules/docs/SMP005.md → simplint-0.2.2/src/rules/comments/long_paragraph.md +7 -5
- simplint-0.2.2/src/rules/comments/long_paragraph.rs +84 -0
- simplint-0.2.2/src/rules/comments/mod.rs +7 -0
- simplint-0.2.2/src/rules/comments/section_comment.md +45 -0
- simplint-0.2.2/src/rules/comments/section_comment.rs +98 -0
- simplint-0.2.2/src/rules/comments/suppression_without_reason.md +50 -0
- simplint-0.2.2/src/rules/comments/suppression_without_reason.rs +104 -0
- simplint-0.2.2/src/rules/dataclasses/dataclass_kw_only.md +73 -0
- simplint-0.2.2/src/rules/dataclasses/dataclass_kw_only.rs +151 -0
- simplint-0.2.2/src/rules/dataclasses/dataclass_options.md +78 -0
- simplint-0.2.2/src/rules/dataclasses/dataclass_options.rs +191 -0
- simplint-0.2.2/src/rules/dataclasses/mod.rs +99 -0
- simplint-0.2.2/src/rules/docstrings/function_docstring.md +129 -0
- simplint-0.2.2/src/rules/docstrings/function_docstring.rs +283 -0
- simplint-0.2.2/src/rules/docstrings/mod.rs +143 -0
- simplint-0.1.0/src/rules/docs/SMP003.md → simplint-0.2.2/src/rules/docstrings/multiline_module_docstring.md +4 -3
- simplint-0.2.2/src/rules/docstrings/multiline_module_docstring.rs +20 -0
- simplint-0.2.2/src/rules/docstrings/test_module_docstring.md +52 -0
- simplint-0.2.2/src/rules/docstrings/test_module_docstring.rs +25 -0
- simplint-0.2.2/src/rules/docstrings/undocumented_public_api.md +67 -0
- simplint-0.2.2/src/rules/docstrings/undocumented_public_api.rs +48 -0
- simplint-0.2.2/src/rules/exports/all_format.md +49 -0
- simplint-0.2.2/src/rules/exports/all_format.rs +91 -0
- simplint-0.2.2/src/rules/exports/all_not_last.md +52 -0
- simplint-0.2.2/src/rules/exports/all_not_last.rs +52 -0
- simplint-0.2.2/src/rules/exports/missing_from_all.md +107 -0
- simplint-0.2.2/src/rules/exports/missing_from_all.rs +145 -0
- simplint-0.2.2/src/rules/exports/mod.rs +127 -0
- simplint-0.2.2/src/rules/imports/absolute_sibling_import.md +60 -0
- simplint-0.2.2/src/rules/imports/absolute_sibling_import.rs +110 -0
- simplint-0.2.2/src/rules/imports/dependency_import_guard.md +61 -0
- simplint-0.2.2/src/rules/imports/dependency_import_guard.rs +126 -0
- simplint-0.2.2/src/rules/imports/future_annotations.md +54 -0
- simplint-0.2.2/src/rules/imports/future_annotations.rs +44 -0
- simplint-0.2.2/src/rules/imports/init_module_content.md +34 -0
- simplint-0.2.2/src/rules/imports/init_module_content.rs +14 -0
- simplint-0.2.2/src/rules/imports/mod.rs +9 -0
- simplint-0.2.2/src/rules/mod.rs +213 -0
- simplint-0.2.2/src/rules/naming/mod.rs +125 -0
- simplint-0.2.2/src/rules/naming/module_variable_case.md +122 -0
- simplint-0.2.2/src/rules/naming/module_variable_case.rs +265 -0
- simplint-0.2.2/src/rules/naming/single_letter_name.md +48 -0
- simplint-0.2.2/src/rules/naming/single_letter_name.rs +81 -0
- simplint-0.2.2/src/rules/naming/unexported_public_name.md +74 -0
- simplint-0.2.2/src/rules/naming/unexported_public_name.rs +50 -0
- simplint-0.2.2/src/rules/strings/kinds.rs +1197 -0
- simplint-0.2.2/src/rules/strings/mod.rs +2 -0
- simplint-0.2.2/src/rules/strings/string_concatenation.md +72 -0
- simplint-0.2.2/src/rules/strings/string_concatenation.rs +201 -0
- simplint-0.2.2/src/rules/structure/definition_before_use.md +105 -0
- simplint-0.1.0/src/rules/order.rs → simplint-0.2.2/src/rules/structure/definition_before_use.rs +171 -80
- simplint-0.2.2/src/rules/structure/forwarding_function.md +47 -0
- simplint-0.2.2/src/rules/structure/forwarding_function.rs +82 -0
- simplint-0.2.2/src/rules/structure/mod.rs +16 -0
- simplint-0.2.2/src/rules/structure/single_user_constant.md +89 -0
- simplint-0.2.2/src/rules/structure/single_user_constant.rs +337 -0
- simplint-0.2.2/src/rules/structure/walrus_candidate.md +80 -0
- simplint-0.2.2/src/rules/structure/walrus_candidate.rs +239 -0
- simplint-0.1.0/src/rules/docs/SMP202.md → simplint-0.2.2/src/rules/testing/conditional_in_test.md +5 -4
- simplint-0.2.2/src/rules/testing/conditional_in_test.rs +53 -0
- simplint-0.2.2/src/rules/testing/constant_assert.md +39 -0
- simplint-0.2.2/src/rules/testing/constant_assert.rs +54 -0
- simplint-0.2.2/src/rules/testing/mock_attribute_assignment.md +45 -0
- simplint-0.2.2/src/rules/testing/mock_attribute_assignment.rs +119 -0
- simplint-0.2.2/src/rules/testing/mock_without_spec.md +47 -0
- simplint-0.2.2/src/rules/testing/mock_without_spec.rs +68 -0
- simplint-0.2.2/src/rules/testing/mod.rs +21 -0
- simplint-0.2.2/src/rules/testing/parametrize_without_id.md +46 -0
- simplint-0.2.2/src/rules/testing/parametrize_without_id.rs +43 -0
- simplint-0.2.2/src/rules/testing/test_class.md +45 -0
- simplint-0.2.2/src/rules/testing/test_class.rs +124 -0
- simplint-0.2.2/src/rules/typing/callable_ellipsis.md +37 -0
- simplint-0.2.2/src/rules/typing/callable_ellipsis.rs +24 -0
- simplint-0.2.2/src/rules/typing/missing_final.md +84 -0
- simplint-0.2.2/src/rules/typing/missing_final.rs +220 -0
- simplint-0.2.2/src/rules/typing/mod.rs +6 -0
- simplint-0.2.2/src/rules/typing/object_annotation.md +40 -0
- simplint-0.2.2/src/rules/typing/object_annotation.rs +44 -0
- simplint-0.2.2/src/rules/typing/vars_call.md +37 -0
- simplint-0.2.2/src/rules/typing/vars_call.rs +22 -0
- simplint-0.2.2/src/semantic/builder.rs +406 -0
- simplint-0.2.2/src/semantic/mod.rs +294 -0
- simplint-0.2.2/src/settings/conflicts.rs +257 -0
- simplint-0.2.2/src/settings/file.rs +75 -0
- simplint-0.2.2/src/settings/metadata.rs +67 -0
- simplint-0.2.2/src/settings/mod.rs +353 -0
- simplint-0.2.2/src/settings/options.rs +402 -0
- {simplint-0.1.0 → simplint-0.2.2}/tasks/assemble_release.py +22 -0
- {simplint-0.1.0 → simplint-0.2.2}/tasks/cargo_version.py +5 -0
- {simplint-0.1.0 → simplint-0.2.2}/tasks/check_sdist.py +5 -0
- simplint-0.2.2/tasks/ecosystem.py +309 -0
- simplint-0.2.2/tasks/generate_changelog.py +89 -0
- {simplint-0.1.0 → simplint-0.2.2}/tasks/generate_readme.py +30 -2
- simplint-0.2.2/tasks/pgo.py +371 -0
- simplint-0.2.2/tasks/pgo.toml +8 -0
- simplint-0.2.2/tasks/pgo_corpus.toml +7 -0
- {simplint-0.1.0 → simplint-0.2.2}/tasks/python_versions.py +54 -16
- {simplint-0.1.0 → simplint-0.2.2}/tasks/update_cargo_edit.py +36 -0
- simplint-0.2.2/tests/cache.rs +248 -0
- simplint-0.2.2/tests/check.rs +350 -0
- simplint-0.2.2/tests/common/mod.rs +280 -0
- simplint-0.2.2/tests/configuration.rs +472 -0
- simplint-0.2.2/tests/conflicts.rs +132 -0
- simplint-0.2.2/tests/fix.rs +465 -0
- simplint-0.1.0/resources/test/fixtures/SMP005.py → simplint-0.2.2/tests/fixtures/comments/long_paragraph/long_paragraph.py +10 -0
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP005_SMP005.py.snap → simplint-0.2.2/tests/fixtures/comments/long_paragraph/long_paragraph.snap +2 -2
- simplint-0.2.2/tests/fixtures/comments/section_comment/section_comment.py +33 -0
- simplint-0.2.2/tests/fixtures/comments/section_comment/section_comment.snap +43 -0
- simplint-0.1.0/resources/test/fixtures/SMP060.py → simplint-0.2.2/tests/fixtures/comments/suppression_without_reason/suppression_without_reason.py +10 -0
- simplint-0.2.2/tests/fixtures/comments/suppression_without_reason/suppression_without_reason.snap +18 -0
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP114_SMP114.py.snap → simplint-0.2.2/tests/fixtures/dataclasses/dataclass_kw_only/dataclass_kw_only.snap +5 -5
- simplint-0.2.2/tests/fixtures/dataclasses/dataclass_kw_only/dataclass_kw_only_calls.py +122 -0
- simplint-0.2.2/tests/fixtures/dataclasses/dataclass_kw_only/dataclass_kw_only_calls.snap +141 -0
- simplint-0.2.2/tests/fixtures/dataclasses/dataclass_kw_only/dataclass_kw_only_py39.snap +5 -0
- simplint-0.1.0/resources/test/fixtures/SMP111.py → simplint-0.2.2/tests/fixtures/dataclasses/dataclass_options/dataclass_options.py +2 -2
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP111_SMP111.py.snap → simplint-0.2.2/tests/fixtures/dataclasses/dataclass_options/dataclass_options.snap +23 -23
- simplint-0.2.2/tests/fixtures/dataclasses/dataclass_options/dataclass_options_receivers.py +127 -0
- simplint-0.2.2/tests/fixtures/dataclasses/dataclass_options/dataclass_options_receivers.snap +141 -0
- simplint-0.2.2/tests/fixtures/dataclasses/dataclass_options/dataclass_options_runtime.py +86 -0
- simplint-0.2.2/tests/fixtures/dataclasses/dataclass_options/dataclass_options_runtime.snap +100 -0
- simplint-0.2.2/tests/fixtures/docstrings/function_docstring/function_docstring.py +42 -0
- simplint-0.2.2/tests/fixtures/docstrings/function_docstring/function_docstring.snap +54 -0
- simplint-0.2.2/tests/fixtures/docstrings/function_docstring/function_docstring_contract.py +123 -0
- simplint-0.2.2/tests/fixtures/docstrings/function_docstring/function_docstring_contract.snap +148 -0
- simplint-0.2.2/tests/fixtures/docstrings/function_docstring/function_docstring_dynamic.py +13 -0
- simplint-0.2.2/tests/fixtures/docstrings/function_docstring/function_docstring_dynamic.snap +19 -0
- simplint-0.2.2/tests/fixtures/docstrings/function_docstring/function_docstring_exported.py +19 -0
- simplint-0.2.2/tests/fixtures/docstrings/function_docstring/function_docstring_exported.snap +26 -0
- simplint-0.2.2/tests/fixtures/docstrings/function_docstring/function_docstring_runtime.py +78 -0
- simplint-0.2.2/tests/fixtures/docstrings/function_docstring/function_docstring_runtime.snap +86 -0
- simplint-0.2.2/tests/fixtures/docstrings/function_docstring/function_docstring_undocumented_public_api.snap +5 -0
- simplint-0.2.2/tests/fixtures/docstrings/function_docstring/function_docstring_undocumented_public_api_imported.snap +17 -0
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP003_SMP003.py.snap → simplint-0.2.2/tests/fixtures/docstrings/multiline_module_docstring/multiline_module_docstring.snap +2 -2
- simplint-0.2.2/tests/fixtures/docstrings/multiline_module_docstring/multiline_module_docstring_ok.snap +5 -0
- simplint-0.2.2/tests/fixtures/docstrings/multiline_module_docstring/multiline_module_docstring_tests_test_module_docstring.snap +5 -0
- simplint-0.2.2/tests/fixtures/docstrings/test_module_docstring/test_module_docstring.snap +11 -0
- simplint-0.2.2/tests/fixtures/docstrings/test_module_docstring/test_module_docstring_inline.snap +9 -0
- simplint-0.2.2/tests/fixtures/docstrings/test_module_docstring/test_module_docstring_multiline_module_docstring.snap +5 -0
- simplint-0.2.2/tests/fixtures/docstrings/test_module_docstring/tests/test_module_docstring_inline.py +3 -0
- simplint-0.2.2/tests/fixtures/docstrings/undocumented_public_api/undocumented_public_api.py +77 -0
- simplint-0.2.2/tests/fixtures/docstrings/undocumented_public_api/undocumented_public_api.snap +10 -0
- simplint-0.2.2/tests/fixtures/docstrings/undocumented_public_api/undocumented_public_api_function_docstring_dynamic.snap +5 -0
- simplint-0.2.2/tests/fixtures/docstrings/undocumented_public_api/undocumented_public_api_imported.py +12 -0
- simplint-0.2.2/tests/fixtures/docstrings/undocumented_public_api/undocumented_public_api_imported.snap +5 -0
- simplint-0.2.2/tests/fixtures/docstrings/undocumented_public_api/undocumented_public_api_tests_test_module_docstring.snap +5 -0
- simplint-0.2.2/tests/fixtures/exports/all_format/all_format.py +19 -0
- simplint-0.2.2/tests/fixtures/exports/all_format/all_format.snap +34 -0
- simplint-0.2.2/tests/fixtures/exports/all_format/all_format_bare.py +5 -0
- simplint-0.2.2/tests/fixtures/exports/all_format/all_format_bare.snap +14 -0
- simplint-0.2.2/tests/fixtures/exports/all_format/all_format_tuple.py +11 -0
- simplint-0.2.2/tests/fixtures/exports/all_format/all_format_tuple.snap +25 -0
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP104_SMP104.py.snap → simplint-0.2.2/tests/fixtures/exports/all_not_last/all_not_last.snap +3 -3
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP104_SMP104_ann.py.snap → simplint-0.2.2/tests/fixtures/exports/all_not_last/all_not_last_ann.snap +2 -2
- simplint-0.2.2/tests/fixtures/exports/all_not_last/all_not_last_eof.snap +10 -0
- simplint-0.2.2/tests/fixtures/exports/all_not_last/all_not_last_fenced.py +13 -0
- simplint-0.2.2/tests/fixtures/exports/all_not_last/all_not_last_fenced.snap +19 -0
- simplint-0.2.2/tests/fixtures/exports/all_not_last/all_not_last_multiline_module_docstring_ok.snap +5 -0
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP104_SMP104_negated.py.snap → simplint-0.2.2/tests/fixtures/exports/all_not_last/all_not_last_negated.snap +3 -3
- simplint-0.2.2/tests/fixtures/exports/all_not_last/all_not_last_nested.py +5 -0
- simplint-0.2.2/tests/fixtures/exports/all_not_last/all_not_last_nested.snap +5 -0
- simplint-0.2.2/tests/fixtures/exports/all_not_last/all_not_last_nonl.snap +10 -0
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP104_SMP104_reversed.py.snap → simplint-0.2.2/tests/fixtures/exports/all_not_last/all_not_last_reversed.snap +3 -3
- simplint-0.2.2/tests/fixtures/exports/missing_from_all/consumer/use.py +35 -0
- simplint-0.2.2/tests/fixtures/exports/missing_from_all/missing_from_all.snap +23 -0
- simplint-0.2.2/tests/fixtures/exports/missing_from_all/missing_from_all_aug.snap +14 -0
- simplint-0.2.2/tests/fixtures/exports/missing_from_all/missing_from_all_bare.py +13 -0
- simplint-0.2.2/tests/fixtures/exports/missing_from_all/missing_from_all_bare.snap +23 -0
- simplint-0.2.2/tests/fixtures/exports/missing_from_all/missing_from_all_call.snap +4 -0
- simplint-0.2.2/tests/fixtures/exports/missing_from_all/missing_from_all_empty.snap +13 -0
- simplint-0.2.2/tests/fixtures/exports/missing_from_all/missing_from_all_guard.py +6 -0
- simplint-0.2.2/tests/fixtures/exports/missing_from_all/missing_from_all_guard.snap +17 -0
- simplint-0.2.2/tests/fixtures/exports/missing_from_all/missing_from_all_hanging.py +18 -0
- simplint-0.2.2/tests/fixtures/exports/missing_from_all/missing_from_all_hanging.snap +28 -0
- simplint-0.2.2/tests/fixtures/exports/missing_from_all/missing_from_all_hanging_comment.py +14 -0
- simplint-0.2.2/tests/fixtures/exports/missing_from_all/missing_from_all_hanging_comment.snap +21 -0
- simplint-0.2.2/tests/fixtures/exports/missing_from_all/missing_from_all_imported.py +10 -0
- simplint-0.2.2/tests/fixtures/exports/missing_from_all/missing_from_all_imported.snap +19 -0
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP113_SMP113_multiline.py.snap → simplint-0.2.2/tests/fixtures/exports/missing_from_all/missing_from_all_multiline.snap +3 -3
- simplint-0.2.2/tests/fixtures/exports/missing_from_all/missing_from_all_nested.py +10 -0
- simplint-0.2.2/tests/fixtures/exports/missing_from_all/missing_from_all_nested.snap +5 -0
- simplint-0.2.2/tests/fixtures/exports/missing_from_all/missing_from_all_noall.snap +13 -0
- simplint-0.2.2/tests/fixtures/exports/missing_from_all/missing_from_all_package___init__.snap +5 -0
- simplint-0.2.2/tests/fixtures/exports/missing_from_all/missing_from_all_reexport.py +1 -0
- simplint-0.2.2/tests/fixtures/exports/missing_from_all/missing_from_all_reexport.snap +5 -0
- simplint-0.2.2/tests/fixtures/exports/missing_from_all/missing_from_all_scripts.snap +13 -0
- simplint-0.2.2/tests/fixtures/exports/missing_from_all/missing_from_all_sorted.py +19 -0
- simplint-0.2.2/tests/fixtures/exports/missing_from_all/missing_from_all_sorted.snap +30 -0
- simplint-0.2.2/tests/fixtures/exports/missing_from_all/missing_from_all_tests_test_module_docstring.snap +5 -0
- simplint-0.2.2/tests/fixtures/imports/absolute_sibling_import/absolute_sibling_import_multiline_module_docstring_ok.snap +5 -0
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP110_package___init__.py.snap → simplint-0.2.2/tests/fixtures/imports/absolute_sibling_import/absolute_sibling_import_package___init__.snap +3 -3
- simplint-0.2.2/tests/fixtures/imports/absolute_sibling_import/absolute_sibling_import_package_sub_channel_exec.snap +5 -0
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP110_package_sub_module.py.snap → simplint-0.2.2/tests/fixtures/imports/absolute_sibling_import/absolute_sibling_import_package_sub_module.snap +4 -4
- simplint-0.2.2/tests/fixtures/imports/absolute_sibling_import/absolute_sibling_import_package_sub_remote_worker.snap +56 -0
- simplint-0.2.2/tests/fixtures/imports/absolute_sibling_import/absolute_sibling_import_package_sub_reversed_guard.snap +5 -0
- simplint-0.2.2/tests/fixtures/imports/absolute_sibling_import/absolute_sibling_import_package_sub_script.snap +5 -0
- simplint-0.2.2/tests/fixtures/imports/absolute_sibling_import/package/sub/channel_exec.py +8 -0
- simplint-0.2.2/tests/fixtures/imports/absolute_sibling_import/package/sub/remote_worker.py +48 -0
- simplint-0.2.2/tests/fixtures/imports/absolute_sibling_import/package/sub/reversed_guard.py +4 -0
- simplint-0.1.0/resources/test/fixtures/SMP040.py → simplint-0.2.2/tests/fixtures/imports/dependency_import_guard/dependency_import_guard.py +24 -0
- simplint-0.2.2/tests/fixtures/imports/dependency_import_guard/dependency_import_guard.snap +65 -0
- simplint-0.2.2/tests/fixtures/imports/dependency_import_guard/dependency_import_guard_py310.snap +68 -0
- simplint-0.2.2/tests/fixtures/imports/future_annotations/future_annotations.snap +11 -0
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP108_SMP108_checking.py.snap → simplint-0.2.2/tests/fixtures/imports/future_annotations/future_annotations_checking.snap +3 -3
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP108_SMP108_joined.py.snap → simplint-0.2.2/tests/fixtures/imports/future_annotations/future_annotations_joined.snap +2 -2
- simplint-0.2.2/tests/fixtures/imports/future_annotations/future_annotations_py310.snap +5 -0
- simplint-0.2.2/tests/fixtures/imports/init_module_content/init_module_content_multiline_module_docstring_ok.snap +5 -0
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP109_package___init__.py.snap → simplint-0.2.2/tests/fixtures/imports/init_module_content/init_module_content_package___init__.snap +2 -2
- simplint-0.2.2/tests/fixtures/imports/init_module_content/init_module_content_package_sub___init__.snap +5 -0
- simplint-0.1.0/resources/test/fixtures/SMP102.py → simplint-0.2.2/tests/fixtures/naming/module_variable_case/module_variable_case.py +4 -0
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP102_SMP102.py.snap → simplint-0.2.2/tests/fixtures/naming/module_variable_case/module_variable_case.snap +13 -7
- simplint-0.2.2/tests/fixtures/naming/module_variable_case/module_variable_case_alembic.py +17 -0
- simplint-0.2.2/tests/fixtures/naming/module_variable_case/module_variable_case_alembic.snap +23 -0
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP102_SMP102_ann.py.snap → simplint-0.2.2/tests/fixtures/naming/module_variable_case/module_variable_case_ann.snap +3 -3
- simplint-0.2.2/tests/fixtures/naming/module_variable_case/module_variable_case_call.snap +4 -0
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP102_SMP102_conflict.py.snap → simplint-0.2.2/tests/fixtures/naming/module_variable_case/module_variable_case_conflict.snap +3 -3
- simplint-0.2.2/tests/fixtures/naming/module_variable_case/module_variable_case_dbapi.py +4 -0
- simplint-0.2.2/tests/fixtures/naming/module_variable_case/module_variable_case_dbapi.snap +10 -0
- simplint-0.2.2/tests/fixtures/naming/module_variable_case/module_variable_case_frameworks.py +9 -0
- simplint-0.2.2/tests/fixtures/naming/module_variable_case/module_variable_case_frameworks.snap +15 -0
- simplint-0.2.2/tests/fixtures/naming/module_variable_case/module_variable_case_gunicorn.py +6 -0
- simplint-0.2.2/tests/fixtures/naming/module_variable_case/module_variable_case_gunicorn.snap +12 -0
- simplint-0.2.2/tests/fixtures/naming/module_variable_case/module_variable_case_kinds.py +21 -0
- simplint-0.2.2/tests/fixtures/naming/module_variable_case/module_variable_case_kinds.snap +27 -0
- simplint-0.2.2/tests/fixtures/naming/module_variable_case/module_variable_case_lookalikes.py +13 -0
- simplint-0.2.2/tests/fixtures/naming/module_variable_case/module_variable_case_lookalikes.snap +29 -0
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP102_SMP102_noall.py.snap → simplint-0.2.2/tests/fixtures/naming/module_variable_case/module_variable_case_noall.snap +4 -4
- simplint-0.2.2/tests/fixtures/naming/module_variable_case/module_variable_case_ply.py +19 -0
- simplint-0.2.2/tests/fixtures/naming/module_variable_case/module_variable_case_ply.snap +26 -0
- simplint-0.2.2/tests/fixtures/naming/module_variable_case/module_variable_case_ply_table.py +3 -0
- simplint-0.2.2/tests/fixtures/naming/module_variable_case/module_variable_case_ply_table.snap +5 -0
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP102_SMP102_rename.py.snap → simplint-0.2.2/tests/fixtures/naming/module_variable_case/module_variable_case_rename.snap +3 -3
- simplint-0.2.2/tests/fixtures/naming/module_variable_case/module_variable_case_scopes.snap +5 -0
- simplint-0.2.2/tests/fixtures/naming/module_variable_case/module_variable_case_strings.py +6 -0
- simplint-0.2.2/tests/fixtures/naming/module_variable_case/module_variable_case_strings.snap +15 -0
- simplint-0.2.2/tests/fixtures/naming/module_variable_case/module_variable_case_typer.py +4 -0
- simplint-0.2.2/tests/fixtures/naming/module_variable_case/module_variable_case_typer.snap +10 -0
- simplint-0.2.2/tests/fixtures/naming/module_variable_case/module_variable_case_version.py +7 -0
- simplint-0.2.2/tests/fixtures/naming/module_variable_case/module_variable_case_version.snap +13 -0
- simplint-0.1.0/resources/test/fixtures/SMP010.py → simplint-0.2.2/tests/fixtures/naming/single_letter_name/single_letter_name.py +10 -0
- simplint-0.2.2/tests/fixtures/naming/single_letter_name/single_letter_name.snap +18 -0
- simplint-0.1.0/resources/test/fixtures/SMP103.py → simplint-0.2.2/tests/fixtures/naming/unexported_public_name/unexported_public_name.py +4 -0
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP103_SMP103.py.snap → simplint-0.2.2/tests/fixtures/naming/unexported_public_name/unexported_public_name.snap +8 -4
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP103_SMP103_extend.py.snap → simplint-0.2.2/tests/fixtures/naming/unexported_public_name/unexported_public_name_extend.snap +3 -3
- simplint-0.2.2/tests/fixtures/naming/unexported_public_name/unexported_public_name_multiline_module_docstring_ok.snap +5 -0
- simplint-0.2.2/tests/fixtures/naming/unexported_public_name/unexported_public_name_ply.py +19 -0
- simplint-0.2.2/tests/fixtures/naming/unexported_public_name/unexported_public_name_ply.snap +25 -0
- simplint-0.2.2/tests/fixtures/naming/unexported_public_name/unexported_public_name_remove.snap +5 -0
- simplint-0.2.2/tests/fixtures/naming/unexported_public_name/unexported_public_name_tests_test_module_docstring.snap +5 -0
- simplint-0.1.0/resources/test/fixtures/SMP112.py → simplint-0.2.2/tests/fixtures/strings/string_concatenation/string_concatenation.py +14 -0
- simplint-0.2.2/tests/fixtures/strings/string_concatenation/string_concatenation.snap +60 -0
- simplint-0.2.2/tests/fixtures/strings/string_concatenation/string_concatenation_kinds.py +383 -0
- simplint-0.2.2/tests/fixtures/strings/string_concatenation/string_concatenation_kinds.snap +538 -0
- simplint-0.2.2/tests/fixtures/strings/string_concatenation/string_concatenation_old.py +14 -0
- simplint-0.2.2/tests/fixtures/strings/string_concatenation/string_concatenation_old_py310.snap +24 -0
- simplint-0.2.2/tests/fixtures/strings/string_concatenation/string_concatenation_types.py +130 -0
- simplint-0.2.2/tests/fixtures/strings/string_concatenation/string_concatenation_types.snap +177 -0
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP020_SMP020.py.snap → simplint-0.2.2/tests/fixtures/structure/definition_before_use/definition_before_use.snap +9 -9
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP020_SMP020_annotations.py.snap → simplint-0.2.2/tests/fixtures/structure/definition_before_use/definition_before_use_annotations.snap +4 -4
- simplint-0.2.2/tests/fixtures/structure/definition_before_use/definition_before_use_annotations_py310.snap +5 -0
- simplint-0.2.2/tests/fixtures/structure/definition_before_use/definition_before_use_classbody.py +10 -0
- simplint-0.2.2/tests/fixtures/structure/definition_before_use/definition_before_use_classbody.snap +5 -0
- simplint-0.2.2/tests/fixtures/structure/definition_before_use/definition_before_use_decorated.py +43 -0
- simplint-0.2.2/tests/fixtures/structure/definition_before_use/definition_before_use_decorated.snap +49 -0
- simplint-0.2.2/tests/fixtures/structure/definition_before_use/definition_before_use_decorated_py310.snap +49 -0
- simplint-0.2.2/tests/fixtures/structure/definition_before_use/definition_before_use_floating.snap +5 -0
- simplint-0.2.2/tests/fixtures/structure/definition_before_use/definition_before_use_import_time.py +47 -0
- simplint-0.2.2/tests/fixtures/structure/definition_before_use/definition_before_use_import_time.snap +55 -0
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP020_SMP020_nonl.py.snap → simplint-0.2.2/tests/fixtures/structure/definition_before_use/definition_before_use_nonl.snap +3 -3
- simplint-0.1.0/resources/test/fixtures/SMP030.py → simplint-0.2.2/tests/fixtures/structure/forwarding_function/forwarding_function.py +25 -0
- simplint-0.2.2/tests/fixtures/structure/forwarding_function/forwarding_function.snap +7 -0
- simplint-0.2.2/tests/fixtures/structure/single_user_constant/single_user_constant.py +214 -0
- simplint-0.2.2/tests/fixtures/structure/single_user_constant/single_user_constant.snap +214 -0
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP050_SMP050_all.py.snap → simplint-0.2.2/tests/fixtures/structure/single_user_constant/single_user_constant_all.snap +7 -7
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP050_SMP050_dynamic.py.snap → simplint-0.2.2/tests/fixtures/structure/single_user_constant/single_user_constant_dynamic.snap +3 -3
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP050_SMP050_spacing.py.snap → simplint-0.2.2/tests/fixtures/structure/single_user_constant/single_user_constant_spacing.snap +4 -4
- simplint-0.1.0/resources/test/fixtures/SMP100.py → simplint-0.2.2/tests/fixtures/structure/walrus_candidate/walrus_candidate.py +33 -0
- simplint-0.2.2/tests/fixtures/structure/walrus_candidate/walrus_candidate.snap +123 -0
- simplint-0.2.2/tests/fixtures/structure/walrus_candidate/walrus_candidate_dynamic.py +5 -0
- simplint-0.2.2/tests/fixtures/structure/walrus_candidate/walrus_candidate_dynamic.snap +5 -0
- simplint-0.2.2/tests/fixtures/structure/walrus_candidate/walrus_candidate_gate.py +11 -0
- simplint-0.2.2/tests/fixtures/structure/walrus_candidate/walrus_candidate_gate.snap +5 -0
- simplint-0.2.2/tests/fixtures/structure/walrus_candidate/walrus_candidate_listed.py +5 -0
- simplint-0.2.2/tests/fixtures/structure/walrus_candidate/walrus_candidate_listed.snap +5 -0
- simplint-0.2.2/tests/fixtures/structure/walrus_candidate/walrus_candidate_py37.snap +5 -0
- simplint-0.2.2/tests/fixtures/structure/walrus_candidate/walrus_candidate_width.py +68 -0
- simplint-0.2.2/tests/fixtures/structure/walrus_candidate/walrus_candidate_width.snap +73 -0
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP202_tests_test_SMP202.py.snap → simplint-0.2.2/tests/fixtures/testing/conditional_in_test/conditional_in_test.snap +2 -2
- simplint-0.2.2/tests/fixtures/testing/conditional_in_test/conditional_in_test_multiline_module_docstring_ok.snap +5 -0
- simplint-0.1.0/resources/test/fixtures/SMP205.py → simplint-0.2.2/tests/fixtures/testing/constant_assert/constant_assert.py +27 -0
- simplint-0.2.2/tests/fixtures/testing/constant_assert/constant_assert.snap +73 -0
- simplint-0.2.2/tests/fixtures/testing/mock_attribute_assignment/mock_attribute_assignment.snap +69 -0
- simplint-0.1.0/resources/test/fixtures/tests/test_SMP203.py → simplint-0.2.2/tests/fixtures/testing/mock_attribute_assignment/tests/test_mock_attribute_assignment.py +24 -0
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP204_tests_test_SMP204.py.snap → simplint-0.2.2/tests/fixtures/testing/mock_without_spec/mock_without_spec.snap +4 -2
- simplint-0.1.0/resources/test/fixtures/tests/test_SMP204.py → simplint-0.2.2/tests/fixtures/testing/mock_without_spec/tests/test_mock_without_spec.py +11 -0
- simplint-0.2.2/tests/fixtures/testing/parametrize_without_id/parametrize_without_id.snap +7 -0
- simplint-0.1.0/resources/test/fixtures/tests/test_SMP201.py → simplint-0.2.2/tests/fixtures/testing/parametrize_without_id/tests/test_parametrize_without_id.py +5 -0
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP200_tests_test_SMP200.py.snap → simplint-0.2.2/tests/fixtures/testing/test_class/test_class.snap +20 -8
- simplint-0.2.2/tests/fixtures/testing/test_class/test_class_multiline_module_docstring_ok.snap +5 -0
- simplint-0.1.0/resources/test/fixtures/tests/test_SMP200.py → simplint-0.2.2/tests/fixtures/testing/test_class/tests/test_class.py +10 -0
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP105_SMP105.py.snap → simplint-0.2.2/tests/fixtures/typing/callable_ellipsis/callable_ellipsis.snap +2 -2
- simplint-0.1.0/resources/test/fixtures/SMP101.py → simplint-0.2.2/tests/fixtures/typing/missing_final/missing_final.py +12 -0
- simplint-0.2.2/tests/fixtures/typing/missing_final/missing_final.snap +46 -0
- simplint-0.2.2/tests/fixtures/typing/missing_final/missing_final_alias.py +3 -0
- simplint-0.2.2/tests/fixtures/typing/missing_final/missing_final_alias.snap +9 -0
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP101_SMP101_bare.py.snap → simplint-0.2.2/tests/fixtures/typing/missing_final/missing_final_bare.snap +4 -4
- simplint-0.2.2/tests/fixtures/typing/missing_final/missing_final_branch.py +8 -0
- simplint-0.2.2/tests/fixtures/typing/missing_final/missing_final_branch.snap +15 -0
- simplint-0.2.2/tests/fixtures/typing/missing_final/missing_final_checking.snap +12 -0
- simplint-0.2.2/tests/fixtures/typing/missing_final/missing_final_checking_py310.snap +12 -0
- simplint-0.2.2/tests/fixtures/typing/missing_final/missing_final_future_py310.snap +14 -0
- simplint-0.2.2/tests/fixtures/typing/missing_final/missing_final_gate.py +10 -0
- simplint-0.2.2/tests/fixtures/typing/missing_final/missing_final_gate.snap +5 -0
- simplint-0.2.2/tests/fixtures/typing/missing_final/missing_final_module.snap +13 -0
- simplint-0.2.2/tests/fixtures/typing/missing_final/missing_final_new.snap +13 -0
- simplint-0.2.2/tests/fixtures/typing/missing_final/missing_final_order.py +8 -0
- simplint-0.2.2/tests/fixtures/typing/missing_final/missing_final_order.snap +15 -0
- simplint-0.2.2/tests/fixtures/typing/missing_final/missing_final_py37.snap +5 -0
- simplint-0.2.2/tests/fixtures/typing/missing_final/missing_final_sorted.py +3 -0
- simplint-0.2.2/tests/fixtures/typing/missing_final/missing_final_sorted.snap +9 -0
- simplint-0.2.2/tests/fixtures/typing/missing_final/missing_final_typing.snap +9 -0
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP106_SMP106.py.snap → simplint-0.2.2/tests/fixtures/typing/object_annotation/object_annotation.snap +2 -2
- simplint-0.2.2/tests/fixtures/typing/vars_call/vars_call.snap +5 -0
- simplint-0.2.2/tests/fixtures/typing/vars_call/vars_call_bound.snap +5 -0
- simplint-0.2.2/tests/layout.rs +246 -0
- simplint-0.2.2/tests/output.rs +195 -0
- simplint-0.2.2/tests/project_index.rs +441 -0
- simplint-0.2.2/tests/rules/comments.rs +10 -0
- simplint-0.2.2/tests/rules/dataclasses.rs +13 -0
- simplint-0.2.2/tests/rules/docstrings.rs +112 -0
- simplint-0.2.2/tests/rules/exports.rs +53 -0
- simplint-0.2.2/tests/rules/imports.rs +25 -0
- simplint-0.2.2/tests/rules/main.rs +13 -0
- simplint-0.2.2/tests/rules/naming.rs +54 -0
- simplint-0.2.2/tests/rules/strings.rs +11 -0
- simplint-0.2.2/tests/rules/structure.rs +139 -0
- simplint-0.2.2/tests/rules/testing.rs +15 -0
- simplint-0.2.2/tests/rules/typing.rs +25 -0
- simplint-0.2.2/tests/snapshots/output__format_azure.snap +7 -0
- simplint-0.2.2/tests/snapshots/output__format_concise.snap +9 -0
- simplint-0.2.2/tests/snapshots/output__format_full.snap +27 -0
- simplint-0.2.2/tests/snapshots/output__format_github.snap +7 -0
- simplint-0.2.2/tests/snapshots/output__format_gitlab.snap +45 -0
- simplint-0.2.2/tests/snapshots/output__format_grouped.snap +11 -0
- simplint-0.2.2/tests/snapshots/output__format_json-lines.snap +7 -0
- simplint-0.2.2/tests/snapshots/output__format_json.snap +61 -0
- simplint-0.2.2/tests/snapshots/output__format_junit.snap +22 -0
- simplint-0.2.2/tests/snapshots/output__format_pylint.snap +7 -0
- simplint-0.2.2/tests/snapshots/output__format_rdjson.snap +69 -0
- simplint-0.2.2/tests/snapshots/output__format_sarif.snap +138 -0
- simplint-0.2.2/tests/subcommands.rs +199 -0
- simplint-0.2.2/tests/suppressions.rs +176 -0
- simplint-0.2.2/tests/tasks/test_ecosystem.py +240 -0
- {simplint-0.1.0 → simplint-0.2.2}/tests/tasks/test_generate_changelog.py +30 -3
- {simplint-0.1.0 → simplint-0.2.2}/tests/tasks/test_generate_readme.py +10 -1
- simplint-0.2.2/tests/tasks/test_pgo.py +305 -0
- {simplint-0.1.0 → simplint-0.2.2}/tests/tasks/test_python_versions.py +9 -9
- simplint-0.2.2/tests/watch.rs +66 -0
- {simplint-0.1.0 → simplint-0.2.2}/tests/wheel/test_cli.py +9 -4
- {simplint-0.1.0 → simplint-0.2.2}/tox.toml +58 -2
- {simplint-0.1.0 → simplint-0.2.2}/uv.lock +71 -8
- simplint-0.1.0/CHANGELOG.md +0 -12
- simplint-0.1.0/CONTRIBUTING.md +0 -117
- simplint-0.1.0/Cargo.lock +0 -1469
- simplint-0.1.0/Cargo.toml +0 -37
- simplint-0.1.0/PKG-INFO +0 -147
- simplint-0.1.0/README.md +0 -14
- simplint-0.1.0/README.rst +0 -116
- simplint-0.1.0/docs/conf.py +0 -129
- simplint-0.1.0/docs/configuration.rst +0 -59
- simplint-0.1.0/docs/index.rst +0 -92
- simplint-0.1.0/docs/rules.rst +0 -23
- simplint-0.1.0/resources/test/fixtures/SMP001.py +0 -21
- simplint-0.1.0/resources/test/fixtures/SMP002.py +0 -22
- simplint-0.1.0/resources/test/fixtures/SMP050.py +0 -47
- simplint-0.1.0/resources/test/fixtures/SMP112_old.py +0 -2
- simplint-0.1.0/resources/test/fixtures/consumer/use.py +0 -23
- simplint-0.1.0/src/checker.rs +0 -119
- simplint-0.1.0/src/fix.rs +0 -43
- simplint-0.1.0/src/guards.rs +0 -21
- simplint-0.1.0/src/linter.rs +0 -54
- simplint-0.1.0/src/main.rs +0 -270
- simplint-0.1.0/src/noqa.rs +0 -57
- simplint-0.1.0/src/project.rs +0 -202
- simplint-0.1.0/src/registry.rs +0 -140
- simplint-0.1.0/src/rules/comments.rs +0 -219
- simplint-0.1.0/src/rules/constants.rs +0 -336
- simplint-0.1.0/src/rules/dataclasses.rs +0 -133
- simplint-0.1.0/src/rules/docs/SMP001.md +0 -31
- simplint-0.1.0/src/rules/docs/SMP002.md +0 -30
- simplint-0.1.0/src/rules/docs/SMP004.md +0 -34
- simplint-0.1.0/src/rules/docs/SMP010.md +0 -31
- simplint-0.1.0/src/rules/docs/SMP020.md +0 -50
- simplint-0.1.0/src/rules/docs/SMP030.md +0 -36
- simplint-0.1.0/src/rules/docs/SMP040.md +0 -36
- simplint-0.1.0/src/rules/docs/SMP050.md +0 -40
- simplint-0.1.0/src/rules/docs/SMP060.md +0 -32
- simplint-0.1.0/src/rules/docs/SMP100.md +0 -45
- simplint-0.1.0/src/rules/docs/SMP101.md +0 -39
- simplint-0.1.0/src/rules/docs/SMP102.md +0 -40
- simplint-0.1.0/src/rules/docs/SMP103.md +0 -48
- simplint-0.1.0/src/rules/docs/SMP104.md +0 -45
- simplint-0.1.0/src/rules/docs/SMP105.md +0 -33
- simplint-0.1.0/src/rules/docs/SMP106.md +0 -29
- simplint-0.1.0/src/rules/docs/SMP107.md +0 -31
- simplint-0.1.0/src/rules/docs/SMP108.md +0 -28
- simplint-0.1.0/src/rules/docs/SMP109.md +0 -32
- simplint-0.1.0/src/rules/docs/SMP110.md +0 -32
- simplint-0.1.0/src/rules/docs/SMP111.md +0 -33
- simplint-0.1.0/src/rules/docs/SMP112.md +0 -29
- simplint-0.1.0/src/rules/docs/SMP113.md +0 -44
- simplint-0.1.0/src/rules/docs/SMP114.md +0 -36
- simplint-0.1.0/src/rules/docs/SMP200.md +0 -34
- simplint-0.1.0/src/rules/docs/SMP201.md +0 -42
- simplint-0.1.0/src/rules/docs/SMP203.md +0 -32
- simplint-0.1.0/src/rules/docs/SMP204.md +0 -32
- simplint-0.1.0/src/rules/docs/SMP205.md +0 -32
- simplint-0.1.0/src/rules/docstrings.rs +0 -83
- simplint-0.1.0/src/rules/exports.rs +0 -141
- simplint-0.1.0/src/rules/functions.rs +0 -91
- simplint-0.1.0/src/rules/imports.rs +0 -215
- simplint-0.1.0/src/rules/mocks.rs +0 -212
- simplint-0.1.0/src/rules/mod.rs +0 -303
- simplint-0.1.0/src/rules/names.rs +0 -249
- simplint-0.1.0/src/rules/pytest.rs +0 -280
- simplint-0.1.0/src/rules/strings.rs +0 -132
- simplint-0.1.0/src/rules/typing.rs +0 -146
- simplint-0.1.0/src/rules/walrus.rs +0 -138
- simplint-0.1.0/src/semantic.rs +0 -474
- simplint-0.1.0/src/settings.rs +0 -197
- simplint-0.1.0/src/snapshot.rs +0 -69
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP001_SMP001.py.snap +0 -26
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP002_SMP002.py.snap +0 -28
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP003_SMP003_ok.py.snap +0 -5
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP003_tests_test_SMP004.py.snap +0 -5
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP004_SMP003.py.snap +0 -5
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP004_tests_test_SMP004.py.snap +0 -11
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP010_SMP010.py.snap +0 -18
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP020_SMP020_annotations.py_py310.snap +0 -5
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP020_SMP020_floating.py.snap +0 -5
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP030_SMP030.py.snap +0 -7
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP040_SMP040.py.snap +0 -40
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP040_SMP040.py_py310.snap +0 -42
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP050_SMP050.py.snap +0 -53
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP060_SMP060.py.snap +0 -11
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP100_SMP100.py.snap +0 -89
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP101_SMP101.py.snap +0 -31
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP101_SMP101_checking.py.snap +0 -12
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP101_SMP101_checking.py_py310.snap +0 -12
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP101_SMP101_future.py_py310.snap +0 -14
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP101_SMP101_module.py.snap +0 -13
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP101_SMP101_new.py.snap +0 -12
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP101_SMP101_typing.py.snap +0 -9
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP102_SMP102_call.py.snap +0 -4
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP102_SMP102_scopes.py.snap +0 -5
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP103_SMP003_ok.py.snap +0 -5
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP103_SMP103_remove.py.snap +0 -5
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP103_tests_test_SMP004.py.snap +0 -5
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP104_SMP003_ok.py.snap +0 -5
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP104_SMP104_eof.py.snap +0 -10
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP104_SMP104_nonl.py.snap +0 -9
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP107_SMP107.py.snap +0 -5
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP107_SMP107_bound.py.snap +0 -5
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP108_SMP108.py.snap +0 -11
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP108_SMP108.py_py310.snap +0 -5
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP109_SMP003_ok.py.snap +0 -5
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP109_package_sub___init__.py.snap +0 -5
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP110_SMP003_ok.py.snap +0 -5
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP110_package_sub_script.py.snap +0 -10
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP112_SMP112.py.snap +0 -42
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP112_SMP112_old.py_py310.snap +0 -5
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP113_SMP113.py.snap +0 -19
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP113_SMP113_aug.py.snap +0 -12
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP113_SMP113_call.py.snap +0 -4
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP113_SMP113_empty.py.snap +0 -11
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP113_SMP113_noall.py.snap +0 -11
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP113_SMP113_scripts.py.snap +0 -11
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP113_package___init__.py.snap +0 -5
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP113_tests_test_SMP004.py.snap +0 -5
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP200_SMP003_ok.py.snap +0 -5
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP201_tests_test_SMP201.py.snap +0 -6
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP202_SMP003_ok.py.snap +0 -5
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP203_tests_test_SMP203.py.snap +0 -45
- simplint-0.1.0/src/snapshots/simplint__snapshot__SMP205_SMP205.py.snap +0 -43
- simplint-0.1.0/tasks/generate_changelog.py +0 -48
- simplint-0.1.0/tests/cli.rs +0 -259
- simplint-0.1.0/toxfile.py +0 -29
- {simplint-0.1.0 → simplint-0.2.2}/CODE_OF_CONDUCT.md +0 -0
- {simplint-0.1.0 → simplint-0.2.2}/LICENSE.txt +0 -0
- {simplint-0.1.0 → simplint-0.2.2}/codecov.yml +0 -0
- {simplint-0.1.0 → simplint-0.2.2}/docs/__init__.py +0 -0
- {simplint-0.1.0 → simplint-0.2.2}/ignore-words.txt +0 -0
- {simplint-0.1.0 → simplint-0.2.2}/rust-toolchain.toml +0 -0
- /simplint-0.1.0/resources/test/fixtures/SMP114.py → /simplint-0.2.2/tests/fixtures/dataclasses/dataclass_kw_only/dataclass_kw_only.py +0 -0
- /simplint-0.1.0/resources/test/fixtures/SMP003.py → /simplint-0.2.2/tests/fixtures/docstrings/multiline_module_docstring/multiline_module_docstring.py +0 -0
- /simplint-0.1.0/resources/test/fixtures/SMP003_ok.py → /simplint-0.2.2/tests/fixtures/docstrings/multiline_module_docstring/multiline_module_docstring_ok.py +0 -0
- /simplint-0.1.0/resources/test/fixtures/tests/test_SMP004.py → /simplint-0.2.2/tests/fixtures/docstrings/test_module_docstring/tests/test_module_docstring.py +0 -0
- /simplint-0.1.0/resources/test/fixtures/SMP104.py → /simplint-0.2.2/tests/fixtures/exports/all_not_last/all_not_last.py +0 -0
- /simplint-0.1.0/resources/test/fixtures/SMP104_ann.py → /simplint-0.2.2/tests/fixtures/exports/all_not_last/all_not_last_ann.py +0 -0
- /simplint-0.1.0/resources/test/fixtures/SMP104_eof.py → /simplint-0.2.2/tests/fixtures/exports/all_not_last/all_not_last_eof.py +0 -0
- /simplint-0.1.0/resources/test/fixtures/SMP104_negated.py → /simplint-0.2.2/tests/fixtures/exports/all_not_last/all_not_last_negated.py +0 -0
- /simplint-0.1.0/resources/test/fixtures/SMP104_nonl.py → /simplint-0.2.2/tests/fixtures/exports/all_not_last/all_not_last_nonl.py +0 -0
- /simplint-0.1.0/resources/test/fixtures/SMP104_reversed.py → /simplint-0.2.2/tests/fixtures/exports/all_not_last/all_not_last_reversed.py +0 -0
- /simplint-0.1.0/resources/test/fixtures/SMP113.py → /simplint-0.2.2/tests/fixtures/exports/missing_from_all/missing_from_all.py +0 -0
- /simplint-0.1.0/resources/test/fixtures/SMP113_aug.py → /simplint-0.2.2/tests/fixtures/exports/missing_from_all/missing_from_all_aug.py +0 -0
- /simplint-0.1.0/resources/test/fixtures/SMP113_call.py → /simplint-0.2.2/tests/fixtures/exports/missing_from_all/missing_from_all_call.py +0 -0
- /simplint-0.1.0/resources/test/fixtures/SMP113_empty.py → /simplint-0.2.2/tests/fixtures/exports/missing_from_all/missing_from_all_empty.py +0 -0
- /simplint-0.1.0/resources/test/fixtures/SMP113_multiline.py → /simplint-0.2.2/tests/fixtures/exports/missing_from_all/missing_from_all_multiline.py +0 -0
- /simplint-0.1.0/resources/test/fixtures/SMP113_noall.py → /simplint-0.2.2/tests/fixtures/exports/missing_from_all/missing_from_all_noall.py +0 -0
- /simplint-0.1.0/resources/test/fixtures/SMP113_scripts.py → /simplint-0.2.2/tests/fixtures/exports/missing_from_all/missing_from_all_scripts.py +0 -0
- {simplint-0.1.0/resources/test/fixtures → simplint-0.2.2/tests/fixtures/imports/absolute_sibling_import}/package/__init__.py +0 -0
- {simplint-0.1.0/resources/test/fixtures → simplint-0.2.2/tests/fixtures/imports/absolute_sibling_import}/package/sub/__init__.py +0 -0
- {simplint-0.1.0/resources/test/fixtures → simplint-0.2.2/tests/fixtures/imports/absolute_sibling_import}/package/sub/module.py +0 -0
- {simplint-0.1.0/resources/test/fixtures → simplint-0.2.2/tests/fixtures/imports/absolute_sibling_import}/package/sub/script.py +0 -0
- /simplint-0.1.0/resources/test/fixtures/SMP108.py → /simplint-0.2.2/tests/fixtures/imports/future_annotations/future_annotations.py +0 -0
- /simplint-0.1.0/resources/test/fixtures/SMP108_checking.py → /simplint-0.2.2/tests/fixtures/imports/future_annotations/future_annotations_checking.py +0 -0
- /simplint-0.1.0/resources/test/fixtures/SMP108_joined.py → /simplint-0.2.2/tests/fixtures/imports/future_annotations/future_annotations_joined.py +0 -0
- /simplint-0.1.0/resources/test/fixtures/SMP102_ann.py → /simplint-0.2.2/tests/fixtures/naming/module_variable_case/module_variable_case_ann.py +0 -0
- /simplint-0.1.0/resources/test/fixtures/SMP102_call.py → /simplint-0.2.2/tests/fixtures/naming/module_variable_case/module_variable_case_call.py +0 -0
- /simplint-0.1.0/resources/test/fixtures/SMP102_conflict.py → /simplint-0.2.2/tests/fixtures/naming/module_variable_case/module_variable_case_conflict.py +0 -0
- /simplint-0.1.0/resources/test/fixtures/SMP102_noall.py → /simplint-0.2.2/tests/fixtures/naming/module_variable_case/module_variable_case_noall.py +0 -0
- /simplint-0.1.0/resources/test/fixtures/SMP102_rename.py → /simplint-0.2.2/tests/fixtures/naming/module_variable_case/module_variable_case_rename.py +0 -0
- /simplint-0.1.0/resources/test/fixtures/SMP102_scopes.py → /simplint-0.2.2/tests/fixtures/naming/module_variable_case/module_variable_case_scopes.py +0 -0
- /simplint-0.1.0/resources/test/fixtures/SMP103_extend.py → /simplint-0.2.2/tests/fixtures/naming/unexported_public_name/unexported_public_name_extend.py +0 -0
- /simplint-0.1.0/resources/test/fixtures/SMP103_remove.py → /simplint-0.2.2/tests/fixtures/naming/unexported_public_name/unexported_public_name_remove.py +0 -0
- /simplint-0.1.0/resources/test/fixtures/SMP020.py → /simplint-0.2.2/tests/fixtures/structure/definition_before_use/definition_before_use.py +0 -0
- /simplint-0.1.0/resources/test/fixtures/SMP020_annotations.py → /simplint-0.2.2/tests/fixtures/structure/definition_before_use/definition_before_use_annotations.py +0 -0
- /simplint-0.1.0/resources/test/fixtures/SMP020_floating.py → /simplint-0.2.2/tests/fixtures/structure/definition_before_use/definition_before_use_floating.py +0 -0
- /simplint-0.1.0/resources/test/fixtures/SMP020_nonl.py → /simplint-0.2.2/tests/fixtures/structure/definition_before_use/definition_before_use_nonl.py +0 -0
- /simplint-0.1.0/resources/test/fixtures/SMP050_all.py → /simplint-0.2.2/tests/fixtures/structure/single_user_constant/single_user_constant_all.py +0 -0
- /simplint-0.1.0/resources/test/fixtures/SMP050_dynamic.py → /simplint-0.2.2/tests/fixtures/structure/single_user_constant/single_user_constant_dynamic.py +0 -0
- /simplint-0.1.0/resources/test/fixtures/SMP050_spacing.py → /simplint-0.2.2/tests/fixtures/structure/single_user_constant/single_user_constant_spacing.py +0 -0
- /simplint-0.1.0/resources/test/fixtures/tests/test_SMP202.py → /simplint-0.2.2/tests/fixtures/testing/conditional_in_test/tests/test_conditional_in_test.py +0 -0
- /simplint-0.1.0/resources/test/fixtures/SMP105.py → /simplint-0.2.2/tests/fixtures/typing/callable_ellipsis/callable_ellipsis.py +0 -0
- /simplint-0.1.0/resources/test/fixtures/SMP101_bare.py → /simplint-0.2.2/tests/fixtures/typing/missing_final/missing_final_bare.py +0 -0
- /simplint-0.1.0/resources/test/fixtures/SMP101_checking.py → /simplint-0.2.2/tests/fixtures/typing/missing_final/missing_final_checking.py +0 -0
- /simplint-0.1.0/resources/test/fixtures/SMP101_future.py → /simplint-0.2.2/tests/fixtures/typing/missing_final/missing_final_future.py +0 -0
- /simplint-0.1.0/resources/test/fixtures/SMP101_module.py → /simplint-0.2.2/tests/fixtures/typing/missing_final/missing_final_module.py +0 -0
- /simplint-0.1.0/resources/test/fixtures/SMP101_new.py → /simplint-0.2.2/tests/fixtures/typing/missing_final/missing_final_new.py +0 -0
- /simplint-0.1.0/resources/test/fixtures/SMP101_typing.py → /simplint-0.2.2/tests/fixtures/typing/missing_final/missing_final_typing.py +0 -0
- /simplint-0.1.0/resources/test/fixtures/SMP106.py → /simplint-0.2.2/tests/fixtures/typing/object_annotation/object_annotation.py +0 -0
- /simplint-0.1.0/resources/test/fixtures/SMP107.py → /simplint-0.2.2/tests/fixtures/typing/vars_call/vars_call.py +0 -0
- /simplint-0.1.0/resources/test/fixtures/SMP107_bound.py → /simplint-0.2.2/tests/fixtures/typing/vars_call/vars_call_bound.py +0 -0
- {simplint-0.1.0 → simplint-0.2.2}/tests/tasks/test_assemble_release.py +0 -0
- {simplint-0.1.0 → simplint-0.2.2}/tests/tasks/test_cargo_version.py +0 -0
- {simplint-0.1.0 → simplint-0.2.2}/tests/tasks/test_check_sdist.py +0 -0
- {simplint-0.1.0 → simplint-0.2.2}/tests/tasks/test_update_cargo_edit.py +0 -0
|
@@ -0,0 +1,520 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 0.2.2 (2026-11-02)
|
|
4
|
+
|
|
5
|
+
<a name="release-0-2-2"></a>
|
|
6
|
+
|
|
7
|
+
<a name="release-0-2-2-fixed"></a>
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- Release wheels build again: the profile-guided optimization run no longer stops on the Ruff docstring rules simplint
|
|
12
|
+
refuses to run beside ([#17](https://github.com/gaborbernat/simplint/pull/17)) by
|
|
13
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
14
|
+
|
|
15
|
+
## 0.2.1 (2026-11-02)
|
|
16
|
+
|
|
17
|
+
<a name="release-0-2-1"></a>
|
|
18
|
+
|
|
19
|
+
## 0.2.0 (2026-11-02)
|
|
20
|
+
|
|
21
|
+
<a name="release-0-2-0"></a>
|
|
22
|
+
|
|
23
|
+
<a name="release-0-2-0-added"></a>
|
|
24
|
+
|
|
25
|
+
### Added
|
|
26
|
+
|
|
27
|
+
- `all-format` follows Ruff's `skip-magic-trailing-comma`: with it set, `ruff format` drops the trailing comma, so the
|
|
28
|
+
rule only asks for a list ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
|
|
29
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
30
|
+
- `all-format` requires `__all__` to be a list with a trailing comma, so the formatter keeps one name per line
|
|
31
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
32
|
+
- Like Ruff, `simplint check` caches which files had nothing to report, and with them the import facts of each file, so
|
|
33
|
+
later runs skip unchanged files. A cached result is reused only while the file, its settings and the names other files
|
|
34
|
+
use from it are unchanged. The cache lives in Ruff's cache directory, `.ruff_cache` unless Ruff's `cache-dir`,
|
|
35
|
+
`--cache-dir` or `RUFF_CACHE_DIR` names another, under `simplint/<version>`, next to Ruff's own files, which it leaves
|
|
36
|
+
alone. It is a compact binary file per package, written only when it changed, and keeps files other runs checked for
|
|
37
|
+
30 days, as Ruff's does. `--no-cache` or `SIMPLINT_NO_CACHE` turns it off, and `simplint clean` removes simplint's
|
|
38
|
+
part of each `.ruff_cache` ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
|
|
39
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
40
|
+
- `constant-assert` (SMP205) reads truthiness the way Ruff does, so it also reports assertions on non-empty list, set
|
|
41
|
+
and dict literals, f-strings and lambdas, such as `assert [value]`. A tuple holding only starred elements, which may
|
|
42
|
+
be empty, is no longer reported. An assertion that calls something, such as `assert [compute()]`, gets no fix
|
|
43
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
44
|
+
- `[tool.simplint]` takes `fixable`, `unfixable`, `extend-fixable`, `extend-unfixable`, `extend-safe-fixes`,
|
|
45
|
+
`extend-unsafe-fixes` and `extend-per-file-ignores`, with Ruff's meaning, and a `per-file-ignores` pattern starting
|
|
46
|
+
with `!` applies to every file it does not match ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
|
|
47
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
48
|
+
- Every fix carries a title saying what it changes, such as "Annotate `LIMIT` with `Final`", shown as the `help:` line
|
|
49
|
+
of the full output and as the fix message of the JSON, SARIF and GitHub formats, as Ruff does for its own fixes
|
|
50
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
51
|
+
- `--config`, `--isolated` and the new `--color` flag go before or after the subcommand, as in Ruff. `--config` also
|
|
52
|
+
takes `KEY = VALUE` overrides: a `[tool.simplint]` key, such as `--config "select = ['SMP1']"`, overrides simplint's
|
|
53
|
+
setting, and any other key Ruff's, such as `--config "target-version = 'py312'"`. `FORCE_COLOR` turns colors on as in
|
|
54
|
+
Ruff ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
55
|
+
- Add the `naming.keep-names` option, a list of module-scope names `module-variable-case` (SMP102) leaves as they are,
|
|
56
|
+
for frameworks simplint does not recognize; `--config "naming.keep-names = [...]"` overrides it
|
|
57
|
+
([#8](https://github.com/gaborbernat/simplint/pull/8)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
58
|
+
- `simplint check` now behaves like `ruff check`: it prints reports in any of Ruff's output formats (`full` by default,
|
|
59
|
+
`concise`, `grouped`, `json`, `json-lines`, `junit`, `github`, `gitlab`, `pylint`, `rdjson`, `azure` and `sarif`),
|
|
60
|
+
with Ruff's summary lines and exit codes, and takes Ruff's flags: `--fix-only`, `--show-fixes`, `--statistics`,
|
|
61
|
+
`--exit-zero`, `--exit-non-zero-on-fix`, `--ignore-noqa`, `--output-file`, `--extend-select`, `--stdin-filename` or
|
|
62
|
+
`-`, and the `--quiet`, `--silent` and `--verbose` log levels. A file that does not parse or cannot be read is
|
|
63
|
+
reported as an `invalid-syntax` or `io-error` diagnostic, and the rest of the run goes on
|
|
64
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
65
|
+
- `simplint check` takes the rest of `ruff check`'s flags: `--watch` checks again whenever a Python or TOML file
|
|
66
|
+
changes, `--add-noqa[=REASON]` and `--add-ignore[=REASON]` write suppression comments for every report, `--show-files`
|
|
67
|
+
and `--show-settings` print the files and settings a check would use, and `--preview`, `--extend-ignore`,
|
|
68
|
+
`--per-file-ignores`, `--extend-per-file-ignores`, `--fixable`, `--unfixable`, `--extend-fixable` and
|
|
69
|
+
`--extend-unfixable` work as in Ruff, with Ruff's conflicts between flags
|
|
70
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
71
|
+
- Fixes now leave nothing for Ruff to redo when `simplint check --fix` runs between `ruff check --fix` and
|
|
72
|
+
`ruff format`: a Ruff violation a fix introduces, or a Ruff fix it makes possible such as a return type Ruff can now
|
|
73
|
+
infer, gets Ruff's own fix in the same run, and otherwise the fix is withdrawn and the report kept. Layout is left to
|
|
74
|
+
`ruff format`, save a line no formatting can bring under the line length, such as a name or string too long by itself
|
|
75
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
76
|
+
- `simplint rule --all`, `simplint config [KEY]`, `simplint linter`, `simplint clean`, `simplint version` and
|
|
77
|
+
`simplint generate-shell-completion SHELL` work like Ruff's subcommands of the same names, and `rule`, `config`,
|
|
78
|
+
`linter` and `version` take `--output-format json` ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
|
|
79
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
80
|
+
- simplint stops with exit status 2 before linting when a simplint rule and a Ruff rule on for the same file work
|
|
81
|
+
against each other: `function-docstring` with Ruff's missing-docstring rules D101 to D107, `test-module-docstring`
|
|
82
|
+
with D100 or D104 on test modules, `future-annotations` with I002 adding `from __future__ import annotations` on
|
|
83
|
+
Python 3.14 and newer, and `absolute-sibling-import` with TID252 banning every relative import. The error names both
|
|
84
|
+
rules, the configuration files that enable them, the first file affected and how to resolve the clash. Before, the fix
|
|
85
|
+
loop kept the report forever, or gave up after 100 passes ([#4](https://github.com/gaborbernat/simplint/pull/4)) by
|
|
86
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
87
|
+
- A `# simplint: ignore[SMP010]` comment suppresses the listed rules on its line, as `# ruff: ignore[...]` does for
|
|
88
|
+
Ruff's rules, and `suppression-without-reason` asks for a reason after it
|
|
89
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
90
|
+
- `string-concatenation` joins strings in different quote styles when one delimiter fits them all, joins implicitly
|
|
91
|
+
concatenated literals, puts an expression written over several lines on one, and before Python 3.12 switches the
|
|
92
|
+
quotes of string literals inside an expression that would clash with the f-string's own. It leaves alone a literal
|
|
93
|
+
with a named escape such as `\N{BULLET}`, and inside another f-string's replacement field keeps the quotes as written
|
|
94
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
95
|
+
- `undocumented-public-api` requires a docstring on every function, class and public method the module exports through
|
|
96
|
+
`__all__`, and a docstring or `#:` comment on every exported variable
|
|
97
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
98
|
+
- `walrus-candidate` also takes an assignment joined by `;` to the statements before it on its line, as `ruff format`
|
|
99
|
+
puts it on a line of its own either way ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
|
|
100
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
101
|
+
|
|
102
|
+
<a name="release-0-2-0-changes"></a>
|
|
103
|
+
|
|
104
|
+
### Changes
|
|
105
|
+
|
|
106
|
+
- `single-letter-name` no longer checks anything inside a comprehension or generator expression; single-letter names
|
|
107
|
+
there are fine ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
|
|
108
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
109
|
+
- `definition-before-use` offers its fix on the first report of each body only: that one fix reorders the whole body,
|
|
110
|
+
and repeating it on every report made the default output slow on files with many misplaced definitions
|
|
111
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
112
|
+
- A file that cannot be read, parsed or fixed is reported as an error and left unchanged, and the other files are still
|
|
113
|
+
checked ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
114
|
+
- `missing-from-all` and `all-format` write `__all__` one name per line with a trailing comma, the layout `ruff format`
|
|
115
|
+
gives it, and `missing-from-all` inserts names in sorted order and above a closing `if __name__ == "__main__":` block
|
|
116
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
117
|
+
- `function-docstring` (SMP002) keeps the text of a docstring that may state a contract: its fix turns any docstring
|
|
118
|
+
longer than one line of five words into a `#` comment block in its place, wrapped to Ruff's line and doc line limits,
|
|
119
|
+
instead of deleting it. A one-line docstring of at most five words, such as `"""Return the value."""`, is still
|
|
120
|
+
deleted ([#7](https://github.com/gaborbernat/simplint/pull/7)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
121
|
+
- `function-docstring` no longer reports docstrings on the public API, the names `__all__` exports and the public
|
|
122
|
+
methods of exported classes, which `undocumented-public-api` now requires
|
|
123
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
124
|
+
- `missing-final`'s fix is now unsafe, since the added `Final` shows in the module's runtime `__annotations__`
|
|
125
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
126
|
+
- `missing-from-all` writes a trailing comma when it creates `__all__`, and creating `__all__` is now an unsafe fix,
|
|
127
|
+
since it narrows what `from module import *` exports ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
|
|
128
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
129
|
+
- Module names in imports, attribute access, patch targets and entry points now resolve to files with ty's module
|
|
130
|
+
resolver, the one behind `ruff analyze graph`, searching Ruff's `src` directories and package roots. Cross-file rules
|
|
131
|
+
such as `missing-from-all` and the rename fixes see `src` layouts and pytest rootdir test packages correctly and no
|
|
132
|
+
longer match a module by a guessed dotted suffix of its path ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
|
|
133
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
134
|
+
- simplint no longer repeats Ruff's warnings about Ruff's own configuration, such as a removed rule left in `ignore` or
|
|
135
|
+
a deprecated top-level setting, on every run; `ruff check` already shows them. Warnings about simplint's own work stay
|
|
136
|
+
([#8](https://github.com/gaborbernat/simplint/pull/8)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
137
|
+
- Files and the target Python version now come from Ruff's own configuration resolution: `--config`, `--isolated`,
|
|
138
|
+
`extend` chains, user-level Ruff configuration, Ruff's built-in excludes, `lint.exclude`, `respect-gitignore`,
|
|
139
|
+
`force-exclude` and `per-file-target-version` all apply, and `--target-version`, `--exclude`, `--extend-exclude`,
|
|
140
|
+
`--respect-gitignore` and `--force-exclude` override them. Without any version setting the target is Ruff's default,
|
|
141
|
+
Python 3.14, instead of 3.11. `[tool.simplint]` also takes `fix`, `fix-only`, `unsafe-fixes`, `show-fixes` and
|
|
142
|
+
`output-format`, and rejects unknown keys ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
|
|
143
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
144
|
+
- Imports resolve with `ruff_graph`'s module database and Ruff's import helpers, so a file's package follows Ruff's
|
|
145
|
+
package detection, including `namespace-packages`, and a relative import reaching above the top-level package resolves
|
|
146
|
+
to nothing, as in Python ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
|
|
147
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
148
|
+
- `simplint rule` prints like `ruff rule`: a rule without a fix no longer says so, and an unknown rule is rejected as an
|
|
149
|
+
invalid argument ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
|
|
150
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
151
|
+
- When `select` and `ignore` both match a rule, the more specific entry wins, as in Ruff:
|
|
152
|
+
`--select SMP001 --ignore SMP0` keeps `SMP001`. Before, `ignore` always won
|
|
153
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
154
|
+
- `mock-without-spec`, `mock-attribute-assignment`, `parametrize-without-id`, the dataclass rules, `missing-final` and
|
|
155
|
+
`callable-ellipsis` resolve `patch`, `pytest.mark.parametrize`, `pytest.param`, `dataclass`, `TypeVar` and `Callable`
|
|
156
|
+
through the module's imports, as Ruff does, instead of matching the last part of the name
|
|
157
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
158
|
+
- `single-user-constant` (SMP050) reports only constants whose value is written out in the source: strings, bytes,
|
|
159
|
+
numbers, booleans, `None`, operations between them, `frozenset` of them, and tuple, list, set and dict displays of
|
|
160
|
+
them. A call result such as a cache, a logger, a compiled pattern, a path or a client, and a name or attribute read
|
|
161
|
+
from elsewhere, stays at module level, since moving it would build a new object on every call and break tests that
|
|
162
|
+
patch it ([#7](https://github.com/gaborbernat/simplint/pull/7)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
163
|
+
- `string-concatenation` turns `str(x)`, `repr(x)` and `ascii(x)` into `!s`, `!r` and `!a` conversions and offers no fix
|
|
164
|
+
when a comment sits between the operands ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
|
|
165
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
166
|
+
- The `test-module-docstring` fix is now unsafe, since a fixture package under `tests` may read its docstring
|
|
167
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
168
|
+
|
|
169
|
+
<a name="release-0-2-0-fixed"></a>
|
|
170
|
+
|
|
171
|
+
### Fixed
|
|
172
|
+
|
|
173
|
+
- `absolute-sibling-import` (SMP110) no longer reports an import in a directory without an `__init__.py` that Ruff's
|
|
174
|
+
`namespace-packages` makes a package, such as a pytest `tests` directory, where the relative import would fail
|
|
175
|
+
([#8](https://github.com/gaborbernat/simplint/pull/8)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
176
|
+
- `absolute-sibling-import` (SMP110) no longer reports imports in a module that compares `__name__` with a string, such
|
|
177
|
+
as a script with a `__main__` guard or an execnet `__channelexec__` module, nor imports inside a function passed to
|
|
178
|
+
`remote_exec` or `inspect.getsource`. That code runs outside its package, where the relative import fails
|
|
179
|
+
([#13](https://github.com/gaborbernat/simplint/pull/13)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
180
|
+
- `all-format` writes a multi-line `__all__` whose closing bracket follows the last name one name per line, instead of a
|
|
181
|
+
comma before the bracket that Ruff's COM819 removes again ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
|
|
182
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
183
|
+
- `all-not-last` moves a `# fmt: off` / `# fmt: on` pair that fences `__all__` along with it, so `ruff format` does not
|
|
184
|
+
reformat the list and strand a suppression comment that covers several names on one line
|
|
185
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
186
|
+
- `all-not-last` offers no fix when a later block extends `__all__` with `+=`, which the move would leave without a list
|
|
187
|
+
to extend ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
188
|
+
- `all-not-last` keeps two blank lines before the moved `__all__` when the file has no final newline
|
|
189
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
190
|
+
- A file starting with a byte order mark no longer crashes `definition-before-use` and the rules that look for a comment
|
|
191
|
+
above a statement ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
|
|
192
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
193
|
+
- `definition-before-use` no longer moves a definition below a class body that reads it, as in
|
|
194
|
+
`Interrupted = Interrupted` ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
|
|
195
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
196
|
+
- Ruff's cleanup after a fix keeps every rule on and only limits which ones it fixes, so it no longer drops suppression
|
|
197
|
+
comments such as `# ruff: ignore[unused-import]` as unused and then removes the imports they kept for other modules
|
|
198
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
199
|
+
- `long-paragraph` treats each reST field, such as `:param name:`, as its own paragraph, and `section-comment` no longer
|
|
200
|
+
deletes a prose line that ends in `===` ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
|
|
201
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
202
|
+
- `constant-assert` keeps an element of `assert (check, message)` that is written over several lines inside parentheses
|
|
203
|
+
when it rewrites the assertion, instead of leaving a syntax error
|
|
204
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
205
|
+
- `single-user-constant` (SMP050) keeps a local name for a string whose one use calls `format`, since Ruff's f-string
|
|
206
|
+
rule (UP032) would treat the inlined literal differently depending on the layout
|
|
207
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
208
|
+
- `dataclass-kw-only` (SMP114) no longer breaks positional calls such as `Partition(msg.topic(), msg.partition())`: its
|
|
209
|
+
fix passes the arguments of the calls in the same module by keyword, and reports each positional call in other checked
|
|
210
|
+
files with a safe fix of its own, which the same run applies. The fix of the decorator is not offered while a use
|
|
211
|
+
could still pass fields by position, such as a call unpacking `*args` (`**kwargs` passes by keyword and does not block
|
|
212
|
+
it), a subclass, a star import of the module, or a call in a file that ignores the rule
|
|
213
|
+
([#9](https://github.com/gaborbernat/simplint/pull/9)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
214
|
+
- `dataclass-options` (SMP111) no longer freezes a dataclass when a field name is written on an object simplint cannot
|
|
215
|
+
type, such as `envs[name].active = True`, or when the class has a base class other than `Generic[...]` or a subclass.
|
|
216
|
+
It no longer adds `slots=True` when a subclass has several bases, such as `threading.local`, whose layout conflicts
|
|
217
|
+
([#9](https://github.com/gaborbernat/simplint/pull/9)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
218
|
+
- `dataclass-options` (SMP111) now sees writes on instances of classes defined in a package's `__init__.py`, and no
|
|
219
|
+
longer adds `slots=True` to a class that writes a `ClassVar` through an instance, reaches its `__dict__`, is pickled
|
|
220
|
+
with protocol 0 or 1 while mutable, or is frozen with subclasses that store attributes. It offers no fix for a class
|
|
221
|
+
without fields or one a test creates inside `pytest.raises`. `dataclass-kw-only` (SMP114) treats `module.Name(...)`
|
|
222
|
+
positional calls on a module no import binds as uses it cannot rewrite
|
|
223
|
+
([#14](https://github.com/gaborbernat/simplint/pull/14)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
224
|
+
- `dataclass-options` and `dataclass-kw-only` stay silent for targets below Python 3.10, where those dataclass arguments
|
|
225
|
+
do not exist ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
226
|
+
- `definition-before-use` (SMP020) no longer moves a class below a decorated function or class that names it in an
|
|
227
|
+
annotation, such as a pydantic model in a FastAPI route's return annotation: the decorator reads the annotation while
|
|
228
|
+
the module loads, so after the move it met an unresolved forward reference. A name a function uses only in annotations
|
|
229
|
+
inside its body no longer counts as a helper to place below it ([#9](https://github.com/gaborbernat/simplint/pull/9))
|
|
230
|
+
by [@gaborbernat](https://github.com/gaborbernat).
|
|
231
|
+
- `definition-before-use` (SMP020) no longer moves a helper below a lambda that runs while the module loads, such as
|
|
232
|
+
`(lambda: helper())()` or a callback passed to a module-level call, or below a class body that calls one of its own
|
|
233
|
+
functions which reads the helper ([#11](https://github.com/gaborbernat/simplint/pull/11)) by
|
|
234
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
235
|
+
- `function-docstring` (SMP002) drops a pragma comment such as `# noqa: E501` that followed a docstring it replaces with
|
|
236
|
+
`...` ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
237
|
+
- Removing the docstring of a test module that is left with comments only no longer leaves blank lines at the end of the
|
|
238
|
+
file, which `ruff format` keeps and Ruff reports ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
|
|
239
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
240
|
+
- `function-docstring` (SMP002) leaves alone docstrings code reads at runtime: those holding a `>>>` doctest, those of
|
|
241
|
+
objects decorated by anything but a known decorator such as `property` or `pytest.fixture`, and all of them when the
|
|
242
|
+
run reads `__doc__` or calls `getdoc` ([#16](https://github.com/gaborbernat/simplint/pull/16)) by
|
|
243
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
244
|
+
- `parametrize-without-id` reports `pytest.param(..., id=None)`, and `mock-without-spec` reports `spec=None` and
|
|
245
|
+
`autospec=False`, since both leave the default in place ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
|
|
246
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
247
|
+
- File-level `# ruff: noqa`, `# flake8: noqa` and `# ruff: file-ignore[...]` comments now suppress simplint rules, as
|
|
248
|
+
they do in Ruff ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
|
|
249
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
250
|
+
- With `--fix`, a fix that changes what other files learn from the project index, such as `mock-attribute-assignment`
|
|
251
|
+
(SMP203) folding `user.uuid = 7` into the mock constructor, now gets the files depending on it linted and fixed again
|
|
252
|
+
in the same run, so `dataclass-options` (SMP111) freezes the dataclass whose `uuid` field the fix stopped assigning
|
|
253
|
+
without a second run ([#5](https://github.com/gaborbernat/simplint/pull/5)) by
|
|
254
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
255
|
+
- Fixes whose edits interleave, such as renames of names used across a module, apply in the same pass, so a module with
|
|
256
|
+
more than a hundred of them no longer fails to converge ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
|
|
257
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
258
|
+
- `simplint check --fix` runs its fixes again until they change nothing, so a fix that Ruff's cleanup makes possible,
|
|
259
|
+
such as joining the f-string Ruff writes for `%` formatting, or one withdrawn only next to another rule's pending
|
|
260
|
+
fixes, no longer waits for a second run ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
|
|
261
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
262
|
+
- `forwarding-function` no longer reports a function that calls a method on a computed value, such as
|
|
263
|
+
`return make(name).strip()`, or that calls one of its own parameters
|
|
264
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
265
|
+
- `forwarding-function` skips wrappers with parameter defaults and functions other code patches by name
|
|
266
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
267
|
+
- `module-variable-case` (SMP102) no longer asks to rename module variables a framework reads by name: the revision
|
|
268
|
+
identifiers of an Alembic migration, the settings of a gunicorn configuration file, and an `app` or `application` that
|
|
269
|
+
builds a WSGI or ASGI application with Flask, FastAPI, Starlette, Django, Quart, Sanic, aiohttp, Litestar, Falcon,
|
|
270
|
+
Bottle or Pyramid ([#8](https://github.com/gaborbernat/simplint/pull/8)) by
|
|
271
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
272
|
+
- `dependency-import-guard` (SMP040) no longer reports `from` imports, which can fail on a module that lacks the name on
|
|
273
|
+
some platform or version, such as `from os import geteuid` ([#10](https://github.com/gaborbernat/simplint/pull/10)) by
|
|
274
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
275
|
+
- `function-docstring` (SMP002) and `test-module-docstring` (SMP004) fix a docstring that shares its line with the
|
|
276
|
+
signature or the next statement, as in `def run(): """Run."""`, instead of only after `ruff format` splits the line
|
|
277
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
278
|
+
- `future-annotations` marks its fix unsafe only when the code refers to `TYPE_CHECKING`, not when a comment mentions it
|
|
279
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
280
|
+
- `dependency-import-guard` no longer reports a guarded import of your own package, such as an optional compiled
|
|
281
|
+
extension, and recognizes `builtins.ImportError` ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
|
|
282
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
283
|
+
- `single-user-constant` and `walrus-candidate` parenthesize an inlined value that starts with a parenthesis without
|
|
284
|
+
being wrapped in one, such as `(RuntimeError,) if old else ()`, keep a tuple's parentheses, and inline a value written
|
|
285
|
+
over several lines on one; `single-user-constant` no longer derives a local name that starts with a digit or is a
|
|
286
|
+
keyword ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
287
|
+
- The JSON and JSON Lines outputs fill `noqa_row` for simplint's reports with the line a `noqa` comment belongs on, as
|
|
288
|
+
Ruff does, instead of `null` ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
|
|
289
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
290
|
+
- Fixes are withdrawn when they make a line no `ruff format` layout can fit in more cases: the first line of a string
|
|
291
|
+
over several lines, a `def` line with empty parentheses, an operand after the operator of a split operation, comments
|
|
292
|
+
moved deeper, code under `# fmt: off` or `# fmt: skip` or in a file `ruff format` excludes, and a pragma comment that
|
|
293
|
+
an added annotation moves. Lines Ruff does not report, such as one ending in a URL, or code after a bracket the
|
|
294
|
+
formatter splits, no longer withdraw a fix ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
|
|
295
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
296
|
+
- `dependency-import-guard` no longer calls a standard library module such as `tomllib` a required dependency,
|
|
297
|
+
`suppression-without-reason` says to list the codes a blanket suppression silences, and `definition-before-use` says
|
|
298
|
+
which definition to move a misplaced one below ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
|
|
299
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
300
|
+
- `missing-final` skips implicit type aliases and names another module assigns, adds `Final` to a `from typing import`
|
|
301
|
+
line in isort order, places a new import in the standard library section, and writes `t.Final` for
|
|
302
|
+
`import typing as t` ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
|
|
303
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
304
|
+
- `missing-final` treats `Annotated[Final[...], ...]` as already final
|
|
305
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
306
|
+
- `missing-from-all` (SMP113) no longer asks to list in `__all__` a name the module imports and uses itself, such as
|
|
307
|
+
`sys` or `Path`, when another module reaches it through this one. An import the module never uses still counts as a
|
|
308
|
+
re-export ([#5](https://github.com/gaborbernat/simplint/pull/5)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
309
|
+
- `missing-from-all` no longer appends a second `__all__` when the module assigns one inside an `if` or `try`
|
|
310
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
311
|
+
- `mock-attribute-assignment` wraps a bare tuple, `:=` or `yield` value in parentheses when it moves it into the mock
|
|
312
|
+
constructor, so `return_value = "a", {}` no longer turns into two arguments
|
|
313
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
314
|
+
- `mock-without-spec` accepts `new=None` and `new=False`, `mock-attribute-assignment` also reports annotated
|
|
315
|
+
assignments, and its fix is unsafe for `create_autospec` attributes other than `return_value` and `side_effect`
|
|
316
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
317
|
+
- Names imported through a directory without `__init__.py`, such as `from tests.helpers import mark` with pytest's
|
|
318
|
+
rootdir on `sys.path`, now count as imported, so `module-variable-case`, `unexported-public-name` and
|
|
319
|
+
`single-user-constant` no longer rename or move them ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
|
|
320
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
321
|
+
- `module-variable-case` (SMP102) and `unexported-public-name` (SMP103) keep the names PLY, PEP 249 and the `typer`
|
|
322
|
+
command read by name, and names read off modules loaded by a computed name, such as a test fixture's
|
|
323
|
+
`importlib.import_module`. Relative imports in namespace packages now count as imports, and `missing-from-all`
|
|
324
|
+
(SMP113) no longer lists a name that would shadow the module itself in its package's `import *`
|
|
325
|
+
([#15](https://github.com/gaborbernat/simplint/pull/15)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
326
|
+
- A nested `pyproject.toml` without a `[tool.simplint]` table no longer hides the settings of a parent directory,
|
|
327
|
+
matching how Ruff skips one without `[tool.ruff]` ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
|
|
328
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
329
|
+
- A fix that Ruff's cleanup undoes, such as `absolute-sibling-import` in a project that bans relative imports, no longer
|
|
330
|
+
counts as a fix: the file is left alone and `--diff` and `--exit-non-zero-on-fix` see no change
|
|
331
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
332
|
+
- A `noqa` comment on the last line of a multi-line string or a backslash continuation suppresses a report that starts
|
|
333
|
+
on an earlier line of it, as in Ruff, instead of being ignored ([#2](https://github.com/gaborbernat/simplint/pull/2))
|
|
334
|
+
by [@gaborbernat](https://github.com/gaborbernat).
|
|
335
|
+
- `single-letter-name` skips the parameters of `@override` methods
|
|
336
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
337
|
+
- `missing-from-all` and `undocumented-public-api` no longer treat a name reached only by a dotted string, such as a
|
|
338
|
+
`mocker.patch` target through a module's `import os`, as an export. Fixes that rename or move names still leave such
|
|
339
|
+
names alone ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
340
|
+
- The `--preview` help text and docs no longer promise unstable rules and fixes; simplint has none, and the flag
|
|
341
|
+
switches the output to rule names ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
|
|
342
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
343
|
+
- `function-docstring` keeps the docstrings of dunder methods, overrides and property setters of an exported class, and
|
|
344
|
+
`undocumented-public-api` no longer asks for them. It accepts a trailing `#:` comment on a variable and names
|
|
345
|
+
properties as such ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
|
|
346
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
347
|
+
- `missing-from-all` no longer adds `__all__` to a module that imports it from elsewhere
|
|
348
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
349
|
+
- Rename fixes skip names that shadow a builtin, as in `zip = zip`
|
|
350
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
351
|
+
- `module-variable-case` (SMP102) looks for the name in the text strings hold rather than in their source, so whether
|
|
352
|
+
the rename is offered no longer depends on escapes that `ruff format` rewrites, such as `\N{latin small letter x}`
|
|
353
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
354
|
+
- The cache now accounts for `skip-magic-trailing-comma`; a relative `--config` path anchors per-file ignores at its
|
|
355
|
+
directory; a per-file-ignore pattern such as `./tests/*.py` matches as in Ruff; an empty rule selector is an error; a
|
|
356
|
+
file simplint cannot read is reported as `io-error` only while Ruff's `E902` is on, and otherwise logged as
|
|
357
|
+
`ruff check` does; and the "No Python files found" warning shows once
|
|
358
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
359
|
+
- Fixes no longer leave Ruff work that only shows up after `ruff format`: a nested `if` or `with` that a fix lets fit on
|
|
360
|
+
one line gets merged, an import block a fix joins across a `;` gets sorted, and a `# noqa: E501` on a line a fix
|
|
361
|
+
changes stays ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
|
|
362
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
363
|
+
- Ruff's cleanup after a fix also takes in the rules its own fixes give new work, such as the import sort after an
|
|
364
|
+
import moves to the top, and a fix that would make `ruff format` split a line carrying a `noqa` or other pragma
|
|
365
|
+
comment is withdrawn, since the split moves the comment off the code it applies to
|
|
366
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
367
|
+
- Ruff fixes that depend on the line length, such as collapsing nested `if` statements, are judged the same before and
|
|
368
|
+
after `ruff format`, so a second run no longer applies what the first withdrew
|
|
369
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
370
|
+
- `suppression-without-reason` recognizes `# ruff: ignore[...]`, `# ruff: file-ignore[...]` and
|
|
371
|
+
`# pyrefly: ignore[...]`, and directives written without a space after the colon
|
|
372
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
373
|
+
- `simplint rule` and the rule selection settings now say when a code or selector names a Ruff rule and point to Ruff,
|
|
374
|
+
instead of rejecting it as unknown ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
|
|
375
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
376
|
+
- A file simplint cannot read or write is reported with Ruff's own `io-error` (`E902`) diagnostic, at `1:1` as Ruff puts
|
|
377
|
+
it, and with Ruff's `preview` on, reports and the fix summary name rules as Ruff does, unless
|
|
378
|
+
`output-prefer-rule-codes` is set ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
|
|
379
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
380
|
+
- The semantic model behind the rules is now Ruff's own, so names follow Python's scoping more closely: PEP 695 type
|
|
381
|
+
parameters and match captures resolve to their own scope, a star import no longer counts as a binding, and a class
|
|
382
|
+
body that annotates `type` without a value no longer hides the builtin
|
|
383
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
384
|
+
- `simplint rules --output-format json` names a rule's fix availability as `ruff rule --all --output-format json` does:
|
|
385
|
+
`"Always"`, `"Sometimes"` or `"None"`, no longer lowercase ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
|
|
386
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
387
|
+
- The SARIF output links to simplint's repository instead of a non-existent `astral-sh/simplint`, and the rdjson output
|
|
388
|
+
names simplint and its documentation as the source instead of Ruff
|
|
389
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
390
|
+
- `section-comment` (SMP001) no longer deletes the text of a decorated comment with more than three words, such as
|
|
391
|
+
`# *** remove return to update cron`: its fix strips the decoration and keeps the text. Dividers, and banners around
|
|
392
|
+
a title of up to three words such as `# === helpers ===`, are still deleted. A pair of divider characters joined to a
|
|
393
|
+
word, such as the underscores of `__init__`, no longer makes a comment a section comment
|
|
394
|
+
([#8](https://github.com/gaborbernat/simplint/pull/8)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
395
|
+
- An unknown rule selector error now names the setting and the file it came from, or the command line, as Ruff does
|
|
396
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
397
|
+
- `single-user-constant`, `missing-from-all` and `all-format` take the indentation of a statement that follows a `;`
|
|
398
|
+
from its line instead of copying the statements before it, which duplicated them
|
|
399
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
400
|
+
- A second run of the documented pipeline no longer changes code: `single-user-constant` counts a comment that
|
|
401
|
+
`ruff format` moved inside the parentheses around a value as trailing it and handles a function body on the `def`
|
|
402
|
+
line, `dependency-import-guard` unwraps a one-line `try: import x` instead of breaking the syntax, and the fixes run
|
|
403
|
+
again on the code Ruff's cleanup leaves ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
|
|
404
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
405
|
+
- `single-user-constant` no longer reports a constant whose only use is a module-level lambda, which it cannot fix
|
|
406
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
407
|
+
- `single-user-constant` no longer reports module values a function mutates, such as a set of warnings already shown or
|
|
408
|
+
a lock, and offers no fix for a constant with a trailing comment or a value that reads a name the module later
|
|
409
|
+
deletes. Its fix keeps the annotation of a new local, and inlines into an f-string only a plain name or number
|
|
410
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
411
|
+
- `module-variable-case` skips Sphinx `conf.py` settings and `TYPE_CHECKING`, `walrus-candidate` and `missing-final`
|
|
412
|
+
skip `TYPE_CHECKING`, and `unexported-public-name` skips Sphinx's `setup` hook
|
|
413
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
414
|
+
- The line length model no longer treats an augmented assignment such as `|=` as an operator `ruff format` moves to the
|
|
415
|
+
start of a line, and now does for the `not` of `not in`, so a fix is no longer kept when the line it makes stays too
|
|
416
|
+
long, or withdrawn when `ruff format` can split the line to fit ([#2](https://github.com/gaborbernat/simplint/pull/2))
|
|
417
|
+
by [@gaborbernat](https://github.com/gaborbernat).
|
|
418
|
+
- When withdrawing either of two rules would settle a conflict with Ruff, simplint withdraws the one a second run would
|
|
419
|
+
withdraw again, so a single `simplint check --fix` leaves nothing for the next
|
|
420
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
421
|
+
- Names a `from module import *` can reach count as used: renames to `_`-names by `module-variable-case` (SMP102),
|
|
422
|
+
`unexported-public-name` (SMP103), `single-user-constant` (SMP050) and other rules leave them alone, a name imported
|
|
423
|
+
from a package counts in the module its `__init__.py` star-imports it from, and `missing-from-all` (SMP113) no longer
|
|
424
|
+
creates an `__all__` that would narrow what `import *` takes. A star import that resolves to no file of the run keeps
|
|
425
|
+
the names of every file named after its module ([#5](https://github.com/gaborbernat/simplint/pull/5)) by
|
|
426
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
427
|
+
- Source read from standard input is linted as the file `--stdin-filename` names would be: it gets that file's
|
|
428
|
+
`per-file-target-version`, its package, and the directory above its package as an import search root, so entry points
|
|
429
|
+
outside the `src` directories count as uses ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
|
|
430
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
431
|
+
- `string-concatenation` (SMP112) offers its fix only when the code shows every operand is a `str`, so it no longer
|
|
432
|
+
turns `+` on an object with its own `__add__` or `__radd__`, such as `Markup`, a path or a `PageRange`, into an
|
|
433
|
+
f-string that formats it instead. It reads that from literals, `str` methods, annotations, loops, the module's own
|
|
434
|
+
functions and classes, and common standard library values such as `os.sep` or `os.path.join`
|
|
435
|
+
([#12](https://github.com/gaborbernat/simplint/pull/12)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
436
|
+
- Names a `.pyi` stub declares count as the public API of the module it describes, so fixes no longer rename them out of
|
|
437
|
+
step with the stub ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
|
|
438
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
439
|
+
- `suppression-without-reason` no longer reads words such as `# noqa-ish` as a suppression directive
|
|
440
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
441
|
+
- `walrus-candidate` and `missing-final` do not run below Python 3.8, and `dependency-import-guard` treats a module as
|
|
442
|
+
standard library only when every supported version ships it, so guards around `distutils`, `ctypes`, `ssl`, `sqlite3`
|
|
443
|
+
or `tkinter` are no longer reported ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
|
|
444
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
445
|
+
- `test-class` offers no fix for a class another class extends or the file refers to
|
|
446
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
447
|
+
- `module-variable-case` (SMP102) no longer renames `version`, `version_tuple` and `commit_id` in a module that binds
|
|
448
|
+
`__version__`, the names of the version file setuptools-scm writes
|
|
449
|
+
([#10](https://github.com/gaborbernat/simplint/pull/10)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
450
|
+
- `walrus-candidate` (SMP100) and `missing-final` (SMP101) no longer run in a module with a version gate, a top-level
|
|
451
|
+
`if` on `sys.version_info` that raises or exits, since such a module runs on interpreters that lack `:=` or
|
|
452
|
+
`typing.Final` ([#10](https://github.com/gaborbernat/simplint/pull/10)) by
|
|
453
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
454
|
+
- `walrus-candidate` (SMP100) no longer reports an assignment when folding it into the `if` test would make the header
|
|
455
|
+
too wide for one line, which `ruff format` then split over several. The header is measured joined on one line at its
|
|
456
|
+
block's indentation, so the result does not depend on how the code is laid out
|
|
457
|
+
([#8](https://github.com/gaborbernat/simplint/pull/8)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
458
|
+
- `walrus-candidate` (SMP100) now also fixes values continued with a backslash, and when its fix leaves an `if` that
|
|
459
|
+
Ruff's collapsible-if (SIM102) asks to merge, the merge happens in the same run whatever the line length, so a second
|
|
460
|
+
run of the pipeline changes nothing ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
|
|
461
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
462
|
+
- `walrus-candidate` no longer deletes a module-level name that `__all__` lists, or a class attribute assigned inside a
|
|
463
|
+
block of a class body ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
|
|
464
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
465
|
+
|
|
466
|
+
<a name="release-0-2-0-documentation"></a>
|
|
467
|
+
|
|
468
|
+
### Documentation
|
|
469
|
+
|
|
470
|
+
- Every color pair in the documentation, including code tokens, badges, form fields, focus rings and diagram nodes, now
|
|
471
|
+
reaches a WCAG contrast of 4.5:1 in the light, dark and automatic themes, with calmer diagram colors and a softer page
|
|
472
|
+
background and text ([#3](https://github.com/gaborbernat/simplint/pull/3)) by
|
|
473
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
474
|
+
- Pages no longer grow wider than the window when a code block holds a long line, as the configuration page did; the
|
|
475
|
+
line scrolls inside its block, and diagrams fit their column ([#6](https://github.com/gaborbernat/simplint/pull/6)) by
|
|
476
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
477
|
+
- Redesigned documentation with the project branding, a filterable rules index, side-by-side examples, diagrams and a
|
|
478
|
+
generated command-line reference; `simplint rule` leaves the diagram source out of terminal output
|
|
479
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
480
|
+
|
|
481
|
+
<a name="release-0-2-0-performance"></a>
|
|
482
|
+
|
|
483
|
+
### Performance
|
|
484
|
+
|
|
485
|
+
- With `--fix` or `--diff`, the cache also remembers files the fixes leave as they are, together with the rules whose
|
|
486
|
+
fixes simplint held back for them, so a later run reports such a file from a single lint instead of running the whole
|
|
487
|
+
fix loop again. On an already fixed copy of `sympy`, a repeat `--fix --unsafe-fixes` run takes about a quarter of the
|
|
488
|
+
CPU time it did ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
|
|
489
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
490
|
+
- `simplint check --fix` runs Ruff's findings checks without the whitespace, blank line and line length rules, whose
|
|
491
|
+
findings it ignores, unless a file's suppression comments may name one of them; the fix loop on `sympy` does about 6%
|
|
492
|
+
less work ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
493
|
+
- `simplint check` renders its default `full` output on all cores, so a report with many fix diffs, such as renames that
|
|
494
|
+
span whole modules, prints sooner: on `sympy` the run takes about 40% less wall time
|
|
495
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
496
|
+
- Release wheels for x86_64 Linux (glibc and musl), x64 Windows and arm64 macOS are built with profile-guided
|
|
497
|
+
optimization, trained on `simplint check` and `simplint check --fix` over pinned sdists of black, pip and botocore. On
|
|
498
|
+
`sympy` and `django` this runs about 6% fewer instructions in check mode and about 12% fewer with `--fix`
|
|
499
|
+
([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
|
|
500
|
+
- The rules that look at statements and expressions share one walk over each file instead of walking it once each, so
|
|
501
|
+
`simplint check` takes about 7% less time ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
|
|
502
|
+
[@gaborbernat](https://github.com/gaborbernat).
|
|
503
|
+
|
|
504
|
+
<a name="release-0-2-0-new-contributors"></a>
|
|
505
|
+
|
|
506
|
+
### New Contributors
|
|
507
|
+
|
|
508
|
+
- [@gaborbernat](https://github.com/gaborbernat) made their first contribution in
|
|
509
|
+
[#2](https://github.com/gaborbernat/simplint/pull/2)
|
|
510
|
+
|
|
511
|
+
## 0.1.0 (2026-10-30)
|
|
512
|
+
|
|
513
|
+
<a name="release-0-1-0"></a>
|
|
514
|
+
|
|
515
|
+
<a name="release-0-1-0-added"></a>
|
|
516
|
+
|
|
517
|
+
### Added
|
|
518
|
+
|
|
519
|
+
- First release: 32 rules for code that is easier to read and review, beyond what Ruff checks, with safe and unsafe
|
|
520
|
+
fixes and a cross-module import index by Bernát Gábor.
|