python-delphi-lsp 3.2.1__tar.gz → 3.2.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {python_delphi_lsp-3.2.1/python_delphi_lsp.egg-info → python_delphi_lsp-3.2.2}/PKG-INFO +4 -3
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/README.md +3 -2
- python_delphi_lsp-3.2.2/delphi_lsp/_version.py +1 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/agent_cli.py +1 -1
- python_delphi_lsp-3.2.2/docs/release-3.2.2.md +52 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/pyproject.toml +1 -1
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2/python_delphi_lsp.egg-info}/PKG-INFO +4 -3
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/python_delphi_lsp.egg-info/SOURCES.txt +2 -0
- python_delphi_lsp-3.2.2/tests/test_agent_cli_content.py +467 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_agent_cli_errors.py +15 -14
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_package_metadata.py +3 -3
- python_delphi_lsp-3.2.1/delphi_lsp/_version.py +0 -1
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/.github/workflows/ci.yml +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/LICENSE +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/MANIFEST.in +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/__init__.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/agent_cache.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/agent_context.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/agent_cpg.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/agent_cpg_builder.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/agent_layers.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/agent_metrics.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/agent_protocol.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/agent_relations.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/agent_templates.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/agent_wiki.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/agent_workspace.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/binary.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/comment_builder.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/consts.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/delphiast_lexer.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/delphiast_parser.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/delphiast_tokens.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/grammar.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/lark_builder.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/lark_tokens.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/lexical_scanner.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/lsp_server.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/metrics.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/navigation_cache.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/nodes.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/parallel_outline.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/parser.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/parser_backend.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/preprocessor.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/progress.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/project_config.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/project_discovery.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/project_indexer.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/py.typed +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/semantic.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/semantic_builder.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/source_reader.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/workspace.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/writer.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/performance-delphi.md +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/performance-fpc.md +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/release-2.3.0.md +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/release-2.3.3.md +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/release-3.0.0.md +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/release-3.1.0.md +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/release-3.1.1.md +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/release-3.1.2.md +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/release-3.2.0.md +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/release-3.2.1.md +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/superpowers/plans/2026-07-16-architecture-metrics-implementation.md +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/superpowers/plans/2026-07-17-large-codebase-performance.md +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/superpowers/plans/2026-07-22-conditional-outline-ranges.md +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/superpowers/plans/2026-07-23-2.3-performance.md +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/superpowers/plans/2026-07-23-bounded-cli-cache-daemon.md +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/superpowers/plans/2026-07-23-delphiast-python-backend.md +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/superpowers/plans/2026-07-23-parallel-cache-prewarming.md +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/superpowers/plans/2026-07-24-hybrid-cpg.md +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/superpowers/plans/2026-07-24-repository-default-navigation.md +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/superpowers/plans/2026-07-27-okf-memory-progress.md +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/superpowers/plans/2026-07-27-okf-wiki-export.md +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/superpowers/plans/2026-07-27-project-path-configuration.md +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/superpowers/specs/2026-07-16-architecture-metrics-design.md +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/superpowers/specs/2026-07-17-large-codebase-performance-design.md +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/superpowers/specs/2026-07-22-conditional-outline-ranges-design.md +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/superpowers/specs/2026-07-23-2.3-performance-design.md +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/superpowers/specs/2026-07-23-bounded-cli-cache-daemon-design.md +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/superpowers/specs/2026-07-23-delphiast-python-backend-design.md +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/superpowers/specs/2026-07-23-parallel-cache-prewarming-design.md +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/superpowers/specs/2026-07-24-hybrid-cpg-design.md +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/superpowers/specs/2026-07-24-repository-default-navigation-design.md +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/superpowers/specs/2026-07-27-okf-memory-progress-design.md +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/superpowers/specs/2026-07-27-okf-wiki-export-design.md +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/superpowers/specs/2026-07-27-project-path-configuration-design.md +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/opencode.json +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/python_delphi_lsp.egg-info/dependency_links.txt +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/python_delphi_lsp.egg-info/entry_points.txt +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/python_delphi_lsp.egg-info/requires.txt +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/python_delphi_lsp.egg-info/top_level.txt +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/scripts/audit_delphi_language_features.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/scripts/benchmark_cpg.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/scripts/benchmark_fpc_corpus.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/scripts/benchmark_github_corpus.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/scripts/benchmark_parallel_cache.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/scripts/bootstrap_vllm_codebase_skill_test.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/scripts/bootstrap_vllm_opencode_test.ps1 +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/scripts/bootstrap_vllm_opencode_test.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/scripts/bootstrap_vllm_opencode_test.sh +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/scripts/build_github_performance_corpus.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/scripts/check_ornith_cache.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/scripts/generate_progress_pdf.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/scripts/generate_release_evidence.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/scripts/ollama/ornith-lspctx.Modelfile +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/scripts/prepare_delphi_corpus.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/scripts/prepare_fpc_corpus.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/scripts/prepare_ornith_cache.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/scripts/run_opencode_lsp_probe.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/scripts/run_openrouter_github_e2e.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/scripts/start_ornith_vllm.sh +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/scripts/summarize_opencode_request_payloads.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/setup.cfg +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitX.Examples.AssertFailureCompare.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitX.Examples.EqualityAsserts.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitX.Examples.General.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitX.Examples.UITest.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_2010.dpr +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_D10Berlin.dpr +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_D10Rio.dpr +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_D10Seattle.dpr +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_D10Sydney.dpr +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_D10Tokyo.dpr +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_D11Alexandria.dpr +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_D12Athens.dpr +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_D13.dpr +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_XE.dpr +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_XE2.dpr +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_XE3.dpr +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_XE4.dpr +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_XE5.dpr +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_XE6.dpr +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_XE7.dpr +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_XE8.dpr +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXFiremonkeyGUI_D10Berlin.dpr +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXFiremonkeyGUI_D10Seattle.dpr +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXFiremonkeyGUI_D10Tokyo.dpr +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXFiremonkeyGUI_XE5.dpr +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXFiremonkeyGUI_XE6.dpr +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXFiremonkeyGUI_XE7.dpr +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXFiremonkeyGUI_XE8.dpr +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXVCLGUI_D10Berlin.dpr +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXVCLGUI_D10Seattle.dpr +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXVCLGUI_XE.dpr +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXVCLGUI_XE7.dpr +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/NonNamespacedExample.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/ProviderExample.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.CodeGen.NewProject.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.CodeGen.NewTestProject.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.CodeGen.NewTestUnit.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.CodeGen.NewUnit.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.CodeGen.SourceFile.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.CodeGen.Templates.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.Forms.NewProjectWizard.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.Forms.NewUnitWizard.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.NewUnitWizard.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.NewUnitWizardEx.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.ProjectWizard.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.ProjectWizardEx.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.Registration.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_2010.dpk +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_D10Berlin.dpk +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_D10Rio.dpk +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_D10Seattle.dpk +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_D10Tokyo.dpk +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_D11Alexandria.dpk +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_D12Athens.dpk +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_D13Florence.dpk +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_Sydney.dpk +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_XE.dpk +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_XE2.dpk +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_XE3.dpk +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_XE4.dpk +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_XE5.dpk +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_XE6.dpk +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_XE7.dpk +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_XE8.dpk +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/LICENSE.txt +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUNitX.Loggers.GUIX.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUNitX.Loggers.MobileGUI.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Assert.Ex.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Assert.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Attributes.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.AutoDetect.Console.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Banner.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.CategoryExpression.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.CommandLine.OptionDef.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.CommandLine.Options.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.CommandLine.Parser.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.ComparableFormat.Csv.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.ComparableFormat.Xml.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.ComparableFormat.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.ConsoleWriter.Base.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Constants.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.DUnitCompatibility.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Exceptions.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Extensibility.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.FilterBuilder.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Filters.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.FixtureBuilder.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.FixtureProvider.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.FixtureResult.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Generics.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Helpers.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Init.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.InternalDataProvider.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.InternalInterfaces.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Linux.Console.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Loggers.Console.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Loggers.GUI.VCL.RichEdit.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Loggers.GUI.VCL.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Loggers.Null.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Loggers.Text.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Loggers.XML.JUnit.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Loggers.XML.NUnit.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Loggers.XML.xUnit.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.MacOS.Console.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.MemoryLeakMonitor.Default.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.MemoryLeakMonitor.FastMM4.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.MemoryLeakMonitor.FastMM5.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.MemoryLeaks.inc +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.OptionsDefinition.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.ResStrs.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.RunResults.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.ServiceLocator.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.StackTrace.EurekaLog7.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.StackTrace.JCL.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.StackTrace.MadExcept3.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.StackTrace.MadExcept4.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.StackTrace.MadExcept5.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Stacktrace.inc +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Test.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.TestDataProvider.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.TestFixture.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.TestFramework.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.TestNameParser.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.TestResult.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.TestRunner.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Timeout.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Types.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Utils.XML.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Utils.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.WeakReference.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Windows.Console.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.inc +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitX.Options.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitX.SingleNameSpace.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitX.Stacktrace.inc +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.Assert.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.CategoryParser.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.CommandLineParser.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.ConsoleWriter.Base.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.DUnitCompatibility.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.Example.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.Framework.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.IgnoreFixture.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.Inheritance.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.IoC.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.Loggers.XML.JUnit.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.Loggers.XML.NUnit.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.MemoryLeaks.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.TestDataProvider.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.TestFixture.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.TestNameParser.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.Utils.XML.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.Utils.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.WeakReference.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitXGuiTest.dpr +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitXTestProject.dpr +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitXTest_D2010.dpr +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitXTest_XE.dpr +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/packages/RAD Studio 10.0/VSoft.DUnitXWinR.dpk +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/packages/RAD Studio 10.1/VSoft.DUnitXWinR.dpk +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/packages/RAD Studio 10.2/VSoft.DUnitXWinR.dpk +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/packages/RAD Studio 10.3/VSoft.DUnitXWinR.dpk +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/packages/RAD Studio 10.4/VSoft.DUnitXWinR.dpk +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/packages/RAD Studio 11.0/VSoft.DUnitXWinR.dpk +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/packages/RAD Studio 12.0/VSoft.DUnitXWinR.dpk +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/packages/RAD Studio 13.0/VSoft.DUnitXWinR.dpk +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/packages/RAD Studio XE2/VSoft.DUnitXWinR.dpk +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/packages/RAD Studio XE3/VSoft.DUnitXWinR.dpk +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/packages/RAD Studio XE4/VSoft.DUnitXWinR.dpk +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/packages/RAD Studio XE5/VSoft.DUnitXWinR.dpk +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/packages/RAD Studio XE6/VSoft.DUnitXWinR.dpk +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/packages/RAD Studio XE7/VSoft.DUnitXWinR.dpk +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/packages/RAD Studio XE8/VSoft.DUnitXWinR.dpk +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/mORMot2/LICENCE.md +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/mORMot2/src/mormot.defines.inc +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/mORMot2/src/ui/mormot.ui.pdf.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/corpora.performance.lock.json +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/DeprecatedOnConst.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/VariantRecordFieldAttributes.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/alignedrecords.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/constset.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/deprecatedtype.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/dottedtypes.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/endtoken.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/experimentals.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/externalfunction.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/finalizationinitializationexports.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/forwardoverloaded.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/forwardwithoutsemicolon.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/genericconstraints.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/genericinterfacemethoddelegation.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/implementsgenerictype.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/include file2.inc +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/includefile.inc +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/includefile.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/managedrecords.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/messagemethod.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/multiline.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/nonalignedrecords.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/numbers.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/pointerchars.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/properties.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/strictvisibility.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/tryexcept.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/umlauts.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/whitespacearoundifdefcondition.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/library_demo.dpr +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/package_demo.dpk +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/program_demo.dpr +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/unit_advanced.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/unit_attributes.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/unit_basic.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/unit_consumer.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/unit_generics.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/unit_inheritance.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/unit_math.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/unit_properties.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/unit_sections.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/unit_statements.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/unit_types.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/unit_unresolved.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/unit_with.pas +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fpc_parse_quality.baseline.json +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_agent_cache.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_agent_codebase.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_agent_context.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_agent_cpg.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_agent_metrics.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_agent_protocol.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_agent_relations.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_agent_wiki.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_agent_worker.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_agent_workspace.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_bootstrap_vllm_codebase_skill.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_bootstrap_vllm_opencode.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_delphi_performance_corpus.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_delphiast_lexer.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_delphiast_native_compatibility.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_delphiast_parser.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_delphiast_semantic_compatibility.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_diagnostics.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_fpc_performance_corpus.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_github_performance_corpus.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_language_feature_matrix.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_legacy_snippets.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_lsp_features.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_lsp_server.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_lsp_support.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_metrics.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_navigation_cache.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_opencode_config.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_opencode_probe.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_opencode_request_payloads.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_openrouter_github_e2e.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_ornith_cache_prepare.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_parallel_outline.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_parser.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_parser_backends.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_preprocessor.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_progress.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_project_config.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_project_discovery.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_project_indexer.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_release_evidence.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_semantic.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_throughput_scaling.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_vllm_start_script.py +0 -0
- {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_workspace.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-delphi-lsp
|
|
3
|
-
Version: 3.2.
|
|
3
|
+
Version: 3.2.2
|
|
4
4
|
Summary: Python Delphi/Object Pascal parser, semantic indexer, and language server.
|
|
5
5
|
Author: Dark Light
|
|
6
6
|
License-Expression: MPL-2.0
|
|
@@ -45,7 +45,7 @@ Dynamic: license-file
|
|
|
45
45
|
|
|
46
46
|
`python-delphi-lsp` parses Delphi/Object Pascal, builds semantic and project
|
|
47
47
|
indexes, serves LSP, and provides bounded codebase navigation for agents.
|
|
48
|
-
Version 3.2.
|
|
48
|
+
Version 3.2.2 is authored by Dark Light and supports Windows, macOS, and Linux.
|
|
49
49
|
|
|
50
50
|
## Install and quick start
|
|
51
51
|
|
|
@@ -226,7 +226,8 @@ delphi-lsp-agent worker --root PATH [--project-file FILE] [--workers auto|N]
|
|
|
226
226
|
```
|
|
227
227
|
|
|
228
228
|
`--deep-projects` opts into per-project dependency parsing for the `projects`
|
|
229
|
-
|
|
229
|
+
and `problems` layers. It is off by default because it dominates run time on
|
|
230
|
+
real repositories:
|
|
230
231
|
on a 60-project corpus it cost 36.9 s against 1.0 s for the same index, and it
|
|
231
232
|
adds nothing to the unit model set. Without it the `projects` and `problems`
|
|
232
233
|
layers report `deep_indexed: false`, and `index` records `deep_projects` at the
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
`python-delphi-lsp` parses Delphi/Object Pascal, builds semantic and project
|
|
4
4
|
indexes, serves LSP, and provides bounded codebase navigation for agents.
|
|
5
|
-
Version 3.2.
|
|
5
|
+
Version 3.2.2 is authored by Dark Light and supports Windows, macOS, and Linux.
|
|
6
6
|
|
|
7
7
|
## Install and quick start
|
|
8
8
|
|
|
@@ -183,7 +183,8 @@ delphi-lsp-agent worker --root PATH [--project-file FILE] [--workers auto|N]
|
|
|
183
183
|
```
|
|
184
184
|
|
|
185
185
|
`--deep-projects` opts into per-project dependency parsing for the `projects`
|
|
186
|
-
|
|
186
|
+
and `problems` layers. It is off by default because it dominates run time on
|
|
187
|
+
real repositories:
|
|
187
188
|
on a 60-project corpus it cost 36.9 s against 1.0 s for the same index, and it
|
|
188
189
|
adds nothing to the unit model set. Without it the `projects` and `problems`
|
|
189
190
|
layers report `deep_indexed: false`, and `index` records `deep_projects` at the
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "3.2.2"
|
|
@@ -320,7 +320,7 @@ def _view(args: argparse.Namespace) -> None:
|
|
|
320
320
|
index = build_codebase_index(
|
|
321
321
|
args.root,
|
|
322
322
|
project_file=args.project_file,
|
|
323
|
-
index_projects=args.deep_projects
|
|
323
|
+
index_projects=args.deep_projects,
|
|
324
324
|
workers=args.workers,
|
|
325
325
|
)
|
|
326
326
|
sys.stdout.write(render_layer(index, args.layer, query=args.query, output_format=args.format))
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Python Delphi LSP 3.2.2
|
|
2
|
+
|
|
3
|
+
Version 3.2.2 is a backwards-compatible patch release. It fixes the remaining
|
|
4
|
+
CLI performance defect in `view --layer problems` and adds ground-truth content
|
|
5
|
+
tests for the agent-facing CLI.
|
|
6
|
+
|
|
7
|
+
## `view --layer problems` no longer forces deep indexing
|
|
8
|
+
|
|
9
|
+
Python Delphi LSP 3.2.1 made the expensive per-project dependency pass opt-in
|
|
10
|
+
for `index`, but the `problems` view still enabled that pass unconditionally.
|
|
11
|
+
The view therefore paid the full deep-index cost even when callers only needed
|
|
12
|
+
the discovery findings.
|
|
13
|
+
|
|
14
|
+
Measured before and after on the same Apple M4 machine:
|
|
15
|
+
|
|
16
|
+
| Corpus | 3.2.1 | 3.2.2 |
|
|
17
|
+
|---|---:|---:|
|
|
18
|
+
| python4delphi | 43.66 s | 0.57 s |
|
|
19
|
+
| mORMot2 | 24.4 s | 2.24 s |
|
|
20
|
+
|
|
21
|
+
The default view still preserves all discovery problems. On mORMot2 that is
|
|
22
|
+
all 228 reported items. Its payload now states `deep_indexed: false`, making
|
|
23
|
+
the scope explicit instead of implying that project parsing ran.
|
|
24
|
+
|
|
25
|
+
Callers that need project-parse problems can pass `--deep-projects`. That
|
|
26
|
+
restores the original deep pass and marks the payload `deep_indexed: true`; the
|
|
27
|
+
reference python4delphi run reports 2,854 items in approximately 42.7 seconds.
|
|
28
|
+
|
|
29
|
+
## Ground-truth CLI verification
|
|
30
|
+
|
|
31
|
+
`tests/test_agent_cli_content.py` builds a small, hand-authored Pascal
|
|
32
|
+
workspace and checks content rather than merely checking exit codes or item
|
|
33
|
+
counts. It verifies:
|
|
34
|
+
|
|
35
|
+
- the exact unit, symbol, member, and cross-unit symbol-location sets;
|
|
36
|
+
- empty results for a symbol name absent from the fixture;
|
|
37
|
+
- the intentionally broken unit's exact deep-project diagnostic;
|
|
38
|
+
- shallow and deep completeness markers;
|
|
39
|
+
- the exact top-level `index` document contract and hand-counted unit total;
|
|
40
|
+
- Markdown names, stable CLI error prefixes, and native path separators; and
|
|
41
|
+
- one opt-in DUnitX occurrence against a hand-verified source line.
|
|
42
|
+
|
|
43
|
+
The path-invariance test runs on every supported OS. Windows itself was not
|
|
44
|
+
executed during the local release run; the next pushed CI matrix remains the
|
|
45
|
+
direct Windows verification.
|
|
46
|
+
|
|
47
|
+
## Verification
|
|
48
|
+
|
|
49
|
+
The release gates run the standard suite in two environments, enforce the
|
|
50
|
+
existing Ruff and mypy debt ceilings, repeat the real-corpus CLI and wiki
|
|
51
|
+
regression measurements, inspect both distribution artifacts, and execute a
|
|
52
|
+
clean-room functional check from the built wheel.
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "python-delphi-lsp"
|
|
7
|
-
version = "3.2.
|
|
7
|
+
version = "3.2.2"
|
|
8
8
|
description = "Python Delphi/Object Pascal parser, semantic indexer, and language server."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-delphi-lsp
|
|
3
|
-
Version: 3.2.
|
|
3
|
+
Version: 3.2.2
|
|
4
4
|
Summary: Python Delphi/Object Pascal parser, semantic indexer, and language server.
|
|
5
5
|
Author: Dark Light
|
|
6
6
|
License-Expression: MPL-2.0
|
|
@@ -45,7 +45,7 @@ Dynamic: license-file
|
|
|
45
45
|
|
|
46
46
|
`python-delphi-lsp` parses Delphi/Object Pascal, builds semantic and project
|
|
47
47
|
indexes, serves LSP, and provides bounded codebase navigation for agents.
|
|
48
|
-
Version 3.2.
|
|
48
|
+
Version 3.2.2 is authored by Dark Light and supports Windows, macOS, and Linux.
|
|
49
49
|
|
|
50
50
|
## Install and quick start
|
|
51
51
|
|
|
@@ -226,7 +226,8 @@ delphi-lsp-agent worker --root PATH [--project-file FILE] [--workers auto|N]
|
|
|
226
226
|
```
|
|
227
227
|
|
|
228
228
|
`--deep-projects` opts into per-project dependency parsing for the `projects`
|
|
229
|
-
|
|
229
|
+
and `problems` layers. It is off by default because it dominates run time on
|
|
230
|
+
real repositories:
|
|
230
231
|
on a 60-project corpus it cost 36.9 s against 1.0 s for the same index, and it
|
|
231
232
|
adds nothing to the unit model set. Without it the `projects` and `problems`
|
|
232
233
|
layers report `deep_indexed: false`, and `index` records `deep_projects` at the
|
|
@@ -56,6 +56,7 @@ docs/release-3.1.1.md
|
|
|
56
56
|
docs/release-3.1.2.md
|
|
57
57
|
docs/release-3.2.0.md
|
|
58
58
|
docs/release-3.2.1.md
|
|
59
|
+
docs/release-3.2.2.md
|
|
59
60
|
docs/superpowers/plans/2026-07-16-architecture-metrics-implementation.md
|
|
60
61
|
docs/superpowers/plans/2026-07-17-large-codebase-performance.md
|
|
61
62
|
docs/superpowers/plans/2026-07-22-conditional-outline-ranges.md
|
|
@@ -286,6 +287,7 @@ test_projects/github_repos/mORMot2/src/ui/mormot.ui.pdf.pas
|
|
|
286
287
|
tests/corpora.performance.lock.json
|
|
287
288
|
tests/fpc_parse_quality.baseline.json
|
|
288
289
|
tests/test_agent_cache.py
|
|
290
|
+
tests/test_agent_cli_content.py
|
|
289
291
|
tests/test_agent_cli_errors.py
|
|
290
292
|
tests/test_agent_codebase.py
|
|
291
293
|
tests/test_agent_context.py
|
|
@@ -0,0 +1,467 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import json
|
|
4
|
+
import os
|
|
5
|
+
import subprocess
|
|
6
|
+
import sys
|
|
7
|
+
from collections.abc import Iterator
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
from typing import Any
|
|
10
|
+
|
|
11
|
+
import pytest
|
|
12
|
+
|
|
13
|
+
REPO_ROOT = Path(__file__).resolve().parents[1]
|
|
14
|
+
DUNITX_ROOT = REPO_ROOT / "test_projects" / "github_repos" / "DUnitX"
|
|
15
|
+
|
|
16
|
+
MAIN_SOURCE = """\
|
|
17
|
+
program Main;
|
|
18
|
+
|
|
19
|
+
uses
|
|
20
|
+
Alpha in 'Alpha.pas',
|
|
21
|
+
Beta in 'Beta.pas',
|
|
22
|
+
Gamma in 'Gamma.pas',
|
|
23
|
+
Broken in 'Broken.pas';
|
|
24
|
+
|
|
25
|
+
begin
|
|
26
|
+
end.
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
ALPHA_SOURCE = """\
|
|
30
|
+
unit Alpha;
|
|
31
|
+
|
|
32
|
+
interface
|
|
33
|
+
|
|
34
|
+
const
|
|
35
|
+
CrossMarker = 11;
|
|
36
|
+
|
|
37
|
+
type
|
|
38
|
+
AlphaToken = Integer;
|
|
39
|
+
|
|
40
|
+
implementation
|
|
41
|
+
|
|
42
|
+
end.
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
BETA_SOURCE = """\
|
|
46
|
+
unit Beta;
|
|
47
|
+
|
|
48
|
+
interface
|
|
49
|
+
|
|
50
|
+
const
|
|
51
|
+
CrossMarker = 22;
|
|
52
|
+
|
|
53
|
+
type
|
|
54
|
+
BetaToken = Integer;
|
|
55
|
+
|
|
56
|
+
implementation
|
|
57
|
+
|
|
58
|
+
end.
|
|
59
|
+
"""
|
|
60
|
+
|
|
61
|
+
GAMMA_SOURCE = """\
|
|
62
|
+
unit Gamma;
|
|
63
|
+
|
|
64
|
+
interface
|
|
65
|
+
|
|
66
|
+
{$I gamma_defs.txt}
|
|
67
|
+
|
|
68
|
+
implementation
|
|
69
|
+
|
|
70
|
+
end.
|
|
71
|
+
"""
|
|
72
|
+
|
|
73
|
+
GAMMA_INCLUDE_SOURCE = """\
|
|
74
|
+
const
|
|
75
|
+
GammaIncluded = 33;
|
|
76
|
+
"""
|
|
77
|
+
|
|
78
|
+
BROKEN_SOURCE = """\
|
|
79
|
+
unit Broken;
|
|
80
|
+
|
|
81
|
+
interface
|
|
82
|
+
|
|
83
|
+
{$I broken_fragment.txt}
|
|
84
|
+
|
|
85
|
+
implementation
|
|
86
|
+
|
|
87
|
+
end.
|
|
88
|
+
"""
|
|
89
|
+
|
|
90
|
+
BROKEN_INCLUDE_SOURCE = "{ unterminated comment\n"
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
@pytest.fixture
|
|
94
|
+
def ground_truth_workspace(tmp_path: Path) -> Path:
|
|
95
|
+
sources = {
|
|
96
|
+
"Main.dpr": MAIN_SOURCE,
|
|
97
|
+
"Alpha.pas": ALPHA_SOURCE,
|
|
98
|
+
"Beta.pas": BETA_SOURCE,
|
|
99
|
+
"Gamma.pas": GAMMA_SOURCE,
|
|
100
|
+
"gamma_defs.txt": GAMMA_INCLUDE_SOURCE,
|
|
101
|
+
"Broken.pas": BROKEN_SOURCE,
|
|
102
|
+
"broken_fragment.txt": BROKEN_INCLUDE_SOURCE,
|
|
103
|
+
}
|
|
104
|
+
for relative, source in sources.items():
|
|
105
|
+
(tmp_path / relative).write_text(source, encoding="utf-8")
|
|
106
|
+
return tmp_path
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
def _run_cli(*arguments: str) -> subprocess.CompletedProcess[str]:
|
|
110
|
+
return subprocess.run(
|
|
111
|
+
[sys.executable, "-m", "delphi_lsp.agent_cli", *arguments],
|
|
112
|
+
cwd=REPO_ROOT,
|
|
113
|
+
check=False,
|
|
114
|
+
capture_output=True,
|
|
115
|
+
text=True,
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
def _run_view(
|
|
120
|
+
root: Path,
|
|
121
|
+
layer: str,
|
|
122
|
+
*,
|
|
123
|
+
query: str = "",
|
|
124
|
+
output_format: str = "json",
|
|
125
|
+
deep_projects: bool = False,
|
|
126
|
+
) -> subprocess.CompletedProcess[str]:
|
|
127
|
+
arguments = [
|
|
128
|
+
"view",
|
|
129
|
+
"--root",
|
|
130
|
+
str(root),
|
|
131
|
+
"--layer",
|
|
132
|
+
layer,
|
|
133
|
+
"--format",
|
|
134
|
+
output_format,
|
|
135
|
+
]
|
|
136
|
+
if query:
|
|
137
|
+
arguments.extend(["--query", query])
|
|
138
|
+
if deep_projects:
|
|
139
|
+
arguments.append("--deep-projects")
|
|
140
|
+
return _run_cli(*arguments)
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
def _json_output(completed: subprocess.CompletedProcess[str]) -> dict[str, Any]:
|
|
144
|
+
assert completed.returncode == 0, completed.stderr
|
|
145
|
+
assert completed.stderr == ""
|
|
146
|
+
payload = json.loads(completed.stdout)
|
|
147
|
+
assert isinstance(payload, dict)
|
|
148
|
+
return payload
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
def _run_index(root: Path, name: str, *, deep_projects: bool) -> dict[str, Any]:
|
|
152
|
+
output = root / name
|
|
153
|
+
arguments = [
|
|
154
|
+
"index",
|
|
155
|
+
"--root",
|
|
156
|
+
str(root),
|
|
157
|
+
"--out",
|
|
158
|
+
str(output),
|
|
159
|
+
]
|
|
160
|
+
if deep_projects:
|
|
161
|
+
arguments.append("--deep-projects")
|
|
162
|
+
completed = _run_cli(*arguments)
|
|
163
|
+
assert completed.returncode == 0, completed.stderr
|
|
164
|
+
assert completed.stderr == ""
|
|
165
|
+
assert completed.stdout == f"{output}\n"
|
|
166
|
+
payload = json.loads(output.read_text(encoding="utf-8"))
|
|
167
|
+
assert isinstance(payload, dict)
|
|
168
|
+
return payload
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
def _absolute_path_values(value: object, key: str = "") -> Iterator[str]:
|
|
172
|
+
scalar_path_keys = {"file", "origin", "path", "root"}
|
|
173
|
+
sequence_path_keys = {"include_paths", "projects", "search_paths"}
|
|
174
|
+
if isinstance(value, dict):
|
|
175
|
+
for child_key, child in value.items():
|
|
176
|
+
if (
|
|
177
|
+
child_key in scalar_path_keys
|
|
178
|
+
and isinstance(child, str)
|
|
179
|
+
and Path(child).is_absolute()
|
|
180
|
+
):
|
|
181
|
+
yield child
|
|
182
|
+
elif child_key in sequence_path_keys and isinstance(child, list):
|
|
183
|
+
yield from (
|
|
184
|
+
item
|
|
185
|
+
for item in child
|
|
186
|
+
if isinstance(item, str) and Path(item).is_absolute()
|
|
187
|
+
)
|
|
188
|
+
yield from _absolute_path_values(child, child_key)
|
|
189
|
+
elif isinstance(value, list):
|
|
190
|
+
for child in value:
|
|
191
|
+
yield from _absolute_path_values(child, key)
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
def test_view_units_matches_hand_authored_workspace_exactly(
|
|
195
|
+
ground_truth_workspace: Path,
|
|
196
|
+
) -> None:
|
|
197
|
+
"""Five source declarations define the complete expected unit-name set."""
|
|
198
|
+
payload = _json_output(_run_view(ground_truth_workspace, "units"))
|
|
199
|
+
|
|
200
|
+
assert payload["layer"] == "units"
|
|
201
|
+
assert {item["name"] for item in payload["items"]} == {
|
|
202
|
+
"Alpha",
|
|
203
|
+
"Beta",
|
|
204
|
+
"Broken",
|
|
205
|
+
"Gamma",
|
|
206
|
+
"Main",
|
|
207
|
+
}
|
|
208
|
+
assert {Path(item["path"]).name for item in payload["items"]} == {
|
|
209
|
+
"Alpha.pas",
|
|
210
|
+
"Beta.pas",
|
|
211
|
+
"Broken.pas",
|
|
212
|
+
"Gamma.pas",
|
|
213
|
+
"Main.dpr",
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
def test_view_symbols_matches_hand_authored_declaration_and_empty_query(
|
|
218
|
+
ground_truth_workspace: Path,
|
|
219
|
+
) -> None:
|
|
220
|
+
"""AlphaToken is declared once, on hand-counted Alpha.pas line 9."""
|
|
221
|
+
payload = _json_output(
|
|
222
|
+
_run_view(ground_truth_workspace, "symbols", query="AlphaToken")
|
|
223
|
+
)
|
|
224
|
+
|
|
225
|
+
assert {
|
|
226
|
+
(item["name"], item["kind"], Path(item["path"]).name, item["line"])
|
|
227
|
+
for item in payload["items"]
|
|
228
|
+
} == {("AlphaToken", "type", "Alpha.pas", 9)}
|
|
229
|
+
|
|
230
|
+
absent = _json_output(
|
|
231
|
+
_run_view(
|
|
232
|
+
ground_truth_workspace,
|
|
233
|
+
"symbols",
|
|
234
|
+
query="NameThatCannotExistInTheFixture",
|
|
235
|
+
)
|
|
236
|
+
)
|
|
237
|
+
assert absent["items"] == []
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
def test_view_unit_returns_exact_hand_authored_members(
|
|
241
|
+
ground_truth_workspace: Path,
|
|
242
|
+
) -> None:
|
|
243
|
+
"""Alpha.pas declares only CrossMarker (line 6) and AlphaToken (line 9)."""
|
|
244
|
+
payload = _json_output(
|
|
245
|
+
_run_view(ground_truth_workspace, "unit", query="Alpha")
|
|
246
|
+
)
|
|
247
|
+
|
|
248
|
+
assert len(payload["items"]) == 1
|
|
249
|
+
unit = payload["items"][0]
|
|
250
|
+
assert unit["name"] == "Alpha"
|
|
251
|
+
assert {
|
|
252
|
+
(item["name"], item["kind"], item["line"])
|
|
253
|
+
for item in unit["symbols"]
|
|
254
|
+
} == {
|
|
255
|
+
("AlphaToken", "type", 9),
|
|
256
|
+
("CrossMarker", "constant", 6),
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
|
|
260
|
+
def test_view_references_returns_two_hand_counted_symbol_locations(
|
|
261
|
+
ground_truth_workspace: Path,
|
|
262
|
+
) -> None:
|
|
263
|
+
"""CrossMarker is declared at line 6 in exactly Alpha.pas and Beta.pas."""
|
|
264
|
+
payload = _json_output(
|
|
265
|
+
_run_view(ground_truth_workspace, "references", query="CrossMarker")
|
|
266
|
+
)
|
|
267
|
+
|
|
268
|
+
assert {
|
|
269
|
+
(item["name"], item["kind"], Path(item["path"]).name, item["line"])
|
|
270
|
+
for item in payload["items"]
|
|
271
|
+
} == {
|
|
272
|
+
("CrossMarker", "constant", "Alpha.pas", 6),
|
|
273
|
+
("CrossMarker", "constant", "Beta.pas", 6),
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
|
|
277
|
+
def test_view_problems_distinguishes_shallow_and_deep_project_findings(
|
|
278
|
+
ground_truth_workspace: Path,
|
|
279
|
+
) -> None:
|
|
280
|
+
"""The invalid include token is expanded at hand-counted Broken.pas line 5."""
|
|
281
|
+
shallow = _json_output(_run_view(ground_truth_workspace, "problems"))
|
|
282
|
+
deep = _json_output(
|
|
283
|
+
_run_view(ground_truth_workspace, "problems", deep_projects=True)
|
|
284
|
+
)
|
|
285
|
+
|
|
286
|
+
assert shallow["deep_indexed"] is False
|
|
287
|
+
assert shallow["items"] == []
|
|
288
|
+
assert deep["deep_indexed"] is True
|
|
289
|
+
assert {
|
|
290
|
+
(
|
|
291
|
+
item["kind"],
|
|
292
|
+
Path(item["origin"]).name,
|
|
293
|
+
Path(item["file"]).name,
|
|
294
|
+
item["message"],
|
|
295
|
+
)
|
|
296
|
+
for item in deep["items"]
|
|
297
|
+
} == {
|
|
298
|
+
(
|
|
299
|
+
"cant_parse_file",
|
|
300
|
+
"Main.dpr",
|
|
301
|
+
"Broken.pas",
|
|
302
|
+
(
|
|
303
|
+
f"{ground_truth_workspace / 'Broken.pas'}:5:1: "
|
|
304
|
+
"No terminal matches '{' in the current parser context, "
|
|
305
|
+
"at line 5 col 1"
|
|
306
|
+
),
|
|
307
|
+
)
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
def test_index_document_contract_uses_hand_counted_unit_total_in_both_modes(
|
|
312
|
+
ground_truth_workspace: Path,
|
|
313
|
+
) -> None:
|
|
314
|
+
"""Main plus four unit declarations make an exact unit_count of five."""
|
|
315
|
+
shallow = _run_index(
|
|
316
|
+
ground_truth_workspace,
|
|
317
|
+
"index-shallow.json",
|
|
318
|
+
deep_projects=False,
|
|
319
|
+
)
|
|
320
|
+
deep = _run_index(
|
|
321
|
+
ground_truth_workspace,
|
|
322
|
+
"index-deep.json",
|
|
323
|
+
deep_projects=True,
|
|
324
|
+
)
|
|
325
|
+
|
|
326
|
+
for payload, expected_deep in ((shallow, False), (deep, True)):
|
|
327
|
+
assert set(payload) == {
|
|
328
|
+
"deep_projects",
|
|
329
|
+
"overview",
|
|
330
|
+
"problems",
|
|
331
|
+
"projects",
|
|
332
|
+
}
|
|
333
|
+
assert payload["deep_projects"] is expected_deep
|
|
334
|
+
assert payload["overview"]["unit_count"] == 5
|
|
335
|
+
assert shallow["problems"]["deep_indexed"] is False
|
|
336
|
+
assert deep["problems"]["deep_indexed"] is True
|
|
337
|
+
|
|
338
|
+
|
|
339
|
+
def test_markdown_contains_hand_authored_unit_and_symbol_names(
|
|
340
|
+
ground_truth_workspace: Path,
|
|
341
|
+
) -> None:
|
|
342
|
+
units = _run_view(
|
|
343
|
+
ground_truth_workspace,
|
|
344
|
+
"units",
|
|
345
|
+
query="Alpha",
|
|
346
|
+
output_format="markdown",
|
|
347
|
+
)
|
|
348
|
+
symbols = _run_view(
|
|
349
|
+
ground_truth_workspace,
|
|
350
|
+
"symbols",
|
|
351
|
+
query="AlphaToken",
|
|
352
|
+
output_format="markdown",
|
|
353
|
+
)
|
|
354
|
+
|
|
355
|
+
assert units.returncode == 0
|
|
356
|
+
assert units.stderr == ""
|
|
357
|
+
assert "`Alpha` unit" in units.stdout
|
|
358
|
+
assert f"`{ground_truth_workspace / 'Alpha.pas'}:1`" in units.stdout
|
|
359
|
+
assert symbols.returncode == 0
|
|
360
|
+
assert symbols.stderr == ""
|
|
361
|
+
assert "`AlphaToken` type" in symbols.stdout
|
|
362
|
+
assert f"`{ground_truth_workspace / 'Alpha.pas'}:9`" in symbols.stdout
|
|
363
|
+
|
|
364
|
+
|
|
365
|
+
def test_nonexistent_root_has_workspace_not_found_error_contract(
|
|
366
|
+
tmp_path: Path,
|
|
367
|
+
) -> None:
|
|
368
|
+
missing = tmp_path / "does-not-exist"
|
|
369
|
+
completed = _run_view(missing, "overview")
|
|
370
|
+
|
|
371
|
+
assert completed.returncode == 1
|
|
372
|
+
assert completed.stdout == ""
|
|
373
|
+
assert completed.stderr.startswith(
|
|
374
|
+
"cli_error:workspace_not_found: Workspace root does not exist: "
|
|
375
|
+
)
|
|
376
|
+
assert completed.stderr == (
|
|
377
|
+
f"cli_error:workspace_not_found: Workspace root does not exist: {missing}\n"
|
|
378
|
+
)
|
|
379
|
+
|
|
380
|
+
|
|
381
|
+
def test_missing_project_file_has_project_file_not_found_error_contract(
|
|
382
|
+
tmp_path: Path,
|
|
383
|
+
) -> None:
|
|
384
|
+
missing = Path("projects") / "Missing.dpr"
|
|
385
|
+
completed = _run_cli(
|
|
386
|
+
"view",
|
|
387
|
+
"--root",
|
|
388
|
+
str(tmp_path),
|
|
389
|
+
"--project-file",
|
|
390
|
+
str(missing),
|
|
391
|
+
"--layer",
|
|
392
|
+
"overview",
|
|
393
|
+
"--format",
|
|
394
|
+
"json",
|
|
395
|
+
)
|
|
396
|
+
|
|
397
|
+
assert completed.returncode == 1
|
|
398
|
+
assert completed.stdout == ""
|
|
399
|
+
assert completed.stderr.startswith(
|
|
400
|
+
"cli_error:project_file_not_found: Explicit project file does not exist: "
|
|
401
|
+
)
|
|
402
|
+
assert completed.stderr == (
|
|
403
|
+
"cli_error:project_file_not_found: Explicit project file does not "
|
|
404
|
+
f"exist: {(tmp_path / missing).resolve()}\n"
|
|
405
|
+
)
|
|
406
|
+
|
|
407
|
+
|
|
408
|
+
def test_unknown_layer_has_argparse_error_contract(tmp_path: Path) -> None:
|
|
409
|
+
completed = _run_cli(
|
|
410
|
+
"view",
|
|
411
|
+
"--root",
|
|
412
|
+
str(tmp_path),
|
|
413
|
+
"--layer",
|
|
414
|
+
"unknown-layer",
|
|
415
|
+
"--format",
|
|
416
|
+
"json",
|
|
417
|
+
)
|
|
418
|
+
|
|
419
|
+
assert completed.returncode == 2
|
|
420
|
+
assert completed.stdout == ""
|
|
421
|
+
assert completed.stderr.startswith("usage: delphi-lsp-agent view ")
|
|
422
|
+
assert (
|
|
423
|
+
"delphi-lsp-agent view: error: argument --layer: invalid choice: "
|
|
424
|
+
"'unknown-layer'"
|
|
425
|
+
) in completed.stderr
|
|
426
|
+
|
|
427
|
+
|
|
428
|
+
def test_index_payload_paths_use_only_the_native_separator(
|
|
429
|
+
ground_truth_workspace: Path,
|
|
430
|
+
) -> None:
|
|
431
|
+
payload = _run_index(
|
|
432
|
+
ground_truth_workspace,
|
|
433
|
+
"index-paths.json",
|
|
434
|
+
deep_projects=True,
|
|
435
|
+
)
|
|
436
|
+
paths = tuple(_absolute_path_values(payload))
|
|
437
|
+
alternate_separator = "/" if os.sep == "\\" else "\\"
|
|
438
|
+
|
|
439
|
+
assert paths
|
|
440
|
+
assert all(os.sep in path for path in paths)
|
|
441
|
+
assert all(alternate_separator not in path for path in paths)
|
|
442
|
+
assert all(str(Path(path)) == path for path in paths)
|
|
443
|
+
|
|
444
|
+
|
|
445
|
+
@pytest.mark.perf
|
|
446
|
+
@pytest.mark.skipif(
|
|
447
|
+
not DUNITX_ROOT.is_dir(),
|
|
448
|
+
reason="requires the local DUnitX corpus under test_projects/",
|
|
449
|
+
)
|
|
450
|
+
def test_dunitx_references_contains_hand_verified_itest_runner_declaration() -> None:
|
|
451
|
+
source = DUNITX_ROOT / "Source" / "DUnitX.TestFramework.pas"
|
|
452
|
+
source_lines = source.read_text(encoding="utf-8-sig").splitlines()
|
|
453
|
+
assert source_lines[493].strip() == "ITestRunner = interface"
|
|
454
|
+
|
|
455
|
+
payload = _json_output(
|
|
456
|
+
_run_view(DUNITX_ROOT, "references", query="ITestRunner")
|
|
457
|
+
)
|
|
458
|
+
|
|
459
|
+
assert (
|
|
460
|
+
"ITestRunner",
|
|
461
|
+
"interface",
|
|
462
|
+
"DUnitX.TestFramework.pas",
|
|
463
|
+
494,
|
|
464
|
+
) in {
|
|
465
|
+
(item["name"], item["kind"], Path(item["path"]).name, item["line"])
|
|
466
|
+
for item in payload["items"]
|
|
467
|
+
}
|
|
@@ -299,11 +299,19 @@ def test_cli_reports_parallel_setup_failure_without_traceback(
|
|
|
299
299
|
)
|
|
300
300
|
|
|
301
301
|
|
|
302
|
-
def
|
|
302
|
+
def test_problems_view_deep_indexes_only_on_request(
|
|
303
303
|
monkeypatch: pytest.MonkeyPatch,
|
|
304
304
|
capsys: pytest.CaptureFixture[str],
|
|
305
305
|
tmp_path: Path,
|
|
306
306
|
) -> None:
|
|
307
|
+
"""The problems layer no longer forces the per-project dependency pass.
|
|
308
|
+
|
|
309
|
+
Forcing it made ``view --layer problems`` cost 43.7 s on a 78k-line
|
|
310
|
+
workspace with 60 projects -- the same defect class that made ``index``
|
|
311
|
+
unusable before 3.2.1. The payload carries ``deep_indexed`` so consumers
|
|
312
|
+
can tell a shallow problems report from a complete one, and
|
|
313
|
+
``--deep-projects`` opts back into the full pass.
|
|
314
|
+
"""
|
|
307
315
|
calls: list[dict[str, object]] = []
|
|
308
316
|
sentinel = object()
|
|
309
317
|
|
|
@@ -322,22 +330,15 @@ def test_problems_view_deep_indexes_project_diagnostics(
|
|
|
322
330
|
),
|
|
323
331
|
)
|
|
324
332
|
|
|
325
|
-
|
|
326
|
-
[
|
|
327
|
-
"view",
|
|
328
|
-
"--root",
|
|
329
|
-
str(tmp_path),
|
|
330
|
-
"--layer",
|
|
331
|
-
"problems",
|
|
332
|
-
"--format",
|
|
333
|
-
"json",
|
|
334
|
-
]
|
|
335
|
-
)
|
|
333
|
+
base = ["view", "--root", str(tmp_path), "--layer", "problems", "--format", "json"]
|
|
336
334
|
|
|
337
|
-
assert
|
|
338
|
-
assert calls[0]["index_projects"] is
|
|
335
|
+
assert agent_cli.main(base) == 0
|
|
336
|
+
assert calls[0]["index_projects"] is False
|
|
339
337
|
assert json.loads(capsys.readouterr().out)["layer"] == "problems"
|
|
340
338
|
|
|
339
|
+
assert agent_cli.main([*base, "--deep-projects"]) == 0
|
|
340
|
+
assert calls[1]["index_projects"] is True
|
|
341
|
+
|
|
341
342
|
|
|
342
343
|
def test_view_resolves_relative_project_file_from_root(tmp_path: Path) -> None:
|
|
343
344
|
workspace = tmp_path / "workspace"
|