sarj-python-lint 1.42.1__tar.gz → 1.42.2__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.42.1 → sarj_python_lint-1.42.2}/PKG-INFO +1 -1
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/pyproject.toml +1 -1
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_tautological_expect.py +40 -4
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/.gitignore +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/LICENSE +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/README.md +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/__init__.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/__main__.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/_analysis_session.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/_file_context.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/_filesystem.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/_python_target.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/_ratchet_cli.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/_secret_names.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/_source.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/_version.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/benchmark.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/interpreter_argv.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/json_boundary.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/py.typed +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/ratchet.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rule_base.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/__init__.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_annotation_semantics.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_ast_index.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_ast_position.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_closed_helpers.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_comments.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_contract_annotation.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_copy_on_write.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_dict_key_views.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_docstrings.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_exports.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_fastapi.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_first_party.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_fixed_record.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_imports.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_inert_model_annotation.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_local_source.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_logging.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_namespace_access.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_nominal_project.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_paths.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_project_index.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_prose_budget.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_pydantic_field_contract.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_pytest.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_registry.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_resolved_operation_signature.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_resource_provenance.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_set_fields.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_sql.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_static_json_alias.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_suppression_comments.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_test_assertions.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_test_composition.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_test_provenance.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/async_cleanup_registered_synchronously.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/async_mock_call_without_await_assertion.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/complex_postgres_query_requires_architecture_review.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/defect_xfail_requires_explicit_strict.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/docstring_args_restate_signature.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/docstring_returns_restate_signature.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/duplicate_adjacent_exception_handler.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/duplicate_closed_pure_helper.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/excessive_commentary.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/fakes_in_shared_location.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/fastapi_class_router_contract.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/fastapi_explicit_openapi_contract.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/iac_source_coupled_test.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/invalid_pydantic_field_default.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/mock_without_spec.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/named_record_at_boundaries.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/negative_only_http_status_assertion.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_analytical_aggregation_in_postgres_store.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_any_mapping_types.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_async_function_cache.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_before_validator_input_mutation.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_broad_keyword_capture.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_comment_cruft.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_conflicting_pydantic_alias_validation.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_conftest_test_module_import.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_copied_inherited_docstring.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_cors_wildcard_with_credentials.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_database_programmability.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_delete_statement.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_dunder_all.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_duplicate_dunder_all_entry.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_excessive_cognitive_complexity.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_fastapi_on_event.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_file_level_escape_hatch_suppression.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_first_party_private_import.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_fixed_sleep_before_assert.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_fixed_sleep_in_loop.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_frozen_after_validator_field_write.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_generic_single_export_module.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_hidden_constructor_fallback.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_impossible_pydantic_field_bounds.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_injected_module_loader.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_input_model_mutation.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_interpreter_source_arguments.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_invalid_argument_name_suppression.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_loguru_exc_info.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_loguru_printf_format.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_mocked_pydantic_value_object.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_nested_pydantic_field_validator.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_nullable_dependency_fallback.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_offset_pagination.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_positional_psycopg_row_escape.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_psycopg_execution_outside_injected_owner.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_random_uuid_in_sql.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_raw_connection_in_tests.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_raw_source_text_test_oracle.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_redundant_literal_description.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_redundant_module_alias_exports.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_repeated_string_literal.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_repeated_test_body.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_restated_comment.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_secret_in_log.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_select_star.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_service_behavior_in_settings.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_shallow_container_type_guard.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_string_concat_in_loop.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_swallowed_asyncio_cancellation.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_test_method_grafting.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_typed_doc_sections.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_unique_violation_message_match.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_unknown_pydantic_validator_field.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_unnecessary_docstring.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_unused_copy_result.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_unused_underscored_keyword_parameter.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_unused_value_marker.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_vague_suppression_description.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_whole_request_response_payload_in_log.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/opaque_parametrize_case_needs_id.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/over_mocked_test.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/phase_label_comment.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/prefer_autospec_for_callable_mock.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/prefer_class_row.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/prefer_collection_comprehension.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/prefer_constant_time_secret_compare.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/prefer_declarative_batch_validation.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/prefer_discriminated_model_union.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/prefer_fstring_over_concat.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/prefer_immutable_module_constant.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/prefer_injected_dependency_over_monkeypatch.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/prefer_library_fake.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/prefer_match_assert_never.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/prefer_match_exception_dispatch.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/prefer_match_type_dispatch.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/prefer_match_value_dispatch.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/prefer_module_level_constant.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/prefer_monkeypatch_for_process_state_in_test.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/prefer_monotonic_for_elapsed_time.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/prefer_namedtuple_over_tuple_return.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/prefer_native_string_check.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/prefer_nominal_id_types.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/prefer_non_nullable_collection.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/prefer_or_pattern.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/prefer_pydantic_json_value.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/prefer_pytest_fixture_injection.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/prefer_regex_fullmatch.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/prefer_required_constructor_parameters.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/prefer_self_documenting_constant.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/prefer_self_type_annotation.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/prefer_set_isdisjoint.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/prefer_str_enum.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/prefer_struct_over_namedtuple.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/prefer_walrus_awaited_none_guard.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/prefer_walrus_comprehension_filter.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/prefer_walrus_regex_match.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/prefer_walrus_stream_loop.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/production_derived_test_cases.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/pytest_fixture_returns_bare_tuple.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/redundant_class_docstring.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/redundant_docstring.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/redundant_module_docstring.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/redundant_test_constructor_forwarder.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/repeated_kwarg_heavy_call_in_test.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/repeated_static_call_cases.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/repeated_test_composition.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/repeated_unimplemented_test_contract.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/require_explicit_contract_implementation.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/require_explicit_psycopg_transaction.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/require_explicit_service_contract.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/require_injectable_retry_sleep.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/require_keyword_only_swap_prone_params.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/require_nodecode_for_splitting_settings_field.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/require_port_for_service.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/require_precise_factory_signature.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/require_public_dependency_contract.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/require_pydantic_for_external_json.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/require_pydantic_for_structured_payload.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/require_pydantic_ordinal_lower_bound.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/restated_test_docstring.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/shared_mutable_pydantic_factory.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/stepdown.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/store_get_delegates_to_bulk_read.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/store_insert_requires_on_conflict.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/subprocess_kill_without_reap.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/test_without_explicit_oracle.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/timestamp_order_requires_tiebreaker.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/trailing_value_narration.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/typed_error_reasons.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/uncontrolled_randomness_in_test.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/unused_mock_setup.py +0 -0
- {sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/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.42.
|
|
3
|
+
Version: 1.42.2
|
|
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/
|
|
@@ -40,24 +40,56 @@ class NoTautologicalExpect(Rule):
|
|
|
40
40
|
id: str = "no-statically-truthy-assertion"
|
|
41
41
|
code: str = "SARJ057"
|
|
42
42
|
documentation: ClassVar[RuleDocumentation | None] = RuleDocumentation(
|
|
43
|
-
summary="An assertion condition is statically truthy, including test-local scalar setup.",
|
|
43
|
+
summary="An assertion condition is statically truthy, including deferred expressions and test-local scalar setup.",
|
|
44
44
|
rationale=(
|
|
45
45
|
"A condition that stays truthy whenever evaluation succeeds cannot reject an incorrect result and often "
|
|
46
|
-
"means the intended condition was wrapped in a container or placed in the message slot."
|
|
46
|
+
"means the intended condition was wrapped in a container, deferred without execution, or placed in the message slot."
|
|
47
47
|
),
|
|
48
48
|
remediation=(
|
|
49
49
|
"Assert an explicit runtime-derived condition. If the test only requires an operation not to raise, "
|
|
50
|
-
"evaluate it directly and retain any meaningful follow-up assertion."
|
|
50
|
+
"evaluate it directly and retain any meaningful follow-up assertion. Consume generator values or call "
|
|
51
|
+
"the lambda when their result is the contract; choose empty-input behavior explicitly."
|
|
51
52
|
),
|
|
52
53
|
category=RuleCategory.TESTING,
|
|
53
54
|
aliases=("no-tautological-expect",),
|
|
54
55
|
limitations=(
|
|
55
|
-
"Detection covers truthy scalar constants
|
|
56
|
+
"Detection covers truthy scalar constants, definitely non-empty list/set/dict displays, and directly asserted generator expressions or lambdas.",
|
|
57
|
+
"Generator consumption, lambda invocation, comprehensions, and runtime iterator/callable values are not inferred; empty universal-quantification contracts remain valid.",
|
|
56
58
|
"Test-local immutable scalar bindings and their aliases are tracked only through straight-line assignments; calls, control flow, mutable values, and global/nonlocal writes invalidate tracking.",
|
|
57
59
|
"Ruff owns asserted strings and tuples, literal comparisons and identity, and unittest-style assertion methods.",
|
|
58
60
|
"Generated files, always-failing assertions, deliberate match-arm success markers, and runtime-value comparisons are excluded.",
|
|
59
61
|
),
|
|
60
62
|
examples=(
|
|
63
|
+
RuleExample(
|
|
64
|
+
example_id="unconsumed-generator",
|
|
65
|
+
scenario="deferred-condition",
|
|
66
|
+
title="A generator object does not check the yielded conditions",
|
|
67
|
+
outcome=ExampleOutcome.MATCH,
|
|
68
|
+
files=(
|
|
69
|
+
ExampleFile.python(
|
|
70
|
+
"tests/test_service.py",
|
|
71
|
+
"def test_values(rows):\n assert (row.is_valid for row in rows)\n",
|
|
72
|
+
),
|
|
73
|
+
),
|
|
74
|
+
focus_path=PurePosixPath("tests/test_service.py"),
|
|
75
|
+
expected_count=1,
|
|
76
|
+
public=True,
|
|
77
|
+
),
|
|
78
|
+
RuleExample(
|
|
79
|
+
example_id="consumed-generator",
|
|
80
|
+
scenario="deferred-condition",
|
|
81
|
+
title="Consume the conditions when the contract requires every row to be valid",
|
|
82
|
+
outcome=ExampleOutcome.NO_MATCH,
|
|
83
|
+
files=(
|
|
84
|
+
ExampleFile.python(
|
|
85
|
+
"tests/test_service.py",
|
|
86
|
+
"def test_values(rows):\n assert all(row.is_valid for row in rows)\n",
|
|
87
|
+
),
|
|
88
|
+
),
|
|
89
|
+
focus_path=PurePosixPath("tests/test_service.py"),
|
|
90
|
+
expected_count=0,
|
|
91
|
+
public=True,
|
|
92
|
+
),
|
|
61
93
|
RuleExample(
|
|
62
94
|
example_id="setup-only-oracle",
|
|
63
95
|
scenario="setup-only",
|
|
@@ -273,6 +305,10 @@ def _fixed_truth_reason(test: ast.expr) -> str | None:
|
|
|
273
305
|
kind = _nonempty_container_kind(test)
|
|
274
306
|
if kind is not None:
|
|
275
307
|
return f"a non-empty {kind} display is truthy whatever it contains"
|
|
308
|
+
if isinstance(test, ast.GeneratorExp):
|
|
309
|
+
return "a generator expression creates a truthy iterator without checking its yielded values"
|
|
310
|
+
if isinstance(test, ast.Lambda):
|
|
311
|
+
return "a lambda expression creates a truthy function without calling its body"
|
|
276
312
|
return None
|
|
277
313
|
|
|
278
314
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/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
|
{sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/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
|
|
File without changes
|
{sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_ast_index.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_ast_position.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_closed_helpers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_copy_on_write.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_dict_key_views.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_docstrings.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_first_party.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_fixed_record.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_local_source.py
RENAMED
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_namespace_access.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_nominal_project.py
RENAMED
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_project_index.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_prose_budget.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_set_fields.py
RENAMED
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_static_json_alias.py
RENAMED
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_test_assertions.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/_test_composition.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/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
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/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
|
|
File without changes
|
{sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/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
|
|
File without changes
|
{sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/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
|
{sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_loguru_exc_info.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.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/no_secret_in_log.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/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.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/over_mocked_test.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/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
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/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.42.1 → sarj_python_lint-1.42.2}/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.42.1 → sarj_python_lint-1.42.2}/src/sarj_python_lint/rules/unused_mock_setup.py
RENAMED
|
File without changes
|
|
File without changes
|