sarj-python-lint 1.16.4__tar.gz → 1.19.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.16.4 → sarj_python_lint-1.19.0}/PKG-INFO +1 -1
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/pyproject.toml +1 -1
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/__main__.py +12 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/_file_context.py +8 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_registry.py +6 -2
- sarj_python_lint-1.19.0/src/sarj_python_lint/rules/_test_provenance.py +805 -0
- sarj_python_lint-1.19.0/src/sarj_python_lint/rules/no_mocked_pydantic_value_object.py +139 -0
- sarj_python_lint-1.19.0/src/sarj_python_lint/rules/no_test_method_grafting.py +146 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_immutable_module_constant.py +136 -19
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_module_level_constant.py +44 -5
- sarj_python_lint-1.19.0/src/sarj_python_lint/rules/prefer_required_constructor_parameters.py +367 -0
- sarj_python_lint-1.16.4/src/sarj_python_lint/rules/discourage_nullable_constructor_parameters.py +0 -171
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/.gitignore +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/LICENSE +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/README.md +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/__init__.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/_analysis_session.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/_filesystem.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/_python_target.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/_ratchet_cli.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/_secret_names.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/_version.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/benchmark.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/json_boundary.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/py.typed +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/ratchet.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rule_base.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/__init__.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_annotation_semantics.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_ast_index.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_ast_position.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_comments.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_contract_annotation.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_dict_key_views.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_docstrings.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_fastapi.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_first_party.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_fixed_record.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_imports.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_local_source.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_logging.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_nominal_project.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_paths.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_project_index.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_prose_budget.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_pytest.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_resource_provenance.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_set_fields.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_sql.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_suppression_comments.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_test_assertions.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_test_composition.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/async_cleanup_registered_synchronously.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/async_mock_call_without_await_assertion.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/complex_postgres_query_requires_architecture_review.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/defect_xfail_requires_explicit_strict.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/docstring_args_restate_signature.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/docstring_returns_restate_signature.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/excessive_commentary.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/fakes_in_shared_location.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/fastapi_class_router_contract.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/fastapi_explicit_openapi_contract.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/iac_source_coupled_test.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/invalid_pydantic_field_default.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/mock_without_spec.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/named_record_at_boundaries.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/negative_only_http_status_assertion.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_analytical_aggregation_in_postgres_store.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_any_mapping_types.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_broad_keyword_capture.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_comment_cruft.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_conftest_test_module_import.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_copied_inherited_docstring.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_cors_wildcard_with_credentials.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_database_programmability.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_delete_statement.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_dunder_all.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_duplicate_dunder_all_entry.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_excessive_cognitive_complexity.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_fastapi_on_event.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_file_level_escape_hatch_suppression.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_first_party_private_import.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_fixed_sleep_before_assert.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_frozen_after_validator_field_write.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_generic_single_export_module.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_hidden_constructor_fallback.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_injected_module_loader.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_invalid_argument_name_suppression.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_nested_pydantic_field_validator.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_nullable_dependency_fallback.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_offset_pagination.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_positional_psycopg_row_escape.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_psycopg_execution_outside_injected_owner.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_random_uuid_in_sql.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_raw_connection_in_tests.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_raw_source_text_test_oracle.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_redundant_literal_description.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_redundant_module_alias_exports.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_repeated_string_literal.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_repeated_test_body.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_restated_comment.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_secret_in_log.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_select_star.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_service_behavior_in_settings.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_shallow_container_type_guard.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_string_concat_in_loop.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_swallowed_asyncio_cancellation.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_tautological_expect.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_typed_doc_sections.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_unique_violation_message_match.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_unnecessary_docstring.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_unused_underscored_keyword_parameter.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_unused_value_marker.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_vague_suppression_description.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_whole_request_response_payload_in_log.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/opaque_parametrize_case_needs_id.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/over_mocked_test.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/phase_label_comment.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_autospec_for_callable_mock.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_class_row.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_collection_comprehension.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_constant_time_secret_compare.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_fstring_over_concat.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_injected_dependency_over_monkeypatch.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_library_fake.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_match_assert_never.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_match_exception_dispatch.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_match_type_dispatch.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_match_value_dispatch.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_monkeypatch_for_process_state_in_test.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_monotonic_for_elapsed_time.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_namedtuple_over_tuple_return.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_nominal_id_types.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_non_nullable_collection.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_or_pattern.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_pydantic_json_value.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_pytest_fixture_injection.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_regex_fullmatch.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_self_documenting_constant.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_self_type_annotation.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_set_isdisjoint.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_str_enum.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_struct_over_namedtuple.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_walrus_awaited_none_guard.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_walrus_comprehension_filter.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_walrus_regex_match.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_walrus_stream_loop.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/production_derived_test_cases.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/pytest_fixture_returns_bare_tuple.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/redundant_class_docstring.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/redundant_docstring.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/redundant_module_docstring.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/repeated_kwarg_heavy_call_in_test.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/repeated_static_call_cases.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/repeated_test_composition.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/require_explicit_contract_implementation.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/require_explicit_psycopg_transaction.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/require_explicit_service_contract.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/require_keyword_only_swap_prone_params.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/require_nodecode_for_splitting_settings_field.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/require_port_for_service.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/require_precise_factory_signature.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/require_public_dependency_contract.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/require_pydantic_for_external_json.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/require_pydantic_for_structured_payload.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/require_pydantic_ordinal_lower_bound.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/restated_test_docstring.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/shared_mutable_pydantic_factory.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/stepdown.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/store_get_delegates_to_bulk_read.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/store_insert_requires_on_conflict.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/subprocess_kill_without_reap.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/timestamp_order_requires_tiebreaker.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/trailing_value_narration.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/typed_error_reasons.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/uncontrolled_randomness_in_test.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/unused_mock_setup.py +0 -0
- {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/unused_test_factory_option.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.19.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/
|
|
@@ -84,7 +84,18 @@ def _python_files(p: Path) -> list[Path]:
|
|
|
84
84
|
return sorted(out)
|
|
85
85
|
|
|
86
86
|
|
|
87
|
+
def _canonical_rule_ids(rule_ids: list[str]) -> list[str]:
|
|
88
|
+
aliases = {
|
|
89
|
+
alias: rule_id
|
|
90
|
+
for rule_id, cls in REGISTRY.items()
|
|
91
|
+
if (documentation := cls.documentation) is not None
|
|
92
|
+
for alias in documentation.aliases
|
|
93
|
+
}
|
|
94
|
+
return list(dict.fromkeys(rid if rid in REGISTRY else aliases.get(rid, rid) for rid in rule_ids))
|
|
95
|
+
|
|
96
|
+
|
|
87
97
|
def _check(rule_ids: list[str], paths: list[Path]) -> list[Diagnostic]:
|
|
98
|
+
rule_ids = _canonical_rule_ids(rule_ids)
|
|
88
99
|
unknown = [rid for rid in rule_ids if rid not in REGISTRY]
|
|
89
100
|
if unknown:
|
|
90
101
|
sys.stderr.write(f"unknown rule(s): {', '.join(unknown)}\n")
|
|
@@ -155,6 +166,7 @@ _DIAGNOSTIC_PRECEDENCE = MappingProxyType(
|
|
|
155
166
|
# Keep the annotation diagnostics when SARJ094 is absent, including
|
|
156
167
|
# when a concrete response_model makes the route contract complete.
|
|
157
168
|
"SARJ094": frozenset({"SARJ008", "SARJ447"}),
|
|
169
|
+
"SARJ095": frozenset({"SARJ468"}),
|
|
158
170
|
"SARJ099": frozenset({"SARJ420"}),
|
|
159
171
|
# Any-valued mappings are the stronger correctness failure. SARJ008
|
|
160
172
|
# still owns every fixed dictionary return when selected alone, while
|
|
@@ -15,6 +15,8 @@ if TYPE_CHECKING:
|
|
|
15
15
|
from collections.abc import Mapping
|
|
16
16
|
from pathlib import Path
|
|
17
17
|
|
|
18
|
+
from sarj_python_lint.rules._test_provenance import TestProvenance
|
|
19
|
+
|
|
18
20
|
|
|
19
21
|
@final
|
|
20
22
|
class PythonFileContext:
|
|
@@ -65,6 +67,12 @@ class PythonFileContext:
|
|
|
65
67
|
def fastapi(self) -> FastapiIndex:
|
|
66
68
|
return FastapiIndex(self._valid_tree(), path=self.path)
|
|
67
69
|
|
|
70
|
+
@cached_property
|
|
71
|
+
def test_provenance(self) -> TestProvenance:
|
|
72
|
+
from sarj_python_lint.rules._test_provenance import TestProvenance # ruff: ignore[import-outside-top-level] — defer test analysis until requested
|
|
73
|
+
|
|
74
|
+
return TestProvenance(self)
|
|
75
|
+
|
|
68
76
|
def _valid_tree(self) -> ast.Module:
|
|
69
77
|
tree = self.tree
|
|
70
78
|
if tree is None:
|
|
@@ -9,7 +9,6 @@ from sarj_python_lint.rules.complex_postgres_query_requires_architecture_review
|
|
|
9
9
|
ComplexPostgresQueryRequiresArchitectureReview,
|
|
10
10
|
)
|
|
11
11
|
from sarj_python_lint.rules.defect_xfail_requires_explicit_strict import DefectXfailRequiresExplicitStrict
|
|
12
|
-
from sarj_python_lint.rules.discourage_nullable_constructor_parameters import DiscourageNullableConstructorParameters
|
|
13
12
|
from sarj_python_lint.rules.docstring_args_restate_signature import (
|
|
14
13
|
DocstringArgsRestateSignature,
|
|
15
14
|
)
|
|
@@ -62,6 +61,7 @@ from sarj_python_lint.rules.no_hidden_constructor_fallback import (
|
|
|
62
61
|
)
|
|
63
62
|
from sarj_python_lint.rules.no_injected_module_loader import NoInjectedModuleLoader
|
|
64
63
|
from sarj_python_lint.rules.no_invalid_argument_name_suppression import NoInvalidArgumentNameSuppression
|
|
64
|
+
from sarj_python_lint.rules.no_mocked_pydantic_value_object import NoMockedPydanticValueObject
|
|
65
65
|
from sarj_python_lint.rules.no_nested_pydantic_field_validator import NoNestedPydanticFieldValidator
|
|
66
66
|
from sarj_python_lint.rules.no_nullable_dependency_fallback import NoNullableDependencyFallback
|
|
67
67
|
from sarj_python_lint.rules.no_offset_pagination import NoOffsetPagination
|
|
@@ -84,6 +84,7 @@ from sarj_python_lint.rules.no_shallow_container_type_guard import NoShallowCont
|
|
|
84
84
|
from sarj_python_lint.rules.no_string_concat_in_loop import NoStringConcatInLoop
|
|
85
85
|
from sarj_python_lint.rules.no_swallowed_asyncio_cancellation import NoSwallowedAsyncioCancellation
|
|
86
86
|
from sarj_python_lint.rules.no_tautological_expect import NoTautologicalExpect
|
|
87
|
+
from sarj_python_lint.rules.no_test_method_grafting import NoTestMethodGrafting
|
|
87
88
|
from sarj_python_lint.rules.no_typed_doc_sections import NoTypedDocSections
|
|
88
89
|
from sarj_python_lint.rules.no_unique_violation_message_match import (
|
|
89
90
|
NoUniqueViolationMessageMatch,
|
|
@@ -136,6 +137,7 @@ from sarj_python_lint.rules.prefer_or_pattern import PreferOrPattern
|
|
|
136
137
|
from sarj_python_lint.rules.prefer_pydantic_json_value import PreferPydanticJsonValue
|
|
137
138
|
from sarj_python_lint.rules.prefer_pytest_fixture_injection import PreferPytestFixtureInjection
|
|
138
139
|
from sarj_python_lint.rules.prefer_regex_fullmatch import PreferRegexFullmatch
|
|
140
|
+
from sarj_python_lint.rules.prefer_required_constructor_parameters import PreferRequiredConstructorParameters
|
|
139
141
|
from sarj_python_lint.rules.prefer_self_documenting_constant import (
|
|
140
142
|
PreferSelfDocumentingConstant,
|
|
141
143
|
)
|
|
@@ -203,7 +205,7 @@ REGISTRY: Mapping[str, type[Rule]] = MappingProxyType(
|
|
|
203
205
|
{
|
|
204
206
|
NoDatabaseProgrammability.id: NoDatabaseProgrammability,
|
|
205
207
|
RequireExplicitContractImplementation.id: RequireExplicitContractImplementation,
|
|
206
|
-
|
|
208
|
+
PreferRequiredConstructorParameters.id: PreferRequiredConstructorParameters,
|
|
207
209
|
RequirePublicDependencyContract.id: RequirePublicDependencyContract,
|
|
208
210
|
RequirePreciseFactorySignature.id: RequirePreciseFactorySignature,
|
|
209
211
|
RequireExplicitServiceContract.id: RequireExplicitServiceContract,
|
|
@@ -252,6 +254,8 @@ REGISTRY: Mapping[str, type[Rule]] = MappingProxyType(
|
|
|
252
254
|
PreferInjectedDependencyOverMonkeypatch.id: PreferInjectedDependencyOverMonkeypatch,
|
|
253
255
|
PreferMonkeypatchForProcessStateInTest.id: PreferMonkeypatchForProcessStateInTest,
|
|
254
256
|
MockWithoutSpec.id: MockWithoutSpec,
|
|
257
|
+
NoMockedPydanticValueObject.id: NoMockedPydanticValueObject,
|
|
258
|
+
NoTestMethodGrafting.id: NoTestMethodGrafting,
|
|
255
259
|
PreferAutospecForCallableMock.id: PreferAutospecForCallableMock,
|
|
256
260
|
OpaqueParametrizeCaseNeedsId.id: OpaqueParametrizeCaseNeedsId,
|
|
257
261
|
PytestFixtureReturnsBareTuple.id: PytestFixtureReturnsBareTuple,
|