sarj-python-lint 1.107.0__tar.gz → 1.108.0__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.107.0 → sarj_python_lint-1.108.0}/PKG-INFO +1 -1
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/pyproject.toml +1 -1
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/__main__.py +1 -1
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_nominal_project.py +7 -1
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/named_record_at_boundaries.py +1 -1
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_str_enum.py +9 -2
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_typed_mapping_get.py +41 -8
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/.gitignore +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/LICENSE +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/README.md +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/__init__.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/_analysis_session.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/_autofix.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/_autofix_aliases.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/_autofix_annotations.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/_autofix_comments.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/_autofix_declared_contracts.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/_autofix_declared_tests.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/_autofix_docs.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/_autofix_enums.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/_autofix_exhaustiveness.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/_autofix_inert.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/_autofix_parameters.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/_autofix_repeated.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/_autofix_security.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/_autofix_sql_projection.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/_autofix_tests.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/_file_context.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/_filesystem.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/_fixes.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/_parallel.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/_prepared_sources.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/_python_target.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/_ratchet_cli.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/_rule_descriptors.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/_secret_names.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/_source.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/_version.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/application_logging.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/autofix.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/benchmark.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/cast_access.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/interpreter_argv.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/json_boundary.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/py.typed +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/ratchet.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rule_base.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rule_metadata.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/__init__.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_annotation_origins.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_annotation_semantics.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_ast_index.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_ast_names.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_ast_position.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_async_lifecycle.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_binding_inventory.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_closed_helpers.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_comment_narration.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_comments.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_contract_annotation.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_copy_on_write.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_data_union_discriminator.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_declared_contracts.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_dict_key_views.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_docstrings.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_exports.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_fastapi.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_first_party.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_fixed_record.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_imports.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_inert_model_annotation.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_inherited_contract.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_local_alias_fix.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_local_source.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_logging.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_mapping_shape_callbacks.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_namespace_access.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_native_namespace_capability.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_native_object_contracts.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_numeric_proof.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_opaque_contracts.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_paths.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_postgres.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_postgres_ctas.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_project_index.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_prose_budget.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_pydantic_field_contract.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_pytest.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_registry.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_resolved_operation_signature.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_resource_provenance.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_route_shapes.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_runtime_bindings.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_runtime_names.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_runtime_registry.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_service_http_callbacks.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_set_fields.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_sql.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_sql_aggregate_identity.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_sql_explain.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_sql_policy_source.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_static_json_alias.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_store_sql.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_store_writes.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_suppression_comments.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_test_assertions.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_test_composition.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_test_provenance.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_transactional_sql.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_type_guard_symbols.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/async_cleanup_registered_synchronously.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/async_executor_shutdown.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/async_mock_call_without_await_assertion.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/async_subprocess_cancellation_cleanup.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/cancel_owned_task_without_join.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/complex_postgres_query_requires_architecture_review.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/defect_xfail_requires_explicit_strict.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/delete_route_returns_no_content.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/docstring_args_restate_signature.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/docstring_returns_restate_signature.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/duplicate_adjacent_exception_handler.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/duplicate_closed_pure_helper.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/duplicate_pytest_fixture_params.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/excessive_commentary.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/failed_probe_zero_threshold.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/fakes_in_shared_location.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/fastapi_class_router_contract.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/fastapi_explicit_openapi_contract.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/iac_source_coupled_test.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/invalid_pydantic_field_default.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/mock_without_spec.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/nan_hidden_by_builtin_min.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/negative_only_http_status_assertion.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_analytical_aggregation_in_postgres_store.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_any_mapping_types.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_async_client_in_constructor.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_async_function_cache.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_before_validator_input_mutation.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_blanket_suppression.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_broad_keyword_capture.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_comment_cruft.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_conflicting_pydantic_alias_validation.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_conftest_test_module_import.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_contradictory_type_guard.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_copied_inherited_docstring.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_cors_wildcard_with_credentials.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_create_verb_in_post_path.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_custom_control_flow_exception.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_database_programmability.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_defaulted_environment_setting.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_delete_statement.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_discarded_tagged_outcome.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_discarded_validation_result.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_dual_shape_model_field_reader.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_dunder_all.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_duplicate_dunder_all_entry.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_duplicate_field_validator_body.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_dynamic_builtins.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_exception_text_in_500_detail.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_excessive_cognitive_complexity.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_fastapi_on_event.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_file_level_escape_hatch_suppression.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_first_party_private_import.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_fixed_sleep_before_assert.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_fixed_sleep_in_loop.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_folded_bad_request_not_found.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_frozen_after_validator_field_write.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_generic_json_parser.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_generic_single_export_module.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_hasattr.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_hidden_constructor_fallback.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_impossible_pydantic_field_bounds.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_injected_module_loader.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_input_model_mutation.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_interpreter_source_arguments.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_invalid_argument_name_suppression.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_invalid_pydantic_bypass.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_invalid_pydantic_validator_return.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_loguru_exc_info.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_loguru_printf_format.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_mocked_pydantic_value_object.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_mutating_container_transform.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_mutating_input_with_result.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_nested_pydantic_field_validator.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_nullable_dependency_fallback.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_offset_pagination.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_partial_type_is.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_positional_psycopg_row_escape.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_psycopg_execution_outside_injected_owner.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_random_uuid_in_sql.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_raw_connection_in_tests.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_raw_source_text_test_oracle.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_recording_store.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_redundant_attribute_unpacking.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_redundant_literal_description.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_redundant_local_alias.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_redundant_module_alias_exports.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_redundant_sql_alias.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_repeated_string_literal.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_repeated_test_body.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_restated_comment.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_secret_in_log.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_select_star.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_service_behavior_in_settings.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_shallow_container_type_guard.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_shallow_record_type_guard.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_shared_mutable_default.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_slash_collection_root_under_prefix.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_string_concat_in_loop.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_swallowed_asyncio_cancellation.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_sys_path_mutation.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_tautological_expect.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_test_comments.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_test_method_grafting.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_typed_doc_sections.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_unique_violation_message_match.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_unknown_pydantic_validator_field.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_unnecessary_docstring.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_unused_copy_result.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_unused_underscored_keyword_parameter.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_unused_value_marker.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_vague_suppression_description.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_whole_request_response_payload_in_log.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/no_work_verb_get_route.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/opaque_parametrize_case_needs_id.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/over_mocked_test.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/phase_label_comment.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_application_model_joins.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_autospec_for_callable_mock.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_bulk_upsert.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_class_row.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_collection_comprehension.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_constant_time_secret_compare.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_declarative_batch_validation.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_direct_import_module.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_discriminated_model_union.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_fstring_over_concat.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_grouped_settings.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_immutable_module_constant.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_injected_dependency_over_monkeypatch.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_library_fake.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_match_assert_never.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_match_exception_dispatch.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_match_type_dispatch.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_match_value_dispatch.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_module_level_constant.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_monkeypatch_for_process_state_in_test.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_monotonic_for_elapsed_time.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_namedtuple_over_tuple_return.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_native_string_check.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_nominal_id_types.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_non_nullable_collection.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_optional_composite.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_or_pattern.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_precise_object_contract.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_psycopg_executemany.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_pydantic_json_value.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_pydantic_model_assertion.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_pytest_dependency_fixtures.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_pytest_fixture_contract.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_pytest_fixture_injection.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_regex_fullmatch.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_required_constructor_parameters.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_runtime_validation.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_self_documenting_constant.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_self_type_annotation.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_set_isdisjoint.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_struct_over_namedtuple.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_typed_cli.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_typed_settings_field.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_walrus_awaited_none_guard.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_walrus_comprehension_filter.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_walrus_regex_match.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_walrus_stream_loop.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/production_derived_test_cases.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/pytest_fixture_returns_bare_tuple.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/pytest_fixture_returns_closed_resource.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/redundant_class_docstring.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/redundant_docstring.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/redundant_module_docstring.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/redundant_test_constructor_forwarder.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/repeated_kwarg_heavy_call_in_test.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/repeated_static_call_cases.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/repeated_test_composition.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/repeated_unimplemented_test_contract.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/require_constrained_api_integer.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/require_exp_on_jwt_decode.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/require_explicit_contract_implementation.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/require_explicit_psycopg_transaction.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/require_explicit_service_contract.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/require_injectable_retry_sleep.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/require_keyword_only_swap_prone_params.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/require_nodecode_for_splitting_settings_field.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/require_port_for_service.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/require_precise_factory_signature.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/require_public_dependency_contract.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/require_pydantic_for_external_json.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/require_pydantic_for_mapping_shape.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/require_pydantic_for_structured_payload.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/require_pydantic_ordinal_lower_bound.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/restated_test_docstring.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/service_singleton_delegates_to_bulk.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/shared_mutable_pydantic_factory.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/stepdown.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/store_field_update_reuses_upsert.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/store_get_delegates_to_bulk_read.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/store_insert_requires_explicit_conflict_policy.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/store_insert_requires_on_conflict.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/store_mutation_command_fanout.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/subprocess_kill_without_reap.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/test_without_explicit_oracle.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/timestamp_order_requires_tiebreaker.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/trailing_value_narration.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/typed_error_reasons.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/uncontrolled_randomness_in_test.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/unused_mock_setup.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/unused_test_factory_option.py +0 -0
- {sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/suppression_policy.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: sarj-python-lint
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.108.0
|
|
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/
|
|
@@ -103,7 +103,7 @@ def _python_files(p: Path) -> list[Path]:
|
|
|
103
103
|
for directory, directories, filenames in p.walk():
|
|
104
104
|
directories[:] = [name for name in directories if name not in SKIP_DIR_NAMES]
|
|
105
105
|
for name in filenames:
|
|
106
|
-
if not fnmatch(name, "*.py"):
|
|
106
|
+
if not fnmatch(name, "*.py") and not fnmatch(name, "*.pyi"):
|
|
107
107
|
continue
|
|
108
108
|
child = directory / name
|
|
109
109
|
if child.is_file():
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_nominal_project.py
RENAMED
|
@@ -19,6 +19,8 @@ from sarj_python_lint.rules._paths import is_generated
|
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
if TYPE_CHECKING:
|
|
22
|
+
from typing import Never
|
|
23
|
+
|
|
22
24
|
from sarj_python_lint.rules._first_party import FirstPartyFacts
|
|
23
25
|
|
|
24
26
|
|
|
@@ -239,10 +241,14 @@ def _patterns(value: object) -> tuple[str, ...] | None:
|
|
|
239
241
|
return tuple(item for item in value if isinstance(item, str))
|
|
240
242
|
|
|
241
243
|
|
|
244
|
+
def _raise_walk_error(error: OSError) -> Never:
|
|
245
|
+
raise error
|
|
246
|
+
|
|
247
|
+
|
|
242
248
|
def _files(root: Path, pattern: str) -> list[Path]:
|
|
243
249
|
found: list[Path] = []
|
|
244
250
|
try:
|
|
245
|
-
for count, (directory, directories, filenames) in enumerate(root.walk()):
|
|
251
|
+
for count, (directory, directories, filenames) in enumerate(root.walk(on_error=_raise_walk_error)):
|
|
246
252
|
if count >= _MAX_DIRECTORIES or len(found) >= _MAX_FILES:
|
|
247
253
|
# A partial inventory cannot establish uniqueness.
|
|
248
254
|
return []
|
|
@@ -251,7 +251,7 @@ def _resolve_annotation(node: ast.expr | None) -> ast.expr | None:
|
|
|
251
251
|
if isinstance(node, ast.Constant) and isinstance(node.value, str):
|
|
252
252
|
try:
|
|
253
253
|
return ast.parse(node.value.strip(), mode="eval").body
|
|
254
|
-
except SyntaxError:
|
|
254
|
+
except SyntaxError, UnicodeError:
|
|
255
255
|
return None
|
|
256
256
|
return node
|
|
257
257
|
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/prefer_str_enum.py
RENAMED
|
@@ -419,7 +419,7 @@ class PreferStrEnum(Rule):
|
|
|
419
419
|
if tree is None:
|
|
420
420
|
return []
|
|
421
421
|
signals = context.symbol_source
|
|
422
|
-
class_choice_signal =
|
|
422
|
+
class_choice_signal = _has_class_choice_signal(signals)
|
|
423
423
|
wrapper_signal = any(symbol in signals for symbol in ("Annotated", "Optional", "Union"))
|
|
424
424
|
imports = context.imports if class_choice_signal or "assert_never" in signals or wrapper_signal else None
|
|
425
425
|
rejection_imports = _assert_never_imports(context, imports)
|
|
@@ -694,9 +694,16 @@ class PreferStrEnum(Rule):
|
|
|
694
694
|
return diags
|
|
695
695
|
|
|
696
696
|
|
|
697
|
+
def _has_class_choice_signal(source: str) -> bool:
|
|
698
|
+
# Decoded string annotations can spell str through escapes or adjacent literals.
|
|
699
|
+
return ("str" in source or '"' in source or "'" in source) and any(
|
|
700
|
+
name in source.lower() for name in CHOICES_ATTR_NAMES
|
|
701
|
+
)
|
|
702
|
+
|
|
703
|
+
|
|
697
704
|
def _has_str_enum_signal(source: str) -> bool:
|
|
698
705
|
has_string_literal = '"' in source or "'" in source
|
|
699
|
-
if
|
|
706
|
+
if _has_class_choice_signal(source):
|
|
700
707
|
return True
|
|
701
708
|
has_rejection = "raise" in source or "assert_never" in source
|
|
702
709
|
return (
|
|
@@ -2,7 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import ast
|
|
4
4
|
from dataclasses import dataclass
|
|
5
|
-
from pathlib import PurePosixPath
|
|
5
|
+
from pathlib import Path, PurePosixPath
|
|
6
6
|
from typing import TYPE_CHECKING, final, override
|
|
7
7
|
|
|
8
8
|
from sarj_python_lint.rule_base import (
|
|
@@ -22,8 +22,6 @@ from sarj_python_lint.rules.require_pydantic_for_mapping_shape import MappingSha
|
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
if TYPE_CHECKING:
|
|
25
|
-
from pathlib import Path
|
|
26
|
-
|
|
27
25
|
from sarj_python_lint._file_context import PythonFileContext
|
|
28
26
|
|
|
29
27
|
_UNTYPED = frozenset(
|
|
@@ -39,6 +37,7 @@ _UNTYPED = frozenset(
|
|
|
39
37
|
)
|
|
40
38
|
_JSON_PARSERS = frozenset({"json.load", "json.loads"})
|
|
41
39
|
_MAX_DEPTH = 32
|
|
40
|
+
_MAX_RETURN_PROOFS = 512
|
|
42
41
|
_BAD = "def service_name(state: dict[str, object]):\n return state.get('name')\n"
|
|
43
42
|
_GOOD = "from typing import TypedDict\nclass State(TypedDict):\n name: str\ndef service_name(state: State) -> str | None:\n return state.get('name')\n"
|
|
44
43
|
|
|
@@ -195,11 +194,49 @@ class _ImportLocation:
|
|
|
195
194
|
name: str
|
|
196
195
|
|
|
197
196
|
|
|
197
|
+
@dataclass(frozen=True, slots=True, kw_only=True)
|
|
198
|
+
class _ReturnProofKey:
|
|
199
|
+
owner_path: Path
|
|
200
|
+
definition: ast.FunctionDef | ast.AsyncFunctionDef
|
|
201
|
+
seen: frozenset[ast.AST]
|
|
202
|
+
|
|
203
|
+
|
|
198
204
|
class _ReturnContracts:
|
|
199
205
|
def __init__(self, facts: MappingShapeFacts) -> None:
|
|
200
206
|
self.owners = {facts.context.path: facts}
|
|
201
207
|
# Return lookups must leave other rules enough budget to resolve their validators.
|
|
202
208
|
self.local_source = LocalSourceFacts(source_inputs=facts.context.session.source_inputs)
|
|
209
|
+
self._return_proofs: dict[_ReturnProofKey, bool] = {}
|
|
210
|
+
self._return_nodes: dict[Path, dict[ast.FunctionDef | ast.AsyncFunctionDef, tuple[ast.Return, ...]]] = {}
|
|
211
|
+
|
|
212
|
+
def returned_mapping(
|
|
213
|
+
self, owner: MappingShapeFacts, function: ast.FunctionDef | ast.AsyncFunctionDef, seen: frozenset[ast.AST]
|
|
214
|
+
) -> bool:
|
|
215
|
+
key = _ReturnProofKey(owner_path=owner.context.path, definition=function, seen=seen)
|
|
216
|
+
cached = self._return_proofs.get(key)
|
|
217
|
+
if cached is not None:
|
|
218
|
+
return cached
|
|
219
|
+
returned = self.return_nodes(owner, function)
|
|
220
|
+
result = bool(returned) and all(
|
|
221
|
+
node.value is not None and _untyped_receiver(node.value, owner, self, seen=seen | {function})
|
|
222
|
+
for node in returned
|
|
223
|
+
)
|
|
224
|
+
if len(self._return_proofs) < _MAX_RETURN_PROOFS:
|
|
225
|
+
self._return_proofs[key] = result
|
|
226
|
+
return result
|
|
227
|
+
|
|
228
|
+
def return_nodes(
|
|
229
|
+
self, owner: MappingShapeFacts, function: ast.FunctionDef | ast.AsyncFunctionDef
|
|
230
|
+
) -> tuple[ast.Return, ...]:
|
|
231
|
+
path = owner.context.path
|
|
232
|
+
if path not in self._return_nodes:
|
|
233
|
+
grouped: dict[ast.FunctionDef | ast.AsyncFunctionDef, list[ast.Return]] = {}
|
|
234
|
+
for node in owner.context.nodes(ast.Return):
|
|
235
|
+
scope = owner.provenance.scope(node)
|
|
236
|
+
if isinstance(scope, ast.FunctionDef | ast.AsyncFunctionDef):
|
|
237
|
+
grouped.setdefault(scope, []).append(node)
|
|
238
|
+
self._return_nodes[path] = {scope: tuple(nodes) for scope, nodes in grouped.items()}
|
|
239
|
+
return self._return_nodes[path].get(function, ())
|
|
203
240
|
|
|
204
241
|
def function(
|
|
205
242
|
self, expression: ast.expr, facts: MappingShapeFacts, seen: frozenset[ast.AST]
|
|
@@ -343,11 +380,7 @@ def _returned_mapping(
|
|
|
343
380
|
return owner.annotation(function.returns, function.returns, mapping=True) or _erased_annotation(
|
|
344
381
|
function.returns, owner
|
|
345
382
|
)
|
|
346
|
-
|
|
347
|
-
return bool(returned) and all(
|
|
348
|
-
node.value is not None and _untyped_receiver(node.value, owner, contracts, seen=seen | {function})
|
|
349
|
-
for node in returned
|
|
350
|
-
)
|
|
383
|
+
return contracts.returned_mapping(owner, function, seen)
|
|
351
384
|
|
|
352
385
|
|
|
353
386
|
def _name_receiver(
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/_analysis_session.py
RENAMED
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/_autofix_aliases.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/_autofix_annotations.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/_autofix_comments.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/_autofix_enums.py
RENAMED
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/_autofix_inert.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/_autofix_parameters.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/_autofix_repeated.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/_autofix_security.py
RENAMED
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/_autofix_tests.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/_prepared_sources.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/_python_target.py
RENAMED
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/_rule_descriptors.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/application_logging.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/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
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_ast_index.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_ast_names.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_ast_position.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_async_lifecycle.py
RENAMED
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_closed_helpers.py
RENAMED
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_comments.py
RENAMED
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_copy_on_write.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_dict_key_views.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_docstrings.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_exports.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_fastapi.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_first_party.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_fixed_record.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_imports.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_local_alias_fix.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_local_source.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_logging.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_numeric_proof.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_postgres.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_postgres_ctas.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_project_index.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_prose_budget.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_registry.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_route_shapes.py
RENAMED
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_runtime_names.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_set_fields.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_sql_explain.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_store_sql.py
RENAMED
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_store_writes.py
RENAMED
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/src/sarj_python_lint/rules/_test_assertions.py
RENAMED
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.107.0 → sarj_python_lint-1.108.0}/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sarj_python_lint-1.107.0 → sarj_python_lint-1.108.0}/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
|