sarj-python-lint 1.74.2__tar.gz → 1.76.0__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.
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/PKG-INFO +2 -2
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/pyproject.toml +2 -2
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/__main__.py +28 -6
- sarj_python_lint-1.76.0/src/sarj_python_lint/_autofix.py +1428 -0
- sarj_python_lint-1.76.0/src/sarj_python_lint/_autofix_aliases.py +123 -0
- sarj_python_lint-1.76.0/src/sarj_python_lint/_autofix_annotations.py +123 -0
- sarj_python_lint-1.76.0/src/sarj_python_lint/_autofix_comments.py +191 -0
- sarj_python_lint-1.76.0/src/sarj_python_lint/_autofix_declared_contracts.py +106 -0
- sarj_python_lint-1.76.0/src/sarj_python_lint/_autofix_declared_tests.py +277 -0
- sarj_python_lint-1.76.0/src/sarj_python_lint/_autofix_docs.py +271 -0
- sarj_python_lint-1.76.0/src/sarj_python_lint/_autofix_enums.py +183 -0
- sarj_python_lint-1.76.0/src/sarj_python_lint/_autofix_exhaustiveness.py +173 -0
- sarj_python_lint-1.76.0/src/sarj_python_lint/_autofix_inert.py +572 -0
- sarj_python_lint-1.76.0/src/sarj_python_lint/_autofix_parameters.py +328 -0
- sarj_python_lint-1.76.0/src/sarj_python_lint/_autofix_repeated.py +151 -0
- sarj_python_lint-1.76.0/src/sarj_python_lint/_autofix_security.py +397 -0
- sarj_python_lint-1.76.0/src/sarj_python_lint/_autofix_sql_projection.py +206 -0
- sarj_python_lint-1.76.0/src/sarj_python_lint/_autofix_tests.py +139 -0
- sarj_python_lint-1.76.0/src/sarj_python_lint/autofix.py +1 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/benchmark.py +13 -3
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/ratchet.py +3 -3
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/_docstrings.py +8 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/_local_alias_fix.py +1 -1
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/_prose_budget.py +4 -2
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/_registry.py +2 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/async_mock_call_without_await_assertion.py +21 -1
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/defect_xfail_requires_explicit_strict.py +32 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/docstring_args_restate_signature.py +39 -1
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/docstring_returns_restate_signature.py +39 -1
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/duplicate_adjacent_exception_handler.py +71 -18
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/excessive_commentary.py +24 -4
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_any_mapping_types.py +22 -1
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_broad_keyword_capture.py +24 -2
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_comment_cruft.py +12 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_delete_statement.py +39 -2
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_duplicate_dunder_all_entry.py +11 -1
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_excessive_cognitive_complexity.py +40 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_file_level_escape_hatch_suppression.py +13 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_loguru_exc_info.py +34 -2
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_loguru_printf_format.py +22 -2
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_redundant_literal_description.py +31 -1
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_redundant_local_alias.py +36 -1
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_repeated_string_literal.py +38 -1
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_restated_comment.py +11 -1
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_select_star.py +47 -1
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_string_concat_in_loop.py +22 -1
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_typed_doc_sections.py +42 -1
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_unnecessary_docstring.py +33 -1
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_unused_underscored_keyword_parameter.py +24 -3
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_unused_value_marker.py +11 -1
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/phase_label_comment.py +11 -1
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/prefer_collection_comprehension.py +49 -2
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/prefer_constant_time_secret_compare.py +23 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/prefer_fstring_over_concat.py +150 -38
- sarj_python_lint-1.76.0/src/sarj_python_lint/rules/prefer_grouped_settings.py +137 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/prefer_match_assert_never.py +31 -1
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/prefer_match_type_dispatch.py +25 -1
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/prefer_match_value_dispatch.py +25 -1
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/prefer_monkeypatch_for_process_state_in_test.py +12 -1
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/prefer_nominal_id_types.py +61 -6
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/prefer_or_pattern.py +39 -1
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/prefer_precise_object_contract.py +39 -2
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/prefer_pytest_dependency_fixtures.py +25 -1
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/prefer_regex_fullmatch.py +21 -1
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/prefer_self_type_annotation.py +33 -1
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/prefer_set_isdisjoint.py +21 -2
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/prefer_str_enum.py +22 -1
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/prefer_walrus_awaited_none_guard.py +32 -1
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/prefer_walrus_comprehension_filter.py +23 -2
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/prefer_walrus_regex_match.py +32 -1
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/prefer_walrus_stream_loop.py +36 -1
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/redundant_docstring.py +33 -1
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/require_exp_on_jwt_decode.py +29 -1
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/require_explicit_service_contract.py +213 -13
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/require_keyword_only_swap_prone_params.py +23 -2
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/stepdown.py +21 -1
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/trailing_value_narration.py +17 -7
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/unused_mock_setup.py +33 -1
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/unused_test_factory_option.py +56 -2
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/.gitignore +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/LICENSE +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/README.md +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/__init__.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/_analysis_session.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/_file_context.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/_filesystem.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/_fixes.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/_parallel.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/_python_target.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/_ratchet_cli.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/_secret_names.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/_source.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/_version.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/cast_access.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/interpreter_argv.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/json_boundary.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/py.typed +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rule_base.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/__init__.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/_annotation_origins.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/_annotation_semantics.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/_ast_index.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/_ast_names.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/_ast_position.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/_closed_helpers.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/_comments.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/_contract_annotation.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/_copy_on_write.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/_data_union_discriminator.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/_declared_contracts.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/_dict_key_views.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/_exports.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/_fastapi.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/_first_party.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/_fixed_record.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/_imports.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/_inert_model_annotation.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/_inherited_contract.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/_local_source.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/_logging.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/_mapping_shape_callbacks.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/_namespace_access.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/_native_namespace_capability.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/_nominal_project.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/_paths.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/_project_index.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/_pydantic_field_contract.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/_pytest.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/_resolved_operation_signature.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/_resource_provenance.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/_route_shapes.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/_runtime_bindings.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/_set_fields.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/_sql.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/_static_json_alias.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/_store_writes.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/_suppression_comments.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/_test_assertions.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/_test_composition.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/_test_provenance.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/_type_guard_symbols.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/async_cleanup_registered_synchronously.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/complex_postgres_query_requires_architecture_review.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/delete_route_returns_no_content.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/duplicate_closed_pure_helper.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/duplicate_pytest_fixture_params.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/fakes_in_shared_location.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/fastapi_class_router_contract.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/fastapi_explicit_openapi_contract.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/iac_source_coupled_test.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/invalid_pydantic_field_default.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/mock_without_spec.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/named_record_at_boundaries.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/negative_only_http_status_assertion.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_analytical_aggregation_in_postgres_store.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_async_function_cache.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_before_validator_input_mutation.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_blanket_suppression.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_conflicting_pydantic_alias_validation.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_conftest_test_module_import.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_contradictory_type_guard.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_copied_inherited_docstring.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_cors_wildcard_with_credentials.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_create_verb_in_post_path.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_database_programmability.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_defaulted_environment_setting.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_discarded_validation_result.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_dual_shape_model_field_reader.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_dunder_all.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_duplicate_field_validator_body.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_exception_text_in_500_detail.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_fastapi_on_event.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_first_party_private_import.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_fixed_sleep_before_assert.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_fixed_sleep_in_loop.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_folded_bad_request_not_found.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_frozen_after_validator_field_write.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_generic_single_export_module.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_hasattr.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_hidden_constructor_fallback.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_impossible_pydantic_field_bounds.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_injected_module_loader.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_input_model_mutation.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_interpreter_source_arguments.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_invalid_argument_name_suppression.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_invalid_pydantic_bypass.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_invalid_pydantic_validator_return.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_mocked_pydantic_value_object.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_mutating_container_transform.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_nested_pydantic_field_validator.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_nullable_dependency_fallback.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_offset_pagination.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_partial_type_is.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_positional_psycopg_row_escape.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_psycopg_execution_outside_injected_owner.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_random_uuid_in_sql.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_raw_connection_in_tests.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_raw_source_text_test_oracle.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_redundant_module_alias_exports.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_repeated_test_body.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_secret_in_log.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_service_behavior_in_settings.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_shallow_container_type_guard.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_shallow_record_type_guard.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_slash_collection_root_under_prefix.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_swallowed_asyncio_cancellation.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_tautological_expect.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_test_method_grafting.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_unique_violation_message_match.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_unknown_pydantic_validator_field.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_unused_copy_result.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_vague_suppression_description.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_whole_request_response_payload_in_log.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/no_work_verb_get_route.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/opaque_parametrize_case_needs_id.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/over_mocked_test.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/prefer_autospec_for_callable_mock.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/prefer_bulk_upsert.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/prefer_class_row.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/prefer_declarative_batch_validation.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/prefer_direct_import_module.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/prefer_discriminated_model_union.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/prefer_immutable_module_constant.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/prefer_injected_dependency_over_monkeypatch.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/prefer_library_fake.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/prefer_match_exception_dispatch.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/prefer_module_level_constant.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/prefer_monotonic_for_elapsed_time.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/prefer_namedtuple_over_tuple_return.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/prefer_native_string_check.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/prefer_non_nullable_collection.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/prefer_psycopg_executemany.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/prefer_pydantic_json_value.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/prefer_pydantic_model_assertion.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/prefer_pytest_fixture_injection.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/prefer_required_constructor_parameters.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/prefer_self_documenting_constant.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/prefer_struct_over_namedtuple.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/prefer_typed_settings_field.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/production_derived_test_cases.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/pytest_fixture_returns_bare_tuple.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/pytest_fixture_returns_closed_resource.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/redundant_class_docstring.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/redundant_module_docstring.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/redundant_test_constructor_forwarder.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/repeated_kwarg_heavy_call_in_test.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/repeated_static_call_cases.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/repeated_test_composition.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/repeated_unimplemented_test_contract.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/require_explicit_contract_implementation.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/require_explicit_psycopg_transaction.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/require_injectable_retry_sleep.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/require_nodecode_for_splitting_settings_field.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/require_port_for_service.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/require_precise_factory_signature.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/require_public_dependency_contract.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/require_pydantic_for_external_json.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/require_pydantic_for_mapping_shape.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/require_pydantic_for_structured_payload.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/require_pydantic_ordinal_lower_bound.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/restated_test_docstring.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/shared_mutable_pydantic_factory.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/store_field_update_reuses_upsert.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/store_get_delegates_to_bulk_read.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/store_insert_requires_on_conflict.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/subprocess_kill_without_reap.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/test_without_explicit_oracle.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/timestamp_order_requires_tiebreaker.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/typed_error_reasons.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/rules/uncontrolled_randomness_in_test.py +0 -0
- {sarj_python_lint-1.74.2 → sarj_python_lint-1.76.0}/src/sarj_python_lint/suppression_policy.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: sarj-python-lint
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.76.0
|
|
4
4
|
Summary: Custom Python lint rules — AST-based, pre-commit-friendly, hypermodern defaults
|
|
5
5
|
Project-URL: Homepage, https://code-standards.sarj.ai/rules/python/
|
|
6
6
|
Project-URL: Documentation, https://code-standards.sarj.ai/rules/python/
|
|
@@ -19,7 +19,7 @@ Classifier: Topic :: Software Development :: Quality Assurance
|
|
|
19
19
|
Requires-Python: >=3.14
|
|
20
20
|
Requires-Dist: packaging==26.3
|
|
21
21
|
Requires-Dist: ruff>=0.17.2
|
|
22
|
-
Requires-Dist: sarj-rule-contracts==0.
|
|
22
|
+
Requires-Dist: sarj-rule-contracts==0.4.1
|
|
23
23
|
Requires-Dist: sqlglot==30.24.0
|
|
24
24
|
Requires-Dist: typer==0.27.3
|
|
25
25
|
Description-Content-Type: text/markdown
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "sarj-python-lint"
|
|
3
|
-
version = "1.
|
|
3
|
+
version = "1.76.0"
|
|
4
4
|
description = "Custom Python lint rules — AST-based, pre-commit-friendly, hypermodern defaults"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
authors = [{ name = "sarj-ai" }]
|
|
@@ -15,7 +15,7 @@ classifiers = [
|
|
|
15
15
|
"Programming Language :: Python :: 3.14",
|
|
16
16
|
"Topic :: Software Development :: Quality Assurance",
|
|
17
17
|
]
|
|
18
|
-
dependencies = ["sarj-rule-contracts==0.
|
|
18
|
+
dependencies = ["sarj-rule-contracts==0.4.1", "packaging==26.3", "ruff>=0.17.2", "sqlglot==30.24.0", "typer==0.27.3"]
|
|
19
19
|
|
|
20
20
|
[project.scripts]
|
|
21
21
|
sarj-python-lint = "sarj_python_lint.__main__:main"
|
|
@@ -9,8 +9,9 @@ import json
|
|
|
9
9
|
from pathlib import Path
|
|
10
10
|
import sys
|
|
11
11
|
from types import MappingProxyType
|
|
12
|
-
from typing import Annotated, NamedTuple
|
|
12
|
+
from typing import TYPE_CHECKING, Annotated, NamedTuple
|
|
13
13
|
|
|
14
|
+
from sarj_rule_contracts import RuleId
|
|
14
15
|
import typer
|
|
15
16
|
|
|
16
17
|
from sarj_python_lint import __version__
|
|
@@ -26,6 +27,10 @@ from sarj_python_lint.rules._project_index import ProjectIndexSet
|
|
|
26
27
|
from sarj_python_lint.suppression_policy import PROTECTED_SUPPRESSION_CODES
|
|
27
28
|
|
|
28
29
|
|
|
30
|
+
if TYPE_CHECKING:
|
|
31
|
+
from collections.abc import Sequence
|
|
32
|
+
|
|
33
|
+
|
|
29
34
|
SKIP_DIR_NAMES = frozenset(
|
|
30
35
|
{
|
|
31
36
|
"node_modules",
|
|
@@ -86,18 +91,18 @@ def _python_files(p: Path) -> list[Path]:
|
|
|
86
91
|
return sorted(out)
|
|
87
92
|
|
|
88
93
|
|
|
89
|
-
def _canonical_rule_ids(
|
|
94
|
+
def _canonical_rule_ids(rule_names: Sequence[str]) -> list[RuleId]:
|
|
90
95
|
aliases = {
|
|
91
96
|
alias: rule_id
|
|
92
97
|
for rule_id, cls in REGISTRY.items()
|
|
93
98
|
if (documentation := cls.documentation) is not None
|
|
94
99
|
for alias in documentation.aliases
|
|
95
100
|
}
|
|
96
|
-
return list(dict.fromkeys(
|
|
101
|
+
return list(dict.fromkeys(RuleId(name if name in REGISTRY else aliases.get(name, name)) for name in rule_names))
|
|
97
102
|
|
|
98
103
|
|
|
99
|
-
def _check(
|
|
100
|
-
rule_ids = _canonical_rule_ids(
|
|
104
|
+
def _check(rule_names: Sequence[str], paths: list[Path], *, jobs: int = 1) -> list[Diagnostic]:
|
|
105
|
+
rule_ids = _canonical_rule_ids(rule_names)
|
|
101
106
|
unknown = [rid for rid in rule_ids if rid not in REGISTRY]
|
|
102
107
|
if unknown:
|
|
103
108
|
sys.stderr.write(f"unknown rule(s): {', '.join(unknown)}\n")
|
|
@@ -145,7 +150,7 @@ def check_source(
|
|
|
145
150
|
|
|
146
151
|
|
|
147
152
|
def analyze(
|
|
148
|
-
rule_ids:
|
|
153
|
+
rule_ids: Sequence[str], # sarj-noqa: SARJ093 -- Public parsing boundary accepts raw names.
|
|
149
154
|
paths: list[Path],
|
|
150
155
|
*,
|
|
151
156
|
baseline: Path | None = None,
|
|
@@ -573,8 +578,25 @@ def _check_command(
|
|
|
573
578
|
update_baseline: Annotated[
|
|
574
579
|
Path | None, typer.Option(help="Write current per-file diagnostic counts to JSON and exit 0.")
|
|
575
580
|
] = None,
|
|
581
|
+
fix: Annotated[
|
|
582
|
+
bool, typer.Option("--fix", help="Apply proven safe fixes before checking the remaining diagnostics.")
|
|
583
|
+
] = False,
|
|
576
584
|
jobs: Annotated[int, typer.Option(min=1, help="Analysis worker budget (up to 2); default is serial.")] = 1,
|
|
577
585
|
) -> None:
|
|
586
|
+
if fix:
|
|
587
|
+
from sarj_python_lint.autofix import fix_paths # ruff: ignore[import-outside-top-level] -- load mutation support only for an explicit fix request.
|
|
588
|
+
|
|
589
|
+
canonical = _canonical_rule_ids(rule)
|
|
590
|
+
unknown = [rule_id for rule_id in canonical if rule_id not in REGISTRY]
|
|
591
|
+
if unknown:
|
|
592
|
+
context.ensure_object(_Result).code = _run_check(rule, files, baseline, update_baseline, jobs=jobs)
|
|
593
|
+
return
|
|
594
|
+
try:
|
|
595
|
+
fix_paths(files, rule_ids=canonical)
|
|
596
|
+
except (OSError, ValueError, SyntaxError, UnicodeError) as exc:
|
|
597
|
+
sys.stderr.write(f"error: {exc}\n")
|
|
598
|
+
context.ensure_object(_Result).code = 2
|
|
599
|
+
return
|
|
578
600
|
context.ensure_object(_Result).code = _run_check(rule, files, baseline, update_baseline, jobs=jobs)
|
|
579
601
|
|
|
580
602
|
|