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.
Files changed (178) hide show
  1. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/PKG-INFO +1 -1
  2. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/pyproject.toml +1 -1
  3. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/__main__.py +12 -0
  4. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/_file_context.py +8 -0
  5. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_registry.py +6 -2
  6. sarj_python_lint-1.19.0/src/sarj_python_lint/rules/_test_provenance.py +805 -0
  7. sarj_python_lint-1.19.0/src/sarj_python_lint/rules/no_mocked_pydantic_value_object.py +139 -0
  8. sarj_python_lint-1.19.0/src/sarj_python_lint/rules/no_test_method_grafting.py +146 -0
  9. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_immutable_module_constant.py +136 -19
  10. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_module_level_constant.py +44 -5
  11. sarj_python_lint-1.19.0/src/sarj_python_lint/rules/prefer_required_constructor_parameters.py +367 -0
  12. sarj_python_lint-1.16.4/src/sarj_python_lint/rules/discourage_nullable_constructor_parameters.py +0 -171
  13. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/.gitignore +0 -0
  14. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/LICENSE +0 -0
  15. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/README.md +0 -0
  16. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/__init__.py +0 -0
  17. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/_analysis_session.py +0 -0
  18. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/_filesystem.py +0 -0
  19. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/_python_target.py +0 -0
  20. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/_ratchet_cli.py +0 -0
  21. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/_secret_names.py +0 -0
  22. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/_version.py +0 -0
  23. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/benchmark.py +0 -0
  24. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/json_boundary.py +0 -0
  25. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/py.typed +0 -0
  26. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/ratchet.py +0 -0
  27. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rule_base.py +0 -0
  28. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/__init__.py +0 -0
  29. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_annotation_semantics.py +0 -0
  30. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_ast_index.py +0 -0
  31. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_ast_position.py +0 -0
  32. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_comments.py +0 -0
  33. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_contract_annotation.py +0 -0
  34. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_dict_key_views.py +0 -0
  35. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_docstrings.py +0 -0
  36. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_fastapi.py +0 -0
  37. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_first_party.py +0 -0
  38. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_fixed_record.py +0 -0
  39. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_imports.py +0 -0
  40. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_local_source.py +0 -0
  41. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_logging.py +0 -0
  42. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_nominal_project.py +0 -0
  43. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_paths.py +0 -0
  44. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_project_index.py +0 -0
  45. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_prose_budget.py +0 -0
  46. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_pytest.py +0 -0
  47. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_resource_provenance.py +0 -0
  48. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_set_fields.py +0 -0
  49. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_sql.py +0 -0
  50. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_suppression_comments.py +0 -0
  51. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_test_assertions.py +0 -0
  52. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/_test_composition.py +0 -0
  53. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/async_cleanup_registered_synchronously.py +0 -0
  54. {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
  55. {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
  56. {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
  57. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/docstring_args_restate_signature.py +0 -0
  58. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/docstring_returns_restate_signature.py +0 -0
  59. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/excessive_commentary.py +0 -0
  60. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/fakes_in_shared_location.py +0 -0
  61. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/fastapi_class_router_contract.py +0 -0
  62. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/fastapi_explicit_openapi_contract.py +0 -0
  63. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/iac_source_coupled_test.py +0 -0
  64. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/invalid_pydantic_field_default.py +0 -0
  65. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/mock_without_spec.py +0 -0
  66. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/named_record_at_boundaries.py +0 -0
  67. {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
  68. {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
  69. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_any_mapping_types.py +0 -0
  70. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_broad_keyword_capture.py +0 -0
  71. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_comment_cruft.py +0 -0
  72. {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
  73. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_copied_inherited_docstring.py +0 -0
  74. {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
  75. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_database_programmability.py +0 -0
  76. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_delete_statement.py +0 -0
  77. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_dunder_all.py +0 -0
  78. {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
  79. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_excessive_cognitive_complexity.py +0 -0
  80. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_fastapi_on_event.py +0 -0
  81. {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
  82. {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
  83. {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
  84. {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
  85. {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
  86. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_hidden_constructor_fallback.py +0 -0
  87. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_injected_module_loader.py +0 -0
  88. {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
  89. {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
  90. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_nullable_dependency_fallback.py +0 -0
  91. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_offset_pagination.py +0 -0
  92. {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
  93. {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
  94. {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
  95. {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
  96. {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
  97. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_redundant_literal_description.py +0 -0
  98. {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
  99. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_repeated_string_literal.py +0 -0
  100. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_repeated_test_body.py +0 -0
  101. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_restated_comment.py +0 -0
  102. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_secret_in_log.py +0 -0
  103. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_select_star.py +0 -0
  104. {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
  105. {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
  106. {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
  107. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_swallowed_asyncio_cancellation.py +0 -0
  108. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_tautological_expect.py +0 -0
  109. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_typed_doc_sections.py +0 -0
  110. {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
  111. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_unnecessary_docstring.py +0 -0
  112. {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
  113. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_unused_value_marker.py +0 -0
  114. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/no_vague_suppression_description.py +0 -0
  115. {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
  116. {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
  117. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/over_mocked_test.py +0 -0
  118. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/phase_label_comment.py +0 -0
  119. {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
  120. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_class_row.py +0 -0
  121. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_collection_comprehension.py +0 -0
  122. {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
  123. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_fstring_over_concat.py +0 -0
  124. {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
  125. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_library_fake.py +0 -0
  126. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_match_assert_never.py +0 -0
  127. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_match_exception_dispatch.py +0 -0
  128. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_match_type_dispatch.py +0 -0
  129. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_match_value_dispatch.py +0 -0
  130. {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
  131. {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
  132. {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
  133. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_nominal_id_types.py +0 -0
  134. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_non_nullable_collection.py +0 -0
  135. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_or_pattern.py +0 -0
  136. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_pydantic_json_value.py +0 -0
  137. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_pytest_fixture_injection.py +0 -0
  138. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_regex_fullmatch.py +0 -0
  139. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_self_documenting_constant.py +0 -0
  140. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_self_type_annotation.py +0 -0
  141. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_set_isdisjoint.py +0 -0
  142. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_str_enum.py +0 -0
  143. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_struct_over_namedtuple.py +0 -0
  144. {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
  145. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_walrus_comprehension_filter.py +0 -0
  146. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_walrus_regex_match.py +0 -0
  147. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/prefer_walrus_stream_loop.py +0 -0
  148. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/production_derived_test_cases.py +0 -0
  149. {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
  150. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/redundant_class_docstring.py +0 -0
  151. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/redundant_docstring.py +0 -0
  152. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/redundant_module_docstring.py +0 -0
  153. {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
  154. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/repeated_static_call_cases.py +0 -0
  155. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/repeated_test_composition.py +0 -0
  156. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/require_explicit_contract_implementation.py +0 -0
  157. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/require_explicit_psycopg_transaction.py +0 -0
  158. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/require_explicit_service_contract.py +0 -0
  159. {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
  160. {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
  161. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/require_port_for_service.py +0 -0
  162. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/require_precise_factory_signature.py +0 -0
  163. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/require_public_dependency_contract.py +0 -0
  164. {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
  165. {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
  166. {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
  167. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/restated_test_docstring.py +0 -0
  168. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/shared_mutable_pydantic_factory.py +0 -0
  169. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/stepdown.py +0 -0
  170. {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
  171. {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
  172. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/subprocess_kill_without_reap.py +0 -0
  173. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/timestamp_order_requires_tiebreaker.py +0 -0
  174. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/trailing_value_narration.py +0 -0
  175. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/typed_error_reasons.py +0 -0
  176. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/uncontrolled_randomness_in_test.py +0 -0
  177. {sarj_python_lint-1.16.4 → sarj_python_lint-1.19.0}/src/sarj_python_lint/rules/unused_mock_setup.py +0 -0
  178. {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.16.4
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/
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "sarj-python-lint"
3
- version = "1.16.4"
3
+ version = "1.19.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" }]
@@ -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
- DiscourageNullableConstructorParameters.id: DiscourageNullableConstructorParameters,
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,