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.
Files changed (384) hide show
  1. {python_delphi_lsp-3.2.1/python_delphi_lsp.egg-info → python_delphi_lsp-3.2.2}/PKG-INFO +4 -3
  2. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/README.md +3 -2
  3. python_delphi_lsp-3.2.2/delphi_lsp/_version.py +1 -0
  4. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/agent_cli.py +1 -1
  5. python_delphi_lsp-3.2.2/docs/release-3.2.2.md +52 -0
  6. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/pyproject.toml +1 -1
  7. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2/python_delphi_lsp.egg-info}/PKG-INFO +4 -3
  8. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/python_delphi_lsp.egg-info/SOURCES.txt +2 -0
  9. python_delphi_lsp-3.2.2/tests/test_agent_cli_content.py +467 -0
  10. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_agent_cli_errors.py +15 -14
  11. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_package_metadata.py +3 -3
  12. python_delphi_lsp-3.2.1/delphi_lsp/_version.py +0 -1
  13. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/.github/workflows/ci.yml +0 -0
  14. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/LICENSE +0 -0
  15. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/MANIFEST.in +0 -0
  16. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/__init__.py +0 -0
  17. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/agent_cache.py +0 -0
  18. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/agent_context.py +0 -0
  19. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/agent_cpg.py +0 -0
  20. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/agent_cpg_builder.py +0 -0
  21. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/agent_layers.py +0 -0
  22. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/agent_metrics.py +0 -0
  23. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/agent_protocol.py +0 -0
  24. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/agent_relations.py +0 -0
  25. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/agent_templates.py +0 -0
  26. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/agent_wiki.py +0 -0
  27. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/agent_workspace.py +0 -0
  28. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/binary.py +0 -0
  29. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/comment_builder.py +0 -0
  30. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/consts.py +0 -0
  31. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/delphiast_lexer.py +0 -0
  32. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/delphiast_parser.py +0 -0
  33. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/delphiast_tokens.py +0 -0
  34. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/grammar.py +0 -0
  35. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/lark_builder.py +0 -0
  36. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/lark_tokens.py +0 -0
  37. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/lexical_scanner.py +0 -0
  38. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/lsp_server.py +0 -0
  39. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/metrics.py +0 -0
  40. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/navigation_cache.py +0 -0
  41. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/nodes.py +0 -0
  42. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/parallel_outline.py +0 -0
  43. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/parser.py +0 -0
  44. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/parser_backend.py +0 -0
  45. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/preprocessor.py +0 -0
  46. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/progress.py +0 -0
  47. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/project_config.py +0 -0
  48. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/project_discovery.py +0 -0
  49. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/project_indexer.py +0 -0
  50. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/py.typed +0 -0
  51. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/semantic.py +0 -0
  52. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/semantic_builder.py +0 -0
  53. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/source_reader.py +0 -0
  54. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/workspace.py +0 -0
  55. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/delphi_lsp/writer.py +0 -0
  56. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/performance-delphi.md +0 -0
  57. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/performance-fpc.md +0 -0
  58. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/release-2.3.0.md +0 -0
  59. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/release-2.3.3.md +0 -0
  60. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/release-3.0.0.md +0 -0
  61. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/release-3.1.0.md +0 -0
  62. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/release-3.1.1.md +0 -0
  63. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/release-3.1.2.md +0 -0
  64. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/release-3.2.0.md +0 -0
  65. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/release-3.2.1.md +0 -0
  66. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/superpowers/plans/2026-07-16-architecture-metrics-implementation.md +0 -0
  67. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/superpowers/plans/2026-07-17-large-codebase-performance.md +0 -0
  68. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/superpowers/plans/2026-07-22-conditional-outline-ranges.md +0 -0
  69. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/superpowers/plans/2026-07-23-2.3-performance.md +0 -0
  70. {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
  71. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/superpowers/plans/2026-07-23-delphiast-python-backend.md +0 -0
  72. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/superpowers/plans/2026-07-23-parallel-cache-prewarming.md +0 -0
  73. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/superpowers/plans/2026-07-24-hybrid-cpg.md +0 -0
  74. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/superpowers/plans/2026-07-24-repository-default-navigation.md +0 -0
  75. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/superpowers/plans/2026-07-27-okf-memory-progress.md +0 -0
  76. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/superpowers/plans/2026-07-27-okf-wiki-export.md +0 -0
  77. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/superpowers/plans/2026-07-27-project-path-configuration.md +0 -0
  78. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/superpowers/specs/2026-07-16-architecture-metrics-design.md +0 -0
  79. {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
  80. {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
  81. {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
  82. {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
  83. {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
  84. {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
  85. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/docs/superpowers/specs/2026-07-24-hybrid-cpg-design.md +0 -0
  86. {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
  87. {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
  88. {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
  89. {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
  90. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/opencode.json +0 -0
  91. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/python_delphi_lsp.egg-info/dependency_links.txt +0 -0
  92. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/python_delphi_lsp.egg-info/entry_points.txt +0 -0
  93. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/python_delphi_lsp.egg-info/requires.txt +0 -0
  94. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/python_delphi_lsp.egg-info/top_level.txt +0 -0
  95. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/scripts/audit_delphi_language_features.py +0 -0
  96. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/scripts/benchmark_cpg.py +0 -0
  97. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/scripts/benchmark_fpc_corpus.py +0 -0
  98. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/scripts/benchmark_github_corpus.py +0 -0
  99. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/scripts/benchmark_parallel_cache.py +0 -0
  100. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/scripts/bootstrap_vllm_codebase_skill_test.py +0 -0
  101. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/scripts/bootstrap_vllm_opencode_test.ps1 +0 -0
  102. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/scripts/bootstrap_vllm_opencode_test.py +0 -0
  103. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/scripts/bootstrap_vllm_opencode_test.sh +0 -0
  104. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/scripts/build_github_performance_corpus.py +0 -0
  105. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/scripts/check_ornith_cache.py +0 -0
  106. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/scripts/generate_progress_pdf.py +0 -0
  107. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/scripts/generate_release_evidence.py +0 -0
  108. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/scripts/ollama/ornith-lspctx.Modelfile +0 -0
  109. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/scripts/prepare_delphi_corpus.py +0 -0
  110. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/scripts/prepare_fpc_corpus.py +0 -0
  111. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/scripts/prepare_ornith_cache.py +0 -0
  112. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/scripts/run_opencode_lsp_probe.py +0 -0
  113. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/scripts/run_openrouter_github_e2e.py +0 -0
  114. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/scripts/start_ornith_vllm.sh +0 -0
  115. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/scripts/summarize_opencode_request_payloads.py +0 -0
  116. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/setup.cfg +0 -0
  117. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitX.Examples.AssertFailureCompare.pas +0 -0
  118. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitX.Examples.EqualityAsserts.pas +0 -0
  119. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitX.Examples.General.pas +0 -0
  120. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitX.Examples.UITest.pas +0 -0
  121. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_2010.dpr +0 -0
  122. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_D10Berlin.dpr +0 -0
  123. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_D10Rio.dpr +0 -0
  124. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_D10Seattle.dpr +0 -0
  125. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_D10Sydney.dpr +0 -0
  126. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_D10Tokyo.dpr +0 -0
  127. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_D11Alexandria.dpr +0 -0
  128. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_D12Athens.dpr +0 -0
  129. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_D13.dpr +0 -0
  130. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_XE.dpr +0 -0
  131. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_XE2.dpr +0 -0
  132. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_XE3.dpr +0 -0
  133. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_XE4.dpr +0 -0
  134. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_XE5.dpr +0 -0
  135. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_XE6.dpr +0 -0
  136. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_XE7.dpr +0 -0
  137. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_XE8.dpr +0 -0
  138. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXFiremonkeyGUI_D10Berlin.dpr +0 -0
  139. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXFiremonkeyGUI_D10Seattle.dpr +0 -0
  140. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXFiremonkeyGUI_D10Tokyo.dpr +0 -0
  141. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXFiremonkeyGUI_XE5.dpr +0 -0
  142. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXFiremonkeyGUI_XE6.dpr +0 -0
  143. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXFiremonkeyGUI_XE7.dpr +0 -0
  144. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXFiremonkeyGUI_XE8.dpr +0 -0
  145. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXVCLGUI_D10Berlin.dpr +0 -0
  146. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXVCLGUI_D10Seattle.dpr +0 -0
  147. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXVCLGUI_XE.dpr +0 -0
  148. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/DUnitXVCLGUI_XE7.dpr +0 -0
  149. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/NonNamespacedExample.pas +0 -0
  150. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Examples/ProviderExample.pas +0 -0
  151. {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
  152. {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
  153. {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
  154. {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
  155. {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
  156. {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
  157. {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
  158. {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
  159. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.NewUnitWizard.pas +0 -0
  160. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.NewUnitWizardEx.pas +0 -0
  161. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.ProjectWizard.pas +0 -0
  162. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.ProjectWizardEx.pas +0 -0
  163. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.Registration.pas +0 -0
  164. {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
  165. {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
  166. {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
  167. {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
  168. {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
  169. {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
  170. {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
  171. {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
  172. {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
  173. {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
  174. {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
  175. {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
  176. {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
  177. {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
  178. {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
  179. {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
  180. {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
  181. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/LICENSE.txt +0 -0
  182. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUNitX.Loggers.GUIX.pas +0 -0
  183. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUNitX.Loggers.MobileGUI.pas +0 -0
  184. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Assert.Ex.pas +0 -0
  185. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Assert.pas +0 -0
  186. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Attributes.pas +0 -0
  187. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.AutoDetect.Console.pas +0 -0
  188. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Banner.pas +0 -0
  189. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.CategoryExpression.pas +0 -0
  190. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.CommandLine.OptionDef.pas +0 -0
  191. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.CommandLine.Options.pas +0 -0
  192. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.CommandLine.Parser.pas +0 -0
  193. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.ComparableFormat.Csv.pas +0 -0
  194. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.ComparableFormat.Xml.pas +0 -0
  195. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.ComparableFormat.pas +0 -0
  196. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.ConsoleWriter.Base.pas +0 -0
  197. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Constants.pas +0 -0
  198. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.DUnitCompatibility.pas +0 -0
  199. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Exceptions.pas +0 -0
  200. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Extensibility.pas +0 -0
  201. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.FilterBuilder.pas +0 -0
  202. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Filters.pas +0 -0
  203. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.FixtureBuilder.pas +0 -0
  204. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.FixtureProvider.pas +0 -0
  205. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.FixtureResult.pas +0 -0
  206. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Generics.pas +0 -0
  207. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Helpers.pas +0 -0
  208. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Init.pas +0 -0
  209. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.InternalDataProvider.pas +0 -0
  210. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.InternalInterfaces.pas +0 -0
  211. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Linux.Console.pas +0 -0
  212. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Loggers.Console.pas +0 -0
  213. {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
  214. {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
  215. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Loggers.Null.pas +0 -0
  216. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Loggers.Text.pas +0 -0
  217. {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
  218. {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
  219. {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
  220. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.MacOS.Console.pas +0 -0
  221. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.MemoryLeakMonitor.Default.pas +0 -0
  222. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.MemoryLeakMonitor.FastMM4.pas +0 -0
  223. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.MemoryLeakMonitor.FastMM5.pas +0 -0
  224. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.MemoryLeaks.inc +0 -0
  225. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.OptionsDefinition.pas +0 -0
  226. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.ResStrs.pas +0 -0
  227. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.RunResults.pas +0 -0
  228. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.ServiceLocator.pas +0 -0
  229. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.StackTrace.EurekaLog7.pas +0 -0
  230. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.StackTrace.JCL.pas +0 -0
  231. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.StackTrace.MadExcept3.pas +0 -0
  232. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.StackTrace.MadExcept4.pas +0 -0
  233. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.StackTrace.MadExcept5.pas +0 -0
  234. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Stacktrace.inc +0 -0
  235. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Test.pas +0 -0
  236. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.TestDataProvider.pas +0 -0
  237. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.TestFixture.pas +0 -0
  238. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.TestFramework.pas +0 -0
  239. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.TestNameParser.pas +0 -0
  240. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.TestResult.pas +0 -0
  241. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.TestRunner.pas +0 -0
  242. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Timeout.pas +0 -0
  243. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Types.pas +0 -0
  244. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Utils.XML.pas +0 -0
  245. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Utils.pas +0 -0
  246. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.WeakReference.pas +0 -0
  247. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.Windows.Console.pas +0 -0
  248. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Source/DUnitX.inc +0 -0
  249. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitX.Options.pas +0 -0
  250. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitX.SingleNameSpace.pas +0 -0
  251. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitX.Stacktrace.inc +0 -0
  252. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.Assert.pas +0 -0
  253. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.CategoryParser.pas +0 -0
  254. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.CommandLineParser.pas +0 -0
  255. {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
  256. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.DUnitCompatibility.pas +0 -0
  257. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.Example.pas +0 -0
  258. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.Framework.pas +0 -0
  259. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.IgnoreFixture.pas +0 -0
  260. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.Inheritance.pas +0 -0
  261. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.IoC.pas +0 -0
  262. {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
  263. {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
  264. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.MemoryLeaks.pas +0 -0
  265. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.TestDataProvider.pas +0 -0
  266. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.TestFixture.pas +0 -0
  267. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.TestNameParser.pas +0 -0
  268. {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
  269. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.Utils.pas +0 -0
  270. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.WeakReference.pas +0 -0
  271. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitXGuiTest.dpr +0 -0
  272. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitXTestProject.dpr +0 -0
  273. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitXTest_D2010.dpr +0 -0
  274. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/DUnitX/Tests/DUnitXTest_XE.dpr +0 -0
  275. {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
  276. {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
  277. {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
  278. {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
  279. {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
  280. {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
  281. {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
  282. {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
  283. {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
  284. {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
  285. {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
  286. {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
  287. {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
  288. {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
  289. {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
  290. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/mORMot2/LICENCE.md +0 -0
  291. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/test_projects/github_repos/mORMot2/src/mormot.defines.inc +0 -0
  292. {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
  293. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/corpora.performance.lock.json +0 -0
  294. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/DeprecatedOnConst.pas +0 -0
  295. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/VariantRecordFieldAttributes.pas +0 -0
  296. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/alignedrecords.pas +0 -0
  297. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/constset.pas +0 -0
  298. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/deprecatedtype.pas +0 -0
  299. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/dottedtypes.pas +0 -0
  300. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/endtoken.pas +0 -0
  301. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/experimentals.pas +0 -0
  302. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/externalfunction.pas +0 -0
  303. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/finalizationinitializationexports.pas +0 -0
  304. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/forwardoverloaded.pas +0 -0
  305. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/forwardwithoutsemicolon.pas +0 -0
  306. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/genericconstraints.pas +0 -0
  307. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/genericinterfacemethoddelegation.pas +0 -0
  308. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/implementsgenerictype.pas +0 -0
  309. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/include file2.inc +0 -0
  310. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/includefile.inc +0 -0
  311. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/includefile.pas +0 -0
  312. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/managedrecords.pas +0 -0
  313. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/messagemethod.pas +0 -0
  314. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/multiline.pas +0 -0
  315. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/nonalignedrecords.pas +0 -0
  316. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/numbers.pas +0 -0
  317. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/pointerchars.pas +0 -0
  318. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/properties.pas +0 -0
  319. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/strictvisibility.pas +0 -0
  320. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/tryexcept.pas +0 -0
  321. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/umlauts.pas +0 -0
  322. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/legacy_snippets/whitespacearoundifdefcondition.pas +0 -0
  323. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/library_demo.dpr +0 -0
  324. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/package_demo.dpk +0 -0
  325. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/program_demo.dpr +0 -0
  326. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/unit_advanced.pas +0 -0
  327. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/unit_attributes.pas +0 -0
  328. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/unit_basic.pas +0 -0
  329. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/unit_consumer.pas +0 -0
  330. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/unit_generics.pas +0 -0
  331. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/unit_inheritance.pas +0 -0
  332. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/unit_math.pas +0 -0
  333. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/unit_properties.pas +0 -0
  334. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/unit_sections.pas +0 -0
  335. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/unit_statements.pas +0 -0
  336. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/unit_types.pas +0 -0
  337. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/unit_unresolved.pas +0 -0
  338. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fixtures/unit_with.pas +0 -0
  339. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/fpc_parse_quality.baseline.json +0 -0
  340. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_agent_cache.py +0 -0
  341. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_agent_codebase.py +0 -0
  342. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_agent_context.py +0 -0
  343. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_agent_cpg.py +0 -0
  344. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_agent_metrics.py +0 -0
  345. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_agent_protocol.py +0 -0
  346. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_agent_relations.py +0 -0
  347. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_agent_wiki.py +0 -0
  348. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_agent_worker.py +0 -0
  349. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_agent_workspace.py +0 -0
  350. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_bootstrap_vllm_codebase_skill.py +0 -0
  351. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_bootstrap_vllm_opencode.py +0 -0
  352. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_delphi_performance_corpus.py +0 -0
  353. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_delphiast_lexer.py +0 -0
  354. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_delphiast_native_compatibility.py +0 -0
  355. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_delphiast_parser.py +0 -0
  356. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_delphiast_semantic_compatibility.py +0 -0
  357. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_diagnostics.py +0 -0
  358. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_fpc_performance_corpus.py +0 -0
  359. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_github_performance_corpus.py +0 -0
  360. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_language_feature_matrix.py +0 -0
  361. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_legacy_snippets.py +0 -0
  362. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_lsp_features.py +0 -0
  363. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_lsp_server.py +0 -0
  364. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_lsp_support.py +0 -0
  365. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_metrics.py +0 -0
  366. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_navigation_cache.py +0 -0
  367. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_opencode_config.py +0 -0
  368. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_opencode_probe.py +0 -0
  369. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_opencode_request_payloads.py +0 -0
  370. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_openrouter_github_e2e.py +0 -0
  371. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_ornith_cache_prepare.py +0 -0
  372. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_parallel_outline.py +0 -0
  373. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_parser.py +0 -0
  374. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_parser_backends.py +0 -0
  375. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_preprocessor.py +0 -0
  376. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_progress.py +0 -0
  377. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_project_config.py +0 -0
  378. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_project_discovery.py +0 -0
  379. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_project_indexer.py +0 -0
  380. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_release_evidence.py +0 -0
  381. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_semantic.py +0 -0
  382. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_throughput_scaling.py +0 -0
  383. {python_delphi_lsp-3.2.1 → python_delphi_lsp-3.2.2}/tests/test_vllm_start_script.py +0 -0
  384. {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.1
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.1 is authored by Dark Light and supports Windows, macOS, and Linux.
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
- layer. It is off by default because it dominates run time on real repositories:
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.1 is authored by Dark Light and supports Windows, macOS, and Linux.
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
- layer. It is off by default because it dominates run time on real repositories:
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 or args.layer == "problems",
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.1"
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.1
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.1 is authored by Dark Light and supports Windows, macOS, and Linux.
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
- layer. It is off by default because it dominates run time on real repositories:
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 test_problems_view_deep_indexes_project_diagnostics(
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
- result = agent_cli.main(
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 result == 0
338
- assert calls[0]["index_projects"] is True
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"