sarj-python-lint 1.25.0__tar.gz → 1.25.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.25.0 → sarj_python_lint-1.25.2}/PKG-INFO +1 -1
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/pyproject.toml +1 -1
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/prefer_collection_comprehension.py +24 -11
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/.gitignore +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/LICENSE +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/README.md +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/__init__.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/__main__.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/_analysis_session.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/_file_context.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/_filesystem.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/_python_target.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/_ratchet_cli.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/_secret_names.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/_version.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/benchmark.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/json_boundary.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/py.typed +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/ratchet.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rule_base.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/__init__.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/_annotation_semantics.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/_ast_index.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/_ast_position.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/_comments.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/_contract_annotation.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/_copy_on_write.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/_dict_key_views.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/_docstrings.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/_fastapi.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/_first_party.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/_fixed_record.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/_imports.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/_local_source.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/_logging.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/_nominal_project.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/_paths.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/_project_index.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/_prose_budget.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/_pytest.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/_registry.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/_resource_provenance.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/_set_fields.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/_sql.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/_suppression_comments.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/_test_assertions.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/_test_composition.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/_test_provenance.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/async_cleanup_registered_synchronously.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/async_mock_call_without_await_assertion.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/complex_postgres_query_requires_architecture_review.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/defect_xfail_requires_explicit_strict.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/docstring_args_restate_signature.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/docstring_returns_restate_signature.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/excessive_commentary.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/fakes_in_shared_location.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/fastapi_class_router_contract.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/fastapi_explicit_openapi_contract.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/iac_source_coupled_test.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/invalid_pydantic_field_default.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/mock_without_spec.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/named_record_at_boundaries.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/negative_only_http_status_assertion.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_analytical_aggregation_in_postgres_store.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_any_mapping_types.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_before_validator_input_mutation.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_broad_keyword_capture.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_comment_cruft.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_conftest_test_module_import.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_copied_inherited_docstring.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_cors_wildcard_with_credentials.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_database_programmability.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_delete_statement.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_dunder_all.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_duplicate_dunder_all_entry.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_excessive_cognitive_complexity.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_fastapi_on_event.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_file_level_escape_hatch_suppression.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_first_party_private_import.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_fixed_sleep_before_assert.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_frozen_after_validator_field_write.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_generic_single_export_module.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_hidden_constructor_fallback.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_injected_module_loader.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_input_model_mutation.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_invalid_argument_name_suppression.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_mocked_pydantic_value_object.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_nested_pydantic_field_validator.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_nullable_dependency_fallback.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_offset_pagination.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_positional_psycopg_row_escape.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_psycopg_execution_outside_injected_owner.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_random_uuid_in_sql.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_raw_connection_in_tests.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_raw_source_text_test_oracle.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_redundant_literal_description.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_redundant_module_alias_exports.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_repeated_string_literal.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_repeated_test_body.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_restated_comment.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_secret_in_log.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_select_star.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_service_behavior_in_settings.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_shallow_container_type_guard.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_string_concat_in_loop.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_swallowed_asyncio_cancellation.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_tautological_expect.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_test_method_grafting.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_typed_doc_sections.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_unique_violation_message_match.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_unnecessary_docstring.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_unused_copy_result.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_unused_underscored_keyword_parameter.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_unused_value_marker.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_vague_suppression_description.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_whole_request_response_payload_in_log.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/opaque_parametrize_case_needs_id.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/over_mocked_test.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/phase_label_comment.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/prefer_autospec_for_callable_mock.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/prefer_class_row.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/prefer_constant_time_secret_compare.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/prefer_fstring_over_concat.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/prefer_immutable_module_constant.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/prefer_injected_dependency_over_monkeypatch.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/prefer_library_fake.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/prefer_match_assert_never.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/prefer_match_exception_dispatch.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/prefer_match_type_dispatch.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/prefer_match_value_dispatch.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/prefer_module_level_constant.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/prefer_monkeypatch_for_process_state_in_test.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/prefer_monotonic_for_elapsed_time.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/prefer_namedtuple_over_tuple_return.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/prefer_native_string_check.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/prefer_nominal_id_types.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/prefer_non_nullable_collection.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/prefer_or_pattern.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/prefer_pydantic_json_value.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/prefer_pytest_fixture_injection.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/prefer_regex_fullmatch.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/prefer_required_constructor_parameters.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/prefer_self_documenting_constant.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/prefer_self_type_annotation.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/prefer_set_isdisjoint.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/prefer_str_enum.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/prefer_struct_over_namedtuple.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/prefer_walrus_awaited_none_guard.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/prefer_walrus_comprehension_filter.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/prefer_walrus_regex_match.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/prefer_walrus_stream_loop.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/production_derived_test_cases.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/pytest_fixture_returns_bare_tuple.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/redundant_class_docstring.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/redundant_docstring.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/redundant_module_docstring.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/repeated_kwarg_heavy_call_in_test.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/repeated_static_call_cases.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/repeated_test_composition.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/require_explicit_contract_implementation.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/require_explicit_psycopg_transaction.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/require_explicit_service_contract.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/require_keyword_only_swap_prone_params.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/require_nodecode_for_splitting_settings_field.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/require_port_for_service.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/require_precise_factory_signature.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/require_public_dependency_contract.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/require_pydantic_for_external_json.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/require_pydantic_for_structured_payload.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/require_pydantic_ordinal_lower_bound.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/restated_test_docstring.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/shared_mutable_pydantic_factory.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/stepdown.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/store_get_delegates_to_bulk_read.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/store_insert_requires_on_conflict.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/subprocess_kill_without_reap.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/timestamp_order_requires_tiebreaker.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/trailing_value_narration.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/typed_error_reasons.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/uncontrolled_randomness_in_test.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/unused_mock_setup.py +0 -0
- {sarj_python_lint-1.25.0 → sarj_python_lint-1.25.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.25.
|
|
3
|
+
Version: 1.25.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/
|
|
@@ -112,7 +112,9 @@ class PreferCollectionComprehension(Rule):
|
|
|
112
112
|
(
|
|
113
113
|
"Comments, loop-target leakage, try blocks, aliases, complex projections, and replacements that "
|
|
114
114
|
"do not fit a 120-column line or a simple formatter-style multiline comprehension are excluded. "
|
|
115
|
-
"Namespace observers and collections referenced by nested functions
|
|
115
|
+
"Namespace observers, explicit inspect/sys frame access, and collections referenced by nested functions "
|
|
116
|
+
"are excluded. Dynamic function aliases and helper-hidden frame reads are not resolved. "
|
|
117
|
+
"No autofix is offered because dict key/value evaluation order can differ."
|
|
116
118
|
),
|
|
117
119
|
(
|
|
118
120
|
"Attribute projections can invoke properties or descriptors, so reviewers should keep the loop "
|
|
@@ -672,29 +674,40 @@ def _owner_bindings(owner: _Callable, namespace_observers: frozenset[int]) -> _O
|
|
|
672
674
|
|
|
673
675
|
|
|
674
676
|
def _namespace_observer_calls(context: PythonFileContext) -> frozenset[int]:
|
|
675
|
-
observers = {
|
|
677
|
+
observers = {
|
|
678
|
+
"builtins": {"locals", "vars", "eval", "exec"},
|
|
679
|
+
"inspect": {"currentframe", "stack", "trace", "getouterframes", "getinnerframes", "getargvalues"},
|
|
680
|
+
"sys": {"_getframe"},
|
|
681
|
+
}
|
|
676
682
|
# Explicit aliases remain conservative exclusions even when another scope shadows them.
|
|
677
|
-
modules: set[str] = set
|
|
678
|
-
symbols = observers.copy()
|
|
683
|
+
modules: defaultdict[str, set[str]] = defaultdict(set)
|
|
684
|
+
symbols = observers["builtins"].copy()
|
|
679
685
|
for node in context.nodes(ast.Import):
|
|
680
686
|
for alias in node.names:
|
|
681
|
-
if alias.name
|
|
682
|
-
modules
|
|
687
|
+
if alias.name in observers:
|
|
688
|
+
modules[alias.asname or alias.name].update(observers[alias.name])
|
|
683
689
|
for node in context.nodes(ast.ImportFrom):
|
|
684
|
-
|
|
685
|
-
continue
|
|
686
|
-
symbols.update(alias.asname or alias.name for alias in node.names if alias.name in observers)
|
|
690
|
+
symbols.update(_observer_import_symbols(node, observers))
|
|
687
691
|
return frozenset(
|
|
688
692
|
id(call) for call in context.nodes(ast.Call) if _is_namespace_observer(call.func, symbols, modules)
|
|
689
693
|
)
|
|
690
694
|
|
|
691
695
|
|
|
692
|
-
def
|
|
696
|
+
def _observer_import_symbols(node: ast.ImportFrom, observers: dict[str, set[str]]) -> set[str]:
|
|
697
|
+
if node.level or node.module not in observers:
|
|
698
|
+
return set()
|
|
699
|
+
# These inspect observers are public wildcard exports; sys._getframe is not.
|
|
700
|
+
if node.module == "inspect" and any(alias.name == "*" for alias in node.names):
|
|
701
|
+
return observers["inspect"]
|
|
702
|
+
return {alias.asname or alias.name for alias in node.names if alias.name in observers[node.module]}
|
|
703
|
+
|
|
704
|
+
|
|
705
|
+
def _is_namespace_observer(function: ast.expr, symbols: set[str], modules: dict[str, set[str]]) -> bool:
|
|
693
706
|
match function:
|
|
694
707
|
case ast.Name(id=name):
|
|
695
708
|
return name in symbols
|
|
696
709
|
case ast.Attribute(value=ast.Name(id=module), attr=symbol):
|
|
697
|
-
return module in modules and symbol in
|
|
710
|
+
return module in modules and symbol in modules[module]
|
|
698
711
|
case _:
|
|
699
712
|
return False
|
|
700
713
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.25.0 → sarj_python_lint-1.25.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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/_ast_index.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/_ast_position.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/_copy_on_write.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/_dict_key_views.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/_docstrings.py
RENAMED
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/_first_party.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/_fixed_record.py
RENAMED
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/_local_source.py
RENAMED
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/_nominal_project.py
RENAMED
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/_project_index.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/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.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/_set_fields.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/_test_assertions.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/_test_composition.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.25.0 → sarj_python_lint-1.25.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
|
{sarj_python_lint-1.25.0 → sarj_python_lint-1.25.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
|
{sarj_python_lint-1.25.0 → sarj_python_lint-1.25.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
|
{sarj_python_lint-1.25.0 → sarj_python_lint-1.25.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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/no_secret_in_log.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.25.0 → sarj_python_lint-1.25.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.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/over_mocked_test.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.25.0 → sarj_python_lint-1.25.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
|
{sarj_python_lint-1.25.0 → sarj_python_lint-1.25.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.25.0 → sarj_python_lint-1.25.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
|
{sarj_python_lint-1.25.0 → sarj_python_lint-1.25.2}/src/sarj_python_lint/rules/unused_mock_setup.py
RENAMED
|
File without changes
|
|
File without changes
|