sarj-python-lint 1.18.0__tar.gz → 1.20.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.18.0 → sarj_python_lint-1.20.0}/PKG-INFO +1 -1
  2. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/pyproject.toml +1 -1
  3. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/_file_context.py +8 -0
  4. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/_registry.py +6 -0
  5. sarj_python_lint-1.20.0/src/sarj_python_lint/rules/_test_provenance.py +805 -0
  6. sarj_python_lint-1.20.0/src/sarj_python_lint/rules/no_mocked_pydantic_value_object.py +139 -0
  7. sarj_python_lint-1.20.0/src/sarj_python_lint/rules/no_test_method_grafting.py +146 -0
  8. sarj_python_lint-1.20.0/src/sarj_python_lint/rules/prefer_native_string_check.py +169 -0
  9. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/.gitignore +0 -0
  10. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/LICENSE +0 -0
  11. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/README.md +0 -0
  12. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/__init__.py +0 -0
  13. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/__main__.py +0 -0
  14. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/_analysis_session.py +0 -0
  15. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/_filesystem.py +0 -0
  16. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/_python_target.py +0 -0
  17. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/_ratchet_cli.py +0 -0
  18. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/_secret_names.py +0 -0
  19. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/_version.py +0 -0
  20. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/benchmark.py +0 -0
  21. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/json_boundary.py +0 -0
  22. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/py.typed +0 -0
  23. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/ratchet.py +0 -0
  24. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rule_base.py +0 -0
  25. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/__init__.py +0 -0
  26. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/_annotation_semantics.py +0 -0
  27. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/_ast_index.py +0 -0
  28. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/_ast_position.py +0 -0
  29. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/_comments.py +0 -0
  30. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/_contract_annotation.py +0 -0
  31. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/_dict_key_views.py +0 -0
  32. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/_docstrings.py +0 -0
  33. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/_fastapi.py +0 -0
  34. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/_first_party.py +0 -0
  35. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/_fixed_record.py +0 -0
  36. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/_imports.py +0 -0
  37. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/_local_source.py +0 -0
  38. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/_logging.py +0 -0
  39. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/_nominal_project.py +0 -0
  40. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/_paths.py +0 -0
  41. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/_project_index.py +0 -0
  42. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/_prose_budget.py +0 -0
  43. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/_pytest.py +0 -0
  44. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/_resource_provenance.py +0 -0
  45. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/_set_fields.py +0 -0
  46. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/_sql.py +0 -0
  47. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/_suppression_comments.py +0 -0
  48. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/_test_assertions.py +0 -0
  49. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/_test_composition.py +0 -0
  50. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/async_cleanup_registered_synchronously.py +0 -0
  51. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/async_mock_call_without_await_assertion.py +0 -0
  52. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/complex_postgres_query_requires_architecture_review.py +0 -0
  53. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/defect_xfail_requires_explicit_strict.py +0 -0
  54. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/docstring_args_restate_signature.py +0 -0
  55. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/docstring_returns_restate_signature.py +0 -0
  56. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/excessive_commentary.py +0 -0
  57. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/fakes_in_shared_location.py +0 -0
  58. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/fastapi_class_router_contract.py +0 -0
  59. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/fastapi_explicit_openapi_contract.py +0 -0
  60. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/iac_source_coupled_test.py +0 -0
  61. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/invalid_pydantic_field_default.py +0 -0
  62. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/mock_without_spec.py +0 -0
  63. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/named_record_at_boundaries.py +0 -0
  64. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/negative_only_http_status_assertion.py +0 -0
  65. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_analytical_aggregation_in_postgres_store.py +0 -0
  66. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_any_mapping_types.py +0 -0
  67. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_broad_keyword_capture.py +0 -0
  68. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_comment_cruft.py +0 -0
  69. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_conftest_test_module_import.py +0 -0
  70. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_copied_inherited_docstring.py +0 -0
  71. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_cors_wildcard_with_credentials.py +0 -0
  72. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_database_programmability.py +0 -0
  73. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_delete_statement.py +0 -0
  74. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_dunder_all.py +0 -0
  75. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_duplicate_dunder_all_entry.py +0 -0
  76. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_excessive_cognitive_complexity.py +0 -0
  77. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_fastapi_on_event.py +0 -0
  78. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_file_level_escape_hatch_suppression.py +0 -0
  79. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_first_party_private_import.py +0 -0
  80. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_fixed_sleep_before_assert.py +0 -0
  81. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_frozen_after_validator_field_write.py +0 -0
  82. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_generic_single_export_module.py +0 -0
  83. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_hidden_constructor_fallback.py +0 -0
  84. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_injected_module_loader.py +0 -0
  85. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_invalid_argument_name_suppression.py +0 -0
  86. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_nested_pydantic_field_validator.py +0 -0
  87. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_nullable_dependency_fallback.py +0 -0
  88. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_offset_pagination.py +0 -0
  89. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_positional_psycopg_row_escape.py +0 -0
  90. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_psycopg_execution_outside_injected_owner.py +0 -0
  91. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_random_uuid_in_sql.py +0 -0
  92. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_raw_connection_in_tests.py +0 -0
  93. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_raw_source_text_test_oracle.py +0 -0
  94. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_redundant_literal_description.py +0 -0
  95. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_redundant_module_alias_exports.py +0 -0
  96. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_repeated_string_literal.py +0 -0
  97. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_repeated_test_body.py +0 -0
  98. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_restated_comment.py +0 -0
  99. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_secret_in_log.py +0 -0
  100. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_select_star.py +0 -0
  101. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_service_behavior_in_settings.py +0 -0
  102. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_shallow_container_type_guard.py +0 -0
  103. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_string_concat_in_loop.py +0 -0
  104. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_swallowed_asyncio_cancellation.py +0 -0
  105. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_tautological_expect.py +0 -0
  106. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_typed_doc_sections.py +0 -0
  107. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_unique_violation_message_match.py +0 -0
  108. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_unnecessary_docstring.py +0 -0
  109. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_unused_underscored_keyword_parameter.py +0 -0
  110. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_unused_value_marker.py +0 -0
  111. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_vague_suppression_description.py +0 -0
  112. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/no_whole_request_response_payload_in_log.py +0 -0
  113. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/opaque_parametrize_case_needs_id.py +0 -0
  114. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/over_mocked_test.py +0 -0
  115. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/phase_label_comment.py +0 -0
  116. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/prefer_autospec_for_callable_mock.py +0 -0
  117. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/prefer_class_row.py +0 -0
  118. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/prefer_collection_comprehension.py +0 -0
  119. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/prefer_constant_time_secret_compare.py +0 -0
  120. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/prefer_fstring_over_concat.py +0 -0
  121. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/prefer_immutable_module_constant.py +0 -0
  122. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/prefer_injected_dependency_over_monkeypatch.py +0 -0
  123. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/prefer_library_fake.py +0 -0
  124. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/prefer_match_assert_never.py +0 -0
  125. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/prefer_match_exception_dispatch.py +0 -0
  126. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/prefer_match_type_dispatch.py +0 -0
  127. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/prefer_match_value_dispatch.py +0 -0
  128. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/prefer_module_level_constant.py +0 -0
  129. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/prefer_monkeypatch_for_process_state_in_test.py +0 -0
  130. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/prefer_monotonic_for_elapsed_time.py +0 -0
  131. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/prefer_namedtuple_over_tuple_return.py +0 -0
  132. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/prefer_nominal_id_types.py +0 -0
  133. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/prefer_non_nullable_collection.py +0 -0
  134. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/prefer_or_pattern.py +0 -0
  135. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/prefer_pydantic_json_value.py +0 -0
  136. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/prefer_pytest_fixture_injection.py +0 -0
  137. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/prefer_regex_fullmatch.py +0 -0
  138. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/prefer_required_constructor_parameters.py +0 -0
  139. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/prefer_self_documenting_constant.py +0 -0
  140. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/prefer_self_type_annotation.py +0 -0
  141. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/prefer_set_isdisjoint.py +0 -0
  142. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/prefer_str_enum.py +0 -0
  143. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/prefer_struct_over_namedtuple.py +0 -0
  144. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/prefer_walrus_awaited_none_guard.py +0 -0
  145. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/prefer_walrus_comprehension_filter.py +0 -0
  146. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/prefer_walrus_regex_match.py +0 -0
  147. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/prefer_walrus_stream_loop.py +0 -0
  148. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/production_derived_test_cases.py +0 -0
  149. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/pytest_fixture_returns_bare_tuple.py +0 -0
  150. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/redundant_class_docstring.py +0 -0
  151. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/redundant_docstring.py +0 -0
  152. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/redundant_module_docstring.py +0 -0
  153. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/repeated_kwarg_heavy_call_in_test.py +0 -0
  154. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/repeated_static_call_cases.py +0 -0
  155. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/repeated_test_composition.py +0 -0
  156. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/require_explicit_contract_implementation.py +0 -0
  157. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/require_explicit_psycopg_transaction.py +0 -0
  158. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/require_explicit_service_contract.py +0 -0
  159. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/require_keyword_only_swap_prone_params.py +0 -0
  160. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/require_nodecode_for_splitting_settings_field.py +0 -0
  161. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/require_port_for_service.py +0 -0
  162. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/require_precise_factory_signature.py +0 -0
  163. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/require_public_dependency_contract.py +0 -0
  164. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/require_pydantic_for_external_json.py +0 -0
  165. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/require_pydantic_for_structured_payload.py +0 -0
  166. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/require_pydantic_ordinal_lower_bound.py +0 -0
  167. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/restated_test_docstring.py +0 -0
  168. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/shared_mutable_pydantic_factory.py +0 -0
  169. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/stepdown.py +0 -0
  170. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/store_get_delegates_to_bulk_read.py +0 -0
  171. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/store_insert_requires_on_conflict.py +0 -0
  172. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/subprocess_kill_without_reap.py +0 -0
  173. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/timestamp_order_requires_tiebreaker.py +0 -0
  174. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/trailing_value_narration.py +0 -0
  175. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/typed_error_reasons.py +0 -0
  176. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/uncontrolled_randomness_in_test.py +0 -0
  177. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.0}/src/sarj_python_lint/rules/unused_mock_setup.py +0 -0
  178. {sarj_python_lint-1.18.0 → sarj_python_lint-1.20.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.18.0
3
+ Version: 1.20.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.18.0"
3
+ version = "1.20.0"
4
4
  description = "Custom Python lint rules — AST-based, pre-commit-friendly, hypermodern defaults"
5
5
  readme = "README.md"
6
6
  authors = [{ name = "sarj-ai" }]
@@ -15,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:
@@ -61,6 +61,7 @@ from sarj_python_lint.rules.no_hidden_constructor_fallback import (
61
61
  )
62
62
  from sarj_python_lint.rules.no_injected_module_loader import NoInjectedModuleLoader
63
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
64
65
  from sarj_python_lint.rules.no_nested_pydantic_field_validator import NoNestedPydanticFieldValidator
65
66
  from sarj_python_lint.rules.no_nullable_dependency_fallback import NoNullableDependencyFallback
66
67
  from sarj_python_lint.rules.no_offset_pagination import NoOffsetPagination
@@ -83,6 +84,7 @@ from sarj_python_lint.rules.no_shallow_container_type_guard import NoShallowCont
83
84
  from sarj_python_lint.rules.no_string_concat_in_loop import NoStringConcatInLoop
84
85
  from sarj_python_lint.rules.no_swallowed_asyncio_cancellation import NoSwallowedAsyncioCancellation
85
86
  from sarj_python_lint.rules.no_tautological_expect import NoTautologicalExpect
87
+ from sarj_python_lint.rules.no_test_method_grafting import NoTestMethodGrafting
86
88
  from sarj_python_lint.rules.no_typed_doc_sections import NoTypedDocSections
87
89
  from sarj_python_lint.rules.no_unique_violation_message_match import (
88
90
  NoUniqueViolationMessageMatch,
@@ -127,6 +129,7 @@ from sarj_python_lint.rules.prefer_monotonic_for_elapsed_time import PreferMonot
127
129
  from sarj_python_lint.rules.prefer_namedtuple_over_tuple_return import (
128
130
  PreferNamedtupleOverTupleReturn,
129
131
  )
132
+ from sarj_python_lint.rules.prefer_native_string_check import PreferNativeStringCheck
130
133
  from sarj_python_lint.rules.prefer_nominal_id_types import PreferNominalIdTypes
131
134
  from sarj_python_lint.rules.prefer_non_nullable_collection import (
132
135
  PreferNonNullableCollection,
@@ -252,6 +255,8 @@ REGISTRY: Mapping[str, type[Rule]] = MappingProxyType(
252
255
  PreferInjectedDependencyOverMonkeypatch.id: PreferInjectedDependencyOverMonkeypatch,
253
256
  PreferMonkeypatchForProcessStateInTest.id: PreferMonkeypatchForProcessStateInTest,
254
257
  MockWithoutSpec.id: MockWithoutSpec,
258
+ NoMockedPydanticValueObject.id: NoMockedPydanticValueObject,
259
+ NoTestMethodGrafting.id: NoTestMethodGrafting,
255
260
  PreferAutospecForCallableMock.id: PreferAutospecForCallableMock,
256
261
  OpaqueParametrizeCaseNeedsId.id: OpaqueParametrizeCaseNeedsId,
257
262
  PytestFixtureReturnsBareTuple.id: PytestFixtureReturnsBareTuple,
@@ -294,6 +299,7 @@ REGISTRY: Mapping[str, type[Rule]] = MappingProxyType(
294
299
  PreferWalrusStreamLoop.id: PreferWalrusStreamLoop,
295
300
  PreferSelfTypeAnnotation.id: PreferSelfTypeAnnotation,
296
301
  PreferSetIsdisjoint.id: PreferSetIsdisjoint,
302
+ PreferNativeStringCheck.id: PreferNativeStringCheck,
297
303
  PreferSelfDocumentingConstant.id: PreferSelfDocumentingConstant,
298
304
  NoDuplicateDunderAllEntry.id: NoDuplicateDunderAllEntry,
299
305
  NoDunderAll.id: NoDunderAll,