sarj-python-lint 1.26.1__tar.gz → 1.26.3__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.26.1 → sarj_python_lint-1.26.3}/PKG-INFO +1 -1
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/pyproject.toml +1 -1
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/interpreter_argv.py +5 -1
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rule_base.py +19 -6
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/_suppression_comments.py +14 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_interpreter_source_arguments.py +95 -5
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/.gitignore +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/LICENSE +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/README.md +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/__init__.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/__main__.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/_analysis_session.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/_file_context.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/_filesystem.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/_python_target.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/_ratchet_cli.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/_secret_names.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/_source.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/_version.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/benchmark.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/json_boundary.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/py.typed +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/ratchet.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/__init__.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/_annotation_semantics.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/_ast_index.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/_ast_position.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/_comments.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/_contract_annotation.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/_copy_on_write.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/_dict_key_views.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/_docstrings.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/_fastapi.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/_first_party.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/_fixed_record.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/_imports.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/_local_source.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/_logging.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/_nominal_project.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/_paths.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/_project_index.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/_prose_budget.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/_pytest.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/_registry.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/_resource_provenance.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/_set_fields.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/_sql.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/_test_assertions.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/_test_composition.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/_test_provenance.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/async_cleanup_registered_synchronously.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/async_mock_call_without_await_assertion.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/complex_postgres_query_requires_architecture_review.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/defect_xfail_requires_explicit_strict.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/docstring_args_restate_signature.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/docstring_returns_restate_signature.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/excessive_commentary.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/fakes_in_shared_location.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/fastapi_class_router_contract.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/fastapi_explicit_openapi_contract.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/iac_source_coupled_test.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/invalid_pydantic_field_default.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/mock_without_spec.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/named_record_at_boundaries.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/negative_only_http_status_assertion.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_analytical_aggregation_in_postgres_store.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_any_mapping_types.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_before_validator_input_mutation.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_broad_keyword_capture.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_comment_cruft.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_conftest_test_module_import.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_copied_inherited_docstring.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_cors_wildcard_with_credentials.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_database_programmability.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_delete_statement.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_dunder_all.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_duplicate_dunder_all_entry.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_excessive_cognitive_complexity.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_fastapi_on_event.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_file_level_escape_hatch_suppression.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_first_party_private_import.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_fixed_sleep_before_assert.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_frozen_after_validator_field_write.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_generic_single_export_module.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_hidden_constructor_fallback.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_injected_module_loader.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_input_model_mutation.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_invalid_argument_name_suppression.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_mocked_pydantic_value_object.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_nested_pydantic_field_validator.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_nullable_dependency_fallback.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_offset_pagination.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_positional_psycopg_row_escape.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_psycopg_execution_outside_injected_owner.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_random_uuid_in_sql.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_raw_connection_in_tests.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_raw_source_text_test_oracle.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_redundant_literal_description.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_redundant_module_alias_exports.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_repeated_string_literal.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_repeated_test_body.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_restated_comment.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_secret_in_log.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_select_star.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_service_behavior_in_settings.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_shallow_container_type_guard.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_string_concat_in_loop.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_swallowed_asyncio_cancellation.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_tautological_expect.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_test_method_grafting.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_typed_doc_sections.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_unique_violation_message_match.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_unnecessary_docstring.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_unused_copy_result.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_unused_underscored_keyword_parameter.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_unused_value_marker.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_vague_suppression_description.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_whole_request_response_payload_in_log.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/opaque_parametrize_case_needs_id.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/over_mocked_test.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/phase_label_comment.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/prefer_autospec_for_callable_mock.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/prefer_class_row.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/prefer_collection_comprehension.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/prefer_constant_time_secret_compare.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/prefer_fstring_over_concat.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/prefer_immutable_module_constant.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/prefer_injected_dependency_over_monkeypatch.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/prefer_library_fake.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/prefer_match_assert_never.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/prefer_match_exception_dispatch.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/prefer_match_type_dispatch.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/prefer_match_value_dispatch.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/prefer_module_level_constant.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/prefer_monkeypatch_for_process_state_in_test.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/prefer_monotonic_for_elapsed_time.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/prefer_namedtuple_over_tuple_return.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/prefer_native_string_check.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/prefer_nominal_id_types.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/prefer_non_nullable_collection.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/prefer_or_pattern.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/prefer_pydantic_json_value.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/prefer_pytest_fixture_injection.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/prefer_regex_fullmatch.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/prefer_required_constructor_parameters.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/prefer_self_documenting_constant.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/prefer_self_type_annotation.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/prefer_set_isdisjoint.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/prefer_str_enum.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/prefer_struct_over_namedtuple.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/prefer_walrus_awaited_none_guard.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/prefer_walrus_comprehension_filter.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/prefer_walrus_regex_match.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/prefer_walrus_stream_loop.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/production_derived_test_cases.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/pytest_fixture_returns_bare_tuple.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/redundant_class_docstring.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/redundant_docstring.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/redundant_module_docstring.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/repeated_kwarg_heavy_call_in_test.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/repeated_static_call_cases.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/repeated_test_composition.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/require_explicit_contract_implementation.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/require_explicit_psycopg_transaction.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/require_explicit_service_contract.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/require_keyword_only_swap_prone_params.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/require_nodecode_for_splitting_settings_field.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/require_port_for_service.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/require_precise_factory_signature.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/require_public_dependency_contract.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/require_pydantic_for_external_json.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/require_pydantic_for_structured_payload.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/require_pydantic_ordinal_lower_bound.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/restated_test_docstring.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/shared_mutable_pydantic_factory.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/stepdown.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/store_get_delegates_to_bulk_read.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/store_insert_requires_on_conflict.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/subprocess_kill_without_reap.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/timestamp_order_requires_tiebreaker.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/trailing_value_narration.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/typed_error_reasons.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/uncontrolled_randomness_in_test.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/unused_mock_setup.py +0 -0
- {sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/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.26.
|
|
3
|
+
Version: 1.26.3
|
|
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.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/interpreter_argv.py
RENAMED
|
@@ -139,6 +139,10 @@ def _value_wrapper_index(arguments: Sequence[str], command: str) -> int:
|
|
|
139
139
|
return index + int(command == "timeout")
|
|
140
140
|
|
|
141
141
|
|
|
142
|
+
def is_python_executable(executable: str) -> bool:
|
|
143
|
+
return re.fullmatch(r"python(?:[23](?:\.\d+)?)?", PurePosixPath(executable).name) is not None
|
|
144
|
+
|
|
145
|
+
|
|
142
146
|
def classify_interpreter(argv: Sequence[str]) -> InterpreterInvocation:
|
|
143
147
|
try:
|
|
144
148
|
arguments = unwrap_command(argv)
|
|
@@ -147,7 +151,7 @@ def classify_interpreter(argv: Sequence[str]) -> InterpreterInvocation:
|
|
|
147
151
|
if not arguments:
|
|
148
152
|
return InterpreterInvocation("other")
|
|
149
153
|
executable = PurePosixPath(arguments[0]).name
|
|
150
|
-
if
|
|
154
|
+
if is_python_executable(executable):
|
|
151
155
|
return _python(arguments[1:])
|
|
152
156
|
if executable in _SHELLS:
|
|
153
157
|
return _short_options(arguments[1:], source="c", values=frozenset({"o", "O"}), shell_mode=True)
|
|
@@ -37,7 +37,7 @@ TESTS_DIR: Final = "packages/python/tests/rules"
|
|
|
37
37
|
|
|
38
38
|
# Keep SARJ suppressions separate because Ruff removes unknown `noqa` codes.
|
|
39
39
|
_SARJ_NOQA_RE = re.compile(
|
|
40
|
-
r"#\s*sarj-noqa(?::\s*([A-Za-z0-9_, ]+))?",
|
|
40
|
+
r"#\s*sarj-noqa\b(?::\s*([A-Za-z0-9_, ]+))?",
|
|
41
41
|
re.IGNORECASE,
|
|
42
42
|
)
|
|
43
43
|
|
|
@@ -49,12 +49,25 @@ def is_suppressed(source_lines: Sequence[str], line: int, code: str) -> bool:
|
|
|
49
49
|
m = _SARJ_NOQA_RE.search(text)
|
|
50
50
|
if not m:
|
|
51
51
|
return False
|
|
52
|
+
from sarj_python_lint.rules._suppression_comments import comment_lines # ruff: ignore[import-outside-top-level] -- comment scanner depends on rule_base.
|
|
53
|
+
|
|
54
|
+
comment = comment_lines(tuple(source_lines)).get(line, "")
|
|
55
|
+
m = _SARJ_NOQA_RE.search(comment)
|
|
56
|
+
if m is None:
|
|
57
|
+
return False
|
|
52
58
|
codes_str = m.group(1)
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
59
|
+
trailing = comment[m.end() :]
|
|
60
|
+
if codes_str is None:
|
|
61
|
+
# A complete bare marker preserves the existing all-codes waiver contract.
|
|
62
|
+
return not (trailing and (not trailing[0].isspace() or trailing.lstrip().startswith(":")))
|
|
63
|
+
reason = trailing.lstrip()
|
|
64
|
+
single_dash_reason = reason.startswith("-") and (codes_str[-1:].isspace() or trailing[:1].isspace())
|
|
65
|
+
if reason and not reason.startswith(("--", "—", "–")) and not single_dash_reason:
|
|
66
|
+
return False
|
|
67
|
+
parts = tuple(part.strip() for part in codes_str.split(","))
|
|
68
|
+
if any(not part for part in parts):
|
|
69
|
+
return False
|
|
70
|
+
return code.upper() in {part.upper() for part in parts}
|
|
58
71
|
|
|
59
72
|
|
|
60
73
|
class ColumnEncoding(StrEnum):
|
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from dataclasses import dataclass
|
|
4
|
+
from functools import lru_cache
|
|
4
5
|
import tokenize
|
|
6
|
+
from types import MappingProxyType
|
|
7
|
+
from typing import TYPE_CHECKING
|
|
5
8
|
|
|
6
9
|
from sarj_python_lint.rules._comments import all_comments
|
|
7
10
|
|
|
8
11
|
|
|
12
|
+
if TYPE_CHECKING:
|
|
13
|
+
from collections.abc import Mapping
|
|
14
|
+
|
|
15
|
+
|
|
9
16
|
@dataclass(frozen=True, slots=True)
|
|
10
17
|
class Comment:
|
|
11
18
|
line: int
|
|
@@ -34,3 +41,10 @@ def scan_comments_or_none(source: str) -> list[Comment] | None:
|
|
|
34
41
|
return scan_comments(source)
|
|
35
42
|
except tokenize.TokenError, SyntaxError:
|
|
36
43
|
return None
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
@lru_cache(maxsize=1)
|
|
47
|
+
def comment_lines(source_lines: tuple[str, ...]) -> Mapping[int, str]:
|
|
48
|
+
return MappingProxyType(
|
|
49
|
+
{comment.line: "# " + comment.body for comment in scan_comments_or_none("\n".join(source_lines)) or ()}
|
|
50
|
+
)
|
|
@@ -2,10 +2,11 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import ast
|
|
4
4
|
from dataclasses import dataclass
|
|
5
|
+
import io
|
|
5
6
|
from pathlib import PurePosixPath
|
|
6
7
|
from typing import TYPE_CHECKING, ClassVar, final, override
|
|
7
8
|
|
|
8
|
-
from sarj_python_lint.interpreter_argv import classify_interpreter
|
|
9
|
+
from sarj_python_lint.interpreter_argv import classify_interpreter, is_python_executable, unwrap_command
|
|
9
10
|
from sarj_python_lint.rule_base import (
|
|
10
11
|
AutofixPolicy,
|
|
11
12
|
Diagnostic,
|
|
@@ -45,8 +46,8 @@ class NoInterpreterSourceArguments(ProjectRule):
|
|
|
45
46
|
code = "SARJ484"
|
|
46
47
|
documentation: ClassVar[RuleDocumentation | None] = RuleDocumentation(
|
|
47
48
|
default_level=Severity.ERROR,
|
|
48
|
-
summary="Keep interpreter programs in linted files or modules, outside process argv.",
|
|
49
|
-
rationale="Moving deployment logic from YAML into Python still bypasses language checks when the Python wrapper passes program source through interpreter flags
|
|
49
|
+
summary="Keep interpreter programs in linted files or modules, outside process argv and literal Python stdin.",
|
|
50
|
+
rationale="Moving deployment logic from YAML into Python still bypasses language checks when the Python wrapper passes program source through interpreter flags, jq/awk argv, or literal Python stdin.",
|
|
50
51
|
remediation="Invoke a repository-owned file or module covered by the normal language checks; pass configuration as arguments rather than interpreter source.",
|
|
51
52
|
category=RuleCategory.ARCHITECTURE,
|
|
52
53
|
autofix=AutofixPolicy.NONE,
|
|
@@ -54,6 +55,7 @@ class NoInterpreterSourceArguments(ProjectRule):
|
|
|
54
55
|
"Only import-proven subprocess process APIs, asyncio.create_subprocess_exec, and os exec/spawn argv APIs with literal string vectors are checked. Import aliases are followed; shadowed or reassigned imports and methods abstain.",
|
|
55
56
|
"Script/module and interpreter option boundaries use the shared dependency-free classifier, including env/sudo/timeout wrappers and jq/awk file flags.",
|
|
56
57
|
"Dynamic argv, shell strings and shell=True, recursive shell payloads, receiver-based remote execution, and unknown interpreter option grammars are outside this narrow rule. A clean result does not prove those programs are linted.",
|
|
58
|
+
"Literal str/bytes input to subprocess.run/check_output is checked only for proven Python stdin invocations and compatible constant text/binary modes. Dynamic input, Popen.communicate, and asyncio stdin abstain.",
|
|
57
59
|
"Generated/vendor sources are excluded; maintained tests are checked. Source-checker fixtures may use an exact reasoned suppression.",
|
|
58
60
|
),
|
|
59
61
|
examples=(
|
|
@@ -85,6 +87,36 @@ class NoInterpreterSourceArguments(ProjectRule):
|
|
|
85
87
|
expected_count=0,
|
|
86
88
|
public=True,
|
|
87
89
|
),
|
|
90
|
+
RuleExample(
|
|
91
|
+
example_id="literal-python-stdin",
|
|
92
|
+
scenario="stdin",
|
|
93
|
+
title="Process stdin contains unchecked Python source",
|
|
94
|
+
outcome=ExampleOutcome.MATCH,
|
|
95
|
+
files=(
|
|
96
|
+
ExampleFile.python(
|
|
97
|
+
"tools/check.py",
|
|
98
|
+
"import subprocess\nsubprocess.run(['python3', '-'], input='print(1)', text=True)\n",
|
|
99
|
+
),
|
|
100
|
+
),
|
|
101
|
+
focus_path=PurePosixPath("tools/check.py"),
|
|
102
|
+
expected_count=1,
|
|
103
|
+
public=True,
|
|
104
|
+
),
|
|
105
|
+
RuleExample(
|
|
106
|
+
example_id="external-module-stdin-data",
|
|
107
|
+
scenario="stdin",
|
|
108
|
+
title="An external module receives stdin as data",
|
|
109
|
+
outcome=ExampleOutcome.NO_MATCH,
|
|
110
|
+
files=(
|
|
111
|
+
ExampleFile.python(
|
|
112
|
+
"tools/check.py",
|
|
113
|
+
"import subprocess\nsubprocess.run(['python3', '-m', 'tools.verify'], input='print(1)', text=True)\n",
|
|
114
|
+
),
|
|
115
|
+
),
|
|
116
|
+
focus_path=PurePosixPath("tools/check.py"),
|
|
117
|
+
expected_count=0,
|
|
118
|
+
public=True,
|
|
119
|
+
),
|
|
88
120
|
),
|
|
89
121
|
)
|
|
90
122
|
description = documentation.summary
|
|
@@ -106,7 +138,13 @@ class NoInterpreterSourceArguments(ProjectRule):
|
|
|
106
138
|
if sink is None or sink in replaced or is_suppressed(context.source_lines, call.lineno, self.code):
|
|
107
139
|
continue
|
|
108
140
|
argv = _literal_argv(call, sink)
|
|
109
|
-
if argv is None
|
|
141
|
+
if argv is None:
|
|
142
|
+
continue
|
|
143
|
+
kind = classify_interpreter(argv).kind
|
|
144
|
+
channel = "process argv" if kind == "inline" else None
|
|
145
|
+
if kind == "stdin" and _literal_python_stdin(call, sink, argv):
|
|
146
|
+
channel = "process stdin"
|
|
147
|
+
if channel is None:
|
|
110
148
|
continue
|
|
111
149
|
findings.append(
|
|
112
150
|
Diagnostic(
|
|
@@ -114,13 +152,65 @@ class NoInterpreterSourceArguments(ProjectRule):
|
|
|
114
152
|
line=call.lineno,
|
|
115
153
|
col=call.col_offset + 1,
|
|
116
154
|
code=self.code,
|
|
117
|
-
message="Interpreter source is embedded in
|
|
155
|
+
message=f"Interpreter source is embedded in {channel}; invoke a linted repository-owned file or module instead.",
|
|
118
156
|
severity=Severity.ERROR,
|
|
119
157
|
)
|
|
120
158
|
)
|
|
121
159
|
return findings
|
|
122
160
|
|
|
123
161
|
|
|
162
|
+
def _literal_python_stdin(call: ast.Call, sink: str, argv: tuple[str, ...]) -> bool:
|
|
163
|
+
if sink not in {"subprocess.run", "subprocess.check_output"}:
|
|
164
|
+
return False
|
|
165
|
+
arguments = unwrap_command(argv) # The shared classifier already proved these wrappers.
|
|
166
|
+
if not arguments or not is_python_executable(arguments[0]):
|
|
167
|
+
return False
|
|
168
|
+
literal = _argument(call, "input", len(call.args))
|
|
169
|
+
if not isinstance(literal, ast.Constant) or not isinstance(literal.value, (str, bytes)):
|
|
170
|
+
return False
|
|
171
|
+
if not _compatible_stdin(call, literal.value):
|
|
172
|
+
return False
|
|
173
|
+
try:
|
|
174
|
+
return bool(ast.parse(literal.value).body)
|
|
175
|
+
except SyntaxError, ValueError:
|
|
176
|
+
return True
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
def _compatible_stdin(call: ast.Call, payload: str | bytes) -> bool:
|
|
180
|
+
modes: dict[str, object] = {}
|
|
181
|
+
for name in ("stdin", "text", "universal_newlines", "encoding", "errors"):
|
|
182
|
+
option = _argument(call, name, len(call.args))
|
|
183
|
+
if option is not None and not isinstance(option, ast.Constant):
|
|
184
|
+
return False
|
|
185
|
+
modes[name] = option.value if isinstance(option, ast.Constant) else None
|
|
186
|
+
if modes["stdin"] is not None:
|
|
187
|
+
return False
|
|
188
|
+
text, universal = modes["text"], modes["universal_newlines"]
|
|
189
|
+
if text not in {None, True, False} or universal not in {None, True, False}:
|
|
190
|
+
return False
|
|
191
|
+
if text is not None and universal is not None and bool(text) != bool(universal):
|
|
192
|
+
return False
|
|
193
|
+
encoding, errors = modes["encoding"], modes["errors"]
|
|
194
|
+
if encoding is not None and not isinstance(encoding, str):
|
|
195
|
+
return False
|
|
196
|
+
if errors is not None and not isinstance(errors, str):
|
|
197
|
+
return False
|
|
198
|
+
text_mode = bool(text or universal or encoding or errors)
|
|
199
|
+
if isinstance(payload, str) != text_mode:
|
|
200
|
+
return False
|
|
201
|
+
return not isinstance(payload, str) or _text_input_valid(payload, encoding, errors)
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
def _text_input_valid(payload: str, encoding: str | None, errors: str | None) -> bool:
|
|
205
|
+
try:
|
|
206
|
+
with io.TextIOWrapper(io.BytesIO(), encoding=encoding, errors=errors) as stream:
|
|
207
|
+
stream.write(payload)
|
|
208
|
+
stream.flush()
|
|
209
|
+
except LookupError, UnicodeError, ValueError:
|
|
210
|
+
return False
|
|
211
|
+
return True
|
|
212
|
+
|
|
213
|
+
|
|
124
214
|
def _literal_argv(call: ast.Call, sink: str) -> tuple[str, ...] | None:
|
|
125
215
|
if any(keyword.arg is None for keyword in call.keywords):
|
|
126
216
|
return None # Expanded options can replace the executable or enable shell=True.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/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
|
{sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/_ast_index.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/_ast_position.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/_copy_on_write.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/_dict_key_views.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/_docstrings.py
RENAMED
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/_first_party.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/_fixed_record.py
RENAMED
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/_local_source.py
RENAMED
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/_nominal_project.py
RENAMED
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/_project_index.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/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.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/_set_fields.py
RENAMED
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/_test_assertions.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/_test_composition.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/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.26.1 → sarj_python_lint-1.26.3}/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.26.1 → sarj_python_lint-1.26.3}/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.26.1 → sarj_python_lint-1.26.3}/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
|
{sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/no_secret_in_log.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/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.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/over_mocked_test.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/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.26.1 → sarj_python_lint-1.26.3}/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.26.1 → sarj_python_lint-1.26.3}/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
|
{sarj_python_lint-1.26.1 → sarj_python_lint-1.26.3}/src/sarj_python_lint/rules/unused_mock_setup.py
RENAMED
|
File without changes
|
|
File without changes
|