sarj-python-lint 1.27.0__tar.gz → 1.27.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.
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/PKG-INFO +2 -2
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/pyproject.toml +2 -2
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/__init__.py +1 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/__main__.py +1 -1
- sarj_python_lint-1.27.1/src/sarj_python_lint/_source.py +18 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/ratchet.py +3 -3
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/_fastapi.py +1 -1
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/_local_source.py +2 -2
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/_nominal_project.py +3 -3
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/_project_index.py +1 -1
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/invalid_pydantic_field_default.py +1 -1
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_hidden_constructor_fallback.py +2 -2
- sarj_python_lint-1.27.0/src/sarj_python_lint/_source.py +0 -14
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/.gitignore +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/LICENSE +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/README.md +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/_analysis_session.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/_file_context.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/_filesystem.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/_python_target.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/_ratchet_cli.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/_secret_names.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/_version.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/benchmark.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/interpreter_argv.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/json_boundary.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/py.typed +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rule_base.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/__init__.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/_annotation_semantics.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/_ast_index.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/_ast_position.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/_comments.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/_contract_annotation.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/_copy_on_write.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/_dict_key_views.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/_docstrings.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/_first_party.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/_fixed_record.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/_imports.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/_logging.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/_paths.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/_prose_budget.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/_pytest.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/_registry.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/_resource_provenance.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/_set_fields.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/_sql.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/_suppression_comments.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/_test_assertions.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/_test_composition.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/_test_provenance.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/async_cleanup_registered_synchronously.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/async_mock_call_without_await_assertion.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/complex_postgres_query_requires_architecture_review.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/defect_xfail_requires_explicit_strict.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/docstring_args_restate_signature.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/docstring_returns_restate_signature.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/excessive_commentary.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/fakes_in_shared_location.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/fastapi_class_router_contract.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/fastapi_explicit_openapi_contract.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/iac_source_coupled_test.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/mock_without_spec.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/named_record_at_boundaries.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/negative_only_http_status_assertion.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_analytical_aggregation_in_postgres_store.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_any_mapping_types.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_before_validator_input_mutation.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_broad_keyword_capture.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_comment_cruft.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_conftest_test_module_import.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_copied_inherited_docstring.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_cors_wildcard_with_credentials.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_database_programmability.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_delete_statement.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_dunder_all.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_duplicate_dunder_all_entry.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_excessive_cognitive_complexity.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_fastapi_on_event.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_file_level_escape_hatch_suppression.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_first_party_private_import.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_fixed_sleep_before_assert.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_fixed_sleep_in_loop.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_frozen_after_validator_field_write.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_generic_single_export_module.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_injected_module_loader.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_input_model_mutation.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_interpreter_source_arguments.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_invalid_argument_name_suppression.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_mocked_pydantic_value_object.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_nested_pydantic_field_validator.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_nullable_dependency_fallback.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_offset_pagination.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_positional_psycopg_row_escape.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_psycopg_execution_outside_injected_owner.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_random_uuid_in_sql.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_raw_connection_in_tests.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_raw_source_text_test_oracle.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_redundant_literal_description.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_redundant_module_alias_exports.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_repeated_string_literal.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_repeated_test_body.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_restated_comment.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_secret_in_log.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_select_star.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_service_behavior_in_settings.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_shallow_container_type_guard.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_string_concat_in_loop.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_swallowed_asyncio_cancellation.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_tautological_expect.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_test_method_grafting.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_typed_doc_sections.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_unique_violation_message_match.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_unnecessary_docstring.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_unused_copy_result.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_unused_underscored_keyword_parameter.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_unused_value_marker.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_vague_suppression_description.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_whole_request_response_payload_in_log.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/opaque_parametrize_case_needs_id.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/over_mocked_test.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/phase_label_comment.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/prefer_autospec_for_callable_mock.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/prefer_class_row.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/prefer_collection_comprehension.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/prefer_constant_time_secret_compare.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/prefer_fstring_over_concat.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/prefer_immutable_module_constant.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/prefer_injected_dependency_over_monkeypatch.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/prefer_library_fake.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/prefer_match_assert_never.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/prefer_match_exception_dispatch.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/prefer_match_type_dispatch.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/prefer_match_value_dispatch.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/prefer_module_level_constant.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/prefer_monkeypatch_for_process_state_in_test.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/prefer_monotonic_for_elapsed_time.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/prefer_namedtuple_over_tuple_return.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/prefer_native_string_check.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/prefer_nominal_id_types.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/prefer_non_nullable_collection.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/prefer_or_pattern.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/prefer_pydantic_json_value.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/prefer_pytest_fixture_injection.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/prefer_regex_fullmatch.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/prefer_required_constructor_parameters.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/prefer_self_documenting_constant.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/prefer_self_type_annotation.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/prefer_set_isdisjoint.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/prefer_str_enum.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/prefer_struct_over_namedtuple.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/prefer_walrus_awaited_none_guard.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/prefer_walrus_comprehension_filter.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/prefer_walrus_regex_match.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/prefer_walrus_stream_loop.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/production_derived_test_cases.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/pytest_fixture_returns_bare_tuple.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/redundant_class_docstring.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/redundant_docstring.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/redundant_module_docstring.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/repeated_kwarg_heavy_call_in_test.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/repeated_static_call_cases.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/repeated_test_composition.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/require_explicit_contract_implementation.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/require_explicit_psycopg_transaction.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/require_explicit_service_contract.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/require_injectable_retry_sleep.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/require_keyword_only_swap_prone_params.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/require_nodecode_for_splitting_settings_field.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/require_port_for_service.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/require_precise_factory_signature.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/require_public_dependency_contract.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/require_pydantic_for_external_json.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/require_pydantic_for_structured_payload.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/require_pydantic_ordinal_lower_bound.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/restated_test_docstring.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/shared_mutable_pydantic_factory.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/stepdown.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/store_get_delegates_to_bulk_read.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/store_insert_requires_on_conflict.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/subprocess_kill_without_reap.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/timestamp_order_requires_tiebreaker.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/trailing_value_narration.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/typed_error_reasons.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/uncontrolled_randomness_in_test.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/unused_mock_setup.py +0 -0
- {sarj_python_lint-1.27.0 → sarj_python_lint-1.27.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: 1.27.
|
|
3
|
+
Version: 1.27.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/
|
|
@@ -19,7 +19,7 @@ Classifier: Topic :: Software Development :: Quality Assurance
|
|
|
19
19
|
Requires-Python: >=3.14
|
|
20
20
|
Requires-Dist: packaging==26.3
|
|
21
21
|
Requires-Dist: ruff>=0.16.10
|
|
22
|
-
Requires-Dist: sarj-rule-contracts==0.2.
|
|
22
|
+
Requires-Dist: sarj-rule-contracts==0.2.2
|
|
23
23
|
Requires-Dist: sqlglot==30.19.0
|
|
24
24
|
Requires-Dist: typer==0.27.2
|
|
25
25
|
Description-Content-Type: text/markdown
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "sarj-python-lint"
|
|
3
|
-
version = "1.27.
|
|
3
|
+
version = "1.27.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" }]
|
|
@@ -15,7 +15,7 @@ classifiers = [
|
|
|
15
15
|
"Programming Language :: Python :: 3.14",
|
|
16
16
|
"Topic :: Software Development :: Quality Assurance",
|
|
17
17
|
]
|
|
18
|
-
dependencies = ["sarj-rule-contracts==0.2.
|
|
18
|
+
dependencies = ["sarj-rule-contracts==0.2.2", "packaging==26.3", "ruff>=0.16.10", "sqlglot==30.19.0", "typer==0.27.2"]
|
|
19
19
|
|
|
20
20
|
[project.scripts]
|
|
21
21
|
sarj-python-lint = "sarj_python_lint.__main__:main"
|
|
@@ -434,7 +434,7 @@ def _apply_baseline(
|
|
|
434
434
|
def _run_check(rule: list[str], files: list[Path], baseline: Path | None, update_baseline: Path | None) -> int:
|
|
435
435
|
try:
|
|
436
436
|
diags = analyze(rule, files)
|
|
437
|
-
except (OSError, ValueError) as exc:
|
|
437
|
+
except (OSError, ValueError, SyntaxError) as exc:
|
|
438
438
|
sys.stderr.write(f"error: {exc}\n")
|
|
439
439
|
return 2
|
|
440
440
|
if update_baseline is not None:
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from io import BytesIO
|
|
4
|
+
import tokenize
|
|
5
|
+
from typing import TYPE_CHECKING
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
if TYPE_CHECKING:
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def python_source_encoding(data: bytes) -> str:
|
|
13
|
+
return tokenize.detect_encoding(BytesIO(data).readline)[0]
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def read_python_source(path: Path) -> str:
|
|
17
|
+
with tokenize.open(path) as stream:
|
|
18
|
+
return stream.read()
|
|
@@ -9,7 +9,7 @@ import tokenize
|
|
|
9
9
|
from types import MappingProxyType
|
|
10
10
|
from typing import TYPE_CHECKING, Final, NamedTuple, TypeGuard
|
|
11
11
|
|
|
12
|
-
from sarj_python_lint._source import
|
|
12
|
+
from sarj_python_lint._source import read_python_source
|
|
13
13
|
from sarj_python_lint.json_boundary import is_object_mapping, parse_json
|
|
14
14
|
|
|
15
15
|
|
|
@@ -330,8 +330,8 @@ def _python_files(root: Path, excluded_dir_names: frozenset[str]) -> Iterator[Pa
|
|
|
330
330
|
|
|
331
331
|
def _read(path: Path) -> str:
|
|
332
332
|
try:
|
|
333
|
-
return path
|
|
334
|
-
except
|
|
333
|
+
return read_python_source(path)
|
|
334
|
+
except UnicodeError, OSError, SyntaxError:
|
|
335
335
|
return ""
|
|
336
336
|
|
|
337
337
|
|
|
@@ -841,7 +841,7 @@ def _read_module(path: Path, cache: dict[Path, ast.Module | None]) -> ast.Module
|
|
|
841
841
|
tree = None
|
|
842
842
|
else:
|
|
843
843
|
tree = ast.parse(read_python_source(path), filename=str(path))
|
|
844
|
-
except OSError, SyntaxError:
|
|
844
|
+
except OSError, SyntaxError, UnicodeError:
|
|
845
845
|
tree = None
|
|
846
846
|
cache[path] = tree
|
|
847
847
|
return tree
|
{sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/_local_source.py
RENAMED
|
@@ -5,7 +5,7 @@ from dataclasses import dataclass
|
|
|
5
5
|
from pathlib import Path
|
|
6
6
|
from typing import TYPE_CHECKING, final
|
|
7
7
|
|
|
8
|
-
from sarj_python_lint._source import
|
|
8
|
+
from sarj_python_lint._source import python_source_encoding
|
|
9
9
|
from sarj_python_lint.rules._imports import ImportIndex
|
|
10
10
|
|
|
11
11
|
|
|
@@ -114,7 +114,7 @@ def _read_module(path: Path) -> LocalModule | None:
|
|
|
114
114
|
data = stream.read(_MAX_MODULE_BYTES + 1)
|
|
115
115
|
if len(data) > _MAX_MODULE_BYTES:
|
|
116
116
|
return None
|
|
117
|
-
source = data.decode(
|
|
117
|
+
source = data.decode(python_source_encoding(data))
|
|
118
118
|
tree = ast.parse(source, filename=str(path))
|
|
119
119
|
except OSError, UnicodeError, SyntaxError:
|
|
120
120
|
return None
|
{sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/_nominal_project.py
RENAMED
|
@@ -11,7 +11,7 @@ from typing import TYPE_CHECKING, TypeGuard, final
|
|
|
11
11
|
from packaging.requirements import InvalidRequirement, Requirement
|
|
12
12
|
from packaging.utils import canonicalize_name
|
|
13
13
|
|
|
14
|
-
from sarj_python_lint._source import
|
|
14
|
+
from sarj_python_lint._source import read_python_source
|
|
15
15
|
from sarj_python_lint.rules._first_party import distribution_root
|
|
16
16
|
from sarj_python_lint.rules._imports import ImportIndex
|
|
17
17
|
from sarj_python_lint.rules._paths import is_generated
|
|
@@ -265,10 +265,10 @@ def _source(path: Path) -> NominalSource | None:
|
|
|
265
265
|
try:
|
|
266
266
|
if path.is_symlink() or path.stat().st_size > _MAX_BYTES:
|
|
267
267
|
return None
|
|
268
|
-
text = path
|
|
268
|
+
text = read_python_source(path)
|
|
269
269
|
if is_generated(path, text):
|
|
270
270
|
return None
|
|
271
|
-
except OSError, UnicodeError:
|
|
271
|
+
except OSError, UnicodeError, SyntaxError:
|
|
272
272
|
return None
|
|
273
273
|
return NominalSource(path, text)
|
|
274
274
|
|
{sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/_project_index.py
RENAMED
|
@@ -534,7 +534,7 @@ def _read_bounded_source(root: Path, path: Path) -> LoadedSource | None:
|
|
|
534
534
|
resolved = path.resolve()
|
|
535
535
|
resolved.relative_to(root.resolve())
|
|
536
536
|
return LoadedSource(resolved, read_python_source(resolved))
|
|
537
|
-
except OSError, ValueError:
|
|
537
|
+
except OSError, ValueError, SyntaxError:
|
|
538
538
|
return None
|
|
539
539
|
|
|
540
540
|
|
|
@@ -690,7 +690,7 @@ def _read_module(path: Path) -> ast.Module | None:
|
|
|
690
690
|
if path.stat().st_size > _MAX_IMPORTED_MODULE_BYTES:
|
|
691
691
|
return None
|
|
692
692
|
tree = ast.parse(read_python_source(path), filename=str(path))
|
|
693
|
-
except OSError, SyntaxError:
|
|
693
|
+
except OSError, SyntaxError, UnicodeError:
|
|
694
694
|
return None
|
|
695
695
|
return tree
|
|
696
696
|
|
|
@@ -720,7 +720,7 @@ def _read_module(path: Path, facts: RuntimeConfigFacts) -> ast.Module:
|
|
|
720
720
|
return cached
|
|
721
721
|
try:
|
|
722
722
|
tree = ast.parse(read_python_source(path), filename=str(path))
|
|
723
|
-
except OSError, SyntaxError:
|
|
723
|
+
except OSError, SyntaxError, UnicodeError:
|
|
724
724
|
tree = ast.Module(body=[], type_ignores=[])
|
|
725
725
|
facts.modules[path] = tree
|
|
726
726
|
return tree
|
|
@@ -783,7 +783,7 @@ def _candidate_calls_class(
|
|
|
783
783
|
return False
|
|
784
784
|
try:
|
|
785
785
|
source = read_python_source(candidate)
|
|
786
|
-
except OSError:
|
|
786
|
+
except OSError, SyntaxError, UnicodeError:
|
|
787
787
|
return False
|
|
788
788
|
if class_name not in source or is_generated(candidate, source):
|
|
789
789
|
return False
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
from typing import TYPE_CHECKING, Final
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
if TYPE_CHECKING:
|
|
7
|
-
from pathlib import Path
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
PYTHON_SOURCE_ENCODING: Final = "utf-8-sig"
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
def read_python_source(path: Path) -> str:
|
|
14
|
-
return path.read_text(encoding=PYTHON_SOURCE_ENCODING, errors="replace")
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/_analysis_session.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/interpreter_argv.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/_ast_index.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/_ast_position.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/_copy_on_write.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/_dict_key_views.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/_docstrings.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/_first_party.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/_fixed_record.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/_prose_budget.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/_set_fields.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/_test_assertions.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/_test_composition.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/_test_provenance.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/mock_without_spec.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_comment_cruft.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_dunder_all.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_secret_in_log.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/no_select_star.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/over_mocked_test.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/prefer_class_row.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/prefer_or_pattern.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/prefer_str_enum.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.27.0 → sarj_python_lint-1.27.1}/src/sarj_python_lint/rules/unused_mock_setup.py
RENAMED
|
File without changes
|
|
File without changes
|