Don't keep AST in memory, lazy load content on demand #61
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Extension of #60
Now only a FQN => PhpDocument map is kept at the project level.
Upon a definition request the content/AST of the document is lazily loaded from disk.
Indexing is still slow but RAM usage is now as low as <100MB even for magento (for some reason though VS Code crashed after ~20,000 files).
I moved all LSP-related logic like
findSymbols
out ofProject
andPhpDocument
into the method handlers.Project
andPhpDocument
in turn provide methods likegetDefinition
orgetDefinitionDocument
.workspace/symbol now also searches over the FQN, which is a nice side-effect.
The downside though is that workspace/symbol now needs to reparse every document matching the query. So in the case that your query is not very specific, it will take forever in large projects and bring your RAM usage up to the sky.
Test with Symfony (7100 files):