python-delphi-lsp 3.1.1__tar.gz → 3.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/MANIFEST.in +12 -0
- {python_delphi_lsp-3.1.1/python_delphi_lsp.egg-info → python_delphi_lsp-3.2.0}/PKG-INFO +8 -2
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/README.md +7 -1
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/delphi_lsp/__init__.py +105 -89
- python_delphi_lsp-3.2.0/delphi_lsp/_version.py +1 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/delphi_lsp/agent_cache.py +95 -42
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/delphi_lsp/agent_cli.py +26 -6
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/delphi_lsp/agent_context.py +47 -18
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/delphi_lsp/agent_cpg.py +3 -4
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/delphi_lsp/agent_cpg_builder.py +0 -1
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/delphi_lsp/agent_layers.py +11 -7
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/delphi_lsp/agent_metrics.py +2 -4
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/delphi_lsp/agent_protocol.py +2 -3
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/delphi_lsp/agent_relations.py +52 -8
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/delphi_lsp/agent_templates.py +1 -2
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/delphi_lsp/agent_wiki.py +6 -6
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/delphi_lsp/agent_workspace.py +9 -5
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/delphi_lsp/binary.py +5 -5
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/delphi_lsp/comment_builder.py +1 -2
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/delphi_lsp/delphiast_lexer.py +3 -5
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/delphi_lsp/delphiast_parser.py +384 -52
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/delphi_lsp/grammar.py +0 -1
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/delphi_lsp/lark_builder.py +5 -10
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/delphi_lsp/lark_tokens.py +0 -1
- python_delphi_lsp-3.2.0/delphi_lsp/lexical_scanner.py +30 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/delphi_lsp/lsp_server.py +542 -101
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/delphi_lsp/metrics.py +50 -15
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/delphi_lsp/navigation_cache.py +3 -4
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/delphi_lsp/nodes.py +19 -19
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/delphi_lsp/parallel_outline.py +3 -4
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/delphi_lsp/parser.py +101 -17
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/delphi_lsp/preprocessor.py +238 -25
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/delphi_lsp/progress.py +1 -1
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/delphi_lsp/project_config.py +2 -1
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/delphi_lsp/project_discovery.py +3 -4
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/delphi_lsp/project_indexer.py +18 -18
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/delphi_lsp/semantic.py +28 -17
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/delphi_lsp/semantic_builder.py +29 -20
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/delphi_lsp/workspace.py +1 -1
- python_delphi_lsp-3.2.0/docs/performance-delphi.md +161 -0
- python_delphi_lsp-3.2.0/docs/performance-fpc.md +239 -0
- python_delphi_lsp-3.2.0/docs/release-3.1.2.md +39 -0
- python_delphi_lsp-3.2.0/docs/release-3.2.0.md +77 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/pyproject.toml +5 -2
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0/python_delphi_lsp.egg-info}/PKG-INFO +8 -2
- python_delphi_lsp-3.2.0/python_delphi_lsp.egg-info/SOURCES.txt +377 -0
- python_delphi_lsp-3.2.0/scripts/benchmark_fpc_corpus.py +2741 -0
- python_delphi_lsp-3.2.0/scripts/prepare_delphi_corpus.py +213 -0
- python_delphi_lsp-3.2.0/scripts/prepare_fpc_corpus.py +171 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/scripts/run_openrouter_github_e2e.py +6 -1
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Examples/DUnitX.Examples.AssertFailureCompare.pas +84 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Examples/DUnitX.Examples.EqualityAsserts.pas +66 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Examples/DUnitX.Examples.General.pas +379 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Examples/DUnitX.Examples.UITest.pas +89 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_2010.dpr +94 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_D10Berlin.dpr +73 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_D10Rio.dpr +75 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_D10Seattle.dpr +73 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_D10Sydney.dpr +75 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_D10Tokyo.dpr +75 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_D11Alexandria.dpr +78 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_D12Athens.dpr +119 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_D13.dpr +119 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_XE.dpr +98 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_XE2.dpr +91 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_XE3.dpr +86 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_XE4.dpr +85 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_XE5.dpr +85 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_XE6.dpr +85 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_XE7.dpr +94 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_XE8.dpr +71 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Examples/DUnitXFiremonkeyGUI_D10Berlin.dpr +30 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Examples/DUnitXFiremonkeyGUI_D10Seattle.dpr +30 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Examples/DUnitXFiremonkeyGUI_D10Tokyo.dpr +30 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Examples/DUnitXFiremonkeyGUI_XE5.dpr +30 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Examples/DUnitXFiremonkeyGUI_XE6.dpr +30 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Examples/DUnitXFiremonkeyGUI_XE7.dpr +30 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Examples/DUnitXFiremonkeyGUI_XE8.dpr +30 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Examples/DUnitXVCLGUI_D10Berlin.dpr +59 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Examples/DUnitXVCLGUI_D10Seattle.dpr +59 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Examples/DUnitXVCLGUI_XE.dpr +65 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Examples/DUnitXVCLGUI_XE7.dpr +65 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Examples/NonNamespacedExample.pas +30 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Examples/ProviderExample.pas +122 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.CodeGen.NewProject.pas +213 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.CodeGen.NewTestProject.pas +106 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.CodeGen.NewTestUnit.pas +175 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.CodeGen.NewUnit.pas +186 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.CodeGen.SourceFile.pas +74 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.CodeGen.Templates.pas +284 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.Forms.NewProjectWizard.pas +151 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.Forms.NewUnitWizard.pas +117 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.NewUnitWizard.pas +166 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.NewUnitWizardEx.pas +113 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.ProjectWizard.pas +185 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.ProjectWizardEx.pas +136 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.Registration.pas +68 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_2010.dpk +47 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_D10Berlin.dpk +51 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_D10Rio.dpk +51 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_D10Seattle.dpk +51 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_D10Tokyo.dpk +51 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_D11Alexandria.dpk +51 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_D12Athens.dpk +51 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_D13Florence.dpk +51 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_Sydney.dpk +51 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_XE.dpk +47 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_XE2.dpk +50 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_XE3.dpk +50 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_XE4.dpk +50 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_XE5.dpk +50 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_XE6.dpk +50 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_XE7.dpk +50 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_XE8.dpk +50 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/LICENSE.txt +202 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUNitX.Loggers.GUIX.pas +597 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUNitX.Loggers.MobileGUI.pas +427 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.Assert.Ex.pas +108 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.Assert.pas +1571 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.Attributes.pas +476 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.AutoDetect.Console.pas +74 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.Banner.pas +79 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.CategoryExpression.pas +293 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.CommandLine.OptionDef.pas +336 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.CommandLine.Options.pas +229 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.CommandLine.Parser.pas +354 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.ComparableFormat.Csv.pas +41 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.ComparableFormat.Xml.pas +41 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.ComparableFormat.pas +39 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.ConsoleWriter.Base.pas +251 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.Constants.pas +43 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.DUnitCompatibility.pas +458 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.Exceptions.pas +91 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.Extensibility.pas +249 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.FilterBuilder.pas +127 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.Filters.pas +455 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.FixtureBuilder.pas +89 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.FixtureProvider.pas +594 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.FixtureResult.pas +372 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.Generics.pas +440 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.Helpers.pas +55 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.Init.pas +70 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.InternalDataProvider.pas +29 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.InternalInterfaces.pas +87 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.Linux.Console.pas +159 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.Loggers.Console.pas +481 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.Loggers.GUI.VCL.RichEdit.pas +430 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.Loggers.GUI.VCL.pas +1557 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.Loggers.Null.pas +171 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.Loggers.Text.pas +424 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.Loggers.XML.JUnit.pas +369 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.Loggers.XML.NUnit.pas +448 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.Loggers.XML.xUnit.pas +36 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.MacOS.Console.pas +159 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.MemoryLeakMonitor.Default.pas +116 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.MemoryLeakMonitor.FastMM4.pas +143 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.MemoryLeakMonitor.FastMM5.pas +126 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.MemoryLeaks.inc +34 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.OptionsDefinition.pas +133 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.ResStrs.pas +185 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.RunResults.pas +259 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.ServiceLocator.pas +344 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.StackTrace.EurekaLog7.pas +115 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.StackTrace.JCL.pas +133 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.StackTrace.MadExcept3.pas +108 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.StackTrace.MadExcept4.pas +120 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.StackTrace.MadExcept5.pas +105 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.Stacktrace.inc +43 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.Test.pas +452 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.TestDataProvider.pas +112 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.TestFixture.pas +637 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.TestFramework.pas +936 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.TestNameParser.pas +174 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.TestResult.pas +286 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.TestRunner.pas +1082 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.Timeout.pas +181 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.Types.pas +59 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.Utils.XML.pas +138 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.Utils.pas +3572 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.WeakReference.pas +365 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.Windows.Console.pas +227 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Source/DUnitX.inc +115 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Tests/DUnitX.Options.pas +81 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Tests/DUnitX.SingleNameSpace.pas +43 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Tests/DUnitX.Stacktrace.inc +7 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.Assert.pas +1536 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.CategoryParser.pas +246 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.CommandLineParser.pas +516 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.ConsoleWriter.Base.pas +377 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.DUnitCompatibility.pas +98 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.Example.pas +427 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.Framework.pas +7 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.IgnoreFixture.pas +119 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.Inheritance.pas +113 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.IoC.pas +176 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.Loggers.XML.JUnit.pas +279 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.Loggers.XML.NUnit.pas +279 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.MemoryLeaks.pas +96 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.TestDataProvider.pas +141 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.TestFixture.pas +302 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.TestNameParser.pas +65 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.Utils.XML.pas +33 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.Utils.pas +269 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.WeakReference.pas +196 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Tests/DUnitXGuiTest.dpr +48 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Tests/DUnitXTestProject.dpr +92 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Tests/DUnitXTest_D2010.dpr +131 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/Tests/DUnitXTest_XE.dpr +130 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/packages/RAD Studio 10.0/VSoft.DUnitXWinR.dpk +88 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/packages/RAD Studio 10.1/VSoft.DUnitXWinR.dpk +88 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/packages/RAD Studio 10.2/VSoft.DUnitXWinR.dpk +88 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/packages/RAD Studio 10.3/VSoft.DUnitXWinR.dpk +88 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/packages/RAD Studio 10.4/VSoft.DUnitXWinR.dpk +88 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/packages/RAD Studio 11.0/VSoft.DUnitXWinR.dpk +88 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/packages/RAD Studio 12.0/VSoft.DUnitXWinR.dpk +88 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/packages/RAD Studio 13.0/VSoft.DUnitXWinR.dpk +88 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/packages/RAD Studio XE2/VSoft.DUnitXWinR.dpk +88 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/packages/RAD Studio XE3/VSoft.DUnitXWinR.dpk +88 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/packages/RAD Studio XE4/VSoft.DUnitXWinR.dpk +88 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/packages/RAD Studio XE5/VSoft.DUnitXWinR.dpk +88 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/packages/RAD Studio XE6/VSoft.DUnitXWinR.dpk +88 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/packages/RAD Studio XE7/VSoft.DUnitXWinR.dpk +88 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/DUnitX/packages/RAD Studio XE8/VSoft.DUnitXWinR.dpk +88 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/mORMot2/LICENCE.md +81 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/mORMot2/src/mormot.defines.inc +1121 -0
- python_delphi_lsp-3.2.0/test_projects/github_repos/mORMot2/src/ui/mormot.ui.pdf.pas +12508 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/corpora.performance.lock.json +6 -1
- python_delphi_lsp-3.2.0/tests/fpc_parse_quality.baseline.json +1713 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/test_agent_cache.py +246 -16
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/test_agent_cli_errors.py +73 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/test_agent_codebase.py +3 -3
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/test_agent_context.py +40 -4
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/test_agent_cpg.py +2 -3
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/test_agent_metrics.py +25 -1
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/test_agent_relations.py +160 -16
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/test_agent_worker.py +2 -2
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/test_bootstrap_vllm_codebase_skill.py +0 -1
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/test_bootstrap_vllm_opencode.py +0 -1
- python_delphi_lsp-3.2.0/tests/test_delphi_performance_corpus.py +210 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/test_delphiast_lexer.py +25 -0
- python_delphi_lsp-3.2.0/tests/test_delphiast_native_compatibility.py +1013 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/test_delphiast_parser.py +0 -1
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/test_delphiast_semantic_compatibility.py +0 -1
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/test_diagnostics.py +0 -1
- python_delphi_lsp-3.2.0/tests/test_fpc_performance_corpus.py +970 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/test_github_performance_corpus.py +1 -1
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/test_language_feature_matrix.py +0 -1
- python_delphi_lsp-3.2.0/tests/test_legacy_snippets.py +55 -0
- python_delphi_lsp-3.2.0/tests/test_lsp_server.py +845 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/test_lsp_support.py +83 -4
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/test_metrics.py +51 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/test_opencode_config.py +0 -1
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/test_opencode_probe.py +0 -1
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/test_opencode_request_payloads.py +0 -1
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/test_openrouter_github_e2e.py +28 -2
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/test_ornith_cache_prepare.py +0 -1
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/test_package_metadata.py +23 -4
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/test_parallel_outline.py +6 -5
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/test_parser.py +32 -4
- python_delphi_lsp-3.2.0/tests/test_parser_backends.py +368 -0
- python_delphi_lsp-3.2.0/tests/test_preprocessor.py +522 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/test_progress.py +1 -1
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/test_project_discovery.py +7 -7
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/test_release_evidence.py +1 -10
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/test_semantic.py +35 -1
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/test_vllm_start_script.py +0 -1
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/test_workspace.py +1 -2
- python_delphi_lsp-3.1.1/delphi_lsp/_version.py +0 -1
- python_delphi_lsp-3.1.1/python_delphi_lsp.egg-info/SOURCES.txt +0 -190
- python_delphi_lsp-3.1.1/tests/test_delphiast_native_compatibility.py +0 -364
- python_delphi_lsp-3.1.1/tests/test_legacy_snippets.py +0 -34
- python_delphi_lsp-3.1.1/tests/test_lsp_server.py +0 -309
- python_delphi_lsp-3.1.1/tests/test_parser_backends.py +0 -135
- python_delphi_lsp-3.1.1/tests/test_preprocessor.py +0 -245
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/.github/workflows/ci.yml +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/LICENSE +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/delphi_lsp/consts.py +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/delphi_lsp/delphiast_tokens.py +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/delphi_lsp/parser_backend.py +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/delphi_lsp/py.typed +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/delphi_lsp/source_reader.py +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/delphi_lsp/writer.py +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/docs/release-2.3.0.md +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/docs/release-2.3.3.md +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/docs/release-3.0.0.md +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/docs/release-3.1.0.md +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/docs/release-3.1.1.md +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/docs/superpowers/plans/2026-07-16-architecture-metrics-implementation.md +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/docs/superpowers/plans/2026-07-17-large-codebase-performance.md +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/docs/superpowers/plans/2026-07-22-conditional-outline-ranges.md +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/docs/superpowers/plans/2026-07-23-2.3-performance.md +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/docs/superpowers/plans/2026-07-23-bounded-cli-cache-daemon.md +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/docs/superpowers/plans/2026-07-23-delphiast-python-backend.md +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/docs/superpowers/plans/2026-07-23-parallel-cache-prewarming.md +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/docs/superpowers/plans/2026-07-24-hybrid-cpg.md +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/docs/superpowers/plans/2026-07-24-repository-default-navigation.md +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/docs/superpowers/plans/2026-07-27-okf-memory-progress.md +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/docs/superpowers/plans/2026-07-27-okf-wiki-export.md +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/docs/superpowers/plans/2026-07-27-project-path-configuration.md +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/docs/superpowers/specs/2026-07-16-architecture-metrics-design.md +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/docs/superpowers/specs/2026-07-17-large-codebase-performance-design.md +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/docs/superpowers/specs/2026-07-22-conditional-outline-ranges-design.md +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/docs/superpowers/specs/2026-07-23-2.3-performance-design.md +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/docs/superpowers/specs/2026-07-23-bounded-cli-cache-daemon-design.md +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/docs/superpowers/specs/2026-07-23-delphiast-python-backend-design.md +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/docs/superpowers/specs/2026-07-23-parallel-cache-prewarming-design.md +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/docs/superpowers/specs/2026-07-24-hybrid-cpg-design.md +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/docs/superpowers/specs/2026-07-24-repository-default-navigation-design.md +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/docs/superpowers/specs/2026-07-27-okf-memory-progress-design.md +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/docs/superpowers/specs/2026-07-27-okf-wiki-export-design.md +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/docs/superpowers/specs/2026-07-27-project-path-configuration-design.md +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/opencode.json +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/python_delphi_lsp.egg-info/dependency_links.txt +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/python_delphi_lsp.egg-info/entry_points.txt +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/python_delphi_lsp.egg-info/requires.txt +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/python_delphi_lsp.egg-info/top_level.txt +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/scripts/audit_delphi_language_features.py +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/scripts/benchmark_cpg.py +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/scripts/benchmark_github_corpus.py +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/scripts/benchmark_parallel_cache.py +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/scripts/bootstrap_vllm_codebase_skill_test.py +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/scripts/bootstrap_vllm_opencode_test.ps1 +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/scripts/bootstrap_vllm_opencode_test.py +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/scripts/bootstrap_vllm_opencode_test.sh +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/scripts/build_github_performance_corpus.py +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/scripts/check_ornith_cache.py +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/scripts/generate_progress_pdf.py +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/scripts/generate_release_evidence.py +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/scripts/ollama/ornith-lspctx.Modelfile +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/scripts/prepare_ornith_cache.py +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/scripts/run_opencode_lsp_probe.py +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/scripts/start_ornith_vllm.sh +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/scripts/summarize_opencode_request_payloads.py +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/setup.cfg +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/DeprecatedOnConst.pas +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/VariantRecordFieldAttributes.pas +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/alignedrecords.pas +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/constset.pas +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/deprecatedtype.pas +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/dottedtypes.pas +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/endtoken.pas +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/experimentals.pas +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/externalfunction.pas +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/finalizationinitializationexports.pas +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/forwardoverloaded.pas +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/forwardwithoutsemicolon.pas +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/genericconstraints.pas +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/genericinterfacemethoddelegation.pas +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/implementsgenerictype.pas +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/include file2.inc +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/includefile.inc +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/includefile.pas +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/managedrecords.pas +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/messagemethod.pas +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/multiline.pas +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/nonalignedrecords.pas +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/numbers.pas +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/pointerchars.pas +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/properties.pas +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/strictvisibility.pas +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/tryexcept.pas +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/umlauts.pas +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/whitespacearoundifdefcondition.pas +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/fixtures/library_demo.dpr +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/fixtures/package_demo.dpk +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/fixtures/program_demo.dpr +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/fixtures/unit_advanced.pas +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/fixtures/unit_attributes.pas +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/fixtures/unit_basic.pas +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/fixtures/unit_consumer.pas +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/fixtures/unit_generics.pas +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/fixtures/unit_inheritance.pas +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/fixtures/unit_math.pas +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/fixtures/unit_properties.pas +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/fixtures/unit_sections.pas +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/fixtures/unit_statements.pas +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/fixtures/unit_types.pas +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/fixtures/unit_unresolved.pas +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/fixtures/unit_with.pas +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/test_agent_protocol.py +1 -1
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/test_agent_wiki.py +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/test_agent_workspace.py +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/test_lsp_features.py +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/test_navigation_cache.py +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/test_project_config.py +0 -0
- {python_delphi_lsp-3.1.1 → python_delphi_lsp-3.2.0}/tests/test_project_indexer.py +0 -0
|
@@ -7,6 +7,9 @@ include scripts/check_ornith_cache.py
|
|
|
7
7
|
include scripts/audit_delphi_language_features.py
|
|
8
8
|
include scripts/build_github_performance_corpus.py
|
|
9
9
|
include scripts/benchmark_github_corpus.py
|
|
10
|
+
include scripts/prepare_fpc_corpus.py
|
|
11
|
+
include scripts/benchmark_fpc_corpus.py
|
|
12
|
+
include scripts/prepare_delphi_corpus.py
|
|
10
13
|
include scripts/benchmark_cpg.py
|
|
11
14
|
include scripts/benchmark_parallel_cache.py
|
|
12
15
|
include scripts/bootstrap_vllm_opencode_test.py
|
|
@@ -22,5 +25,14 @@ include scripts/start_ornith_vllm.sh
|
|
|
22
25
|
include scripts/summarize_opencode_request_payloads.py
|
|
23
26
|
include scripts/ollama/ornith-lspctx.Modelfile
|
|
24
27
|
include tests/corpora.performance.lock.json
|
|
28
|
+
include tests/fpc_parse_quality.baseline.json
|
|
29
|
+
include tests/test_fpc_performance_corpus.py
|
|
30
|
+
include tests/test_delphi_performance_corpus.py
|
|
31
|
+
include docs/performance-delphi.md
|
|
25
32
|
recursive-include docs *.md
|
|
26
33
|
recursive-include tests *.py *.pas *.inc *.dpr *.dpk
|
|
34
|
+
include test_projects/github_repos/DUnitX/LICENSE.txt
|
|
35
|
+
recursive-include test_projects/github_repos/DUnitX *.dpk *.dpr *.inc *.pas
|
|
36
|
+
include test_projects/github_repos/mORMot2/LICENCE.md
|
|
37
|
+
include test_projects/github_repos/mORMot2/src/mormot.defines.inc
|
|
38
|
+
include test_projects/github_repos/mORMot2/src/ui/mormot.ui.pdf.pas
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-delphi-lsp
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.2.0
|
|
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.
|
|
48
|
+
Version 3.2.0 is authored by Dark Light and supports Windows, macOS, and Linux.
|
|
49
49
|
|
|
50
50
|
## Install and quick start
|
|
51
51
|
|
|
@@ -521,6 +521,12 @@ source was parsed for CPG. Legacy navigation retained 98.43 percent of its
|
|
|
521
521
|
in-run control throughput, above the 95-percent release floor. Reproduce it
|
|
522
522
|
with `python scripts/benchmark_cpg.py --root CORPUS --query Run --workers 8`.
|
|
523
523
|
|
|
524
|
+
Separate reproducible performance profiles cover the coherent FPC compiler
|
|
525
|
+
tree and a project-file-dense Delphi corpus. The Delphi profile can add a
|
|
526
|
+
deterministic `__history`/recovery/build/search-path overlay without changing
|
|
527
|
+
the pinned base corpus. See [the FPC benchmark](docs/performance-fpc.md) and
|
|
528
|
+
[the Delphi discovery benchmark](docs/performance-delphi.md).
|
|
529
|
+
|
|
524
530
|
For every source size the navigator builds an outline first, loads source detail
|
|
525
531
|
lazily for a selected target, and returns only selected fragments. Typed source
|
|
526
532
|
chunks are at most 6000 characters and also respect the response budget. This
|
|
@@ -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.
|
|
5
|
+
Version 3.2.0 is authored by Dark Light and supports Windows, macOS, and Linux.
|
|
6
6
|
|
|
7
7
|
## Install and quick start
|
|
8
8
|
|
|
@@ -478,6 +478,12 @@ source was parsed for CPG. Legacy navigation retained 98.43 percent of its
|
|
|
478
478
|
in-run control throughput, above the 95-percent release floor. Reproduce it
|
|
479
479
|
with `python scripts/benchmark_cpg.py --root CORPUS --query Run --workers 8`.
|
|
480
480
|
|
|
481
|
+
Separate reproducible performance profiles cover the coherent FPC compiler
|
|
482
|
+
tree and a project-file-dense Delphi corpus. The Delphi profile can add a
|
|
483
|
+
deterministic `__history`/recovery/build/search-path overlay without changing
|
|
484
|
+
the pinned base corpus. See [the FPC benchmark](docs/performance-fpc.md) and
|
|
485
|
+
[the Delphi discovery benchmark](docs/performance-delphi.md).
|
|
486
|
+
|
|
481
487
|
For every source size the navigator builds an outline first, loads source detail
|
|
482
488
|
lazily for a selected target, and returns only selected fragments. Typed source
|
|
483
489
|
chunks are at most 6000 characters and also respect the response budget. This
|
|
@@ -1,6 +1,26 @@
|
|
|
1
1
|
from ._version import __version__
|
|
2
2
|
from .binary import BinarySerializer, dumps, loads
|
|
3
|
+
from .comment_builder import build_comment_nodes
|
|
3
4
|
from .consts import AttributeName, SyntaxNodeType
|
|
5
|
+
from .grammar import GRAMMAR_RULES, build_grammar
|
|
6
|
+
from .lark_tokens import (
|
|
7
|
+
BASE_TERMINALS,
|
|
8
|
+
KEYWORD_TERMINALS,
|
|
9
|
+
KEYWORDS,
|
|
10
|
+
build_grammar_snippet,
|
|
11
|
+
)
|
|
12
|
+
from .lsp_server import LspWorkspaceState, create_server
|
|
13
|
+
from .metrics import (
|
|
14
|
+
CyclomaticMetrics,
|
|
15
|
+
HalsteadMetrics,
|
|
16
|
+
LineMetrics,
|
|
17
|
+
MetricProblem,
|
|
18
|
+
ProjectMetrics,
|
|
19
|
+
RoutineComplexity,
|
|
20
|
+
UnitMetrics,
|
|
21
|
+
analyze_project,
|
|
22
|
+
analyze_unit,
|
|
23
|
+
)
|
|
4
24
|
from .nodes import (
|
|
5
25
|
CommentNode,
|
|
6
26
|
CompoundSyntaxNode,
|
|
@@ -9,12 +29,31 @@ from .nodes import (
|
|
|
9
29
|
SyntaxTreeException,
|
|
10
30
|
ValuedSyntaxNode,
|
|
11
31
|
)
|
|
12
|
-
from .
|
|
13
|
-
from .preprocessor import
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
32
|
+
from .parser import DelphiParseError, DelphiParser, ParseResult, StringTransform, parse
|
|
33
|
+
from .preprocessor import (
|
|
34
|
+
CommentInfo,
|
|
35
|
+
IncludeLoader,
|
|
36
|
+
PreprocessedSource,
|
|
37
|
+
Preprocessor,
|
|
38
|
+
PreprocessorOptions,
|
|
39
|
+
)
|
|
40
|
+
from .progress import ProgressCallback, ProgressEvent
|
|
41
|
+
from .project_discovery import (
|
|
42
|
+
DelphiProjectDiscovery,
|
|
43
|
+
DiscoveryProblem,
|
|
44
|
+
discover_delphi_project,
|
|
45
|
+
)
|
|
46
|
+
from .project_indexer import (
|
|
47
|
+
GetUnitSyntaxHook,
|
|
48
|
+
IncludeFileInfo,
|
|
49
|
+
ProjectIndexer,
|
|
50
|
+
ProjectIndexResult,
|
|
51
|
+
ProjectProblem,
|
|
52
|
+
ProjectProblemType,
|
|
53
|
+
UnitErrorInfo,
|
|
54
|
+
UnitInfo,
|
|
55
|
+
UnitParsedHook,
|
|
56
|
+
)
|
|
18
57
|
from .semantic import (
|
|
19
58
|
ArrayTypeRef,
|
|
20
59
|
ClassOfTypeRef,
|
|
@@ -27,136 +66,113 @@ from .semantic import (
|
|
|
27
66
|
NamedTypeRef,
|
|
28
67
|
PointerTypeRef,
|
|
29
68
|
ProcTypeRef,
|
|
69
|
+
RecordTypeRef,
|
|
30
70
|
ReferenceKind,
|
|
31
71
|
ReferenceTypeRef,
|
|
32
|
-
RecordTypeRef,
|
|
33
72
|
Scope,
|
|
34
73
|
ScopeKind,
|
|
74
|
+
SetTypeRef,
|
|
35
75
|
SourceRange,
|
|
36
76
|
SubrangeTypeRef,
|
|
37
|
-
SetTypeRef,
|
|
38
77
|
Symbol,
|
|
39
78
|
SymbolIndex,
|
|
40
79
|
SymbolKind,
|
|
41
80
|
SymbolReference,
|
|
42
|
-
TypeRef,
|
|
43
81
|
TypeParameterRef,
|
|
82
|
+
TypeRef,
|
|
44
83
|
UnknownTypeRef,
|
|
45
84
|
Visibility,
|
|
46
85
|
)
|
|
47
86
|
from .semantic_builder import SemanticBuilder, SemanticModel, SemanticProblem
|
|
48
87
|
from .workspace import WorkspaceSemanticResult, build_workspace_semantics
|
|
49
|
-
from .
|
|
50
|
-
from .project_discovery import DelphiProjectDiscovery, DiscoveryProblem, discover_delphi_project
|
|
51
|
-
from .progress import ProgressCallback, ProgressEvent
|
|
52
|
-
from .project_indexer import (
|
|
53
|
-
GetUnitSyntaxHook,
|
|
54
|
-
IncludeFileInfo,
|
|
55
|
-
ProjectIndexer,
|
|
56
|
-
ProjectIndexResult,
|
|
57
|
-
ProjectProblem,
|
|
58
|
-
ProjectProblemType,
|
|
59
|
-
UnitErrorInfo,
|
|
60
|
-
UnitInfo,
|
|
61
|
-
UnitParsedHook,
|
|
62
|
-
)
|
|
63
|
-
from .metrics import (
|
|
64
|
-
CyclomaticMetrics,
|
|
65
|
-
HalsteadMetrics,
|
|
66
|
-
LineMetrics,
|
|
67
|
-
MetricProblem,
|
|
68
|
-
ProjectMetrics,
|
|
69
|
-
RoutineComplexity,
|
|
70
|
-
UnitMetrics,
|
|
71
|
-
analyze_project,
|
|
72
|
-
analyze_unit,
|
|
73
|
-
)
|
|
88
|
+
from .writer import SyntaxTreeWriter
|
|
74
89
|
|
|
75
90
|
__all__ = [
|
|
76
|
-
'__version__',
|
|
77
|
-
'AttributeName',
|
|
78
|
-
'BinarySerializer',
|
|
79
|
-
'CommentNode',
|
|
80
|
-
'CompoundSyntaxNode',
|
|
81
|
-
'ParserException',
|
|
82
|
-
'SyntaxNode',
|
|
83
|
-
'SyntaxNodeType',
|
|
84
|
-
'SyntaxTreeException',
|
|
85
|
-
'SyntaxTreeWriter',
|
|
86
|
-
'ValuedSyntaxNode',
|
|
87
|
-
'PreprocessedSource',
|
|
88
|
-
'Preprocessor',
|
|
89
|
-
'PreprocessorOptions',
|
|
90
|
-
'IncludeLoader',
|
|
91
|
-
'CommentInfo',
|
|
92
|
-
'KEYWORDS',
|
|
93
|
-
'KEYWORD_TERMINALS',
|
|
94
91
|
'BASE_TERMINALS',
|
|
95
|
-
'build_grammar_snippet',
|
|
96
|
-
'build_grammar',
|
|
97
92
|
'GRAMMAR_RULES',
|
|
98
|
-
'
|
|
99
|
-
'
|
|
100
|
-
'ParseResult',
|
|
101
|
-
'StringTransform',
|
|
102
|
-
'parse',
|
|
103
|
-
'Modifier',
|
|
93
|
+
'KEYWORDS',
|
|
94
|
+
'KEYWORD_TERMINALS',
|
|
104
95
|
'ArrayTypeRef',
|
|
96
|
+
'AttributeName',
|
|
97
|
+
'BinarySerializer',
|
|
105
98
|
'ClassOfTypeRef',
|
|
106
99
|
'ClassTypeRef',
|
|
100
|
+
'CommentInfo',
|
|
101
|
+
'CommentNode',
|
|
102
|
+
'CompoundSyntaxNode',
|
|
103
|
+
'CyclomaticMetrics',
|
|
104
|
+
'DelphiParseError',
|
|
105
|
+
'DelphiParser',
|
|
106
|
+
'DelphiProjectDiscovery',
|
|
107
|
+
'DiscoveryProblem',
|
|
107
108
|
'EnumTypeRef',
|
|
108
109
|
'FileTypeRef',
|
|
109
110
|
'GenericInstanceTypeRef',
|
|
111
|
+
'GetUnitSyntaxHook',
|
|
112
|
+
'HalsteadMetrics',
|
|
113
|
+
'IncludeFileInfo',
|
|
114
|
+
'IncludeLoader',
|
|
110
115
|
'InterfaceTypeRef',
|
|
116
|
+
'LineMetrics',
|
|
117
|
+
'LspWorkspaceState',
|
|
118
|
+
'MetricProblem',
|
|
119
|
+
'Modifier',
|
|
111
120
|
'NamedTypeRef',
|
|
121
|
+
'ParseResult',
|
|
122
|
+
'ParserException',
|
|
112
123
|
'PointerTypeRef',
|
|
124
|
+
'PreprocessedSource',
|
|
125
|
+
'Preprocessor',
|
|
126
|
+
'PreprocessorOptions',
|
|
113
127
|
'ProcTypeRef',
|
|
128
|
+
'ProgressCallback',
|
|
129
|
+
'ProgressEvent',
|
|
130
|
+
'ProjectIndexResult',
|
|
131
|
+
'ProjectIndexer',
|
|
132
|
+
'ProjectMetrics',
|
|
133
|
+
'ProjectProblem',
|
|
134
|
+
'ProjectProblemType',
|
|
135
|
+
'RecordTypeRef',
|
|
114
136
|
'ReferenceKind',
|
|
115
137
|
'ReferenceTypeRef',
|
|
116
|
-
'
|
|
138
|
+
'RoutineComplexity',
|
|
117
139
|
'Scope',
|
|
118
140
|
'ScopeKind',
|
|
141
|
+
'SemanticBuilder',
|
|
142
|
+
'SemanticModel',
|
|
143
|
+
'SemanticProblem',
|
|
144
|
+
'SetTypeRef',
|
|
119
145
|
'SourceRange',
|
|
146
|
+
'StringTransform',
|
|
120
147
|
'SubrangeTypeRef',
|
|
121
|
-
'SetTypeRef',
|
|
122
148
|
'Symbol',
|
|
123
149
|
'SymbolIndex',
|
|
124
150
|
'SymbolKind',
|
|
125
151
|
'SymbolReference',
|
|
126
|
-
'
|
|
152
|
+
'SyntaxNode',
|
|
153
|
+
'SyntaxNodeType',
|
|
154
|
+
'SyntaxTreeException',
|
|
155
|
+
'SyntaxTreeWriter',
|
|
127
156
|
'TypeParameterRef',
|
|
157
|
+
'TypeRef',
|
|
158
|
+
'UnitErrorInfo',
|
|
159
|
+
'UnitInfo',
|
|
160
|
+
'UnitMetrics',
|
|
161
|
+
'UnitParsedHook',
|
|
128
162
|
'UnknownTypeRef',
|
|
163
|
+
'ValuedSyntaxNode',
|
|
129
164
|
'Visibility',
|
|
130
|
-
'SemanticBuilder',
|
|
131
|
-
'SemanticModel',
|
|
132
|
-
'SemanticProblem',
|
|
133
165
|
'WorkspaceSemanticResult',
|
|
166
|
+
'__version__',
|
|
167
|
+
'analyze_project',
|
|
168
|
+
'analyze_unit',
|
|
169
|
+
'build_comment_nodes',
|
|
170
|
+
'build_grammar',
|
|
171
|
+
'build_grammar_snippet',
|
|
134
172
|
'build_workspace_semantics',
|
|
135
|
-
'LspWorkspaceState',
|
|
136
173
|
'create_server',
|
|
137
|
-
'DelphiProjectDiscovery',
|
|
138
|
-
'DiscoveryProblem',
|
|
139
174
|
'discover_delphi_project',
|
|
140
|
-
'ProgressCallback',
|
|
141
|
-
'ProgressEvent',
|
|
142
|
-
'ProjectIndexer',
|
|
143
|
-
'ProjectIndexResult',
|
|
144
|
-
'ProjectProblemType',
|
|
145
|
-
'ProjectProblem',
|
|
146
|
-
'UnitInfo',
|
|
147
|
-
'UnitErrorInfo',
|
|
148
|
-
'IncludeFileInfo',
|
|
149
|
-
'GetUnitSyntaxHook',
|
|
150
|
-
'UnitParsedHook',
|
|
151
|
-
'MetricProblem',
|
|
152
|
-
'LineMetrics',
|
|
153
|
-
'HalsteadMetrics',
|
|
154
|
-
'RoutineComplexity',
|
|
155
|
-
'CyclomaticMetrics',
|
|
156
|
-
'UnitMetrics',
|
|
157
|
-
'ProjectMetrics',
|
|
158
|
-
'analyze_unit',
|
|
159
|
-
'analyze_project',
|
|
160
175
|
'dumps',
|
|
161
176
|
'loads',
|
|
177
|
+
'parse',
|
|
162
178
|
]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "3.2.0"
|
|
@@ -18,6 +18,7 @@ import time
|
|
|
18
18
|
from collections.abc import Callable, Collection, Mapping
|
|
19
19
|
from concurrent.futures import ThreadPoolExecutor
|
|
20
20
|
from dataclasses import dataclass, fields, is_dataclass, replace
|
|
21
|
+
from functools import lru_cache
|
|
21
22
|
from pathlib import Path
|
|
22
23
|
from types import ModuleType
|
|
23
24
|
|
|
@@ -40,6 +41,8 @@ _CONNECTION_TIMEOUT = 2.0
|
|
|
40
41
|
_PREAUTH_CONNECTION_TIMEOUT = 0.25
|
|
41
42
|
_CONNECTION_WORKERS = 8
|
|
42
43
|
_CLIENT_RESPONSE_TIMEOUT = 120.0
|
|
44
|
+
_MAX_CLIENT_RESPONSE_TIMEOUT = 600.0
|
|
45
|
+
_CLIENT_SECONDS_PER_SOURCE = 0.25
|
|
43
46
|
_MEMORY_SIZE = re.compile(r"^(?P<count>[1-9][0-9]*)(?P<suffix>[KMG]?)$", re.IGNORECASE)
|
|
44
47
|
_STARTUP_DIAGNOSTIC_BYTES = 16 * 1024
|
|
45
48
|
_STARTUP_TOKEN_RE = re.compile(r"(?i)(token\b[^\n\r]*?:?\s*['\"]?[A-Za-z0-9_-]+['\"]?|\b[a-zA-Z0-9_-]{32,})")
|
|
@@ -623,7 +626,7 @@ def _process_start_lock(root: str | Path):
|
|
|
623
626
|
def _client_exchange(metadata: CacheMetadata, request: dict[str, object]) -> CacheClientResponse:
|
|
624
627
|
try:
|
|
625
628
|
with socket.create_connection(("127.0.0.1", metadata.port), timeout=2) as connection:
|
|
626
|
-
connection.settimeout(
|
|
629
|
+
connection.settimeout(_client_response_timeout(metadata, request))
|
|
627
630
|
request_without_token = {key: value for key, value in request.items() if key != "token"}
|
|
628
631
|
connection.sendall(json.dumps({"token": metadata.token, **request_without_token}, separators=(",", ":")).encode("utf-8") + b"\n")
|
|
629
632
|
response = _read_line(connection)
|
|
@@ -646,6 +649,43 @@ def _client_exchange(metadata: CacheMetadata, request: dict[str, object]) -> Cac
|
|
|
646
649
|
return CacheClientResponse(payload, str(decoded.get("warning", "")))
|
|
647
650
|
|
|
648
651
|
|
|
652
|
+
def _client_response_timeout(
|
|
653
|
+
metadata: CacheMetadata,
|
|
654
|
+
request: Mapping[str, object],
|
|
655
|
+
) -> float:
|
|
656
|
+
if request.get("action") in {"status", "stop"}:
|
|
657
|
+
return _CLIENT_RESPONSE_TIMEOUT
|
|
658
|
+
return min(
|
|
659
|
+
_MAX_CLIENT_RESPONSE_TIMEOUT,
|
|
660
|
+
_CLIENT_RESPONSE_TIMEOUT
|
|
661
|
+
+ _workspace_source_count(metadata.root) * _CLIENT_SECONDS_PER_SOURCE,
|
|
662
|
+
)
|
|
663
|
+
|
|
664
|
+
|
|
665
|
+
@lru_cache(maxsize=64)
|
|
666
|
+
def _workspace_source_count(root: str) -> int:
|
|
667
|
+
count = 0
|
|
668
|
+
source_suffixes = {".pas", ".pp", ".inc", ".dpr", ".dpk"}
|
|
669
|
+
maximum_relevant_count = int(
|
|
670
|
+
(_MAX_CLIENT_RESPONSE_TIMEOUT - _CLIENT_RESPONSE_TIMEOUT)
|
|
671
|
+
/ _CLIENT_SECONDS_PER_SOURCE
|
|
672
|
+
)
|
|
673
|
+
for _current, directories, files in os.walk(Path(root).expanduser().resolve()):
|
|
674
|
+
directories[:] = [
|
|
675
|
+
directory
|
|
676
|
+
for directory in directories
|
|
677
|
+
if directory not in SKIP_DIRS
|
|
678
|
+
]
|
|
679
|
+
count += sum(
|
|
680
|
+
1
|
|
681
|
+
for file_name in files
|
|
682
|
+
if Path(file_name).suffix.casefold() in source_suffixes
|
|
683
|
+
)
|
|
684
|
+
if count >= maximum_relevant_count:
|
|
685
|
+
return maximum_relevant_count
|
|
686
|
+
return count
|
|
687
|
+
|
|
688
|
+
|
|
649
689
|
def _read_line(connection: socket.socket) -> bytes:
|
|
650
690
|
chunks = bytearray()
|
|
651
691
|
while len(chunks) <= _MAX_MESSAGE_BYTES:
|
|
@@ -768,14 +808,7 @@ class _CacheService:
|
|
|
768
808
|
if error.code != "project_required":
|
|
769
809
|
raise
|
|
770
810
|
self.cache_state = "ready"
|
|
771
|
-
self.
|
|
772
|
-
measure=self._measure_retained_bytes,
|
|
773
|
-
evict_auxiliary=self.context.evict_auxiliary_caches,
|
|
774
|
-
evict_navigation=self.context.evict_navigation_caches,
|
|
775
|
-
)
|
|
776
|
-
if self.last_budget.compacted:
|
|
777
|
-
self.stats.evictions += 1
|
|
778
|
-
self.cache_state = "compact"
|
|
811
|
+
self._enforce_budget()
|
|
779
812
|
self.prewarm_seconds = time.monotonic() - started
|
|
780
813
|
self.stats.parallel_fallbacks = context.parallel_stats.fallbacks
|
|
781
814
|
|
|
@@ -835,13 +868,16 @@ class _CacheService:
|
|
|
835
868
|
before = self.last_revision
|
|
836
869
|
was_warm = self.context.navigation_cache_is_warm
|
|
837
870
|
try:
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
871
|
+
try:
|
|
872
|
+
response = self.context.handle(request).to_mapping()
|
|
873
|
+
except AgentProtocolError as error:
|
|
874
|
+
raise CacheClientError(error.code, error.message) from None
|
|
875
|
+
except (OSError, UnicodeError):
|
|
876
|
+
raise CacheClientError("source_unavailable", "Source is unavailable.") from None
|
|
877
|
+
except Exception:
|
|
878
|
+
raise CacheClientError("internal_error", "Internal cache error.") from None
|
|
879
|
+
finally:
|
|
880
|
+
self._enforce_budget()
|
|
845
881
|
after = str(response["workspace_revision"])
|
|
846
882
|
self.last_revision = after
|
|
847
883
|
self.stats.requests += 1
|
|
@@ -852,18 +888,24 @@ class _CacheService:
|
|
|
852
888
|
self.stats.parallel_fallbacks += self.context.parallel_stats.fallbacks
|
|
853
889
|
if before != after:
|
|
854
890
|
self.stats.invalidations += 1
|
|
855
|
-
self.last_budget = self.budget.enforce(
|
|
856
|
-
measure=self._measure_retained_bytes,
|
|
857
|
-
evict_auxiliary=self.context.evict_auxiliary_caches,
|
|
858
|
-
evict_navigation=self.context.evict_navigation_caches,
|
|
859
|
-
)
|
|
860
|
-
if self.last_budget.compacted:
|
|
861
|
-
self.stats.evictions += 1
|
|
862
|
-
self.cache_state = "compact"
|
|
863
|
-
else:
|
|
864
|
-
self.cache_state = "warm" if self.context.navigation_cache_is_warm else "ready"
|
|
865
891
|
return CacheClientResponse(response, self._consume_warning())
|
|
866
892
|
|
|
893
|
+
def _enforce_budget(self) -> None:
|
|
894
|
+
self.last_budget = self.budget.enforce(
|
|
895
|
+
measure=self._measure_retained_bytes,
|
|
896
|
+
evict_auxiliary=self.context.evict_auxiliary_caches,
|
|
897
|
+
evict_navigation=self.context.evict_navigation_caches,
|
|
898
|
+
)
|
|
899
|
+
if self.last_budget.compacted:
|
|
900
|
+
self.stats.evictions += 1
|
|
901
|
+
self.cache_state = "compact"
|
|
902
|
+
else:
|
|
903
|
+
self.cache_state = (
|
|
904
|
+
"warm"
|
|
905
|
+
if self.context.navigation_cache_is_warm
|
|
906
|
+
else "ready"
|
|
907
|
+
)
|
|
908
|
+
|
|
867
909
|
def _consume_warning(self) -> str:
|
|
868
910
|
warning = cache_warning(self.last_budget, self.budget.max_bytes)
|
|
869
911
|
if self.last_budget.warning_triggered and not self.last_budget.warning_active:
|
|
@@ -874,6 +916,17 @@ class _CacheService:
|
|
|
874
916
|
now = time.monotonic()
|
|
875
917
|
idle = max(0.0, now - self.last_activity)
|
|
876
918
|
context = self._context
|
|
919
|
+
live_rss = current_process_rss_bytes()
|
|
920
|
+
current_bytes = (
|
|
921
|
+
live_rss
|
|
922
|
+
if live_rss > 0
|
|
923
|
+
else self.last_budget.retained_bytes
|
|
924
|
+
)
|
|
925
|
+
current_utilization = current_bytes * 100.0 / self.budget.max_bytes
|
|
926
|
+
peak_utilization = max(
|
|
927
|
+
self.last_budget.peak_utilization_percent,
|
|
928
|
+
current_utilization,
|
|
929
|
+
)
|
|
877
930
|
parallel_stats = (
|
|
878
931
|
context.parallel_stats
|
|
879
932
|
if context is not None
|
|
@@ -883,10 +936,11 @@ class _CacheService:
|
|
|
883
936
|
"pid": self.metadata.pid, "root": self.metadata.root, "project_file": self.metadata.project_file,
|
|
884
937
|
"version": self.metadata.version, "uptime": now - self.started, "idle_seconds": idle,
|
|
885
938
|
"last_activity_at": time.time() - idle,
|
|
886
|
-
"max_memory_bytes": self.budget.max_bytes, "current_bytes":
|
|
887
|
-
"current_utilization_percent":
|
|
888
|
-
"peak_utilization_percent":
|
|
889
|
-
"warning_active": self.
|
|
939
|
+
"max_memory_bytes": self.budget.max_bytes, "current_bytes": current_bytes,
|
|
940
|
+
"current_utilization_percent": current_utilization,
|
|
941
|
+
"peak_utilization_percent": peak_utilization,
|
|
942
|
+
"warning_active": current_utilization >= self.budget.warning_percent,
|
|
943
|
+
"warning_threshold_percent": WARNING_THRESHOLD_PERCENT,
|
|
890
944
|
"cache_state": self.cache_state, "requests": self.stats.requests, "warm_hits": self.stats.warm_hits,
|
|
891
945
|
"rebuilds": self.stats.rebuilds, "invalidations": self.stats.invalidations, "evictions": self.stats.evictions,
|
|
892
946
|
"workers_configured": "auto" if self.metadata.workers == 0 else self.metadata.workers,
|
|
@@ -1073,7 +1127,7 @@ def run_cache_daemon(
|
|
|
1073
1127
|
):
|
|
1074
1128
|
try:
|
|
1075
1129
|
connection, _ = listener.accept()
|
|
1076
|
-
except
|
|
1130
|
+
except TimeoutError:
|
|
1077
1131
|
continue
|
|
1078
1132
|
if not connection_slots.acquire(blocking=False):
|
|
1079
1133
|
connection.close()
|
|
@@ -1240,17 +1294,16 @@ def start_cache(
|
|
|
1240
1294
|
):
|
|
1241
1295
|
raise ValueError("max_disk_cache_bytes must be non-negative.")
|
|
1242
1296
|
load_project_path_config(root)
|
|
1243
|
-
with _process_start_lock(root):
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
)
|
|
1297
|
+
with _process_start_lock(root), _start_lock(root, startup_timeout):
|
|
1298
|
+
return _start_cache_unlocked(
|
|
1299
|
+
root,
|
|
1300
|
+
project_file=project_file,
|
|
1301
|
+
max_memory_bytes=max_memory_bytes,
|
|
1302
|
+
workers=workers,
|
|
1303
|
+
idle_timeout=idle_timeout,
|
|
1304
|
+
startup_timeout=startup_timeout,
|
|
1305
|
+
max_disk_cache_bytes=max_disk_cache_bytes,
|
|
1306
|
+
)
|
|
1254
1307
|
|
|
1255
1308
|
|
|
1256
1309
|
def query_cache(root: str | Path, request: dict[str, object]) -> CacheClientResponse:
|
|
@@ -10,37 +10,36 @@ import threading
|
|
|
10
10
|
from pathlib import Path
|
|
11
11
|
from typing import BinaryIO, TextIO
|
|
12
12
|
|
|
13
|
-
from .agent_context import AgentContext
|
|
14
13
|
from .agent_cache import (
|
|
15
|
-
CacheClientError,
|
|
16
14
|
DEFAULT_IDLE_TIMEOUT,
|
|
17
15
|
DEFAULT_MAX_DISK_CACHE_BYTES,
|
|
18
16
|
DEFAULT_MAX_MEMORY_BYTES,
|
|
19
17
|
DEFAULT_STARTUP_TIMEOUT,
|
|
20
|
-
|
|
18
|
+
CacheClientError,
|
|
21
19
|
navigation_cache_path,
|
|
20
|
+
parse_memory_size,
|
|
22
21
|
query_cache,
|
|
23
22
|
run_cache_daemon,
|
|
24
23
|
start_cache,
|
|
25
24
|
stop_cache,
|
|
26
25
|
watch_workspace_changes,
|
|
27
26
|
)
|
|
27
|
+
from .agent_context import AgentContext
|
|
28
28
|
from .agent_layers import build_codebase_index, layer_payload, render_layer
|
|
29
29
|
from .agent_protocol import (
|
|
30
30
|
SCHEMA_VERSION,
|
|
31
|
-
AgentProtocolError,
|
|
32
31
|
SUPPORTED_ACTIONS,
|
|
33
32
|
SUPPORTED_DETAILS,
|
|
34
33
|
SUPPORTED_DIRECTIONS,
|
|
35
34
|
SUPPORTED_GRAPHS,
|
|
36
35
|
SUPPORTED_RELATIONS,
|
|
36
|
+
AgentProtocolError,
|
|
37
37
|
)
|
|
38
38
|
from .agent_templates import install_opencode_support, install_skill
|
|
39
39
|
from .agent_wiki import WikiExportError, WikiProgressEvent, export_okf_wiki
|
|
40
40
|
from .parallel_outline import ParallelOutlineError, parse_worker_setting
|
|
41
41
|
from .project_config import ProjectConfigError
|
|
42
42
|
|
|
43
|
-
|
|
44
43
|
_MAX_WORKER_RECORD_BYTES = 1024 * 1024
|
|
45
44
|
_INVALID_JSON_MESSAGE = "Invalid JSON request."
|
|
46
45
|
_INVALID_ENCODING_MESSAGE = "Invalid UTF-8 request."
|
|
@@ -312,10 +311,11 @@ def _discard_broken_stdout() -> None:
|
|
|
312
311
|
|
|
313
312
|
def _view(args: argparse.Namespace) -> None:
|
|
314
313
|
args.root = _workspace_root(args.root)
|
|
314
|
+
args.project_file = _project_file(args.root, args.project_file)
|
|
315
315
|
index = build_codebase_index(
|
|
316
316
|
args.root,
|
|
317
317
|
project_file=args.project_file,
|
|
318
|
-
index_projects=args.deep_projects,
|
|
318
|
+
index_projects=args.deep_projects or args.layer == "problems",
|
|
319
319
|
workers=args.workers,
|
|
320
320
|
)
|
|
321
321
|
sys.stdout.write(render_layer(index, args.layer, query=args.query, output_format=args.format))
|
|
@@ -323,6 +323,7 @@ def _view(args: argparse.Namespace) -> None:
|
|
|
323
323
|
|
|
324
324
|
def _index(args: argparse.Namespace) -> None:
|
|
325
325
|
args.root = _workspace_root(args.root)
|
|
326
|
+
args.project_file = _project_file(args.root, args.project_file)
|
|
326
327
|
output = _resolve_output_path(args.root, args.out)
|
|
327
328
|
index = build_codebase_index(
|
|
328
329
|
args.root,
|
|
@@ -342,6 +343,7 @@ def _index(args: argparse.Namespace) -> None:
|
|
|
342
343
|
|
|
343
344
|
def _wiki_export(args: argparse.Namespace) -> None:
|
|
344
345
|
args.root = _workspace_root(args.root)
|
|
346
|
+
args.project_file = _project_file(args.root, args.project_file)
|
|
345
347
|
output = _resolve_output_path(args.root, args.out)
|
|
346
348
|
renderer = None if args.quiet else _WikiProgressRenderer(sys.stderr)
|
|
347
349
|
try:
|
|
@@ -449,6 +451,7 @@ def _require_install_directory(target: str | Path) -> None:
|
|
|
449
451
|
|
|
450
452
|
def _worker(args: argparse.Namespace) -> None:
|
|
451
453
|
args.root = _workspace_root(args.root)
|
|
454
|
+
args.project_file = _project_file(args.root, args.project_file)
|
|
452
455
|
context = _open_worker_context(args.root, args.project_file, args.workers)
|
|
453
456
|
watcher_stop = threading.Event()
|
|
454
457
|
watcher = threading.Thread(
|
|
@@ -509,6 +512,7 @@ def _cache_error(error: CacheClientError) -> int:
|
|
|
509
512
|
|
|
510
513
|
def _cache_start(args: argparse.Namespace) -> int:
|
|
511
514
|
args.root = _workspace_root(args.root)
|
|
515
|
+
args.project_file = _project_file(args.root, args.project_file)
|
|
512
516
|
try:
|
|
513
517
|
start_cache(
|
|
514
518
|
args.root,
|
|
@@ -583,6 +587,7 @@ def _cache_clear(args: argparse.Namespace) -> int:
|
|
|
583
587
|
|
|
584
588
|
def _cache_serve(args: argparse.Namespace) -> int:
|
|
585
589
|
args.root = _workspace_root(args.root)
|
|
590
|
+
args.project_file = _project_file(args.root, args.project_file)
|
|
586
591
|
run_cache_daemon(
|
|
587
592
|
args.root,
|
|
588
593
|
project_file=str(args.project_file or ""),
|
|
@@ -658,6 +663,21 @@ def _workspace_root(value: str | Path) -> Path:
|
|
|
658
663
|
return root.resolve()
|
|
659
664
|
|
|
660
665
|
|
|
666
|
+
def _project_file(root: Path, value: Path | None) -> Path | None:
|
|
667
|
+
if value is None:
|
|
668
|
+
return None
|
|
669
|
+
project = value.expanduser()
|
|
670
|
+
if not project.is_absolute():
|
|
671
|
+
project = root / project
|
|
672
|
+
project = project.resolve()
|
|
673
|
+
if not project.is_file():
|
|
674
|
+
raise _CliError(
|
|
675
|
+
"project_file_not_found",
|
|
676
|
+
f"Explicit project file does not exist: {project}",
|
|
677
|
+
)
|
|
678
|
+
return project
|
|
679
|
+
|
|
680
|
+
|
|
661
681
|
def _resolve_output_path(root: Path, output: Path) -> Path:
|
|
662
682
|
return output if output.is_absolute() else root / output
|
|
663
683
|
|