sarj-python-lint 1.27.4__tar.gz → 1.27.5__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.4 → sarj_python_lint-1.27.5}/PKG-INFO +1 -1
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/pyproject.toml +1 -1
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/interpreter_argv.py +48 -14
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/.gitignore +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/LICENSE +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/README.md +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/__init__.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/__main__.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/_analysis_session.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/_file_context.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/_filesystem.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/_python_target.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/_ratchet_cli.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/_secret_names.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/_source.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/_version.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/benchmark.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/json_boundary.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/py.typed +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/ratchet.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rule_base.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/__init__.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/_annotation_semantics.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/_ast_index.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/_ast_position.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/_comments.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/_contract_annotation.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/_copy_on_write.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/_dict_key_views.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/_docstrings.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/_fastapi.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/_first_party.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/_fixed_record.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/_imports.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/_local_source.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/_logging.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/_nominal_project.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/_paths.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/_project_index.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/_prose_budget.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/_pytest.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/_registry.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/_resource_provenance.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/_set_fields.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/_sql.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/_suppression_comments.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/_test_assertions.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/_test_composition.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/_test_provenance.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/async_cleanup_registered_synchronously.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/async_mock_call_without_await_assertion.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/complex_postgres_query_requires_architecture_review.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/defect_xfail_requires_explicit_strict.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/docstring_args_restate_signature.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/docstring_returns_restate_signature.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/excessive_commentary.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/fakes_in_shared_location.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/fastapi_class_router_contract.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/fastapi_explicit_openapi_contract.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/iac_source_coupled_test.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/invalid_pydantic_field_default.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/mock_without_spec.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/named_record_at_boundaries.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/negative_only_http_status_assertion.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_analytical_aggregation_in_postgres_store.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_any_mapping_types.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_before_validator_input_mutation.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_broad_keyword_capture.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_comment_cruft.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_conftest_test_module_import.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_copied_inherited_docstring.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_cors_wildcard_with_credentials.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_database_programmability.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_delete_statement.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_dunder_all.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_duplicate_dunder_all_entry.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_excessive_cognitive_complexity.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_fastapi_on_event.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_file_level_escape_hatch_suppression.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_first_party_private_import.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_fixed_sleep_before_assert.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_fixed_sleep_in_loop.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_frozen_after_validator_field_write.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_generic_single_export_module.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_hidden_constructor_fallback.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_injected_module_loader.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_input_model_mutation.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_interpreter_source_arguments.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_invalid_argument_name_suppression.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_mocked_pydantic_value_object.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_nested_pydantic_field_validator.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_nullable_dependency_fallback.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_offset_pagination.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_positional_psycopg_row_escape.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_psycopg_execution_outside_injected_owner.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_random_uuid_in_sql.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_raw_connection_in_tests.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_raw_source_text_test_oracle.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_redundant_literal_description.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_redundant_module_alias_exports.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_repeated_string_literal.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_repeated_test_body.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_restated_comment.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_secret_in_log.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_select_star.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_service_behavior_in_settings.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_shallow_container_type_guard.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_string_concat_in_loop.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_swallowed_asyncio_cancellation.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_tautological_expect.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_test_method_grafting.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_typed_doc_sections.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_unique_violation_message_match.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_unnecessary_docstring.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_unused_copy_result.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_unused_underscored_keyword_parameter.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_unused_value_marker.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_vague_suppression_description.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_whole_request_response_payload_in_log.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/opaque_parametrize_case_needs_id.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/over_mocked_test.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/phase_label_comment.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/prefer_autospec_for_callable_mock.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/prefer_class_row.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/prefer_collection_comprehension.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/prefer_constant_time_secret_compare.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/prefer_fstring_over_concat.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/prefer_immutable_module_constant.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/prefer_injected_dependency_over_monkeypatch.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/prefer_library_fake.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/prefer_match_assert_never.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/prefer_match_exception_dispatch.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/prefer_match_type_dispatch.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/prefer_match_value_dispatch.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/prefer_module_level_constant.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/prefer_monkeypatch_for_process_state_in_test.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/prefer_monotonic_for_elapsed_time.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/prefer_namedtuple_over_tuple_return.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/prefer_native_string_check.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/prefer_nominal_id_types.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/prefer_non_nullable_collection.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/prefer_or_pattern.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/prefer_pydantic_json_value.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/prefer_pytest_fixture_injection.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/prefer_regex_fullmatch.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/prefer_required_constructor_parameters.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/prefer_self_documenting_constant.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/prefer_self_type_annotation.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/prefer_set_isdisjoint.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/prefer_str_enum.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/prefer_struct_over_namedtuple.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/prefer_walrus_awaited_none_guard.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/prefer_walrus_comprehension_filter.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/prefer_walrus_regex_match.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/prefer_walrus_stream_loop.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/production_derived_test_cases.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/pytest_fixture_returns_bare_tuple.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/redundant_class_docstring.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/redundant_docstring.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/redundant_module_docstring.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/repeated_kwarg_heavy_call_in_test.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/repeated_static_call_cases.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/repeated_test_composition.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/require_explicit_contract_implementation.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/require_explicit_psycopg_transaction.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/require_explicit_service_contract.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/require_injectable_retry_sleep.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/require_keyword_only_swap_prone_params.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/require_nodecode_for_splitting_settings_field.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/require_port_for_service.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/require_precise_factory_signature.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/require_public_dependency_contract.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/require_pydantic_for_external_json.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/require_pydantic_for_structured_payload.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/require_pydantic_ordinal_lower_bound.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/restated_test_docstring.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/shared_mutable_pydantic_factory.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/stepdown.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/store_get_delegates_to_bulk_read.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/store_insert_requires_on_conflict.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/subprocess_kill_without_reap.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/timestamp_order_requires_tiebreaker.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/trailing_value_narration.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/typed_error_reasons.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/uncontrolled_randomness_in_test.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/unused_mock_setup.py +0 -0
- {sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/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.5
|
|
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/
|
{sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/interpreter_argv.py
RENAMED
|
@@ -29,6 +29,7 @@ class ParsedOption:
|
|
|
29
29
|
invocation: InterpreterInvocation | None = None
|
|
30
30
|
consumed: int = 1
|
|
31
31
|
stdin_mode: bool = False
|
|
32
|
+
command_mode: bool = False
|
|
32
33
|
|
|
33
34
|
|
|
34
35
|
_SHELLS = frozenset({"sh", "bash", "dash", "zsh", "ksh"})
|
|
@@ -112,6 +113,7 @@ _WRAPPER_VALUES = MappingProxyType(
|
|
|
112
113
|
}
|
|
113
114
|
),
|
|
114
115
|
"timeout": frozenset({"-s", "--signal", "-k", "--kill-after"}),
|
|
116
|
+
"dumb-init": frozenset(),
|
|
115
117
|
}
|
|
116
118
|
)
|
|
117
119
|
_MAX_WRAPPERS = 8
|
|
@@ -136,6 +138,8 @@ def unwrap_command(
|
|
|
136
138
|
continue
|
|
137
139
|
if command not in _WRAPPER_VALUES or (allowed_wrappers is not None and command not in allowed_wrappers):
|
|
138
140
|
return current
|
|
141
|
+
# dumb-init uses execvp; its child cannot be a shell builtin.
|
|
142
|
+
allow_shell_builtins = allow_shell_builtins and command != "dumb-init"
|
|
139
143
|
current = current[_value_wrapper_index(current, command) :]
|
|
140
144
|
msg = "command wrapper nesting exceeds analysis bound"
|
|
141
145
|
raise UnprovableCommandError(msg)
|
|
@@ -160,6 +164,8 @@ def _command_wrapper_index(arguments: Sequence[str], command: str) -> int:
|
|
|
160
164
|
def _value_wrapper_index(arguments: Sequence[str], command: str) -> int:
|
|
161
165
|
if command == "env":
|
|
162
166
|
return _env_wrapper_index(arguments)
|
|
167
|
+
if command == "dumb-init":
|
|
168
|
+
return _dumb_init_wrapper_index(arguments)
|
|
163
169
|
index = 1
|
|
164
170
|
while index < len(arguments):
|
|
165
171
|
argument = arguments[index]
|
|
@@ -173,6 +179,24 @@ def _value_wrapper_index(arguments: Sequence[str], command: str) -> int:
|
|
|
173
179
|
return index + int(command == "timeout")
|
|
174
180
|
|
|
175
181
|
|
|
182
|
+
def _dumb_init_wrapper_index(arguments: Sequence[str]) -> int:
|
|
183
|
+
index = 1
|
|
184
|
+
while index < len(arguments):
|
|
185
|
+
argument = arguments[index]
|
|
186
|
+
if argument in {"-h", "--help", "-V", "--version"}:
|
|
187
|
+
return len(arguments)
|
|
188
|
+
if argument == "--":
|
|
189
|
+
index += 1
|
|
190
|
+
break
|
|
191
|
+
if not argument.startswith("-") or argument == "-":
|
|
192
|
+
break
|
|
193
|
+
if argument not in {"-c", "--single-child", "-v", "--verbose"}:
|
|
194
|
+
msg = "unsupported dumb-init wrapper option"
|
|
195
|
+
raise UnprovableCommandError(msg)
|
|
196
|
+
index += 1
|
|
197
|
+
return index
|
|
198
|
+
|
|
199
|
+
|
|
176
200
|
def _env_wrapper_index(arguments: Sequence[str]) -> int:
|
|
177
201
|
index = 1
|
|
178
202
|
while index < len(arguments) and arguments[index].startswith("-"):
|
|
@@ -237,7 +261,7 @@ def classify_interpreter(argv: Sequence[str]) -> InterpreterInvocation:
|
|
|
237
261
|
return _python(arguments[1:])
|
|
238
262
|
if executable in _SHELLS:
|
|
239
263
|
return _short_options(
|
|
240
|
-
arguments[1:], source="c", values=frozenset({"o", "O"}), shell_mode=True,
|
|
264
|
+
arguments[1:], source="c", values=frozenset({"o", "O"}), shell_mode=True, shell_name=executable
|
|
241
265
|
)
|
|
242
266
|
if executable in {"node", "nodejs"}:
|
|
243
267
|
return _node(arguments[1:])
|
|
@@ -342,13 +366,21 @@ def _ruby_long_option(argument: str, following: str | None) -> ParsedOption:
|
|
|
342
366
|
|
|
343
367
|
|
|
344
368
|
def _short_options(
|
|
345
|
-
arguments: Sequence[str], *, source: str, values: frozenset[str], shell_mode: bool = False,
|
|
369
|
+
arguments: Sequence[str], *, source: str, values: frozenset[str], shell_mode: bool = False, shell_name: str = ""
|
|
346
370
|
) -> InterpreterInvocation:
|
|
347
371
|
index = 0
|
|
348
372
|
stdin_mode = False
|
|
373
|
+
command_mode = False
|
|
349
374
|
short_seen = False
|
|
375
|
+
bash_mode = shell_name == "bash"
|
|
376
|
+
validated_shell = shell_name in {"bash", "sh", "dash"}
|
|
350
377
|
while index < len(arguments):
|
|
351
378
|
boundary = _external_boundary(arguments, index, plus_options=True)
|
|
379
|
+
if boundary is not None and command_mode:
|
|
380
|
+
index += int(arguments[index] in {"-", "--"})
|
|
381
|
+
if index >= len(arguments):
|
|
382
|
+
return InterpreterInvocation("unknown")
|
|
383
|
+
return InterpreterInvocation("shell", arguments[index], tuple(arguments[index + 2 :]))
|
|
352
384
|
if boundary is not None:
|
|
353
385
|
return InterpreterInvocation("stdin") if stdin_mode else boundary
|
|
354
386
|
argument = arguments[index]
|
|
@@ -357,13 +389,14 @@ def _short_options(
|
|
|
357
389
|
else:
|
|
358
390
|
short_seen = True
|
|
359
391
|
parsed = _short_option(
|
|
360
|
-
arguments, index, source=source, values=values, shell_mode=shell_mode,
|
|
392
|
+
arguments, index, source=source, values=values, shell_mode=shell_mode, validated_shell=validated_shell
|
|
361
393
|
)
|
|
362
394
|
if parsed.invocation is not None:
|
|
363
395
|
return parsed.invocation
|
|
364
396
|
stdin_mode = stdin_mode or parsed.stdin_mode
|
|
397
|
+
command_mode = command_mode or parsed.command_mode
|
|
365
398
|
index += parsed.consumed
|
|
366
|
-
return InterpreterInvocation("stdin")
|
|
399
|
+
return InterpreterInvocation("unknown" if command_mode else "stdin")
|
|
367
400
|
|
|
368
401
|
|
|
369
402
|
def _long_option(
|
|
@@ -395,18 +428,23 @@ def _short_option(
|
|
|
395
428
|
source: str,
|
|
396
429
|
values: frozenset[str],
|
|
397
430
|
shell_mode: bool,
|
|
398
|
-
|
|
431
|
+
validated_shell: bool = False,
|
|
399
432
|
) -> ParsedOption:
|
|
400
|
-
if
|
|
433
|
+
if validated_shell:
|
|
401
434
|
return _shell_short_option(arguments, index, values)
|
|
402
435
|
argument = arguments[index]
|
|
403
436
|
for cursor, flag in enumerate(argument[1:], 1):
|
|
404
437
|
if flag in source:
|
|
405
|
-
|
|
438
|
+
if shell_mode:
|
|
439
|
+
if not values.isdisjoint(argument[cursor + 1 :]):
|
|
440
|
+
return ParsedOption(InterpreterInvocation("unknown"))
|
|
441
|
+
return ParsedOption(command_mode=True)
|
|
442
|
+
attached = argument[cursor + 1 :]
|
|
406
443
|
operand = attached or _following_operand(arguments, index)
|
|
407
|
-
|
|
408
|
-
return ParsedOption(InterpreterInvocation("shell" if shell_mode else "inline", operand, forwarded))
|
|
444
|
+
return ParsedOption(InterpreterInvocation("inline", operand))
|
|
409
445
|
if flag in values:
|
|
446
|
+
if shell_mode and (flag == "O" or argument[cursor + 1 :] == "c"):
|
|
447
|
+
return ParsedOption(InterpreterInvocation("unknown"))
|
|
410
448
|
return ParsedOption(consumed=1 + int(cursor + 1 == len(argument)))
|
|
411
449
|
return ParsedOption()
|
|
412
450
|
|
|
@@ -424,11 +462,7 @@ def _shell_short_option(arguments: Sequence[str], index: int, values: frozenset[
|
|
|
424
462
|
if flag == "O" or operand not in _SHELL_NAMED_OPTIONS:
|
|
425
463
|
return ParsedOption(InterpreterInvocation("unknown"))
|
|
426
464
|
consumed += 1
|
|
427
|
-
|
|
428
|
-
operand = _following_operand(arguments, index + consumed - 1)
|
|
429
|
-
forwarded = tuple(arguments[index + consumed + 2 :])
|
|
430
|
-
return ParsedOption(InterpreterInvocation("shell", operand, forwarded))
|
|
431
|
-
return ParsedOption(consumed=consumed, stdin_mode="s" in flags)
|
|
465
|
+
return ParsedOption(consumed=consumed, stdin_mode="s" in flags, command_mode="c" in flags)
|
|
432
466
|
|
|
433
467
|
|
|
434
468
|
def _node(arguments: Sequence[str]) -> InterpreterInvocation:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/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
|
|
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.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/_ast_index.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/_ast_position.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/_copy_on_write.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/_dict_key_views.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/_docstrings.py
RENAMED
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/_first_party.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/_fixed_record.py
RENAMED
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/_local_source.py
RENAMED
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/_nominal_project.py
RENAMED
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/_project_index.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/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.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/_set_fields.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/_test_assertions.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/_test_composition.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/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
|
|
File without changes
|
{sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/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.4 → sarj_python_lint-1.27.5}/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.4 → sarj_python_lint-1.27.5}/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
|
|
File without changes
|
{sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/no_secret_in_log.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/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.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/over_mocked_test.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.27.4 → sarj_python_lint-1.27.5}/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.4 → sarj_python_lint-1.27.5}/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.4 → sarj_python_lint-1.27.5}/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.4 → sarj_python_lint-1.27.5}/src/sarj_python_lint/rules/unused_mock_setup.py
RENAMED
|
File without changes
|
|
File without changes
|