sarj-python-lint 1.92.0__tar.gz → 1.97.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.92.0 → sarj_python_lint-1.97.0}/PKG-INFO +1 -1
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/pyproject.toml +1 -1
- sarj_python_lint-1.97.0/src/sarj_python_lint/__init__.py +32 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/__main__.py +54 -22
- sarj_python_lint-1.97.0/src/sarj_python_lint/_rule_descriptors.py +1865 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/benchmark.py +1 -1
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rule_base.py +9 -1
- sarj_python_lint-1.97.0/src/sarj_python_lint/rule_metadata.py +157 -0
- sarj_python_lint-1.97.0/src/sarj_python_lint/rules/__init__.py +3 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_copy_on_write.py +217 -20
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_native_object_contracts.py +9 -7
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_project_index.py +132 -1
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_registry.py +4 -3
- sarj_python_lint-1.97.0/src/sarj_python_lint/rules/_runtime_registry.py +288 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/complex_postgres_query_requires_architecture_review.py +17 -5
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/delete_route_returns_no_content.py +6 -1
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/fastapi_explicit_openapi_contract.py +6 -1
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_custom_control_flow_exception.py +25 -11
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_discarded_tagged_outcome.py +50 -1
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_psycopg_execution_outside_injected_owner.py +90 -29
- sarj_python_lint-1.97.0/src/sarj_python_lint/rules/no_recording_store.py +491 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_redundant_sql_alias.py +8 -1
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_application_model_joins.py +26 -13
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_match_type_dispatch.py +150 -76
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_optional_composite.py +47 -21
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_precise_object_contract.py +9 -40
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/store_insert_requires_explicit_conflict_policy.py +37 -11
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/store_mutation_command_fanout.py +84 -16
- sarj_python_lint-1.92.0/src/sarj_python_lint/__init__.py +0 -9
- sarj_python_lint-1.92.0/src/sarj_python_lint/rules/__init__.py +0 -3
- sarj_python_lint-1.92.0/src/sarj_python_lint/rules/no_recording_store.py +0 -276
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/.gitignore +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/LICENSE +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/README.md +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/_analysis_session.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/_autofix.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/_autofix_aliases.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/_autofix_annotations.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/_autofix_comments.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/_autofix_declared_contracts.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/_autofix_declared_tests.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/_autofix_docs.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/_autofix_enums.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/_autofix_exhaustiveness.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/_autofix_inert.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/_autofix_parameters.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/_autofix_repeated.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/_autofix_security.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/_autofix_sql_projection.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/_autofix_tests.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/_file_context.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/_filesystem.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/_fixes.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/_parallel.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/_prepared_sources.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/_python_target.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/_ratchet_cli.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/_secret_names.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/_source.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/_version.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/application_logging.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/autofix.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/cast_access.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/interpreter_argv.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/json_boundary.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/py.typed +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/ratchet.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_annotation_origins.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_annotation_semantics.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_ast_index.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_ast_names.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_ast_position.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_async_lifecycle.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_binding_inventory.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_closed_helpers.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_comment_narration.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_comments.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_contract_annotation.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_data_union_discriminator.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_declared_contracts.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_dict_key_views.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_docstrings.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_exports.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_fastapi.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_first_party.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_fixed_record.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_imports.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_inert_model_annotation.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_inherited_contract.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_local_alias_fix.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_local_source.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_logging.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_mapping_shape_callbacks.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_namespace_access.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_native_namespace_capability.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_nominal_project.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_numeric_proof.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_opaque_contracts.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_paths.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_postgres.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_prose_budget.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_pydantic_field_contract.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_pytest.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_resolved_operation_signature.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_resource_provenance.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_route_shapes.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_runtime_bindings.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_service_http_callbacks.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_set_fields.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_sql.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_sql_aggregate_identity.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_sql_explain.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_sql_policy_source.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_static_json_alias.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_store_sql.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_store_writes.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_suppression_comments.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_test_assertions.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_test_composition.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_test_provenance.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_transactional_sql.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/_type_guard_symbols.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/async_cleanup_registered_synchronously.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/async_executor_shutdown.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/async_mock_call_without_await_assertion.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/async_subprocess_cancellation_cleanup.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/cancel_owned_task_without_join.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/defect_xfail_requires_explicit_strict.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/docstring_args_restate_signature.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/docstring_returns_restate_signature.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/duplicate_adjacent_exception_handler.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/duplicate_closed_pure_helper.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/duplicate_pytest_fixture_params.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/excessive_commentary.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/failed_probe_zero_threshold.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/fakes_in_shared_location.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/fastapi_class_router_contract.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/iac_source_coupled_test.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/invalid_pydantic_field_default.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/mock_without_spec.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/named_record_at_boundaries.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/nan_hidden_by_builtin_min.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/negative_only_http_status_assertion.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_analytical_aggregation_in_postgres_store.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_any_mapping_types.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_async_client_in_constructor.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_async_function_cache.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_before_validator_input_mutation.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_blanket_suppression.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_broad_keyword_capture.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_comment_cruft.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_conflicting_pydantic_alias_validation.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_conftest_test_module_import.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_contradictory_type_guard.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_copied_inherited_docstring.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_cors_wildcard_with_credentials.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_create_verb_in_post_path.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_database_programmability.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_defaulted_environment_setting.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_delete_statement.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_discarded_validation_result.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_dual_shape_model_field_reader.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_dunder_all.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_duplicate_dunder_all_entry.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_duplicate_field_validator_body.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_exception_text_in_500_detail.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_excessive_cognitive_complexity.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_fastapi_on_event.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_file_level_escape_hatch_suppression.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_first_party_private_import.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_fixed_sleep_before_assert.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_fixed_sleep_in_loop.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_folded_bad_request_not_found.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_frozen_after_validator_field_write.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_generic_json_parser.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_generic_single_export_module.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_hasattr.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_hidden_constructor_fallback.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_impossible_pydantic_field_bounds.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_injected_module_loader.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_input_model_mutation.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_interpreter_source_arguments.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_invalid_argument_name_suppression.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_invalid_pydantic_bypass.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_invalid_pydantic_validator_return.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_loguru_exc_info.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_loguru_printf_format.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_mocked_pydantic_value_object.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_mutating_container_transform.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_mutating_input_with_result.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_nested_pydantic_field_validator.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_nullable_dependency_fallback.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_offset_pagination.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_partial_type_is.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_positional_psycopg_row_escape.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_random_uuid_in_sql.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_raw_connection_in_tests.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_raw_source_text_test_oracle.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_redundant_attribute_unpacking.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_redundant_literal_description.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_redundant_local_alias.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_redundant_module_alias_exports.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_repeated_string_literal.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_repeated_test_body.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_restated_comment.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_secret_in_log.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_select_star.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_service_behavior_in_settings.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_shallow_container_type_guard.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_shallow_record_type_guard.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_slash_collection_root_under_prefix.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_string_concat_in_loop.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_swallowed_asyncio_cancellation.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_tautological_expect.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_test_comments.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_test_method_grafting.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_typed_doc_sections.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_unique_violation_message_match.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_unknown_pydantic_validator_field.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_unnecessary_docstring.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_unused_copy_result.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_unused_underscored_keyword_parameter.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_unused_value_marker.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_vague_suppression_description.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_whole_request_response_payload_in_log.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/no_work_verb_get_route.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/opaque_parametrize_case_needs_id.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/over_mocked_test.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/phase_label_comment.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_autospec_for_callable_mock.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_bulk_upsert.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_class_row.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_collection_comprehension.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_constant_time_secret_compare.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_declarative_batch_validation.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_direct_import_module.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_discriminated_model_union.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_fstring_over_concat.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_grouped_settings.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_immutable_module_constant.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_injected_dependency_over_monkeypatch.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_library_fake.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_match_assert_never.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_match_exception_dispatch.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_match_value_dispatch.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_module_level_constant.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_monkeypatch_for_process_state_in_test.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_monotonic_for_elapsed_time.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_namedtuple_over_tuple_return.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_native_string_check.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_nominal_id_types.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_non_nullable_collection.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_or_pattern.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_psycopg_executemany.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_pydantic_json_value.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_pydantic_model_assertion.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_pytest_dependency_fixtures.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_pytest_fixture_contract.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_pytest_fixture_injection.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_regex_fullmatch.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_required_constructor_parameters.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_runtime_validation.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_self_documenting_constant.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_self_type_annotation.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_set_isdisjoint.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_str_enum.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_struct_over_namedtuple.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_typed_cli.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_typed_mapping_get.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_typed_settings_field.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_walrus_awaited_none_guard.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_walrus_comprehension_filter.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_walrus_regex_match.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/prefer_walrus_stream_loop.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/production_derived_test_cases.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/pytest_fixture_returns_bare_tuple.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/pytest_fixture_returns_closed_resource.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/redundant_class_docstring.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/redundant_docstring.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/redundant_module_docstring.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/redundant_test_constructor_forwarder.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/repeated_kwarg_heavy_call_in_test.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/repeated_static_call_cases.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/repeated_test_composition.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/repeated_unimplemented_test_contract.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/require_constrained_api_integer.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/require_exp_on_jwt_decode.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/require_explicit_contract_implementation.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/require_explicit_psycopg_transaction.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/require_explicit_service_contract.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/require_injectable_retry_sleep.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/require_keyword_only_swap_prone_params.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/require_nodecode_for_splitting_settings_field.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/require_port_for_service.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/require_precise_factory_signature.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/require_public_dependency_contract.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/require_pydantic_for_external_json.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/require_pydantic_for_mapping_shape.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/require_pydantic_for_structured_payload.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/require_pydantic_ordinal_lower_bound.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/restated_test_docstring.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/shared_mutable_pydantic_factory.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/stepdown.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/store_field_update_reuses_upsert.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/store_get_delegates_to_bulk_read.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/store_insert_requires_on_conflict.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/subprocess_kill_without_reap.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/test_without_explicit_oracle.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/timestamp_order_requires_tiebreaker.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/trailing_value_narration.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/typed_error_reasons.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/uncontrolled_randomness_in_test.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/unused_mock_setup.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.0}/src/sarj_python_lint/rules/unused_test_factory_option.py +0 -0
- {sarj_python_lint-1.92.0 → sarj_python_lint-1.97.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.97.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/
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
from typing import TYPE_CHECKING as _TYPE_CHECKING
|
|
2
|
+
|
|
3
|
+
from sarj_python_lint._fixes import apply_fixes as apply_fixes, python_source_hash as python_source_hash
|
|
4
|
+
from sarj_python_lint._ratchet_cli import run_ratchet as run_ratchet
|
|
5
|
+
from sarj_python_lint._source import python_source_encoding as python_source_encoding
|
|
6
|
+
from sarj_python_lint._version import __version__ as __version__
|
|
7
|
+
from sarj_python_lint.application_logging import (
|
|
8
|
+
ApplicationLoggingUse as ApplicationLoggingUse,
|
|
9
|
+
application_logging_uses as application_logging_uses,
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
if _TYPE_CHECKING:
|
|
14
|
+
from sarj_python_lint._analysis_session import AnalysisSession as AnalysisSession
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def __getattr__(name: str) -> object:
|
|
18
|
+
if name not in {"AnalysisSession", "__all__"}:
|
|
19
|
+
msg = f"module 'sarj_python_lint' has no attribute {name!r}"
|
|
20
|
+
raise AttributeError(msg)
|
|
21
|
+
from sarj_python_lint._analysis_session import AnalysisSession as _AnalysisSession # ruff: ignore[import-outside-top-level] -- lightweight metadata imports do not need semantic rules.
|
|
22
|
+
|
|
23
|
+
globals()["AnalysisSession"] = _AnalysisSession
|
|
24
|
+
if name == "__all__":
|
|
25
|
+
# Star imports previously exposed the complete post-session public namespace.
|
|
26
|
+
# Discover it on demand instead of freezing a narrower list of exports.
|
|
27
|
+
return tuple(public for public in globals() if not public.startswith("_"))
|
|
28
|
+
return _AnalysisSession
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def __dir__() -> list[str]:
|
|
32
|
+
return sorted(set(globals()).union({"AnalysisSession"}))
|
|
@@ -15,24 +15,41 @@ from sarj_rule_contracts import RuleId
|
|
|
15
15
|
import typer
|
|
16
16
|
|
|
17
17
|
from sarj_python_lint import __version__
|
|
18
|
-
from sarj_python_lint._analysis_session import AnalysisSession
|
|
19
|
-
from sarj_python_lint._file_context import PythonFileContext
|
|
20
18
|
from sarj_python_lint._filesystem import atomic_write_text
|
|
21
19
|
from sarj_python_lint._prepared_sources import PreparedSourceInputs
|
|
22
20
|
from sarj_python_lint._source import read_python_source
|
|
23
21
|
from sarj_python_lint.json_boundary import is_object_mapping, parse_json
|
|
24
|
-
from sarj_python_lint.rule_base import Diagnostic, ProjectRule, Rule, Severity, is_suppressed
|
|
25
|
-
from sarj_python_lint.rules import REGISTRY
|
|
26
|
-
from sarj_python_lint.rules._paths import clear_path_caches
|
|
27
|
-
from sarj_python_lint.rules._project_index import ProjectIndexSet
|
|
22
|
+
from sarj_python_lint.rule_base import Diagnostic, DiagnosticSubject, ProjectRule, Rule, Severity, is_suppressed
|
|
28
23
|
from sarj_python_lint.suppression_policy import PROTECTED_SUPPRESSION_CODES
|
|
29
24
|
|
|
30
25
|
|
|
31
26
|
if TYPE_CHECKING:
|
|
32
|
-
from collections.abc import Sequence
|
|
27
|
+
from collections.abc import Mapping, Sequence
|
|
33
28
|
|
|
34
29
|
from sarj_rule_contracts import SourceCatalog
|
|
35
30
|
|
|
31
|
+
from sarj_python_lint._analysis_session import AnalysisSession
|
|
32
|
+
from sarj_python_lint._file_context import PythonFileContext
|
|
33
|
+
from sarj_python_lint.rules import REGISTRY as REGISTRY # ruff: ignore[runtime-import-in-type-checking-block] -- the lazy compatibility export has this type; eager loading would import every rule during help/version.
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def _rule_registry() -> Mapping[str, type[Rule]]:
|
|
37
|
+
try:
|
|
38
|
+
return REGISTRY
|
|
39
|
+
except NameError:
|
|
40
|
+
from sarj_python_lint.rules import REGISTRY as _REGISTRY # ruff: ignore[import-outside-top-level] -- ordinary operations load the canonical owner; legacy module overrides take precedence.
|
|
41
|
+
|
|
42
|
+
return _REGISTRY
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def __getattr__(name: str) -> object:
|
|
46
|
+
if name == "REGISTRY":
|
|
47
|
+
from sarj_python_lint.rules._registry import REGISTRY as _REGISTRY # ruff: ignore[import-outside-top-level] -- preserve the published export independently of temporary facade overrides.
|
|
48
|
+
|
|
49
|
+
return _REGISTRY
|
|
50
|
+
msg = f"module {__name__!r} has no attribute {name!r}"
|
|
51
|
+
raise AttributeError(msg)
|
|
52
|
+
|
|
36
53
|
|
|
37
54
|
SKIP_DIR_NAMES = frozenset(
|
|
38
55
|
{
|
|
@@ -95,25 +112,34 @@ def _python_files(p: Path) -> list[Path]:
|
|
|
95
112
|
|
|
96
113
|
|
|
97
114
|
def _canonical_rule_ids(rule_names: Sequence[str]) -> list[RuleId]:
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
115
|
+
from sarj_python_lint.rules._runtime_registry import canonical_aliases # ruff: ignore[import-outside-top-level] -- class-free alias data is needed only by rule selection.
|
|
116
|
+
|
|
117
|
+
registry = _rule_registry()
|
|
118
|
+
aliases = canonical_aliases(registry)
|
|
119
|
+
if aliases is None:
|
|
120
|
+
aliases = {
|
|
121
|
+
alias: rule_id
|
|
122
|
+
for rule_id, cls in registry.items()
|
|
123
|
+
if (documentation := cls.documentation) is not None
|
|
124
|
+
for alias in documentation.aliases
|
|
125
|
+
}
|
|
126
|
+
return list(dict.fromkeys(RuleId(name if name in registry else aliases.get(name, name)) for name in rule_names))
|
|
105
127
|
|
|
106
128
|
|
|
107
129
|
def _check(
|
|
108
130
|
rule_names: Sequence[str], paths: list[Path], *, jobs: int = 1, sources: SourceCatalog | None = None
|
|
109
131
|
) -> list[Diagnostic]:
|
|
132
|
+
from sarj_python_lint._analysis_session import AnalysisSession # ruff: ignore[import-outside-top-level] -- construct semantic state only for analysis.
|
|
133
|
+
from sarj_python_lint.rules._paths import clear_path_caches # ruff: ignore[import-outside-top-level] -- analysis owns semantic cache lifetime.
|
|
134
|
+
|
|
135
|
+
registry = _rule_registry()
|
|
110
136
|
rule_ids = _canonical_rule_ids(rule_names)
|
|
111
|
-
unknown = [rid for rid in rule_ids if rid not in
|
|
137
|
+
unknown = [rid for rid in rule_ids if rid not in registry]
|
|
112
138
|
if unknown:
|
|
113
139
|
sys.stderr.write(f"unknown rule(s): {', '.join(unknown)}\n")
|
|
114
|
-
sys.stderr.write(f"available: {', '.join(sorted(
|
|
140
|
+
sys.stderr.write(f"available: {', '.join(sorted(registry))}\n")
|
|
115
141
|
raise SystemExit(2)
|
|
116
|
-
rules = [
|
|
142
|
+
rules = [registry[rid]() for rid in rule_ids]
|
|
117
143
|
source_inputs = None if sources is None else PreparedSourceInputs(sources)
|
|
118
144
|
session = AnalysisSession() if source_inputs is None else AnalysisSession(source_inputs=source_inputs)
|
|
119
145
|
for rule in rules:
|
|
@@ -160,6 +186,8 @@ def _prepare_project(
|
|
|
160
186
|
project_rules = [rule for rule in rules if isinstance(rule, ProjectRule)]
|
|
161
187
|
if not project_rules:
|
|
162
188
|
return
|
|
189
|
+
from sarj_python_lint.rules._project_index import ProjectIndexSet # ruff: ignore[import-outside-top-level] -- project rules own project indexing.
|
|
190
|
+
|
|
163
191
|
indexes = (
|
|
164
192
|
ProjectIndexSet.build(expanded, loaded, facts=session.first_party)
|
|
165
193
|
if source_inputs is None
|
|
@@ -192,6 +220,8 @@ def _parallel_diagnostics(
|
|
|
192
220
|
def check_source(
|
|
193
221
|
rules: list[Rule], p: Path, source: str, *, session: AnalysisSession | None = None
|
|
194
222
|
) -> list[Diagnostic]:
|
|
223
|
+
from sarj_python_lint._file_context import PythonFileContext # ruff: ignore[import-outside-top-level] -- source checks own native AST context construction.
|
|
224
|
+
|
|
195
225
|
context = PythonFileContext(p, source, session)
|
|
196
226
|
if rules and context.tree is None:
|
|
197
227
|
msg = f"selected Python source could not be parsed: {p}"
|
|
@@ -287,7 +317,7 @@ class _DiagnosticOwners:
|
|
|
287
317
|
def presence(self, diags: list[Diagnostic]) -> dict[tuple[Path, int, int], dict[str, set[Severity]]]:
|
|
288
318
|
present: dict[tuple[Path, int, int], dict[str, set[Severity]]] = {}
|
|
289
319
|
for diagnostic in diags:
|
|
290
|
-
if diagnostic.code == "SARJ094" and not
|
|
320
|
+
if diagnostic.code == "SARJ094" and diagnostic.subject is not DiagnosticSubject.RETURN:
|
|
291
321
|
continue
|
|
292
322
|
location = self.location(diagnostic)
|
|
293
323
|
by_code = present.setdefault((diagnostic.path, location.line, location.column), {})
|
|
@@ -472,10 +502,11 @@ class _Result:
|
|
|
472
502
|
|
|
473
503
|
|
|
474
504
|
def _explain(wanted: str) -> int:
|
|
505
|
+
registry = _rule_registry()
|
|
475
506
|
key = wanted.strip()
|
|
476
|
-
cls =
|
|
507
|
+
cls = registry.get(key) or next((c for c in registry.values() if c.code.upper() == key.upper()), None)
|
|
477
508
|
if cls is None:
|
|
478
|
-
sys.stderr.write(f"unknown rule: {wanted}\navailable: {', '.join(sorted(
|
|
509
|
+
sys.stderr.write(f"unknown rule: {wanted}\navailable: {', '.join(sorted(registry))}\n")
|
|
479
510
|
return 2
|
|
480
511
|
sys.stdout.write(f"{cls.code} {cls.id}\n{cls.description}\nexamples: {cls.examples_url()}\n")
|
|
481
512
|
return 0
|
|
@@ -609,7 +640,7 @@ def _root(
|
|
|
609
640
|
|
|
610
641
|
@app.command("list-rules", help="List available rule IDs.")
|
|
611
642
|
def _list_rules() -> None:
|
|
612
|
-
for rid, cls in sorted(
|
|
643
|
+
for rid, cls in sorted(_rule_registry().items()):
|
|
613
644
|
inst = cls()
|
|
614
645
|
sys.stdout.write(f"{inst.code:8} {rid:40} {inst.description}\n")
|
|
615
646
|
|
|
@@ -641,8 +672,9 @@ def _check_command(
|
|
|
641
672
|
if fix:
|
|
642
673
|
from sarj_python_lint.autofix import fix_paths # ruff: ignore[import-outside-top-level] -- load mutation support only for an explicit fix request.
|
|
643
674
|
|
|
675
|
+
registry = _rule_registry()
|
|
644
676
|
canonical = _canonical_rule_ids(rule)
|
|
645
|
-
unknown = [rule_id for rule_id in canonical if rule_id not in
|
|
677
|
+
unknown = [rule_id for rule_id in canonical if rule_id not in registry]
|
|
646
678
|
if unknown:
|
|
647
679
|
context.ensure_object(_Result).code = _run_check(rule, files, baseline, update_baseline, jobs=jobs)
|
|
648
680
|
return
|