python-delphi-lsp 3.1.2__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.2 → python_delphi_lsp-3.2.0}/MANIFEST.in +5 -0
- {python_delphi_lsp-3.1.2/python_delphi_lsp.egg-info → python_delphi_lsp-3.2.0}/PKG-INFO +2 -2
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/README.md +1 -1
- {python_delphi_lsp-3.1.2 → 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.2 → python_delphi_lsp-3.2.0}/delphi_lsp/agent_cache.py +95 -42
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/delphi_lsp/agent_cli.py +26 -6
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/delphi_lsp/agent_context.py +47 -18
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/delphi_lsp/agent_cpg.py +3 -4
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/delphi_lsp/agent_cpg_builder.py +0 -1
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/delphi_lsp/agent_layers.py +11 -7
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/delphi_lsp/agent_metrics.py +2 -4
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/delphi_lsp/agent_protocol.py +2 -3
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/delphi_lsp/agent_relations.py +52 -8
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/delphi_lsp/agent_templates.py +1 -2
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/delphi_lsp/agent_wiki.py +6 -6
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/delphi_lsp/agent_workspace.py +9 -5
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/delphi_lsp/binary.py +5 -5
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/delphi_lsp/comment_builder.py +1 -2
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/delphi_lsp/delphiast_lexer.py +3 -5
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/delphi_lsp/delphiast_parser.py +384 -52
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/delphi_lsp/grammar.py +0 -1
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/delphi_lsp/lark_builder.py +5 -10
- {python_delphi_lsp-3.1.2 → 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.2 → python_delphi_lsp-3.2.0}/delphi_lsp/lsp_server.py +542 -101
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/delphi_lsp/metrics.py +50 -15
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/delphi_lsp/navigation_cache.py +3 -4
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/delphi_lsp/nodes.py +19 -19
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/delphi_lsp/parallel_outline.py +3 -4
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/delphi_lsp/parser.py +101 -17
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/delphi_lsp/preprocessor.py +232 -25
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/delphi_lsp/progress.py +1 -1
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/delphi_lsp/project_config.py +2 -1
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/delphi_lsp/project_discovery.py +3 -4
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/delphi_lsp/project_indexer.py +18 -18
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/delphi_lsp/semantic.py +28 -17
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/delphi_lsp/semantic_builder.py +29 -20
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/delphi_lsp/workspace.py +1 -1
- python_delphi_lsp-3.2.0/docs/release-3.2.0.md +77 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/pyproject.toml +1 -1
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0/python_delphi_lsp.egg-info}/PKG-INFO +2 -2
- python_delphi_lsp-3.2.0/python_delphi_lsp.egg-info/SOURCES.txt +377 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/scripts/benchmark_fpc_corpus.py +694 -9
- {python_delphi_lsp-3.1.2 → 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.2.0/tests/fpc_parse_quality.baseline.json +1713 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/test_agent_cache.py +246 -16
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/test_agent_cli_errors.py +73 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/test_agent_codebase.py +3 -3
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/test_agent_context.py +40 -4
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/test_agent_cpg.py +2 -3
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/test_agent_metrics.py +25 -1
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/test_agent_relations.py +160 -16
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/test_agent_worker.py +2 -2
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/test_bootstrap_vllm_codebase_skill.py +0 -1
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/test_bootstrap_vllm_opencode.py +0 -1
- {python_delphi_lsp-3.1.2 → 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.2 → python_delphi_lsp-3.2.0}/tests/test_delphiast_parser.py +0 -1
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/test_delphiast_semantic_compatibility.py +0 -1
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/test_diagnostics.py +0 -1
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/test_fpc_performance_corpus.py +452 -3
- {python_delphi_lsp-3.1.2 → 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.2 → python_delphi_lsp-3.2.0}/tests/test_lsp_support.py +83 -4
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/test_metrics.py +51 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/test_opencode_config.py +0 -1
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/test_opencode_probe.py +0 -1
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/test_opencode_request_payloads.py +0 -1
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/test_openrouter_github_e2e.py +28 -2
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/test_ornith_cache_prepare.py +0 -1
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/test_package_metadata.py +13 -4
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/test_parallel_outline.py +6 -5
- {python_delphi_lsp-3.1.2 → 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.1.2 → python_delphi_lsp-3.2.0}/tests/test_preprocessor.py +149 -11
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/test_progress.py +1 -1
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/test_project_discovery.py +7 -7
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/test_release_evidence.py +1 -10
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/test_semantic.py +35 -1
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/test_vllm_start_script.py +0 -1
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/test_workspace.py +1 -2
- python_delphi_lsp-3.1.2/delphi_lsp/_version.py +0 -1
- python_delphi_lsp-3.1.2/python_delphi_lsp.egg-info/SOURCES.txt +0 -199
- python_delphi_lsp-3.1.2/tests/fpc_parse_quality.baseline.json +0 -10266
- python_delphi_lsp-3.1.2/tests/test_delphiast_native_compatibility.py +0 -364
- python_delphi_lsp-3.1.2/tests/test_legacy_snippets.py +0 -34
- python_delphi_lsp-3.1.2/tests/test_lsp_server.py +0 -309
- python_delphi_lsp-3.1.2/tests/test_parser_backends.py +0 -135
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/.github/workflows/ci.yml +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/LICENSE +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/delphi_lsp/consts.py +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/delphi_lsp/delphiast_tokens.py +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/delphi_lsp/parser_backend.py +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/delphi_lsp/py.typed +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/delphi_lsp/source_reader.py +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/delphi_lsp/writer.py +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/docs/performance-delphi.md +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/docs/performance-fpc.md +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/docs/release-2.3.0.md +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/docs/release-2.3.3.md +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/docs/release-3.0.0.md +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/docs/release-3.1.0.md +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/docs/release-3.1.1.md +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/docs/release-3.1.2.md +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/docs/superpowers/plans/2026-07-16-architecture-metrics-implementation.md +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/docs/superpowers/plans/2026-07-17-large-codebase-performance.md +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/docs/superpowers/plans/2026-07-22-conditional-outline-ranges.md +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/docs/superpowers/plans/2026-07-23-2.3-performance.md +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/docs/superpowers/plans/2026-07-23-bounded-cli-cache-daemon.md +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/docs/superpowers/plans/2026-07-23-delphiast-python-backend.md +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/docs/superpowers/plans/2026-07-23-parallel-cache-prewarming.md +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/docs/superpowers/plans/2026-07-24-hybrid-cpg.md +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/docs/superpowers/plans/2026-07-24-repository-default-navigation.md +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/docs/superpowers/plans/2026-07-27-okf-memory-progress.md +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/docs/superpowers/plans/2026-07-27-okf-wiki-export.md +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/docs/superpowers/plans/2026-07-27-project-path-configuration.md +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/docs/superpowers/specs/2026-07-16-architecture-metrics-design.md +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/docs/superpowers/specs/2026-07-17-large-codebase-performance-design.md +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/docs/superpowers/specs/2026-07-22-conditional-outline-ranges-design.md +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/docs/superpowers/specs/2026-07-23-2.3-performance-design.md +0 -0
- {python_delphi_lsp-3.1.2 → 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.2 → python_delphi_lsp-3.2.0}/docs/superpowers/specs/2026-07-23-delphiast-python-backend-design.md +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/docs/superpowers/specs/2026-07-23-parallel-cache-prewarming-design.md +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/docs/superpowers/specs/2026-07-24-hybrid-cpg-design.md +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/docs/superpowers/specs/2026-07-24-repository-default-navigation-design.md +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/docs/superpowers/specs/2026-07-27-okf-memory-progress-design.md +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/docs/superpowers/specs/2026-07-27-okf-wiki-export-design.md +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/docs/superpowers/specs/2026-07-27-project-path-configuration-design.md +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/opencode.json +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/python_delphi_lsp.egg-info/dependency_links.txt +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/python_delphi_lsp.egg-info/entry_points.txt +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/python_delphi_lsp.egg-info/requires.txt +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/python_delphi_lsp.egg-info/top_level.txt +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/scripts/audit_delphi_language_features.py +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/scripts/benchmark_cpg.py +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/scripts/benchmark_github_corpus.py +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/scripts/benchmark_parallel_cache.py +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/scripts/bootstrap_vllm_codebase_skill_test.py +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/scripts/bootstrap_vllm_opencode_test.ps1 +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/scripts/bootstrap_vllm_opencode_test.py +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/scripts/bootstrap_vllm_opencode_test.sh +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/scripts/build_github_performance_corpus.py +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/scripts/check_ornith_cache.py +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/scripts/generate_progress_pdf.py +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/scripts/generate_release_evidence.py +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/scripts/ollama/ornith-lspctx.Modelfile +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/scripts/prepare_delphi_corpus.py +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/scripts/prepare_fpc_corpus.py +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/scripts/prepare_ornith_cache.py +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/scripts/run_opencode_lsp_probe.py +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/scripts/start_ornith_vllm.sh +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/scripts/summarize_opencode_request_payloads.py +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/setup.cfg +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/corpora.performance.lock.json +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/DeprecatedOnConst.pas +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/VariantRecordFieldAttributes.pas +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/alignedrecords.pas +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/constset.pas +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/deprecatedtype.pas +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/dottedtypes.pas +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/endtoken.pas +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/experimentals.pas +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/externalfunction.pas +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/finalizationinitializationexports.pas +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/forwardoverloaded.pas +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/forwardwithoutsemicolon.pas +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/genericconstraints.pas +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/genericinterfacemethoddelegation.pas +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/implementsgenerictype.pas +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/include file2.inc +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/includefile.inc +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/includefile.pas +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/managedrecords.pas +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/messagemethod.pas +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/multiline.pas +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/nonalignedrecords.pas +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/numbers.pas +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/pointerchars.pas +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/properties.pas +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/strictvisibility.pas +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/tryexcept.pas +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/umlauts.pas +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/fixtures/legacy_snippets/whitespacearoundifdefcondition.pas +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/fixtures/library_demo.dpr +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/fixtures/package_demo.dpk +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/fixtures/program_demo.dpr +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/fixtures/unit_advanced.pas +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/fixtures/unit_attributes.pas +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/fixtures/unit_basic.pas +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/fixtures/unit_consumer.pas +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/fixtures/unit_generics.pas +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/fixtures/unit_inheritance.pas +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/fixtures/unit_math.pas +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/fixtures/unit_properties.pas +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/fixtures/unit_sections.pas +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/fixtures/unit_statements.pas +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/fixtures/unit_types.pas +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/fixtures/unit_unresolved.pas +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/fixtures/unit_with.pas +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/test_agent_protocol.py +1 -1
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/test_agent_wiki.py +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/test_agent_workspace.py +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/test_delphi_performance_corpus.py +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/test_github_performance_corpus.py +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/test_lsp_features.py +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/test_navigation_cache.py +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/test_project_config.py +0 -0
- {python_delphi_lsp-3.1.2 → python_delphi_lsp-3.2.0}/tests/test_project_indexer.py +0 -0
|
@@ -31,3 +31,8 @@ include tests/test_delphi_performance_corpus.py
|
|
|
31
31
|
include docs/performance-delphi.md
|
|
32
32
|
recursive-include docs *.md
|
|
33
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
|
|
|
@@ -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
|
|
|
@@ -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
|
|