sarj-python-lint 0.84.0__tar.gz → 0.84.1__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 (137) hide show
  1. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/PKG-INFO +1 -1
  2. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/pyproject.toml +1 -1
  3. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/__main__.py +8 -1
  4. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/docstring_args_restate_signature.py +1 -1
  5. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/docstring_returns_restate_signature.py +1 -1
  6. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/no_copied_inherited_docstring.py +1 -1
  7. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/no_repeated_string_literal.py +2 -2
  8. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/no_repeated_test_body.py +1 -1
  9. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/no_vague_suppression_description.py +1 -1
  10. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/phase_label_comment.py +1 -1
  11. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/prefer_class_row.py +1 -1
  12. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/prefer_self_documenting_constant.py +2 -2
  13. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/prefer_struct_over_namedtuple.py +1 -1
  14. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/redundant_class_docstring.py +1 -1
  15. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/redundant_module_docstring.py +1 -1
  16. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/restated_test_docstring.py +2 -2
  17. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/.gitignore +0 -0
  18. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/LICENSE +0 -0
  19. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/README.md +0 -0
  20. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/__init__.py +0 -0
  21. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/_analysis_session.py +0 -0
  22. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/_filesystem.py +0 -0
  23. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/_python_target.py +0 -0
  24. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/_ratchet_cli.py +0 -0
  25. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/_secret_names.py +0 -0
  26. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/_version.py +0 -0
  27. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/py.typed +0 -0
  28. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/ratchet.py +0 -0
  29. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rule_base.py +0 -0
  30. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/__init__.py +0 -0
  31. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/_ast_index.py +0 -0
  32. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/_comments.py +0 -0
  33. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/_docstrings.py +0 -0
  34. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/_fastapi.py +0 -0
  35. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/_first_party.py +0 -0
  36. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/_fixed_record.py +0 -0
  37. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/_imports.py +0 -0
  38. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/_logging.py +0 -0
  39. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/_paths.py +0 -0
  40. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/_project_index.py +0 -0
  41. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/_prose_budget.py +0 -0
  42. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/_pytest.py +0 -0
  43. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/_registry.py +0 -0
  44. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/_sql.py +0 -0
  45. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/_suppression_comments.py +0 -0
  46. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/_test_assertions.py +0 -0
  47. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/complex_postgres_query_requires_architecture_review.py +0 -0
  48. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/defect_xfail_requires_explicit_strict.py +0 -0
  49. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/excessive_commentary.py +0 -0
  50. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/fakes_in_shared_location.py +0 -0
  51. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/fastapi_class_router_contract.py +0 -0
  52. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/fastapi_explicit_openapi_contract.py +0 -0
  53. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/iac_source_coupled_test.py +0 -0
  54. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/invalid_pydantic_field_default.py +0 -0
  55. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/mock_without_spec.py +0 -0
  56. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/negative_only_http_status_assertion.py +0 -0
  57. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/no_analytical_aggregation_in_postgres_store.py +0 -0
  58. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/no_comment_cruft.py +0 -0
  59. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/no_conftest_test_module_import.py +0 -0
  60. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/no_cors_wildcard_with_credentials.py +0 -0
  61. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/no_deleted_only_override_parameter.py +0 -0
  62. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/no_dunder_all.py +0 -0
  63. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/no_duplicate_dunder_all_entry.py +0 -0
  64. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/no_excessive_cognitive_complexity.py +0 -0
  65. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/no_fastapi_on_event.py +0 -0
  66. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/no_file_level_escape_hatch_suppression.py +0 -0
  67. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/no_first_party_private_import.py +0 -0
  68. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/no_frozen_after_validator_field_write.py +0 -0
  69. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/no_generic_single_export_module.py +0 -0
  70. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/no_hidden_constructor_fallback.py +0 -0
  71. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/no_invalid_argument_name_suppression.py +0 -0
  72. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/no_nested_pydantic_field_validator.py +0 -0
  73. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/no_offset_pagination.py +0 -0
  74. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/no_positional_psycopg_row_escape.py +0 -0
  75. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/no_psycopg_execution_outside_injected_owner.py +0 -0
  76. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/no_random_uuid_in_sql.py +0 -0
  77. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/no_raw_connection_in_tests.py +0 -0
  78. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/no_raw_source_text_test_oracle.py +0 -0
  79. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/no_redundant_literal_description.py +0 -0
  80. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/no_redundant_module_alias_exports.py +0 -0
  81. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/no_restated_comment.py +0 -0
  82. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/no_secret_in_log.py +0 -0
  83. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/no_select_star.py +0 -0
  84. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/no_service_behavior_in_settings.py +0 -0
  85. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/no_string_concat_in_loop.py +0 -0
  86. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/no_tautological_expect.py +0 -0
  87. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/no_typed_doc_sections.py +0 -0
  88. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/no_unique_violation_message_match.py +0 -0
  89. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/no_unnecessary_docstring.py +0 -0
  90. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/no_vague_annotations.py +0 -0
  91. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/no_whole_request_response_payload_in_log.py +0 -0
  92. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/opaque_parametrize_case_needs_id.py +0 -0
  93. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/over_mocked_test.py +0 -0
  94. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/prefer_collection_comprehension.py +0 -0
  95. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/prefer_constant_time_secret_compare.py +0 -0
  96. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/prefer_fstring_over_concat.py +0 -0
  97. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/prefer_immutable_module_constant.py +0 -0
  98. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/prefer_injected_dependency_over_monkeypatch.py +0 -0
  99. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/prefer_library_fake.py +0 -0
  100. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/prefer_match_assert_never.py +0 -0
  101. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/prefer_match_type_dispatch.py +0 -0
  102. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/prefer_match_value_dispatch.py +0 -0
  103. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/prefer_module_level_constant.py +0 -0
  104. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/prefer_monkeypatch_for_process_state_in_test.py +0 -0
  105. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/prefer_namedtuple_over_tuple_return.py +0 -0
  106. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/prefer_nominal_id_types.py +0 -0
  107. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/prefer_non_nullable_collection.py +0 -0
  108. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/prefer_or_pattern.py +0 -0
  109. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/prefer_self_type_annotation.py +0 -0
  110. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/prefer_set_isdisjoint.py +0 -0
  111. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/prefer_str_enum.py +0 -0
  112. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/prefer_walrus_awaited_none_guard.py +0 -0
  113. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/prefer_walrus_comprehension_filter.py +0 -0
  114. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/prefer_walrus_regex_match.py +0 -0
  115. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/prefer_walrus_stream_loop.py +0 -0
  116. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/production_derived_test_cases.py +0 -0
  117. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/pydantic_at_boundaries.py +0 -0
  118. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/pytest_fixture_returns_bare_tuple.py +0 -0
  119. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/redundant_docstring.py +0 -0
  120. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/repeated_kwarg_heavy_call_in_test.py +0 -0
  121. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/repeated_static_call_cases.py +0 -0
  122. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/require_keyword_only_swap_prone_params.py +0 -0
  123. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/require_nodecode_for_splitting_settings_field.py +0 -0
  124. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/require_port_for_service.py +0 -0
  125. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/require_pydantic_for_external_json.py +0 -0
  126. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/require_pydantic_for_structured_payload.py +0 -0
  127. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/require_pydantic_ordinal_lower_bound.py +0 -0
  128. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/require_typed_http_test_response.py +0 -0
  129. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/stepdown.py +0 -0
  130. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/store_get_delegates_to_bulk_read.py +0 -0
  131. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/store_insert_requires_on_conflict.py +0 -0
  132. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/timestamp_order_requires_tiebreaker.py +0 -0
  133. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/trailing_value_narration.py +0 -0
  134. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/typed_error_reasons.py +0 -0
  135. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/uncontrolled_randomness_in_test.py +0 -0
  136. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/src/sarj_python_lint/rules/unused_mock_setup.py +0 -0
  137. {sarj_python_lint-0.84.0 → sarj_python_lint-0.84.1}/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: 0.84.0
3
+ Version: 0.84.1
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 = "0.84.0"
3
+ version = "0.84.1"
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" }]
@@ -209,7 +209,7 @@ def _suppressed_diagnostics(
209
209
 
210
210
 
211
211
  def _suppressed_codes(codes: dict[str, set[Severity]]) -> set[tuple[str, Severity]]:
212
- return {
212
+ suppressed = {
213
213
  (generic, generic_severity)
214
214
  for specific, generics in _DIAGNOSTIC_PRECEDENCE.items()
215
215
  if specific in codes
@@ -217,6 +217,13 @@ def _suppressed_codes(codes: dict[str, set[Severity]]) -> set[tuple[str, Severit
217
217
  for generic_severity in codes.get(generic, set())
218
218
  if generic_severity is Severity.WARNING or Severity.ERROR in codes[specific]
219
219
  }
220
+ # The promoted signature-restatement rules now block. Keep their errors and
221
+ # drop only the lower-severity typed-docstring twin at the same owner.
222
+ if Severity.WARNING in codes.get("SARJ092", set()) and any(
223
+ Severity.ERROR in codes.get(generic, set()) for generic in ("SARJ086", "SARJ087")
224
+ ):
225
+ suppressed.add(("SARJ092", Severity.WARNING))
226
+ return suppressed
220
227
 
221
228
 
222
229
  def _function_signature_owner_locations(source: str) -> dict[int, _OwnerLocation]:
@@ -181,7 +181,7 @@ class DocstringArgsRestateSignature(Rule):
181
181
  f"`{node.name}` has an Args section whose entries only repeat matching parameter names or types; "
182
182
  "remove that section or document a constraint not evident from the signature."
183
183
  ),
184
- severity=Severity.WARNING,
184
+ severity=Severity.ERROR,
185
185
  )
186
186
  )
187
187
 
@@ -252,7 +252,7 @@ class DocstringReturnsRestateSignature(Rule):
252
252
  f"`{node.name}` {section.name} section only repeats its callable name or annotated result type; "
253
253
  "remove that section or document result semantics not expressed by the signature."
254
254
  ),
255
- severity=Severity.WARNING,
255
+ severity=Severity.ERROR,
256
256
  )
257
257
  )
258
258
 
@@ -158,7 +158,7 @@ class NoCopiedInheritedDocstring(Rule):
158
158
  f"Docstring has the same cleaned content as {parent.name}.{name}'s. Remove it only if no "
159
159
  "consumer requires the override's direct `__doc__`; otherwise retain it with a narrow rationale."
160
160
  ),
161
- severity=Severity.WARNING,
161
+ severity=Severity.ERROR,
162
162
  )
163
163
  )
164
164
 
@@ -187,7 +187,7 @@ class NoRepeatedStringLiteral(Rule):
187
187
  f"structured string literal {_preview(value)} duplicates module constant "
188
188
  f"`{constant_name}` — reuse the canonical constant so the copies cannot drift."
189
189
  ),
190
- severity=Severity.WARNING,
190
+ severity=Severity.ERROR,
191
191
  )
192
192
  for node in function_nodes
193
193
  )
@@ -209,7 +209,7 @@ class NoRepeatedStringLiteral(Rule):
209
209
  f"callable scopes (first use at line {first.lineno}) — reuse a named binding "
210
210
  "when they share ownership, or suppress with an independent-ownership rationale."
211
211
  ),
212
- severity=Severity.WARNING,
212
+ severity=Severity.ERROR,
213
213
  )
214
214
  for node in repeats
215
215
  )
@@ -204,7 +204,7 @@ class NoRepeatedTestBody(Rule):
204
204
  col=group[1].node.col_offset + 1,
205
205
  code=self.code,
206
206
  message=_message(group),
207
- severity=Severity.WARNING,
207
+ severity=Severity.ERROR,
208
208
  )
209
209
  for group in groups
210
210
  ]
@@ -123,7 +123,7 @@ class NoVagueSuppressionDescription(Rule):
123
123
  message=(
124
124
  f'Suppression reason "{vague_reason}" is generic; name the concrete mismatch or safety invariant.'
125
125
  ),
126
- severity=Severity.WARNING,
126
+ severity=Severity.ERROR,
127
127
  column_encoding=ColumnEncoding.CODEPOINTS,
128
128
  )
129
129
  )
@@ -112,7 +112,7 @@ class TestPhaseLabelComment(Rule):
112
112
  f"Bare test phase comment {body.strip()!r} narrates structure; delete it or replace it "
113
113
  "with non-obvious rationale."
114
114
  ),
115
- severity=Severity.WARNING,
115
+ severity=Severity.ERROR,
116
116
  column_encoding=ColumnEncoding.CODEPOINTS,
117
117
  )
118
118
  for line, col, body in standalone
@@ -123,7 +123,7 @@ class PreferClassRow(Rule):
123
123
  line=cursor.factory.lineno,
124
124
  col=cursor.factory.col_offset + 1,
125
125
  code=self.code,
126
- severity=Severity.WARNING,
126
+ severity=Severity.ERROR,
127
127
  message=(
128
128
  f"this dict row is immediately converted to `{model}`; use `class_row({model})` to "
129
129
  "construct it during fetch"
@@ -345,7 +345,7 @@ class PreferSelfDocumentingConstant(Rule):
345
345
  f"`{name}` contains bare HTTP status integers; use `http.HTTPStatus` members, "
346
346
  "or their `.value` at an exact-integer boundary. Keep non-obvious rationale."
347
347
  ),
348
- Severity.WARNING,
348
+ Severity.ERROR,
349
349
  )
350
350
  )
351
351
  continue
@@ -371,7 +371,7 @@ class PreferSelfDocumentingConstant(Rule):
371
371
  f"`{name}` relies on its comment to identify {unit.label}; encode the unit in "
372
372
  f"the constant name{alternative}.{compatibility} Keep non-obvious rationale."
373
373
  ),
374
- Severity.WARNING,
374
+ Severity.ERROR,
375
375
  )
376
376
  )
377
377
 
@@ -121,7 +121,7 @@ class PreferStructOverNamedtuple(Rule):
121
121
  "static `collections.namedtuple` fields have no type declarations — prefer a class-based "
122
122
  "`typing.NamedTuple`; change tuple semantics only after reviewing callers"
123
123
  ),
124
- severity=Severity.WARNING,
124
+ severity=Severity.ERROR,
125
125
  )
126
126
 
127
127
 
@@ -107,7 +107,7 @@ class RedundantClassDocstring(Rule):
107
107
  col=expr.col_offset + 1,
108
108
  code=self.code,
109
109
  message=self.description,
110
- severity=Severity.WARNING,
110
+ severity=Severity.ERROR,
111
111
  )
112
112
  )
113
113
  return sorted(diags, key=lambda d: d.line)
@@ -126,7 +126,7 @@ class RedundantModuleDocstring(Rule):
126
126
  col=expression.col_offset + 1,
127
127
  code=self.code,
128
128
  message=self.description,
129
- severity=Severity.WARNING,
129
+ severity=Severity.ERROR,
130
130
  )
131
131
  ]
132
132
 
@@ -333,7 +333,7 @@ class RestatedTestDocstring(Rule):
333
333
  col=expr.col_offset + 1,
334
334
  code=self.code,
335
335
  message=_MESSAGE,
336
- severity=Severity.WARNING,
336
+ severity=Severity.ERROR,
337
337
  )
338
338
  )
339
339
 
@@ -369,7 +369,7 @@ class RestatedTestDocstring(Rule):
369
369
  col=expr.col_offset + 1,
370
370
  code=self.code,
371
371
  message=_MESSAGE,
372
- severity=Severity.WARNING,
372
+ severity=Severity.ERROR,
373
373
  )
374
374
  )
375
375