sarj-python-lint 1.45.3__tar.gz → 1.45.4__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.45.3 → sarj_python_lint-1.45.4}/PKG-INFO +1 -1
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/pyproject.toml +1 -1
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_tautological_expect.py +12 -5
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/.gitignore +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/LICENSE +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/README.md +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/__init__.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/__main__.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/_analysis_session.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/_file_context.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/_filesystem.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/_python_target.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/_ratchet_cli.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/_secret_names.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/_source.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/_version.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/benchmark.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/interpreter_argv.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/json_boundary.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/py.typed +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/ratchet.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rule_base.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/__init__.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_annotation_semantics.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_ast_index.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_ast_position.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_closed_helpers.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_comments.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_contract_annotation.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_copy_on_write.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_dict_key_views.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_docstrings.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_exports.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_fastapi.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_first_party.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_fixed_record.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_imports.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_inert_model_annotation.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_inherited_contract.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_local_source.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_logging.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_namespace_access.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_nominal_project.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_paths.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_project_index.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_prose_budget.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_pydantic_field_contract.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_pytest.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_registry.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_resolved_operation_signature.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_resource_provenance.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_set_fields.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_sql.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_static_json_alias.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_suppression_comments.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_test_assertions.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_test_composition.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_test_provenance.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_type_guard_symbols.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/async_cleanup_registered_synchronously.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/async_mock_call_without_await_assertion.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/complex_postgres_query_requires_architecture_review.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/defect_xfail_requires_explicit_strict.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/docstring_args_restate_signature.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/docstring_returns_restate_signature.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/duplicate_adjacent_exception_handler.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/duplicate_closed_pure_helper.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/excessive_commentary.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/fakes_in_shared_location.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/fastapi_class_router_contract.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/fastapi_explicit_openapi_contract.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/iac_source_coupled_test.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/invalid_pydantic_field_default.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/mock_without_spec.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/named_record_at_boundaries.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/negative_only_http_status_assertion.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_analytical_aggregation_in_postgres_store.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_any_mapping_types.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_async_function_cache.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_before_validator_input_mutation.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_broad_keyword_capture.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_comment_cruft.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_conflicting_pydantic_alias_validation.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_conftest_test_module_import.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_contradictory_type_guard.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_copied_inherited_docstring.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_cors_wildcard_with_credentials.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_database_programmability.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_delete_statement.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_dunder_all.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_duplicate_dunder_all_entry.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_excessive_cognitive_complexity.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_fastapi_on_event.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_file_level_escape_hatch_suppression.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_first_party_private_import.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_fixed_sleep_before_assert.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_fixed_sleep_in_loop.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_frozen_after_validator_field_write.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_generic_single_export_module.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_hidden_constructor_fallback.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_impossible_pydantic_field_bounds.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_injected_module_loader.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_input_model_mutation.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_interpreter_source_arguments.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_invalid_argument_name_suppression.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_invalid_pydantic_bypass.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_loguru_exc_info.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_loguru_printf_format.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_mocked_pydantic_value_object.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_nested_pydantic_field_validator.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_nullable_dependency_fallback.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_offset_pagination.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_partial_type_is.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_positional_psycopg_row_escape.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_psycopg_execution_outside_injected_owner.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_random_uuid_in_sql.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_raw_connection_in_tests.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_raw_source_text_test_oracle.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_redundant_literal_description.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_redundant_module_alias_exports.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_repeated_string_literal.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_repeated_test_body.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_restated_comment.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_secret_in_log.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_select_star.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_service_behavior_in_settings.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_shallow_container_type_guard.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_shallow_record_type_guard.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_string_concat_in_loop.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_swallowed_asyncio_cancellation.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_test_method_grafting.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_typed_doc_sections.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_unique_violation_message_match.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_unknown_pydantic_validator_field.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_unnecessary_docstring.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_unused_copy_result.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_unused_underscored_keyword_parameter.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_unused_value_marker.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_vague_suppression_description.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_whole_request_response_payload_in_log.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/opaque_parametrize_case_needs_id.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/over_mocked_test.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/phase_label_comment.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/prefer_autospec_for_callable_mock.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/prefer_class_row.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/prefer_collection_comprehension.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/prefer_constant_time_secret_compare.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/prefer_declarative_batch_validation.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/prefer_discriminated_model_union.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/prefer_fstring_over_concat.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/prefer_immutable_module_constant.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/prefer_injected_dependency_over_monkeypatch.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/prefer_library_fake.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/prefer_match_assert_never.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/prefer_match_exception_dispatch.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/prefer_match_type_dispatch.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/prefer_match_value_dispatch.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/prefer_module_level_constant.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/prefer_monkeypatch_for_process_state_in_test.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/prefer_monotonic_for_elapsed_time.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/prefer_namedtuple_over_tuple_return.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/prefer_native_string_check.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/prefer_nominal_id_types.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/prefer_non_nullable_collection.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/prefer_or_pattern.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/prefer_pydantic_json_value.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/prefer_pytest_fixture_injection.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/prefer_regex_fullmatch.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/prefer_required_constructor_parameters.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/prefer_self_documenting_constant.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/prefer_self_type_annotation.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/prefer_set_isdisjoint.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/prefer_str_enum.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/prefer_struct_over_namedtuple.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/prefer_walrus_awaited_none_guard.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/prefer_walrus_comprehension_filter.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/prefer_walrus_regex_match.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/prefer_walrus_stream_loop.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/production_derived_test_cases.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/pytest_fixture_returns_bare_tuple.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/redundant_class_docstring.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/redundant_docstring.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/redundant_module_docstring.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/redundant_test_constructor_forwarder.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/repeated_kwarg_heavy_call_in_test.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/repeated_static_call_cases.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/repeated_test_composition.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/repeated_unimplemented_test_contract.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/require_explicit_contract_implementation.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/require_explicit_psycopg_transaction.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/require_explicit_service_contract.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/require_injectable_retry_sleep.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/require_keyword_only_swap_prone_params.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/require_nodecode_for_splitting_settings_field.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/require_port_for_service.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/require_precise_factory_signature.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/require_public_dependency_contract.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/require_pydantic_for_external_json.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/require_pydantic_for_structured_payload.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/require_pydantic_ordinal_lower_bound.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/restated_test_docstring.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/shared_mutable_pydantic_factory.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/stepdown.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/store_get_delegates_to_bulk_read.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/store_insert_requires_on_conflict.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/subprocess_kill_without_reap.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/test_without_explicit_oracle.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/timestamp_order_requires_tiebreaker.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/trailing_value_narration.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/typed_error_reasons.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/uncontrolled_randomness_in_test.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/unused_mock_setup.py +0 -0
- {sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/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.45.
|
|
3
|
+
Version: 1.45.4
|
|
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/
|
|
@@ -34,6 +34,7 @@ _FAIL = "fail"
|
|
|
34
34
|
# Enough of the operand to identify it in the message without pasting a screenful.
|
|
35
35
|
_OPERAND_PREVIEW_CHARS = 40
|
|
36
36
|
_UNKNOWN = object()
|
|
37
|
+
_DEFERRED_TRUTHY = object()
|
|
37
38
|
|
|
38
39
|
|
|
39
40
|
class NoTautologicalExpect(Rule):
|
|
@@ -53,9 +54,10 @@ class NoTautologicalExpect(Rule):
|
|
|
53
54
|
category=RuleCategory.TESTING,
|
|
54
55
|
aliases=("no-tautological-expect",),
|
|
55
56
|
limitations=(
|
|
56
|
-
"Detection covers truthy scalar constants, definitely non-empty list/set/dict displays, and directly asserted generator expressions
|
|
57
|
+
"Detection covers truthy scalar constants, definitely non-empty list/set/dict displays, and directly asserted or locally bound generator expressions and lambdas.",
|
|
57
58
|
"Generator consumption, lambda invocation, comprehensions, and runtime iterator/callable values are not inferred; empty universal-quantification contracts remain valid.",
|
|
58
59
|
"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.",
|
|
60
|
+
"Locally created generator/lambda objects and aliases are tracked for truthiness only; their creation clears earlier setup facts, and comparisons, consumption, invocation, and runtime-created iterators/callables are not inferred.",
|
|
59
61
|
"Pure Boolean conditions, compatible numeric/string/bytes ordering and chained comparisons over known scalar setup are evaluated; proven-true pure assertions retain bindings because their messages do not execute.",
|
|
60
62
|
"Ruff owns asserted strings and tuples, literal comparisons and identity, and unittest-style assertion methods.",
|
|
61
63
|
"Generated files, always-failing assertions, deliberate match-arm success markers, and runtime-value comparisons are excluded.",
|
|
@@ -69,7 +71,7 @@ class NoTautologicalExpect(Rule):
|
|
|
69
71
|
files=(
|
|
70
72
|
ExampleFile.python(
|
|
71
73
|
"tests/test_service.py",
|
|
72
|
-
"def test_values(rows):\n
|
|
74
|
+
"def test_values(rows):\n checks = (row.is_valid for row in rows)\n assert checks\n",
|
|
73
75
|
),
|
|
74
76
|
),
|
|
75
77
|
focus_path=PurePosixPath("tests/test_service.py"),
|
|
@@ -84,7 +86,7 @@ class NoTautologicalExpect(Rule):
|
|
|
84
86
|
files=(
|
|
85
87
|
ExampleFile.python(
|
|
86
88
|
"tests/test_service.py",
|
|
87
|
-
"def test_values(rows):\n
|
|
89
|
+
"def test_values(rows):\n checks = (row.is_valid for row in rows)\n assert all(checks)\n",
|
|
88
90
|
),
|
|
89
91
|
),
|
|
90
92
|
focus_path=PurePosixPath("tests/test_service.py"),
|
|
@@ -202,7 +204,7 @@ def _function_bound_tautologies(function: ast.FunctionDef | ast.AsyncFunctionDef
|
|
|
202
204
|
isinstance(node, ast.Name) and node.id in bindings for node in ast.walk(statement.test)
|
|
203
205
|
)
|
|
204
206
|
if references_setup:
|
|
205
|
-
found.append(_Tautology(statement, "the condition follows only from unchanged
|
|
207
|
+
found.append(_Tautology(statement, "the condition follows only from unchanged test-local setup"))
|
|
206
208
|
continue
|
|
207
209
|
bindings.clear()
|
|
208
210
|
return found
|
|
@@ -213,6 +215,11 @@ def _record_scalar_assignment(statement: ast.stmt, bindings: dict[str, object])
|
|
|
213
215
|
case (
|
|
214
216
|
ast.Assign(targets=[ast.Name(id=name)], value=value) | ast.AnnAssign(target=ast.Name(id=name), value=value)
|
|
215
217
|
) if value is not None:
|
|
218
|
+
if isinstance(value, (ast.GeneratorExp, ast.Lambda)):
|
|
219
|
+
# Outer iterables and defaults execute now and can write earlier bindings.
|
|
220
|
+
bindings.clear()
|
|
221
|
+
bindings[name] = _DEFERRED_TRUTHY
|
|
222
|
+
return True
|
|
216
223
|
scalar = _scalar_value(value, bindings)
|
|
217
224
|
if scalar is not _UNKNOWN:
|
|
218
225
|
bindings[name] = scalar
|
|
@@ -258,7 +265,7 @@ def _scalar_condition(node: ast.expr, bindings: dict[str, object]) -> bool | Non
|
|
|
258
265
|
|
|
259
266
|
|
|
260
267
|
def _scalar_relation(left: object, right: object, op: ast.cmpop) -> bool | None:
|
|
261
|
-
if left is _UNKNOWN or right is _UNKNOWN:
|
|
268
|
+
if left is _UNKNOWN or right is _UNKNOWN or left is _DEFERRED_TRUTHY or right is _DEFERRED_TRUTHY:
|
|
262
269
|
return None
|
|
263
270
|
match op:
|
|
264
271
|
case ast.Eq():
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/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.45.3 → sarj_python_lint-1.45.4}/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.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_ast_index.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_ast_position.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_closed_helpers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_copy_on_write.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_dict_key_views.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_docstrings.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_first_party.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_fixed_record.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_local_source.py
RENAMED
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_namespace_access.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_nominal_project.py
RENAMED
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_project_index.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/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.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_set_fields.py
RENAMED
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_static_json_alias.py
RENAMED
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_test_assertions.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/_test_composition.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/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
|
|
File without changes
|
{sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/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.45.3 → sarj_python_lint-1.45.4}/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
|
|
File without changes
|
{sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/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
|
{sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/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
|
{sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_partial_type_is.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
|
{sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/no_secret_in_log.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/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
|
|
File without changes
|
{sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/over_mocked_test.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.45.3 → sarj_python_lint-1.45.4}/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.45.3 → sarj_python_lint-1.45.4}/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.45.3 → sarj_python_lint-1.45.4}/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.45.3 → sarj_python_lint-1.45.4}/src/sarj_python_lint/rules/unused_mock_setup.py
RENAMED
|
File without changes
|
|
File without changes
|