Add LSP folding range support #4280
Merged
+892
−30
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.
Ref: https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_foldingRange
Ref: https://go.dev/gopls/features/passive#folding-range
This adds folding range support to the LSP. Folding ranges apply to messages, nested messages, enums, extensions, options, import blocks, multi-line comments, oneofs, services and methods.
By default, it looks like VS Code might use tree-sitter to compute folds, which isn't too bad, but this approach is more precise. neovim also supports either tree-sitter or LSP as a fold provider. For testing, reference: https://neovim.io/doc/user/lsp.html#vim.lsp.foldexpr().