Python coverage

Overall: 93.8%

FileLinesCovered
/tmp/pytest-of-runner/pytest-0/test_render_index_emits_import0/_rendered_index.py3/3100.0%
benchmarks/__init__.py3/3100.0%
benchmarks/harness/__init__.py6/6100.0%
benchmarks/harness/detect.py25/2889.3%
benchmarks/harness/results.py82/8398.8%
benchmarks/harness/runners.py45/4697.8%
benchmarks/harness/timing.py43/43100.0%
benchmarks/run.py29/8733.3%
lintro/__init__.py1/1100.0%
lintro/__main__.py2/366.7%
lintro/_generated_versions.py2/2100.0%
lintro/_tool_packages.py4/4100.0%
lintro/_tool_versions.py88/10782.2%
lintro/ai/__init__.py6/6100.0%
lintro/ai/apply.py70/8087.5%
lintro/ai/audit.py57/7873.1%
lintro/ai/availability.py53/8165.4%
lintro/ai/budget.py59/59100.0%
lintro/ai/cache.py56/6981.2%
lintro/ai/checkpoints.py211/25283.7%
lintro/ai/cli_schemas.py23/23100.0%
lintro/ai/config.py145/145100.0%
lintro/ai/config_overrides.py125/13493.3%
lintro/ai/config_views.py54/54100.0%
lintro/ai/cost.py25/2696.2%
lintro/ai/display/__init__.py5/5100.0%
lintro/ai/display/fixes.py92/16356.4%
lintro/ai/display/shared.py28/28100.0%
lintro/ai/display/status.py76/76100.0%
lintro/ai/display/streaming.py18/18100.0%
lintro/ai/display/summary.py122/13093.8%
lintro/ai/display/validation.py25/2696.2%
lintro/ai/doctor_checks.py41/8846.6%
lintro/ai/enums/__init__.py8/8100.0%
lintro/ai/enums/ai_transport.py7/7100.0%
lintro/ai/enums/cli_bare_mode.py7/7100.0%
lintro/ai/enums/config_source.py8/8100.0%
lintro/ai/enums/cost_basis.py7/7100.0%
lintro/ai/enums/sanitize_mode.py6/6100.0%
lintro/ai/exceptions.py9/9100.0%
lintro/ai/fallback.py38/4095.0%
lintro/ai/filters.py21/4151.2%
lintro/ai/fix.py157/19480.9%
lintro/ai/fix_context.py81/9486.2%
lintro/ai/fix_params.py28/28100.0%
lintro/ai/fix_parsing.py62/62100.0%
lintro/ai/hook.py24/2596.0%
lintro/ai/integrations/__init__.py0/0100.0%
lintro/ai/integrations/github_pr.py346/42980.7%
lintro/ai/interactive.py142/19871.7%
lintro/ai/interface.py60/6198.4%
lintro/ai/invoke.py25/2696.2%
lintro/ai/json_response.py115/12790.6%
lintro/ai/liveness.py72/7596.0%
lintro/ai/metadata/__init__.py4/4100.0%
lintro/ai/metadata/fix_suggestion_payload.py21/21100.0%
lintro/ai/metadata/helpers.py34/3597.1%
lintro/ai/metadata/summary_payload.py15/15100.0%
lintro/ai/model_pricing.py17/1989.5%
lintro/ai/models/__init__.py4/4100.0%
lintro/ai/models/fix_suggestion.py18/18100.0%
lintro/ai/models/result.py10/10100.0%
lintro/ai/models/summary.py12/12100.0%
lintro/ai/orchestrator.py118/15974.2%
lintro/ai/paths.py42/5182.4%
lintro/ai/pipeline.py175/23674.2%
lintro/ai/prompts/__init__.py5/5100.0%
lintro/ai/prompts/_loader.py13/13100.0%
lintro/ai/prompts/fix.py6/6100.0%
lintro/ai/prompts/post_fix.py3/3100.0%
lintro/ai/prompts/review.py50/50100.0%
lintro/ai/prompts/summary.py4/4100.0%
lintro/ai/prompts/templates/__init__.py0/0100.0%
lintro/ai/provider_enum.py6/6100.0%
lintro/ai/provider_info.py10/10100.0%
lintro/ai/providers/__init__.py35/3794.6%
lintro/ai/providers/anthropic.py163/20280.7%
lintro/ai/providers/async_stream_result.py21/21100.0%
lintro/ai/providers/base.py129/14191.5%
lintro/ai/providers/capabilities.py8/8100.0%
lintro/ai/providers/claude_auth.py71/7792.2%
lintro/ai/providers/cli_contract_check.py78/8295.1%
lintro/ai/providers/cli_contracts.py36/36100.0%
lintro/ai/providers/cli_transport.py260/27594.5%
lintro/ai/providers/constants.py3/3100.0%
lintro/ai/providers/cursor.py115/12492.7%
lintro/ai/providers/openai.py143/20270.8%
lintro/ai/providers/response.py11/11100.0%
lintro/ai/providers/stream_result.py21/21100.0%
lintro/ai/raw_response.py76/7996.2%
lintro/ai/refinement.py71/8187.7%
lintro/ai/registry.py34/34100.0%
lintro/ai/rerun.py40/4687.0%
lintro/ai/resolved_ai_config.py20/20100.0%
lintro/ai/retry.py38/5076.0%
lintro/ai/review/__init__.py20/20100.0%
lintro/ai/review/agent_prompts.py120/12397.6%
lintro/ai/review/checklist/__init__.py7/7100.0%
lintro/ai/review/checklist/loader.py81/8991.0%
lintro/ai/review/checklist_builtin.py3/3100.0%
lintro/ai/review/checklist_display.py35/35100.0%
lintro/ai/review/checklist_registry.py45/4795.7%
lintro/ai/review/checklist_selector.py43/43100.0%
lintro/ai/review/chunker/__init__.py3/3100.0%
lintro/ai/review/chunker/github_action_paths.py33/3789.2%
lintro/ai/review/chunker/grouping.py275/30091.7%
lintro/ai/review/chunker/shell_run_parse.py416/45890.8%
lintro/ai/review/chunker/workflow_scripts.py127/14885.8%
lintro/ai/review/classifier.py118/12495.2%
lintro/ai/review/cli_limits.py47/4897.9%
lintro/ai/review/constants.py9/9100.0%
lintro/ai/review/context/__init__.py3/3100.0%
lintro/ai/review/context/collection.py185/21187.7%
lintro/ai/review/context/diff_parse.py258/29388.1%
lintro/ai/review/context/git_ops.py37/4877.1%
lintro/ai/review/context/pr_metadata.py48/5882.8%
lintro/ai/review/custom_agent_runner.py72/8782.8%
lintro/ai/review/custom_agents.py227/23297.8%
lintro/ai/review/display.py80/8396.4%
lintro/ai/review/enums/__init__.py14/14100.0%
lintro/ai/review/enums/agent_prompt_scope_kind.py7/7100.0%
lintro/ai/review/enums/changed_file_status.py9/9100.0%
lintro/ai/review/enums/checklist_display.py3/3100.0%
lintro/ai/review/enums/custom_agent_mode.py3/3100.0%
lintro/ai/review/enums/evidence_style.py6/6100.0%
lintro/ai/review/enums/file_domain.py3/3100.0%
lintro/ai/review/enums/file_skip_reason.py12/12100.0%
lintro/ai/review/enums/finding_kind.py5/5100.0%
lintro/ai/review/enums/finding_match_outcome.py7/7100.0%
lintro/ai/review/enums/finding_status.py5/5100.0%
lintro/ai/review/enums/fix_mode.py5/5100.0%
lintro/ai/review/enums/lifecycle_stage.py7/7100.0%
lintro/ai/review/enums/review_category.py3/3100.0%
lintro/ai/review/enums/review_context_error_code.py21/21100.0%
lintro/ai/review/enums/review_strictness.py3/3100.0%
lintro/ai/review/enums/review_verdict.py7/7100.0%
lintro/ai/review/enums/suggestion_rejection.py12/12100.0%
lintro/ai/review/error_contract.py19/19100.0%
lintro/ai/review/error_display.py52/6283.9%
lintro/ai/review/errors_taxonomy.py70/70100.0%
lintro/ai/review/exceptions.py27/3187.1%
lintro/ai/review/file_language.py45/45100.0%
lintro/ai/review/file_selection.py17/17100.0%
lintro/ai/review/finding_matcher.py129/129100.0%
lintro/ai/review/finding_parser.py52/5889.7%
lintro/ai/review/github.py220/23394.4%
lintro/ai/review/github_constants.py16/16100.0%
lintro/ai/review/github_errors.py55/6288.7%
lintro/ai/review/github_lifecycle.py146/15196.7%
lintro/ai/review/github_render.py143/15592.3%
lintro/ai/review/github_review_body.py104/10797.2%
lintro/ai/review/github_sticky.py408/41398.8%
lintro/ai/review/glob_utils.py77/77100.0%
lintro/ai/review/group_labels.py7/7100.0%
lintro/ai/review/inline_fix.py51/51100.0%
lintro/ai/review/lint_bridge.py44/5383.0%
lintro/ai/review/models/__init__.py26/26100.0%
lintro/ai/review/models/_coerce.py13/13100.0%
lintro/ai/review/models/agent_prompt_scope.py13/13100.0%
lintro/ai/review/models/changed_file.py20/2580.0%
lintro/ai/review/models/checklist_answer.py8/8100.0%
lintro/ai/review/models/checklist_item.py12/12100.0%
lintro/ai/review/models/chunking_result.py13/13100.0%
lintro/ai/review/models/file_assessment.py7/7100.0%
lintro/ai/review/models/file_classification.py7/7100.0%
lintro/ai/review/models/finding_match_result.py15/15100.0%
lintro/ai/review/models/finding_occurrence.py24/2596.0%
lintro/ai/review/models/finding_record.py93/9498.9%
lintro/ai/review/models/inline_post_failure.py14/14100.0%
lintro/ai/review/models/pr_metadata.py9/9100.0%
lintro/ai/review/models/review_chunk.py10/10100.0%
lintro/ai/review/models/review_context.py15/15100.0%
lintro/ai/review/models/review_finding.py38/38100.0%
lintro/ai/review/models/review_metadata.py38/38100.0%
lintro/ai/review/models/review_result.py25/25100.0%
lintro/ai/review/models/review_state.py29/29100.0%
lintro/ai/review/models/review_summary.py11/11100.0%
lintro/ai/review/models/review_thread.py7/7100.0%
lintro/ai/review/models/run_record.py83/8795.4%
lintro/ai/review/models/skipped_file.py13/13100.0%
lintro/ai/review/models/suggested_change.py30/30100.0%
lintro/ai/review/models/summary_bullet.py7/7100.0%
lintro/ai/review/models/verdict_reasoning.py11/11100.0%
lintro/ai/review/narrative_parser.py66/6897.1%
lintro/ai/review/orchestrator.py501/53094.5%
lintro/ai/review/output.py17/2085.0%
lintro/ai/review/path_utils.py147/15594.8%
lintro/ai/review/paths_registry.py87/9195.6%
lintro/ai/review/pipeline.py20/20100.0%
lintro/ai/review/progress.py85/8896.6%
lintro/ai/review/prompt_builder.py24/24100.0%
lintro/ai/review/prompt_redaction.py9/9100.0%
lintro/ai/review/response_recovery.py28/28100.0%
lintro/ai/review/review_state_codec.py88/9295.7%
lintro/ai/review/sanitize.py8/8100.0%
lintro/ai/review/sensitivity.py61/7779.2%
lintro/ai/review/severity_gate.py30/30100.0%
lintro/ai/review/verdict.py38/3997.4%
lintro/ai/risk.py72/8188.9%
lintro/ai/sanitize.py23/23100.0%
lintro/ai/sarif_bridge.py41/5771.9%
lintro/ai/secrets.py13/13100.0%
lintro/ai/summary.py103/13079.2%
lintro/ai/telemetry.py20/20100.0%
lintro/ai/token_budget.py16/16100.0%
lintro/ai/transcript.py128/14588.3%
lintro/ai/transport.py68/68100.0%
lintro/ai/undo.py118/15476.6%
lintro/ai/validation.py117/12792.1%
lintro/api/__init__.py2/2100.0%
lintro/api/core.py54/6879.4%
lintro/api/pipeline.py45/4991.8%
lintro/cli.py160/16497.6%
lintro/cli_utils/__init__.py0/0100.0%
lintro/cli_utils/command_chainer.py79/79100.0%
lintro/cli_utils/commands/__init__.py6/6100.0%
lintro/cli_utils/commands/check.py49/5196.1%
lintro/cli_utils/commands/completions.py11/11100.0%
lintro/cli_utils/commands/config.py116/14082.9%
lintro/cli_utils/commands/doctor.py289/35980.5%
lintro/cli_utils/commands/format.py40/40100.0%
lintro/cli_utils/commands/init.py109/16167.7%
lintro/cli_utils/commands/install.py111/19955.8%
lintro/cli_utils/commands/licenses.py47/5192.2%
lintro/cli_utils/commands/list_tools.py79/13558.5%
lintro/cli_utils/commands/mcp.py11/11100.0%
lintro/cli_utils/commands/review.py224/26783.9%
lintro/cli_utils/commands/setup.py82/16150.9%
lintro/cli_utils/commands/test.py69/7394.5%
lintro/cli_utils/commands/versions.py9/4818.8%
lintro/cli_utils/diff_option.py12/12100.0%
lintro/cli_utils/install_output.py30/3196.8%
lintro/cli_utils/onboarding.py14/2556.0%
lintro/config/__init__.py4/4100.0%
lintro/config/config_loader.py240/27288.2%
lintro/config/enforce_config.py5/5100.0%
lintro/config/execution_config.py17/17100.0%
lintro/config/licenses_config.py53/5596.4%
lintro/config/lintro_config.py51/51100.0%
lintro/config/output_config.py4/4100.0%
lintro/config/review_config.py72/7497.3%
lintro/config/score_config.py7/7100.0%
lintro/config/tool_config.py6/6100.0%
lintro/config/tool_config_generator.py117/14580.7%
lintro/enums/__init__.py0/0100.0%
lintro/enums/action.py13/1586.7%
lintro/enums/advisory_tools_value.py5/5100.0%
lintro/enums/bandit_levels.py26/26100.0%
lintro/enums/boolean_string.py6/6100.0%
lintro/enums/checklist_display.py8/8100.0%
lintro/enums/confidence_level.py10/10100.0%
lintro/enums/config_format.py12/12100.0%
lintro/enums/config_key.py5/5100.0%
lintro/enums/custom_agent_mode.py7/7100.0%
lintro/enums/display_column.py12/12100.0%
lintro/enums/doc_url_template.py27/27100.0%
lintro/enums/env_bool.py4/4100.0%
lintro/enums/execution_class.py12/12100.0%
lintro/enums/file_domain.py14/14100.0%
lintro/enums/git_command.py6/6100.0%
lintro/enums/git_ref.py4/4100.0%
lintro/enums/group_by.py16/16100.0%
lintro/enums/hadolint_enums.py34/3694.4%
lintro/enums/hyphenated_str_enum.py6/6100.0%
lintro/enums/idiom_review_mode.py6/6100.0%
lintro/enums/install_context.py34/34100.0%
lintro/enums/install_outcome.py19/19100.0%
lintro/enums/node_manager_source.py7/7100.0%
lintro/enums/output_format.py20/20100.0%
lintro/enums/pytest_enums.py48/48100.0%
lintro/enums/review_category.py13/13100.0%
lintro/enums/review_strictness.py8/8100.0%
lintro/enums/risk_level.py10/10100.0%
lintro/enums/semgrep_enums.py14/14100.0%
lintro/enums/severity_level.py17/17100.0%
lintro/enums/tool_name.py49/49100.0%
lintro/enums/tool_option_key.py5/5100.0%
lintro/enums/tool_order.py14/14100.0%
lintro/enums/tool_run_status.py19/19100.0%
lintro/enums/tool_status.py9/9100.0%
lintro/enums/tool_type.py15/2075.0%
lintro/enums/tools_value.py11/11100.0%
lintro/enums/uppercase_str_enum.py6/6100.0%
lintro/enums/yamllint_format.py14/1782.4%
lintro/exceptions/__init__.py0/0100.0%
lintro/exceptions/errors.py9/9100.0%
lintro/formatters/__init__.py4/4100.0%
lintro/formatters/core/__init__.py2/2100.0%
lintro/formatters/core/format_registry.py42/4887.5%
lintro/formatters/formatter.py96/10096.0%
lintro/formatters/styles/__init__.py8/8100.0%
lintro/formatters/styles/csv.py15/15100.0%
lintro/formatters/styles/github.py50/5296.2%
lintro/formatters/styles/grid.py24/2788.9%
lintro/formatters/styles/html.py16/16100.0%
lintro/formatters/styles/json.py23/23100.0%
lintro/formatters/styles/markdown.py15/15100.0%
lintro/formatters/styles/plain.py14/14100.0%
lintro/licenses/__init__.py2/2100.0%
lintro/licenses/attribution.py23/23100.0%
lintro/licenses/ecosystems/__init__.py3/3100.0%
lintro/licenses/ecosystems/npm.py105/12584.0%
lintro/licenses/ecosystems/python.py48/4998.0%
lintro/licenses/models.py24/24100.0%
lintro/licenses/policy_engine.py48/4998.0%
lintro/licenses/report.py60/6395.2%
lintro/licenses/spdx.py156/17788.1%
lintro/mcp/__init__.py16/16100.0%
lintro/mcp/annotations.py7/7100.0%
lintro/mcp/enums/__init__.py3/3100.0%
lintro/mcp/enums/mcp_error_code.py8/8100.0%
lintro/mcp/errors.py41/41100.0%
lintro/mcp/registry.py67/6898.5%
lintro/mcp/server.py76/8490.5%
lintro/mcp/toolkits/__init__.py5/5100.0%
lintro/mcp/toolkits/introspection.py91/91100.0%
lintro/mcp/toolkits/lint.py56/56100.0%
lintro/mcp/toolkits/review.py145/15394.8%
lintro/mcp/toolkits/runner.py48/48100.0%
lintro/mcp/toolkits/snapshot.py76/7996.2%
lintro/mcp/validation.py28/28100.0%
lintro/models/__init__.py0/0100.0%
lintro/models/core/__init__.py6/6100.0%
lintro/models/core/base_tool_options.py6/6100.0%
lintro/models/core/black_options.py8/8100.0%
lintro/models/core/node_manager_commands.py7/7100.0%
lintro/models/core/pytest_options.py22/22100.0%
lintro/models/core/ruff_options.py16/16100.0%
lintro/models/core/run_artifact.py24/24100.0%
lintro/models/core/sarif_enrichment.py7/7100.0%
lintro/models/core/tool_result.py33/33100.0%
lintro/models/core/yamllint_options.py6/6100.0%
lintro/parsers/__init__.py9/1560.0%
lintro/parsers/actionlint/__init__.py3/3100.0%
lintro/parsers/actionlint/actionlint_issue.py8/8100.0%
lintro/parsers/actionlint/actionlint_parser.py27/27100.0%
lintro/parsers/astro_check/__init__.py3/3100.0%
lintro/parsers/astro_check/astro_check_issue.py8/8100.0%
lintro/parsers/astro_check/astro_check_parser.py46/5583.6%
lintro/parsers/bandit/__init__.py3/3100.0%
lintro/parsers/bandit/bandit_issue.py21/21100.0%
lintro/parsers/bandit/bandit_parser.py39/5078.0%
lintro/parsers/base_issue.py35/35100.0%
lintro/parsers/base_parser.py75/75100.0%
lintro/parsers/black/__init__.py3/3100.0%
lintro/parsers/black/black_issue.py11/11100.0%
lintro/parsers/black/black_parser.py41/5771.9%
lintro/parsers/cargo_audit/__init__.py0/0100.0%
lintro/parsers/cargo_audit/cargo_audit_issue.py18/1994.7%
lintro/parsers/cargo_audit/cargo_audit_parser.py65/7685.5%
lintro/parsers/cargo_deny/__init__.py3/3100.0%
lintro/parsers/cargo_deny/cargo_deny_issue.py32/32100.0%
lintro/parsers/cargo_deny/cargo_deny_parser.py71/8781.6%
lintro/parsers/clippy/__init__.py3/3100.0%
lintro/parsers/clippy/clippy_issue.py11/11100.0%
lintro/parsers/clippy/clippy_parser.py53/6779.1%
lintro/parsers/commitlint/__init__.py3/3100.0%
lintro/parsers/commitlint/commitlint_issue.py10/10100.0%
lintro/parsers/commitlint/commitlint_parser.py35/35100.0%
lintro/parsers/dotenv_linter/__init__.py3/3100.0%
lintro/parsers/dotenv_linter/dotenv_linter_issue.py10/10100.0%
lintro/parsers/dotenv_linter/dotenv_linter_parser.py18/18100.0%
lintro/parsers/gitleaks/__init__.py3/3100.0%
lintro/parsers/gitleaks/gitleaks_issue.py29/29100.0%
lintro/parsers/gitleaks/gitleaks_parser.py57/6095.0%
lintro/parsers/golangci_lint/__init__.py3/3100.0%
lintro/parsers/golangci_lint/golangci_lint_issue.py10/10100.0%
lintro/parsers/golangci_lint/golangci_lint_parser.py48/5488.9%
lintro/parsers/hadolint/__init__.py4/944.4%
lintro/parsers/hadolint/hadolint_issue.py8/8100.0%
lintro/parsers/hadolint/hadolint_parser.py19/19100.0%
lintro/parsers/html_validate/__init__.py3/3100.0%
lintro/parsers/html_validate/html_validate_issue.py11/11100.0%
lintro/parsers/html_validate/html_validate_parser.py32/3786.5%
lintro/parsers/idiom_review/__init__.py4/4100.0%
lintro/parsers/idiom_review/idiom_review_issue.py14/14100.0%
lintro/parsers/idiom_review/idiom_review_parser.py86/9095.6%
lintro/parsers/markdownlint/__init__.py3/3100.0%
lintro/parsers/markdownlint/markdownlint_issue.py8/8100.0%
lintro/parsers/markdownlint/markdownlint_parser.py31/3393.9%
lintro/parsers/mypy/__init__.py3/3100.0%
lintro/parsers/mypy/mypy_issue.py9/9100.0%
lintro/parsers/mypy/mypy_parser.py56/7178.9%
lintro/parsers/osv_scanner/__init__.py6/6100.0%
lintro/parsers/osv_scanner/osv_scanner_issue.py23/23100.0%
lintro/parsers/osv_scanner/osv_scanner_parser.py101/12282.8%
lintro/parsers/osv_scanner/suppression_models.py13/13100.0%
lintro/parsers/osv_scanner/suppression_parser.py46/4993.9%
lintro/parsers/osv_scanner/suppression_status.py5/5100.0%
lintro/parsers/oxfmt/__init__.py3/3100.0%
lintro/parsers/oxfmt/oxfmt_issue.py8/8100.0%
lintro/parsers/oxfmt/oxfmt_parser.py26/2989.7%
lintro/parsers/oxlint/__init__.py3/3100.0%
lintro/parsers/oxlint/oxlint_issue.py8/8100.0%
lintro/parsers/oxlint/oxlint_parser.py48/5981.4%
lintro/parsers/pip_audit/__init__.py3/3100.0%
lintro/parsers/pip_audit/pip_audit_issue.py20/20100.0%
lintro/parsers/pip_audit/pip_audit_parser.py48/5194.1%
lintro/parsers/prettier/__init__.py3/3100.0%
lintro/parsers/prettier/prettier_issue.py8/8100.0%
lintro/parsers/prettier/prettier_parser.py19/2286.4%
lintro/parsers/pydoclint/__init__.py3/3100.0%
lintro/parsers/pydoclint/pydoclint_issue.py9/9100.0%
lintro/parsers/pydoclint/pydoclint_parser.py33/3691.7%
lintro/parsers/pytest/__init__.py3/3100.0%
lintro/parsers/pytest/format_parsers.py148/17286.0%
lintro/parsers/pytest/models.py12/12100.0%
lintro/parsers/pytest/pytest_issue.py11/11100.0%
lintro/parsers/pytest/pytest_parser.py14/14100.0%
lintro/parsers/pytest/summary_extractor.py30/3293.8%
lintro/parsers/ruff/__init__.py4/4100.0%
lintro/parsers/ruff/ruff_format_issue.py10/10100.0%
lintro/parsers/ruff/ruff_issue.py10/10100.0%
lintro/parsers/ruff/ruff_parser.py61/7680.3%
lintro/parsers/rustfmt/__init__.py0/0100.0%
lintro/parsers/rustfmt/rustfmt_issue.py10/10100.0%
lintro/parsers/rustfmt/rustfmt_parser.py32/3494.1%
lintro/parsers/sarif/__init__.py3/3100.0%
lintro/parsers/sarif/sarif_issue.py13/13100.0%
lintro/parsers/sarif/sarif_parser.py100/10892.6%
lintro/parsers/semgrep/__init__.py3/3100.0%
lintro/parsers/semgrep/semgrep_issue.py25/25100.0%
lintro/parsers/semgrep/semgrep_parser.py57/6390.5%
lintro/parsers/shellcheck/__init__.py3/3100.0%
lintro/parsers/shellcheck/shellcheck_issue.py11/11100.0%
lintro/parsers/shellcheck/shellcheck_parser.py37/4092.5%
lintro/parsers/shfmt/__init__.py3/3100.0%
lintro/parsers/shfmt/shfmt_issue.py10/10100.0%
lintro/parsers/shfmt/shfmt_parser.py43/4693.5%
lintro/parsers/sqlfluff/__init__.py3/3100.0%
lintro/parsers/sqlfluff/sqlfluff_issue.py11/11100.0%
lintro/parsers/sqlfluff/sqlfluff_parser.py37/3994.9%
lintro/parsers/streaming.py79/8790.8%
lintro/parsers/stylelint/__init__.py3/3100.0%
lintro/parsers/stylelint/stylelint_issue.py7/7100.0%
lintro/parsers/stylelint/stylelint_parser.py79/9186.8%
lintro/parsers/svelte_check/__init__.py3/3100.0%
lintro/parsers/svelte_check/svelte_check_issue.py9/9100.0%
lintro/parsers/svelte_check/svelte_check_parser.py86/9986.9%
lintro/parsers/taplo/__init__.py4/4100.0%
lintro/parsers/taplo/taplo_issue.py9/9100.0%
lintro/parsers/taplo/taplo_parser.py41/41100.0%
lintro/parsers/trufflehog/__init__.py4/4100.0%
lintro/parsers/trufflehog/trufflehog_errors.py80/8693.0%
lintro/parsers/trufflehog/trufflehog_issue.py27/27100.0%
lintro/parsers/trufflehog/trufflehog_parser.py68/7491.9%
lintro/parsers/tsc/__init__.py3/3100.0%
lintro/parsers/tsc/tsc_issue.py9/9100.0%
lintro/parsers/tsc/tsc_parser.py53/5793.0%
lintro/parsers/vale/__init__.py3/3100.0%
lintro/parsers/vale/vale_issue.py13/13100.0%
lintro/parsers/vale/vale_parser.py34/3597.1%
lintro/parsers/vue_tsc/__init__.py3/3100.0%
lintro/parsers/vue_tsc/vue_tsc_issue.py7/7100.0%
lintro/parsers/vue_tsc/vue_tsc_parser.py53/5793.0%
lintro/parsers/yamllint/__init__.py3/3100.0%
lintro/parsers/yamllint/yamllint_issue.py9/9100.0%
lintro/parsers/yamllint/yamllint_parser.py28/3775.7%
lintro/plugins/__init__.py4/4100.0%
lintro/plugins/_builtin_index.py3/3100.0%
lintro/plugins/base.py144/14996.6%
lintro/plugins/discovery.py203/21992.7%
lintro/plugins/execution_preparation.py109/11892.4%
lintro/plugins/file_discovery.py63/6794.0%
lintro/plugins/file_processor.py68/6998.6%
lintro/plugins/protocol.py40/4393.0%
lintro/plugins/registry.py79/8296.3%
lintro/plugins/subprocess_executor.py116/13188.5%
lintro/plugins/subprocess_failure.py19/2382.6%
lintro/tools/__init__.py5/5100.0%
lintro/tools/core/__init__.py0/0100.0%
lintro/tools/core/command_builders.py185/20291.6%
lintro/tools/core/config_injection.py40/4883.3%
lintro/tools/core/install_context.py60/6296.8%
lintro/tools/core/install_hints.py18/2766.7%
lintro/tools/core/install_lock.py24/5345.3%
lintro/tools/core/install_plan.py30/30100.0%
lintro/tools/core/install_quickfix.py50/5296.2%
lintro/tools/core/install_strategies/__init__.py5/5100.0%
lintro/tools/core/install_strategies/base.py14/14100.0%
lintro/tools/core/install_strategies/binary_strategy.py24/2692.3%
lintro/tools/core/install_strategies/cargo_strategy.py21/2295.5%
lintro/tools/core/install_strategies/environment.py30/30100.0%
lintro/tools/core/install_strategies/node_project.py101/10299.0%
lintro/tools/core/install_strategies/npm_strategy.py69/7197.2%
lintro/tools/core/install_strategies/package_names.py14/1593.3%
lintro/tools/core/install_strategies/pip_strategy.py43/4595.6%
lintro/tools/core/install_strategies/registry.py12/1485.7%
lintro/tools/core/install_strategies/rustup_strategy.py21/2295.5%
lintro/tools/core/line_length_checker.py65/6797.0%
lintro/tools/core/manifest_models.py23/23100.0%
lintro/tools/core/node_fallback.py51/5396.2%
lintro/tools/core/option_spec.py90/9198.9%
lintro/tools/core/option_validators.py59/59100.0%
lintro/tools/core/runtime_discovery.py113/12987.6%
lintro/tools/core/timeout_utils.py26/26100.0%
lintro/tools/core/tool_installer.py206/25580.8%
lintro/tools/core/tool_manager.py62/7286.1%
lintro/tools/core/tool_registry.py127/15581.9%
lintro/tools/core/version_checking.py56/5798.2%
lintro/tools/core/version_parsing.py128/13992.1%
lintro/tools/core/version_requirements.py16/2369.6%
lintro/tools/definitions/__init__.py0/0100.0%
lintro/tools/definitions/_ts_checker_base.py52/6185.2%
lintro/tools/definitions/_ts_checker_command.py49/5098.0%
lintro/tools/definitions/_ts_checker_execution.py140/19472.2%
lintro/tools/definitions/actionlint.py36/7448.6%
lintro/tools/definitions/astro_check.py107/13479.9%
lintro/tools/definitions/bandit.py143/18975.7%
lintro/tools/definitions/black.py56/14040.0%
lintro/tools/definitions/cargo_audit.py71/7397.3%
lintro/tools/definitions/cargo_deny.py40/7454.1%
lintro/tools/definitions/clippy.py42/11636.2%
lintro/tools/definitions/commitlint.py63/6695.5%
lintro/tools/definitions/dotenv_linter.py116/12989.9%
lintro/tools/definitions/gitleaks.py115/12195.0%
lintro/tools/definitions/golangci_lint.py124/14386.7%
lintro/tools/definitions/hadolint.py93/9795.9%
lintro/tools/definitions/html_validate.py70/7198.6%
lintro/tools/definitions/idiom_review.py95/10491.3%
lintro/tools/definitions/markdownlint.py75/10174.3%
lintro/tools/definitions/mypy.py171/18891.0%
lintro/tools/definitions/osv_scanner.py150/15795.5%
lintro/tools/definitions/oxfmt.py121/14185.8%
lintro/tools/definitions/oxlint.py161/17492.5%
lintro/tools/definitions/oxlint_doctor.py55/7672.4%
lintro/tools/definitions/pip_audit.py133/13896.4%
lintro/tools/definitions/prettier.py155/20376.4%
lintro/tools/definitions/pydoclint.py45/4795.7%
lintro/tools/definitions/pytest.py104/14372.7%
lintro/tools/definitions/ruff.py89/9296.7%
lintro/tools/definitions/rustfmt.py98/11089.1%
lintro/tools/definitions/semgrep.py124/13790.5%
lintro/tools/definitions/shellcheck.py91/9397.8%
lintro/tools/definitions/shfmt.py120/13191.6%
lintro/tools/definitions/sqlfluff.py125/13791.2%
lintro/tools/definitions/stylelint.py111/12489.5%
lintro/tools/definitions/svelte_check.py85/11176.6%
lintro/tools/definitions/taplo.py147/15396.1%
lintro/tools/definitions/trufflehog.py158/16496.3%
lintro/tools/definitions/tsc.py62/62100.0%
lintro/tools/definitions/vale.py65/6895.6%
lintro/tools/definitions/vue_tsc.py44/44100.0%
lintro/tools/definitions/yamllint.py57/19030.0%
lintro/tools/idiom_review/__init__.py5/955.6%
lintro/tools/idiom_review/engine.py68/7689.5%
lintro/tools/idiom_review/prompts.py21/21100.0%
lintro/tools/idiom_review/signatures.py53/5694.6%
lintro/tools/implementations/__init__.py4/4100.0%
lintro/tools/implementations/pytest/__init__.py3/3100.0%
lintro/tools/implementations/pytest/addopts_coverage.py78/9284.8%
lintro/tools/implementations/pytest/collection.py50/11145.0%
lintro/tools/implementations/pytest/coverage_processor.py16/6823.5%
lintro/tools/implementations/pytest/formatters.py89/13765.0%
lintro/tools/implementations/pytest/markers.py14/6421.9%
lintro/tools/implementations/pytest/output.py56/7970.9%
lintro/tools/implementations/pytest/output_parsers.py31/5952.5%
lintro/tools/implementations/pytest/pytest_command_builder.py92/13170.2%
lintro/tools/implementations/pytest/pytest_config.py73/7992.4%
lintro/tools/implementations/pytest/pytest_error_handler.py9/2339.1%
lintro/tools/implementations/pytest/pytest_executor.py28/4463.6%
lintro/tools/implementations/pytest/pytest_handlers.py118/118100.0%
lintro/tools/implementations/pytest/pytest_option_validators.py50/7864.1%
lintro/tools/implementations/pytest/pytest_output_processor.py6/6100.0%
lintro/tools/implementations/pytest/pytest_result_processor.py22/22100.0%
lintro/tools/implementations/pytest/test_analytics.py44/5481.5%
lintro/tools/implementations/ruff/__init__.py4/4100.0%
lintro/tools/implementations/ruff/check.py60/6198.4%
lintro/tools/implementations/ruff/commands.py55/6782.1%
lintro/tools/implementations/ruff/fix.py106/10799.1%
lintro/utils/__init__.py0/0100.0%
lintro/utils/ascii_normalize_cli.py39/39100.0%
lintro/utils/async_tool_executor.py99/10693.4%
lintro/utils/config.py129/14191.5%
lintro/utils/config_constants.py19/19100.0%
lintro/utils/config_priority.py79/8395.2%
lintro/utils/config_reporting.py60/60100.0%
lintro/utils/config_validation.py38/4388.4%
lintro/utils/console/__init__.py7/7100.0%
lintro/utils/console/constants.py16/1888.9%
lintro/utils/console/logger.py193/20395.1%
lintro/utils/console/pre_execution_summary.py36/4481.8%
lintro/utils/display_helpers.py75/75100.0%
lintro/utils/doctor_report.py180/19393.3%
lintro/utils/env.py10/1283.3%
lintro/utils/environment/__init__.py15/15100.0%
lintro/utils/environment/_protocol.py8/8100.0%
lintro/utils/environment/ci_environment.py11/1764.7%
lintro/utils/environment/collectors.py137/17976.5%
lintro/utils/environment/container_detection.py16/2272.7%
lintro/utils/environment/environment_report.py23/23100.0%
lintro/utils/environment/go_info.py11/1478.6%
lintro/utils/environment/lintro_info.py12/1963.2%
lintro/utils/environment/node_info.py13/1681.2%
lintro/utils/environment/project_info.py12/1866.7%
lintro/utils/environment/python_info.py13/1681.2%
lintro/utils/environment/renderer.py13/6021.7%
lintro/utils/environment/ruby_info.py11/1478.6%
lintro/utils/environment/rust_info.py12/1580.0%
lintro/utils/environment/system_info.py15/2268.2%
lintro/utils/execution/__init__.py4/4100.0%
lintro/utils/execution/advisory.py87/8898.9%
lintro/utils/execution/exit_codes.py34/34100.0%
lintro/utils/execution/fix_retry.py23/2688.5%
lintro/utils/execution/parallel_executor.py51/51100.0%
lintro/utils/execution/result_shaping.py37/3897.4%
lintro/utils/execution/run_aggregation.py30/30100.0%
lintro/utils/execution/run_context.py13/13100.0%
lintro/utils/execution/run_preflight.py48/7464.9%
lintro/utils/execution/run_renderer.py138/17379.8%
lintro/utils/execution/tool_configuration.py155/16196.3%
lintro/utils/file_cache.py87/10781.3%
lintro/utils/findings.py73/7597.3%
lintro/utils/formatting.py65/7487.8%
lintro/utils/git_diff.py142/17282.6%
lintro/utils/health_score.py80/80100.0%
lintro/utils/json_output.py51/51100.0%
lintro/utils/jsonc.py141/15491.6%
lintro/utils/logger_setup.py13/13100.0%
lintro/utils/module_size.py54/5696.4%
lintro/utils/native_parsers.py119/16572.1%
lintro/utils/node_deps.py78/8888.6%
lintro/utils/output/__init__.py5/5100.0%
lintro/utils/output/constants.py5/5100.0%
lintro/utils/output/file_writer.py200/21194.8%
lintro/utils/output/helpers.py9/9100.0%
lintro/utils/output/manager.py170/20383.7%
lintro/utils/output/parser_registration.py47/4995.9%
lintro/utils/output/parser_registry.py31/31100.0%
lintro/utils/output/sarif/__init__.py3/3100.0%
lintro/utils/output/sarif/bridge.py18/18100.0%
lintro/utils/output/sarif/document.py139/14297.9%
lintro/utils/path_filtering.py115/12393.5%
lintro/utils/path_utils.py82/8695.3%
lintro/utils/post_checks.py90/10189.1%
lintro/utils/project_detection.py73/8783.9%
lintro/utils/result_formatters.py104/18456.5%
lintro/utils/streaming_output.py94/10094.0%
lintro/utils/summary_tables.py192/23880.7%
lintro/utils/tool_config_info.py3/3100.0%
lintro/utils/tool_executor.py138/15092.0%
lintro/utils/tool_metadata.py44/4793.6%
lintro/utils/tool_options.py40/4490.9%
lintro/utils/tool_utils.py4/4100.0%
lintro/utils/tsconfig.py188/23380.7%
lintro/utils/tsconfig_info.py22/22100.0%
lintro/utils/unified_config.py8/8100.0%
lintro/utils/unified_config_manager.py56/56100.0%
scripts/build/build_macos.py37/14625.3%
scripts/ci/_generator/__init__.py6/6100.0%
scripts/ci/_generator/errors.py2/2100.0%
scripts/ci/_generator/inputs.py138/15489.6%
scripts/ci/_generator/outputs.py56/6290.3%
scripts/ci/_generator/seed.py47/5290.4%
scripts/ci/ai_tools_arg_pin.py50/5198.0%
scripts/ci/ai_tools_image_pin.py24/4060.0%
scripts/ci/check-dogfood-skips.py160/18287.9%
scripts/ci/check-release-version-skew.py168/18491.3%
scripts/ci/classify-lint-timeout.py89/9197.8%
scripts/ci/classify-osv-results.py40/6264.5%
scripts/ci/classify-release-tag.py22/2395.7%
scripts/ci/classify_review_outcome.py131/13894.9%
scripts/ci/compute-new-manifest-tools.py45/9248.9%
scripts/ci/format-changelog.py241/24897.2%
scripts/ci/generate-builtin-tool-index.py83/9488.3%
scripts/ci/generate-tool-versions.py78/8097.5%
scripts/ci/npm/stage_binaries.py40/4393.0%
scripts/ci/npm/sync_npm_version.py65/9270.7%
scripts/ci/site/fix-markdown-docs.py59/21527.4%
scripts/ci/site/migrate-docs-content.py113/15672.4%
scripts/ci/smoke-test-binary.py131/15584.5%
scripts/ci/sync-pinned-release-image.py78/11369.0%
scripts/ci/testing/render-coverage-json-html.py31/5062.0%
scripts/ci/update-security-support.py81/8991.0%
scripts/ci/verify-manifest-tools.py165/19186.4%
scripts/generate-checklist-corpus-schema.py46/4797.9%
scripts/utils/delete-previous-lintro-comments.py30/7042.9%
scripts/utils/merge_pr_comment.py48/5194.1%
tests/__init__.py0/0100.0%
tests/cli/__init__.py0/0100.0%
tests/cli/conftest.py8/1457.1%
tests/cli/test_check_score.py29/29100.0%
tests/cli/test_cli.py89/9098.9%
tests/cli/test_config_command.py85/85100.0%
tests/cli/test_diff_option.py72/72100.0%
tests/cli/test_init_command.py74/74100.0%
tests/cli/test_json_stdout_contract.py134/13599.3%
tests/config/__init__.py0/0100.0%
tests/config/test_config_loader.py158/158100.0%
tests/config/test_init_command.py66/66100.0%
tests/config/test_lintro_config.py50/50100.0%
tests/config/test_tool_config_generator.py186/186100.0%
tests/conftest.py37/4680.4%
tests/constants.py13/13100.0%
tests/contract/__init__.py0/0100.0%
tests/contract/conftest.py16/1794.1%
tests/contract/gating.py16/1794.1%
tests/contract/test_cli_flag_surface.py27/3871.1%
tests/contract/test_cli_invocation_smoke.py21/5042.0%
tests/formatters/__init__.py0/0100.0%
tests/formatters/test_formatters.py54/54100.0%
tests/licenses/__init__.py0/0100.0%
tests/licenses/conftest.py15/15100.0%
tests/licenses/test_attribution.py19/19100.0%
tests/licenses/test_command.py29/29100.0%
tests/licenses/test_config.py27/27100.0%
tests/licenses/test_ecosystems.py119/119100.0%
tests/licenses/test_policy_engine.py64/64100.0%
tests/licenses/test_report.py21/21100.0%
tests/licenses/test_spdx.py59/59100.0%
tests/scripts/__init__.py0/0100.0%
tests/scripts/ci/site/test_fix_markdown_docs.py28/28100.0%
tests/scripts/ci/test_check_release_version_skew.py125/125100.0%
tests/scripts/ci/test_classify_release_tag.py45/45100.0%
tests/scripts/ci/test_migrate_docs_content.py86/86100.0%
tests/scripts/ci/test_run_with_memory_trace.py46/46100.0%
tests/scripts/ci/test_sync_pinned_release_image.py81/81100.0%
tests/scripts/ci/testing/test_stage_coverage_html.py43/43100.0%
tests/scripts/conftest.py8/1553.3%
tests/scripts/generate_tool_versions/__init__.py0/0100.0%
tests/scripts/generate_tool_versions/conftest.py44/4597.8%
tests/scripts/generate_tool_versions/test_inputs.py97/97100.0%
tests/scripts/generate_tool_versions/test_main.py61/61100.0%
tests/scripts/generate_tool_versions/test_outputs.py32/32100.0%
tests/scripts/generate_tool_versions/test_real_repo.py16/16100.0%
tests/scripts/generate_tool_versions/test_seed.py27/27100.0%
tests/scripts/test_ai_contract_tests_workflow.py84/8697.7%
tests/scripts/test_ai_tools_arg_pin.py57/5996.6%
tests/scripts/test_build_macos.py34/34100.0%
tests/scripts/test_check_dogfood_skips.py142/14498.6%
tests/scripts/test_ci_post_pr_comment.py95/9699.0%
tests/scripts/test_classify_lint_timeout.py99/10198.0%
tests/scripts/test_classify_osv_results.py94/9697.9%
tests/scripts/test_classify_review_outcome.py171/17398.8%
tests/scripts/test_code_quality_gate_scripts.py208/208100.0%
tests/scripts/test_collect_oom_evidence.py133/133100.0%
tests/scripts/test_compute_new_manifest_tools.py199/20099.5%
tests/scripts/test_cosign_sign_images.py95/9699.0%
tests/scripts/test_coverage_pipeline_integration.py72/72100.0%
tests/scripts/test_delete_previous_lintro_comments.py44/4695.7%
tests/scripts/test_docker_backfill_validation.py36/36100.0%
tests/scripts/test_docker_ci_scripts.py326/326100.0%
tests/scripts/test_docker_entrypoint.py39/39100.0%
tests/scripts/test_dogfood_changed_files.py116/116100.0%
tests/scripts/test_extract_test_summary.py93/93100.0%
tests/scripts/test_extract_version.py25/25100.0%
tests/scripts/test_format_changelog.py151/15398.7%
tests/scripts/test_generate_builtin_tool_index.py96/9898.0%
tests/scripts/test_github_comment_utilities.py0/0100.0%
tests/scripts/test_github_comment_utilities_encode.py49/49100.0%
tests/scripts/test_github_comment_utilities_extract.py41/41100.0%
tests/scripts/test_github_comment_utilities_find.py49/49100.0%
tests/scripts/test_install_cursor_agent.py34/34100.0%
tests/scripts/test_memory_sampler.py155/155100.0%
tests/scripts/test_merge_pr_comment.py117/117100.0%
tests/scripts/test_npm_publish_packages.py251/251100.0%
tests/scripts/test_release_bump_only.py141/141100.0%
tests/scripts/test_resolve_allowed_endpoints.py80/80100.0%
tests/scripts/test_resolve_lintro_image.py102/102100.0%
tests/scripts/test_run_ai_review.py358/36099.4%
tests/scripts/test_shell_scripts.py176/176100.0%
tests/scripts/test_smoke_test_binary.py114/11599.1%
tests/scripts/test_stage_binaries.py64/64100.0%
tests/scripts/test_sync_npm_version.py73/73100.0%
tests/scripts/test_update_security_support.py82/8497.6%
tests/scripts/test_verify_image_manifest_tools.py113/113100.0%
tests/scripts/test_verify_manifest_tools.py165/16699.4%
tests/scripts/test_vuln_suppression_scripts.py84/84100.0%
tests/test_documentation.py188/21089.5%
tests/test_samples_helpers.py13/1492.9%
tests/unit/__init__.py0/0100.0%
tests/unit/ai/__init__.py0/0100.0%
tests/unit/ai/conftest.py100/10595.2%
tests/unit/ai/prompts/test_prompt_loader.py55/55100.0%
tests/unit/ai/prompts/test_review_prompts.py80/80100.0%
tests/unit/ai/providers/__init__.py0/0100.0%
tests/unit/ai/providers/test_anthropic.py124/124100.0%
tests/unit/ai/providers/test_base.py38/3997.4%
tests/unit/ai/providers/test_capabilities.py50/50100.0%
tests/unit/ai/providers/test_claude_auth.py123/123100.0%
tests/unit/ai/providers/test_cli_capability_guard.py214/21599.5%
tests/unit/ai/providers/test_cli_contract_check.py115/115100.0%
tests/unit/ai/providers/test_cli_exit_code.py43/4497.7%
tests/unit/ai/providers/test_cli_flag_gating.py140/140100.0%
tests/unit/ai/providers/test_cli_liveness.py96/10492.3%
tests/unit/ai/providers/test_cli_stdin_prompt.py56/56100.0%
tests/unit/ai/providers/test_factory.py60/60100.0%
tests/unit/ai/providers/test_openai.py147/147100.0%
tests/unit/ai/providers/test_prose_envelope_recovery.py72/72100.0%
tests/unit/ai/providers/test_provider_lifecycle.py149/17386.1%
tests/unit/ai/providers/test_stream.py119/12099.2%
tests/unit/ai/review/conftest.py51/5789.5%
tests/unit/ai/review/review_fixtures.py10/10100.0%
tests/unit/ai/review/test_addressed_lifecycle_1912.py313/31599.4%
tests/unit/ai/review/test_agent_prompts.py214/214100.0%
tests/unit/ai/review/test_architecture_characterization.py149/149100.0%
tests/unit/ai/review/test_architecture_characterization_1972.py143/14499.3%
tests/unit/ai/review/test_checklist_builtin.py27/27100.0%
tests/unit/ai/review/test_checklist_corpus_schema.py102/10399.0%
tests/unit/ai/review/test_checklist_display.py35/35100.0%
tests/unit/ai/review/test_checklist_loader.py71/71100.0%
tests/unit/ai/review/test_checklist_registry.py47/47100.0%
tests/unit/ai/review/test_checklist_selector.py112/112100.0%
tests/unit/ai/review/test_chunker_grouping.py75/75100.0%
tests/unit/ai/review/test_chunker_import_compat.py23/23100.0%
tests/unit/ai/review/test_chunker_sampling.py98/98100.0%
tests/unit/ai/review/test_chunker_workflow_scripts.py50/50100.0%
tests/unit/ai/review/test_classifier.py13/13100.0%
tests/unit/ai/review/test_cli_large_diff_1967.py178/178100.0%
tests/unit/ai/review/test_cli_limits.py50/50100.0%
tests/unit/ai/review/test_context_collect.py370/370100.0%
tests/unit/ai/review/test_context_integration.py97/10295.1%
tests/unit/ai/review/test_context_parse.py172/172100.0%
tests/unit/ai/review/test_custom_agent_runner.py154/154100.0%
tests/unit/ai/review/test_custom_agents.py115/115100.0%
tests/unit/ai/review/test_display.py49/49100.0%
tests/unit/ai/review/test_error_contract.py78/78100.0%
tests/unit/ai/review/test_error_display.py27/27100.0%
tests/unit/ai/review/test_error_sticky_1954.py130/130100.0%
tests/unit/ai/review/test_errors_taxonomy.py128/128100.0%
tests/unit/ai/review/test_file_language.py37/37100.0%
tests/unit/ai/review/test_file_selection.py33/33100.0%
tests/unit/ai/review/test_finding_matcher.py201/201100.0%
tests/unit/ai/review/test_github.py380/380100.0%
tests/unit/ai/review/test_github_badge_tables.py71/71100.0%
tests/unit/ai/review/test_github_review_body.py138/138100.0%
tests/unit/ai/review/test_github_sticky_mission_control.py220/220100.0%
tests/unit/ai/review/test_github_sticky_state.py163/163100.0%
tests/unit/ai/review/test_glob_utils.py41/41100.0%
tests/unit/ai/review/test_inline_finding_format.py140/140100.0%
tests/unit/ai/review/test_inline_posting_1911.py173/173100.0%
tests/unit/ai/review/test_lint_bridge.py31/31100.0%
tests/unit/ai/review/test_merge.py38/38100.0%
tests/unit/ai/review/test_mock_parity_1951.py153/153100.0%
tests/unit/ai/review/test_narrative_parser.py68/6998.6%
tests/unit/ai/review/test_orchestrator.py376/376100.0%
tests/unit/ai/review/test_orchestrator_hardening.py101/101100.0%
tests/unit/ai/review/test_output.py32/32100.0%
tests/unit/ai/review/test_package_exports.py45/4795.7%
tests/unit/ai/review/test_path_utils.py103/103100.0%
tests/unit/ai/review/test_paths_registry.py46/46100.0%
tests/unit/ai/review/test_pipeline.py43/43100.0%
tests/unit/ai/review/test_pipeline_integration.py16/16100.0%
tests/unit/ai/review/test_prompt_builder.py63/63100.0%
tests/unit/ai/review/test_prose_recovery.py118/118100.0%
tests/unit/ai/review/test_response_recovery.py45/45100.0%
tests/unit/ai/review/test_review_boundary_fencing.py114/114100.0%
tests/unit/ai/review/test_review_command_json_error.py50/50100.0%
tests/unit/ai/review/test_review_state_codec.py152/152100.0%
tests/unit/ai/review/test_rich_review_outputs.py95/9699.0%
tests/unit/ai/review/test_sensitivity.py41/41100.0%
tests/unit/ai/review/test_severity_gate.py100/100100.0%
tests/unit/ai/review/test_verdict.py61/61100.0%
tests/unit/ai/test_ai_config_validation.py29/29100.0%
tests/unit/ai/test_annotations.py91/91100.0%
tests/unit/ai/test_apply.py207/207100.0%
tests/unit/ai/test_async_retry.py59/59100.0%
tests/unit/ai/test_audit.py79/79100.0%
tests/unit/ai/test_availability.py37/37100.0%
tests/unit/ai/test_budget.py128/13197.7%
tests/unit/ai/test_cache.py101/101100.0%
tests/unit/ai/test_checkpoints.py324/324100.0%
tests/unit/ai/test_claude_cli_provider.py87/87100.0%
tests/unit/ai/test_cli_schemas.py49/49100.0%
tests/unit/ai/test_codex_cli_provider.py47/47100.0%
tests/unit/ai/test_config.py148/148100.0%
tests/unit/ai/test_config_overrides.py266/266100.0%
tests/unit/ai/test_config_resolution.py105/105100.0%
tests/unit/ai/test_config_views.py46/46100.0%
tests/unit/ai/test_config_wiring.py109/109100.0%
tests/unit/ai/test_cost.py60/60100.0%
tests/unit/ai/test_cursor_provider.py218/21999.5%
tests/unit/ai/test_display.py10/10100.0%
tests/unit/ai/test_display_status.py97/97100.0%
tests/unit/ai/test_doctor_liveness.py71/7792.2%
tests/unit/ai/test_enums.py57/57100.0%
tests/unit/ai/test_exceptions.py10/10100.0%
tests/unit/ai/test_fallback.py158/158100.0%
tests/unit/ai/test_filters.py129/129100.0%
tests/unit/ai/test_fix_context.py41/41100.0%
tests/unit/ai/test_fix_generation_basic.py133/13995.7%
tests/unit/ai/test_fix_generation_batch.py31/31100.0%
tests/unit/ai/test_fix_generation_edge.py87/8997.8%
tests/unit/ai/test_fix_parsing.py90/90100.0%
tests/unit/ai/test_fix_reading.py50/50100.0%
tests/unit/ai/test_github_pr.py305/305100.0%
tests/unit/ai/test_hook.py68/68100.0%
tests/unit/ai/test_interactive.py194/194100.0%
tests/unit/ai/test_interface.py123/123100.0%
tests/unit/ai/test_invoke.py48/48100.0%
tests/unit/ai/test_json_response.py42/42100.0%
tests/unit/ai/test_liveness.py117/117100.0%
tests/unit/ai/test_metadata.py51/51100.0%
tests/unit/ai/test_model_pricing.py12/12100.0%
tests/unit/ai/test_models.py66/66100.0%
tests/unit/ai/test_orchestrator_check.py90/90100.0%
tests/unit/ai/test_orchestrator_edge.py85/85100.0%
tests/unit/ai/test_orchestrator_fix.py108/108100.0%
tests/unit/ai/test_orchestrator_multi.py149/15099.3%
tests/unit/ai/test_paths.py43/43100.0%
tests/unit/ai/test_pipeline.py185/185100.0%
tests/unit/ai/test_prompts.py94/94100.0%
tests/unit/ai/test_raw_response.py81/81100.0%
tests/unit/ai/test_refinement.py121/121100.0%
tests/unit/ai/test_registry.py82/82100.0%
tests/unit/ai/test_rerun.py100/10199.0%
tests/unit/ai/test_retry.py100/10199.0%
tests/unit/ai/test_review_progress.py78/78100.0%
tests/unit/ai/test_risk.py103/103100.0%
tests/unit/ai/test_sanitize.py50/50100.0%
tests/unit/ai/test_sanitize_mode.py32/32100.0%
tests/unit/ai/test_sarif_artifact.py89/89100.0%
tests/unit/ai/test_secrets.py47/47100.0%
tests/unit/ai/test_stream_fallback.py80/8693.0%
tests/unit/ai/test_streaming.py65/6797.0%
tests/unit/ai/test_summary_formatting.py74/74100.0%
tests/unit/ai/test_summary_generation.py101/101100.0%
tests/unit/ai/test_telemetry.py46/46100.0%
tests/unit/ai/test_token_budget.py37/37100.0%
tests/unit/ai/test_transcript.py141/14299.3%
tests/unit/ai/test_transport_config.py46/46100.0%
tests/unit/ai/test_transport_profiles.py72/72100.0%
tests/unit/ai/test_undo.py65/65100.0%
tests/unit/ai/test_validation_applied.py151/151100.0%
tests/unit/ai/test_validation_core.py93/93100.0%
tests/unit/api/__init__.py0/0100.0%
tests/unit/api/test_api.py51/5298.1%
tests/unit/api/test_pipeline_checkpoints.py79/79100.0%
tests/unit/benchmarks/__init__.py0/0100.0%
tests/unit/benchmarks/test_results.py46/46100.0%
tests/unit/benchmarks/test_run.py17/17100.0%
tests/unit/benchmarks/test_runners.py67/67100.0%
tests/unit/benchmarks/test_timing.py49/49100.0%
tests/unit/cli/__init__.py0/0100.0%
tests/unit/cli/conftest.py26/3868.4%
tests/unit/cli/test_check_command.py108/108100.0%
tests/unit/cli/test_cli.py126/126100.0%
tests/unit/cli/test_cli_commands.py33/33100.0%
tests/unit/cli/test_cli_commands_more.py36/36100.0%
tests/unit/cli/test_cli_lintro_group.py152/152100.0%
tests/unit/cli/test_cli_programmatic.py38/38100.0%
tests/unit/cli/test_completions_command.py26/26100.0%
tests/unit/cli/test_format_command.py147/147100.0%
tests/unit/cli/test_review_command.py507/507100.0%
tests/unit/cli_utils/__init__.py0/0100.0%
tests/unit/cli_utils/command_chainer/__init__.py0/0100.0%
tests/unit/cli_utils/command_chainer/conftest.py18/2090.0%
tests/unit/cli_utils/command_chainer/test_execute.py68/68100.0%
tests/unit/cli_utils/command_chainer/test_group_commands.py24/24100.0%
tests/unit/cli_utils/command_chainer/test_init.py23/23100.0%
tests/unit/cli_utils/command_chainer/test_integration.py20/20100.0%
tests/unit/cli_utils/command_chainer/test_normalize_args.py24/24100.0%
tests/unit/cli_utils/command_chainer/test_should_chain.py19/19100.0%
tests/unit/cli_utils/commands/test_doctor_command.py184/18599.5%
tests/unit/cli_utils/commands/test_format.py113/113100.0%
tests/unit/cli_utils/commands/test_install_command.py154/154100.0%
tests/unit/cli_utils/commands/test_setup_command.py147/147100.0%
tests/unit/cli_utils/test_install_output.py43/43100.0%
tests/unit/compatibility/conftest.py0/0100.0%
tests/unit/compatibility/test_compatibility_ruff_black.py78/8097.5%
tests/unit/config/conftest.py8/1650.0%
tests/unit/config/test_config_compatibility.py23/23100.0%
tests/unit/config/test_config_cwd_cache.py34/34100.0%
tests/unit/config/test_config_loader.py68/68100.0%
tests/unit/config/test_config_loader_more.py14/14100.0%
tests/unit/config/test_config_loaders.py97/97100.0%
tests/unit/config/test_config_tool_specific.py67/67100.0%
tests/unit/config/test_enforce_config.py32/32100.0%
tests/unit/config/test_execution_config.py62/62100.0%
tests/unit/config/test_lintro_config.py109/109100.0%
tests/unit/config/test_output_config.py42/42100.0%
tests/unit/config/test_review_config.py148/148100.0%
tests/unit/config/test_unified_config.py42/42100.0%
tests/unit/conftest.py51/5986.4%
tests/unit/core/conftest.py0/0100.0%
tests/unit/core/test_tool_result_metadata.py33/33100.0%
tests/unit/core/test_version_requirements.py154/15798.1%
tests/unit/enums/__init__.py0/0100.0%
tests/unit/enums/test_bandit_levels.py30/30100.0%
tests/unit/enums/test_base.py49/49100.0%
tests/unit/enums/test_enum_normalizers.py34/34100.0%
tests/unit/enums/test_output_format.py20/20100.0%
tests/unit/enums/test_severity_level.py19/19100.0%
tests/unit/enums/test_tool_name.py24/24100.0%
tests/unit/exceptions/conftest.py0/0100.0%
tests/unit/exceptions/test_exceptions.py32/32100.0%
tests/unit/formatters/__init__.py1/1100.0%
tests/unit/formatters/conftest.py7/1163.6%
tests/unit/formatters/styles/__init__.py1/1100.0%
tests/unit/formatters/styles/conftest.py34/34100.0%
tests/unit/formatters/styles/test_csv.py26/26100.0%
tests/unit/formatters/styles/test_html.py28/28100.0%
tests/unit/formatters/styles/test_json.py44/44100.0%
tests/unit/formatters/styles/test_markdown.py29/29100.0%
tests/unit/formatters/styles/test_plain.py34/34100.0%
tests/unit/formatters/styles/test_style_common.py16/16100.0%
tests/unit/formatters/styles/test_style_csv.py20/20100.0%
tests/unit/formatters/styles/test_style_github.py62/62100.0%
tests/unit/formatters/styles/test_style_grid.py18/18100.0%
tests/unit/formatters/styles/test_style_html.py25/25100.0%
tests/unit/formatters/styles/test_style_json.py47/47100.0%
tests/unit/formatters/styles/test_style_markdown.py21/21100.0%
tests/unit/formatters/styles/test_style_plain.py21/21100.0%
tests/unit/formatters/test_format_fix_results.py46/46100.0%
tests/unit/formatters/test_format_issues.py137/137100.0%
tests/unit/formatters/test_format_registry.py75/75100.0%
tests/unit/logging/conftest.py0/0100.0%
tests/unit/logging/test_console_logger.py51/51100.0%
tests/unit/logging/test_console_logger_more.py41/41100.0%
tests/unit/mcp/__init__.py0/0100.0%
tests/unit/mcp/test_annotations.py12/1392.3%
tests/unit/mcp/test_availability.py26/26100.0%
tests/unit/mcp/test_cli_command.py31/31100.0%
tests/unit/mcp/test_errors.py89/89100.0%
tests/unit/mcp/test_registry.py61/61100.0%
tests/unit/mcp/test_server_builtins.py16/16100.0%
tests/unit/mcp/test_server_session.py124/12797.6%
tests/unit/mcp/test_toolkit_introspection.py146/14998.0%
tests/unit/mcp/test_toolkit_lint.py154/15798.1%
tests/unit/mcp/test_toolkit_review.py257/26098.8%
tests/unit/mcp/test_toolkit_snapshot.py88/88100.0%
tests/unit/mcp/test_validation.py64/64100.0%
tests/unit/models/test_run_artifact.py40/40100.0%
tests/unit/output/conftest.py0/0100.0%
tests/unit/output/test_output_manager_reports.py85/85100.0%
tests/unit/parsers/base_parser/__init__.py0/0100.0%
tests/unit/parsers/base_parser/test_continuation_lines.py28/28100.0%
tests/unit/parsers/base_parser/test_extract_fields.py68/68100.0%
tests/unit/parsers/base_parser/test_safe_parse.py46/4797.9%
tests/unit/parsers/base_parser/test_strip_ansi.py22/22100.0%
tests/unit/parsers/base_parser/test_validate_fields.py42/42100.0%
tests/unit/parsers/conftest.py9/1656.2%
tests/unit/parsers/gitleaks_parser/__init__.py0/0100.0%
tests/unit/parsers/gitleaks_parser/test_edge_cases.py27/27100.0%
tests/unit/parsers/gitleaks_parser/test_field_parsing.py34/34100.0%
tests/unit/parsers/gitleaks_parser/test_issue_model.py16/16100.0%
tests/unit/parsers/gitleaks_parser/test_plugin_parsing.py66/6897.1%
tests/unit/parsers/gitleaks_parser/test_valid_output.py28/28100.0%
tests/unit/parsers/pydoclint_parser/__init__.py0/0100.0%
tests/unit/parsers/pydoclint_parser/conftest.py12/12100.0%
tests/unit/parsers/pydoclint_parser/test_edge_cases.py53/53100.0%
tests/unit/parsers/pydoclint_parser/test_field_extraction.py39/39100.0%
tests/unit/parsers/pydoclint_parser/test_invalid_input.py24/24100.0%
tests/unit/parsers/pydoclint_parser/test_issue_model.py30/30100.0%
tests/unit/parsers/pytest/test_pytest_parser.py168/168100.0%
tests/unit/parsers/shellcheck_parser/__init__.py0/0100.0%
tests/unit/parsers/shellcheck_parser/conftest.py12/12100.0%
tests/unit/parsers/shellcheck_parser/test_edge_cases.py46/46100.0%
tests/unit/parsers/shellcheck_parser/test_field_extraction.py36/36100.0%
tests/unit/parsers/shellcheck_parser/test_invalid_input.py17/17100.0%
tests/unit/parsers/shellcheck_parser/test_issue_model.py14/14100.0%
tests/unit/parsers/shellcheck_parser/test_multiple_issues.py18/18100.0%
tests/unit/parsers/streaming/__init__.py0/0100.0%
tests/unit/parsers/streaming/conftest.py28/28100.0%
tests/unit/parsers/streaming/test_collect.py19/19100.0%
tests/unit/parsers/streaming/test_json_array.py24/24100.0%
tests/unit/parsers/streaming/test_json_lines.py44/44100.0%
tests/unit/parsers/streaming/test_parser_class.py40/40100.0%
tests/unit/parsers/streaming/test_text_lines.py26/26100.0%
tests/unit/parsers/test_actionlint_parser.py21/21100.0%
tests/unit/parsers/test_astro_check_parser.py78/78100.0%
tests/unit/parsers/test_bandit_parser.py88/88100.0%
tests/unit/parsers/test_base_issue.py143/143100.0%
tests/unit/parsers/test_base_parser.py174/17599.4%
tests/unit/parsers/test_black_parser.py34/34100.0%
tests/unit/parsers/test_cargo_audit_parser.py52/52100.0%
tests/unit/parsers/test_cargo_deny_parser.py48/48100.0%
tests/unit/parsers/test_clippy_parser.py50/50100.0%
tests/unit/parsers/test_commitlint_parser.py65/65100.0%
tests/unit/parsers/test_dotenv_linter_parser.py73/73100.0%
tests/unit/parsers/test_golangci_lint_parser.py76/76100.0%
tests/unit/parsers/test_hadolint_parser.py90/90100.0%
tests/unit/parsers/test_html_validate_parser.py59/59100.0%
tests/unit/parsers/test_idiom_review_parser.py79/79100.0%
tests/unit/parsers/test_markdownlint_parser.py88/88100.0%
tests/unit/parsers/test_mypy_parser.py58/58100.0%
tests/unit/parsers/test_osv_scanner_parser.py89/89100.0%
tests/unit/parsers/test_osv_suppression_parser.py87/87100.0%
tests/unit/parsers/test_oxfmt_parser.py84/84100.0%
tests/unit/parsers/test_oxlint_parser.py107/107100.0%
tests/unit/parsers/test_pip_audit_parser.py56/56100.0%
tests/unit/parsers/test_prettier_parser.py45/45100.0%
tests/unit/parsers/test_pydoclint_parser.py34/34100.0%
tests/unit/parsers/test_ruff_parser_additional.py53/53100.0%
tests/unit/parsers/test_ruff_parser_more.py23/23100.0%
tests/unit/parsers/test_rustfmt_parser.py44/44100.0%
tests/unit/parsers/test_sarif_parser.py92/92100.0%
tests/unit/parsers/test_semgrep_parser.py164/164100.0%
tests/unit/parsers/test_shfmt_parser.py101/101100.0%
tests/unit/parsers/test_sqlfluff_parser.py113/113100.0%
tests/unit/parsers/test_stylelint_parser.py84/84100.0%
tests/unit/parsers/test_svelte_check_parser.py163/163100.0%
tests/unit/parsers/test_taplo_parser.py144/144100.0%
tests/unit/parsers/test_tsc_parser.py142/142100.0%
tests/unit/parsers/test_vue_tsc_parser.py78/78100.0%
tests/unit/parsers/test_yamllint_parser.py53/53100.0%
tests/unit/parsers/trufflehog_parser/__init__.py0/0100.0%
tests/unit/parsers/trufflehog_parser/conftest.py11/11100.0%
tests/unit/parsers/trufflehog_parser/test_edge_cases.py26/26100.0%
tests/unit/parsers/trufflehog_parser/test_field_extraction.py43/43100.0%
tests/unit/parsers/trufflehog_parser/test_invalid_input.py13/13100.0%
tests/unit/parsers/trufflehog_parser/test_issue_model.py20/20100.0%
tests/unit/parsers/trufflehog_parser/test_scan_errors.py87/87100.0%
tests/unit/parsers/vale_parser/__init__.py0/0100.0%
tests/unit/parsers/vale_parser/conftest.py11/11100.0%
tests/unit/parsers/vale_parser/test_edge_cases.py38/38100.0%
tests/unit/parsers/vale_parser/test_field_extraction.py39/39100.0%
tests/unit/parsers/vale_parser/test_invalid_input.py22/22100.0%
tests/unit/parsers/vale_parser/test_issue_model.py30/30100.0%
tests/unit/plugins/base/__init__.py0/0100.0%
tests/unit/plugins/base/conftest.py12/1392.3%
tests/unit/plugins/base/test_execution.py205/20699.5%
tests/unit/plugins/base/test_options.py72/72100.0%
tests/unit/plugins/base/test_subprocess.py86/86100.0%
tests/unit/plugins/base/test_subprocess_failure.py16/16100.0%
tests/unit/plugins/base/test_subprocess_result.py38/38100.0%
tests/unit/plugins/base/test_subprocess_streaming.py112/112100.0%
tests/unit/plugins/conftest.py55/6190.2%
tests/unit/plugins/test_base_plugin_config.py69/69100.0%
tests/unit/plugins/test_copy_for_execution.py99/10099.0%
tests/unit/plugins/test_discovery.py251/251100.0%
tests/unit/plugins/test_entry_point_plugins.py167/17197.7%
tests/unit/plugins/test_execution_preparation.py30/30100.0%
tests/unit/plugins/test_file_processor.py137/137100.0%
tests/unit/plugins/test_registry.py152/15399.3%
tests/unit/plugins/test_reset_options.py45/45100.0%
tests/unit/pytest/conftest.py0/0100.0%
tests/unit/pytest/test_pytest_cli_commands.py109/109100.0%
tests/unit/pytest/test_pytest_cli_options.py87/87100.0%
tests/unit/pytest/test_pytest_handlers.py187/187100.0%
tests/unit/pytest/test_pytest_programmatic_api.py55/55100.0%
tests/unit/security/__init__.py0/0100.0%
tests/unit/security/conftest.py7/977.8%
tests/unit/security/test_json_edge_cases.py147/14899.3%
tests/unit/security/test_path_traversal.py132/13498.5%
tests/unit/security/test_subprocess_injection.py77/77100.0%
tests/unit/test_ai_tools_image.py90/90100.0%
tests/unit/test_core_ai_import_boundary.py69/7690.8%
tests/unit/test_cursor_environment.py109/109100.0%
tests/unit/test_labeler_rules.py32/32100.0%
tests/unit/test_no_version_literals.py23/2592.0%
tests/unit/test_package_imports.py33/3789.2%
tests/unit/test_pre_commit_hooks.py56/56100.0%
tests/unit/test_semgrep_isolation.py111/111100.0%
tests/unit/test_tool_completeness.py143/14697.9%
tests/unit/test_workflow_wiring.py953/97497.8%
tests/unit/tools/assertions/__init__.py1/1100.0%
tests/unit/tools/assertions/conftest.py15/3148.4%
tests/unit/tools/astro_check/__init__.py0/0100.0%
tests/unit/tools/astro_check/conftest.py9/9100.0%
tests/unit/tools/astro_check/test_execution.py78/78100.0%
tests/unit/tools/astro_check/test_non_interactive.py111/111100.0%
tests/unit/tools/astro_check/test_options.py54/54100.0%
tests/unit/tools/bandit/__init__.py0/0100.0%
tests/unit/tools/bandit/test_bandit_no_files_output.py27/27100.0%
tests/unit/tools/bandit/test_bandit_parse_failure.py26/26100.0%
tests/unit/tools/base/conftest.py0/0100.0%
tests/unit/tools/cargo_audit/__init__.py0/0100.0%
tests/unit/tools/cargo_audit/test_cargo_audit_plugin.py86/86100.0%
tests/unit/tools/cargo_deny/__init__.py0/0100.0%
tests/unit/tools/cargo_deny/test_cargo_deny_plugin.py35/35100.0%
tests/unit/tools/commitlint/__init__.py0/0100.0%
tests/unit/tools/commitlint/conftest.py9/9100.0%
tests/unit/tools/commitlint/test_execution.py75/75100.0%
tests/unit/tools/commitlint/test_options.py19/19100.0%
tests/unit/tools/conftest.py45/9547.4%
tests/unit/tools/core/__init__.py0/0100.0%
tests/unit/tools/core/conftest.py5/955.6%
tests/unit/tools/core/test_command_builders.py514/51899.2%
tests/unit/tools/core/test_install_context.py75/75100.0%
tests/unit/tools/core/test_install_outcomes.py199/199100.0%
tests/unit/tools/core/test_install_quickfix.py43/43100.0%
tests/unit/tools/core/test_install_strategies.py262/262100.0%
tests/unit/tools/core/test_line_length_checker.py101/101100.0%
tests/unit/tools/core/test_node_cwd_wiring.py60/60100.0%
tests/unit/tools/core/test_node_package_policy.py282/282100.0%
tests/unit/tools/core/test_option_spec.py58/58100.0%
tests/unit/tools/core/test_option_validators.py99/99100.0%
tests/unit/tools/core/test_package_names.py40/40100.0%
tests/unit/tools/core/test_runtime_discovery.py99/99100.0%
tests/unit/tools/core/test_tool_installer.py260/260100.0%
tests/unit/tools/core/test_tool_options_spec.py37/37100.0%
tests/unit/tools/core/test_tool_registry.py136/136100.0%
tests/unit/tools/core/test_version_checking.py89/89100.0%
tests/unit/tools/dotenv_linter/__init__.py0/0100.0%
tests/unit/tools/dotenv_linter/conftest.py8/8100.0%
tests/unit/tools/dotenv_linter/test_dotenv_linter_plugin.py85/85100.0%
tests/unit/tools/executor/conftest.py0/0100.0%
tests/unit/tools/executor/test_advisory_tool_selection.py33/33100.0%
tests/unit/tools/executor/test_execute_render_split.py127/13097.7%
tests/unit/tools/executor/test_tool_configuration_enabled.py258/26099.2%
tests/unit/tools/executor/test_tool_executor.py313/31599.4%
tests/unit/tools/executor/test_tool_executor_fmt_exclusion.py10/10100.0%
tests/unit/tools/executor/test_tool_executor_more.py141/14696.6%
tests/unit/tools/executor/test_tool_executor_post_checks.py81/8595.3%
tests/unit/tools/executor/test_tool_executor_pytest.py121/121100.0%
tests/unit/tools/gitleaks/__init__.py0/0100.0%
tests/unit/tools/gitleaks/conftest.py9/9100.0%
tests/unit/tools/gitleaks/test_error_handling.py24/24100.0%
tests/unit/tools/gitleaks/test_execution.py91/9397.8%
tests/unit/tools/gitleaks/test_options.py66/66100.0%
tests/unit/tools/golangci_lint/__init__.py0/0100.0%
tests/unit/tools/golangci_lint/conftest.py15/15100.0%
tests/unit/tools/golangci_lint/test_definition.py19/19100.0%
tests/unit/tools/golangci_lint/test_execution.py152/15498.7%
tests/unit/tools/golangci_lint/test_integration.py15/3938.5%
tests/unit/tools/hadolint/__init__.py0/0100.0%
tests/unit/tools/hadolint/conftest.py6/6100.0%
tests/unit/tools/hadolint/test_execution.py91/91100.0%
tests/unit/tools/hadolint/test_options.py90/90100.0%
tests/unit/tools/html_validate/__init__.py0/0100.0%
tests/unit/tools/html_validate/conftest.py6/6100.0%
tests/unit/tools/html_validate/test_execution.py159/159100.0%
tests/unit/tools/html_validate/test_options.py18/18100.0%
tests/unit/tools/idiom_review/__init__.py0/0100.0%
tests/unit/tools/idiom_review/test_idiom_review_engine.py59/59100.0%
tests/unit/tools/idiom_review/test_idiom_review_plugin.py106/10799.1%
tests/unit/tools/idiom_review/test_idiom_review_prompts.py39/39100.0%
tests/unit/tools/idiom_review/test_idiom_review_signatures.py27/27100.0%
tests/unit/tools/manager/conftest.py0/0100.0%
tests/unit/tools/manager/test_tool_manager.py74/74100.0%
tests/unit/tools/mypy/test_mypy_no_python_files.py57/57100.0%
tests/unit/tools/mypy/test_mypy_plugin.py103/103100.0%
tests/unit/tools/osv_scanner/__init__.py0/0100.0%
tests/unit/tools/osv_scanner/conftest.py9/9100.0%
tests/unit/tools/osv_scanner/test_exclusions.py136/136100.0%
tests/unit/tools/osv_scanner/test_osv_scanner_plugin.py226/226100.0%
tests/unit/tools/oxfmt/__init__.py0/0100.0%
tests/unit/tools/oxfmt/conftest.py9/9100.0%
tests/unit/tools/oxfmt/test_check_method.py55/55100.0%
tests/unit/tools/oxfmt/test_default_options.py32/32100.0%
tests/unit/tools/oxfmt/test_fix_method.py72/72100.0%
tests/unit/tools/oxfmt/test_set_options.py36/36100.0%
tests/unit/tools/oxlint/__init__.py0/0100.0%
tests/unit/tools/oxlint/conftest.py6/6100.0%
tests/unit/tools/oxlint/test_check_method.py77/77100.0%
tests/unit/tools/oxlint/test_default_options.py14/14100.0%
tests/unit/tools/oxlint/test_fix_method.py188/188100.0%
tests/unit/tools/oxlint/test_set_options.py75/75100.0%
tests/unit/tools/oxlint/test_type_aware_doctor.py74/74100.0%
tests/unit/tools/pip_audit/__init__.py0/0100.0%
tests/unit/tools/pip_audit/test_pip_audit_plugin.py206/206100.0%
tests/unit/tools/prettier/__init__.py0/0100.0%
tests/unit/tools/prettier/conftest.py6/6100.0%
tests/unit/tools/prettier/test_cannot_run_vs_no_files.py41/41100.0%
tests/unit/tools/prettier/test_check_method.py1/1100.0%
tests/unit/tools/prettier/test_config_discovery.py56/56100.0%
tests/unit/tools/prettier/test_default_options.py10/10100.0%
tests/unit/tools/prettier/test_fix_method.py42/42100.0%
tests/unit/tools/prettier/test_output_parsing.py16/16100.0%
tests/unit/tools/prettier/test_set_options.py12/12100.0%
tests/unit/tools/prettier/test_timeout_handling.py18/18100.0%
tests/unit/tools/pydoclint/__init__.py0/0100.0%
tests/unit/tools/pydoclint/conftest.py6/6100.0%
tests/unit/tools/pydoclint/test_build_command.py14/14100.0%
tests/unit/tools/pydoclint/test_check_method.py37/37100.0%
tests/unit/tools/pydoclint/test_config_initialization.py13/13100.0%
tests/unit/tools/pydoclint/test_default_options.py7/7100.0%
tests/unit/tools/pydoclint/test_fix_method.py9/9100.0%
tests/unit/tools/pydoclint/test_set_options.py9/9100.0%
tests/unit/tools/pytest_tool/__init__.py0/0100.0%
tests/unit/tools/pytest_tool/conftest.py64/8674.4%
tests/unit/tools/pytest_tool/test_addopts_coverage.py97/97100.0%
tests/unit/tools/pytest_tool/test_check_method.py39/39100.0%
tests/unit/tools/pytest_tool/test_configuration.py30/30100.0%
tests/unit/tools/pytest_tool/test_json_parsing.py22/22100.0%
tests/unit/tools/pytest_tool/test_junit_parsing.py19/19100.0%
tests/unit/tools/pytest_tool/test_output_parsing.py41/41100.0%
tests/unit/tools/pytest_tool/test_output_processing.py36/36100.0%
tests/unit/tools/pytest_tool/test_pytest_handlers.py131/131100.0%
tests/unit/tools/pytest_tool/test_pytest_issue.py17/17100.0%
tests/unit/tools/pytest_tool/test_pytest_output_processor.py31/31100.0%
tests/unit/tools/pytest_tool/test_result_processor.py27/27100.0%
tests/unit/tools/pytest_tool/test_set_options.py15/15100.0%
tests/unit/tools/pytest_tool/test_text_parsing.py22/22100.0%
tests/unit/tools/pytest_tool/test_validators.py17/17100.0%
tests/unit/tools/ruff/__init__.py0/0100.0%
tests/unit/tools/ruff/check/__init__.py0/0100.0%
tests/unit/tools/ruff/check/conftest.py0/0100.0%
tests/unit/tools/ruff/check/test_config_detection.py17/17100.0%
tests/unit/tools/ruff/check/test_error_handling.py36/36100.0%
tests/unit/tools/ruff/check/test_format_normalization.py17/17100.0%
tests/unit/tools/ruff/check/test_json_parsing.py34/34100.0%
tests/unit/tools/ruff/check/test_no_issues.py30/30100.0%
tests/unit/tools/ruff/check/test_output_format.py15/15100.0%
tests/unit/tools/ruff/check/test_output_truncation.py32/32100.0%
tests/unit/tools/ruff/check/test_path_filtering.py33/33100.0%
tests/unit/tools/ruff/check/test_real_plugin.py16/16100.0%
tests/unit/tools/ruff/check/test_timeout.py13/13100.0%
tests/unit/tools/ruff/check/test_with_issues.py40/40100.0%
tests/unit/tools/ruff/conftest.py66/6798.5%
tests/unit/tools/ruff/fix/__init__.py0/0100.0%
tests/unit/tools/ruff/fix/conftest.py0/0100.0%
tests/unit/tools/ruff/fix/test_combined_issues.py20/20100.0%
tests/unit/tools/ruff/fix/test_config.py8/8100.0%
tests/unit/tools/ruff/fix/test_edge_cases.py23/23100.0%
tests/unit/tools/ruff/fix/test_format_option.py21/21100.0%
tests/unit/tools/ruff/fix/test_no_files.py19/19100.0%
tests/unit/tools/ruff/fix/test_real_plugin.py19/19100.0%
tests/unit/tools/ruff/fix/test_successful_fix.py25/25100.0%
tests/unit/tools/ruff/fix/test_temporary_option.py27/27100.0%
tests/unit/tools/ruff/fix/test_timeout.py38/38100.0%
tests/unit/tools/ruff/fix/test_unsafe_fixes.py17/17100.0%
tests/unit/tools/ruff/fix/test_version_check.py11/11100.0%
tests/unit/tools/ruff/test_timeout_single_source.py32/32100.0%
tests/unit/tools/rustfmt/__init__.py0/0100.0%
tests/unit/tools/rustfmt/conftest.py8/8100.0%
tests/unit/tools/rustfmt/test_error_handling.py88/88100.0%
tests/unit/tools/rustfmt/test_execution.py82/82100.0%
tests/unit/tools/rustfmt/test_fix_method.py62/62100.0%
tests/unit/tools/rustfmt/test_options.py30/30100.0%
tests/unit/tools/semgrep/__init__.py0/0100.0%
tests/unit/tools/semgrep/conftest.py9/9100.0%
tests/unit/tools/semgrep/test_error_handling.py61/61100.0%
tests/unit/tools/semgrep/test_execution.py41/41100.0%
tests/unit/tools/semgrep/test_options.py88/88100.0%
tests/unit/tools/shellcheck/__init__.py0/0100.0%
tests/unit/tools/shellcheck/conftest.py9/9100.0%
tests/unit/tools/shellcheck/test_error_handling.py13/13100.0%
tests/unit/tools/shellcheck/test_execution.py53/53100.0%
tests/unit/tools/shellcheck/test_options.py125/125100.0%
tests/unit/tools/shfmt/__init__.py0/0100.0%
tests/unit/tools/shfmt/conftest.py8/8100.0%
tests/unit/tools/shfmt/test_error_handling.py46/46100.0%
tests/unit/tools/shfmt/test_execution.py51/51100.0%
tests/unit/tools/shfmt/test_fix_method.py36/36100.0%
tests/unit/tools/shfmt/test_options.py69/69100.0%
tests/unit/tools/sqlfluff/__init__.py0/0100.0%
tests/unit/tools/sqlfluff/conftest.py9/9100.0%
tests/unit/tools/sqlfluff/test_error_handling.py26/26100.0%
tests/unit/tools/sqlfluff/test_execution.py51/51100.0%
tests/unit/tools/sqlfluff/test_fix_method.py48/48100.0%
tests/unit/tools/sqlfluff/test_options.py103/103100.0%
tests/unit/tools/sqlfluff/test_output_parsing.py39/39100.0%
tests/unit/tools/stylelint/__init__.py0/0100.0%
tests/unit/tools/stylelint/conftest.py16/16100.0%
tests/unit/tools/stylelint/test_check_method.py88/88100.0%
tests/unit/tools/stylelint/test_definition.py25/25100.0%
tests/unit/tools/stylelint/test_fix_method.py50/50100.0%
tests/unit/tools/svelte_check/__init__.py0/0100.0%
tests/unit/tools/svelte_check/conftest.py9/9100.0%
tests/unit/tools/svelte_check/test_execution.py72/72100.0%
tests/unit/tools/svelte_check/test_options.py68/68100.0%
tests/unit/tools/taplo/__init__.py0/0100.0%
tests/unit/tools/taplo/conftest.py9/9100.0%
tests/unit/tools/taplo/test_error_handling.py35/35100.0%
tests/unit/tools/taplo/test_execution.py72/72100.0%
tests/unit/tools/taplo/test_options.py63/63100.0%
tests/unit/tools/test_common_behaviors.py97/10592.4%
tests/unit/tools/test_doc_url.py127/127100.0%
tests/unit/tools/test_edge_cases.py122/12994.6%
tests/unit/tools/test_helpers.py32/8139.5%
tests/unit/tools/test_plugin_definitions.py52/52100.0%
tests/unit/tools/test_tool_definitions.py40/40100.0%
tests/unit/tools/test_ts_checker_base.py137/137100.0%
tests/unit/tools/trufflehog/__init__.py0/0100.0%
tests/unit/tools/trufflehog/conftest.py23/23100.0%
tests/unit/tools/trufflehog/test_batching.py70/70100.0%
tests/unit/tools/trufflehog/test_error_handling.py26/26100.0%
tests/unit/tools/trufflehog/test_execution.py178/178100.0%
tests/unit/tools/trufflehog/test_options.py64/64100.0%
tests/unit/tools/tsc/__init__.py0/0100.0%
tests/unit/tools/tsc/conftest.py1/1100.0%
tests/unit/tools/tsc/test_execution.py133/133100.0%
tests/unit/tools/tsc/test_options.py93/9498.9%
tests/unit/tools/tsc/test_tsc_plugin.py190/190100.0%
tests/unit/tools/vale/__init__.py0/0100.0%
tests/unit/tools/vale/conftest.py19/19100.0%
tests/unit/tools/vale/test_execution.py65/65100.0%
tests/unit/tools/vale/test_options.py29/29100.0%
tests/unit/tools/vue_tsc/__init__.py0/0100.0%
tests/unit/tools/vue_tsc/conftest.py9/9100.0%
tests/unit/tools/vue_tsc/test_execution.py86/86100.0%
tests/unit/tools/vue_tsc/test_options.py77/77100.0%
tests/unit/tools/vue_tsc/test_vue_tsc_plugin.py70/70100.0%
tests/unit/utils/__init__.py0/0100.0%
tests/unit/utils/async_tool_executor/__init__.py0/0100.0%
tests/unit/utils/async_tool_executor/conftest.py42/4691.3%
tests/unit/utils/async_tool_executor/test_base_exceptions.py58/58100.0%
tests/unit/utils/async_tool_executor/test_callbacks.py32/32100.0%
tests/unit/utils/async_tool_executor/test_exceptions.py22/22100.0%
tests/unit/utils/async_tool_executor/test_init.py17/17100.0%
tests/unit/utils/async_tool_executor/test_parallel_batches.py94/94100.0%
tests/unit/utils/async_tool_executor/test_run_tool_async.py46/46100.0%
tests/unit/utils/async_tool_executor/test_run_tools_parallel.py57/57100.0%
tests/unit/utils/async_tool_executor/test_shutdown.py13/13100.0%
tests/unit/utils/config/__init__.py0/0100.0%
tests/unit/utils/config/conftest.py17/17100.0%
tests/unit/utils/config/test_manager_configuration.py74/74100.0%
tests/unit/utils/config/test_manager_core.py61/61100.0%
tests/unit/utils/conftest.py51/5396.2%
tests/unit/utils/console/conftest.py10/1190.9%
tests/unit/utils/console/summary/__init__.py0/0100.0%
tests/unit/utils/console/summary/test_delegation.py118/118100.0%
tests/unit/utils/console/summary/test_execution_summary.py103/103100.0%
tests/unit/utils/console/test_logger_headers.py32/32100.0%
tests/unit/utils/console/test_logger_initialization.py10/10100.0%
tests/unit/utils/console/test_logger_levels.py34/34100.0%
tests/unit/utils/console/test_logger_metadata.py31/31100.0%
tests/unit/utils/console/test_logger_output_methods.py47/47100.0%
tests/unit/utils/console/test_logger_results.py26/26100.0%
tests/unit/utils/console/test_pre_execution_summary.py40/40100.0%
tests/unit/utils/execution/__init__.py0/0100.0%
tests/unit/utils/execution/test_advisory.py88/88100.0%
tests/unit/utils/execution/test_parallel_executor_loop.py56/56100.0%
tests/unit/utils/native_parsers/__init__.py0/0100.0%
tests/unit/utils/native_parsers/conftest.py14/14100.0%
tests/unit/utils/native_parsers/test_config_constants.py8/8100.0%
tests/unit/utils/native_parsers/test_json_config.py42/42100.0%
tests/unit/utils/native_parsers/test_jsonc_comments.py92/92100.0%
tests/unit/utils/native_parsers/test_markdownlint_config.py40/40100.0%
tests/unit/utils/native_parsers/test_oxfmt_config.py43/43100.0%
tests/unit/utils/native_parsers/test_oxlint_config.py31/31100.0%
tests/unit/utils/native_parsers/test_pyproject_tools.py21/21100.0%
tests/unit/utils/native_parsers/test_yamllint_config.py29/29100.0%
tests/unit/utils/output/__init__.py1/1100.0%
tests/unit/utils/output/conftest.py28/28100.0%
tests/unit/utils/output/test_code_consistency.py34/34100.0%
tests/unit/utils/output/test_file_writer_common.py14/14100.0%
tests/unit/utils/output/test_file_writer_csv.py44/44100.0%
tests/unit/utils/output/test_file_writer_format.py65/65100.0%
tests/unit/utils/output/test_file_writer_html.py50/50100.0%
tests/unit/utils/output/test_file_writer_json.py52/52100.0%
tests/unit/utils/output/test_file_writer_markdown.py49/49100.0%
tests/unit/utils/output/test_file_writer_plain.py32/32100.0%
tests/unit/utils/output/test_helpers.py53/53100.0%
tests/unit/utils/output/test_parser_registration_bandit.py15/15100.0%
tests/unit/utils/output/test_sarif.py120/120100.0%
tests/unit/utils/output/test_sarif_ai_seam.py75/7797.4%
tests/unit/utils/output/test_sarif_bridge.py127/127100.0%
tests/unit/utils/output/test_sarif_parity.py53/5694.6%
tests/unit/utils/result_formatters/__init__.py0/0100.0%
tests/unit/utils/result_formatters/conftest.py9/9100.0%
tests/unit/utils/result_formatters/test_action_normalization.py19/19100.0%
tests/unit/utils/result_formatters/test_fix_action.py40/40100.0%
tests/unit/utils/result_formatters/test_fixable_hints.py33/33100.0%
tests/unit/utils/result_formatters/test_generic_output.py29/29100.0%
tests/unit/utils/result_formatters/test_output_display.py22/22100.0%
tests/unit/utils/result_formatters/test_pytest_output.py40/40100.0%
tests/unit/utils/result_formatters/test_ruff_formatting.py28/28100.0%
tests/unit/utils/summary/__init__.py0/0100.0%
tests/unit/utils/summary/test_display.py151/151100.0%
tests/unit/utils/summary/test_safe_cast.py30/30100.0%
tests/unit/utils/summary/test_totals_table.py134/134100.0%
tests/unit/utils/test_ascii_normalize.py22/22100.0%
tests/unit/utils/test_ascii_normalize_cli.py72/72100.0%
tests/unit/utils/test_config_reporting.py84/84100.0%
tests/unit/utils/test_console_output_writer.py98/98100.0%
tests/unit/utils/test_display_helpers.py108/108100.0%
tests/unit/utils/test_display_helpers_fallback.py73/7498.6%
tests/unit/utils/test_doctor_report.py246/24799.6%
tests/unit/utils/test_enrich_doc_urls.py66/66100.0%
tests/unit/utils/test_enums_and_normalizers.py45/45100.0%
tests/unit/utils/test_exit_codes.py22/22100.0%
tests/unit/utils/test_file_cache.py97/97100.0%
tests/unit/utils/test_findings.py92/92100.0%
tests/unit/utils/test_fix_retry.py53/53100.0%
tests/unit/utils/test_git_diff.py226/226100.0%
tests/unit/utils/test_json_output.py122/122100.0%
tests/unit/utils/test_jsonc.py103/103100.0%
tests/unit/utils/test_logger_setup.py45/45100.0%
tests/unit/utils/test_module_size.py63/63100.0%
tests/unit/utils/test_native_parsers.py49/49100.0%
tests/unit/utils/test_node_deps.py149/149100.0%
tests/unit/utils/test_output_ai_import_isolation.py18/18100.0%
tests/unit/utils/test_output_writers.py199/199100.0%
tests/unit/utils/test_parser_registry.py107/12089.2%
tests/unit/utils/test_path_filtering.py211/211100.0%
tests/unit/utils/test_path_utils.py158/158100.0%
tests/unit/utils/test_post_checks_isolation.py70/70100.0%
tests/unit/utils/test_streaming_output.py167/167100.0%
tests/unit/utils/test_timeout_json_state.py162/162100.0%
tests/unit/utils/test_timeout_utils.py83/8498.8%
tests/unit/utils/test_tool_config_info.py9/9100.0%
tests/unit/utils/test_tool_executor_ai.py135/14096.4%
tests/unit/utils/test_tool_metadata.py33/33100.0%
tests/unit/utils/test_tool_utils.py18/18100.0%
tests/unit/utils/test_tsconfig_discover.py53/53100.0%
tests/unit/utils/test_tsconfig_extends.py38/38100.0%
tests/unit/utils/test_tsconfig_parse.py45/45100.0%
tests/unit/utils/test_tsconfig_partition.py84/84100.0%
tests/unit/utils/tsconfig_helpers.py8/8100.0%
tests/unit/utils/unified_config/__init__.py0/0100.0%
tests/unit/utils/unified_config/conftest.py10/1283.3%
tests/unit/utils/unified_config/test_config_summary.py21/21100.0%
tests/unit/utils/unified_config/test_consistency.py17/17100.0%
tests/unit/utils/unified_config/test_constants.py30/30100.0%
tests/unit/utils/unified_config/test_dataclasses.py24/24100.0%
tests/unit/utils/unified_config/test_enums.py10/10100.0%
tests/unit/utils/unified_config/test_injectable.py14/14100.0%
tests/unit/utils/unified_config/test_line_length.py32/32100.0%
tests/unit/utils/unified_config/test_nested_value.py13/13100.0%
tests/unit/utils/unified_config/test_ordered_tools.py23/23100.0%
tests/unit/utils/unified_config/test_tool_priority.py21/21100.0%
tests/utils/__init__.py0/0100.0%
tests/utils/test_formatting.py22/22100.0%
tests/utils/test_health_score.py100/100100.0%
tests/utils/test_json_output_health_score.py20/20100.0%
tests/utils/test_output_manager.py123/123100.0%
tests/utils/test_path_utils.py53/53100.0%