feat(lsp): support completion item resolve to show .def previews
Enable completion item resolution so selecting a completion can populate
documentation with a preview of the corresponding .def declaration.
- Turn on resolve_provider in the completion options.
- Implement on_completion_resolve to attach Markdown documentation
computed by def_hover_markdown when the completion item's data
contains a ("def" -> [kind, name]) payload.
- Include that "def" payload when generating def-related completion items.
- Add tests that verify block-template and address-list items resolve to
Markdown previews.
Before: def-related completion items had no documentation on resolve.
After: selecting such items will return a Markdown preview of the .def entry.
This commit is contained in:
@@ -287,7 +287,7 @@ def document_diagnostic(params: lsp.DocumentDiagnosticParams):
|
||||
|
||||
@LSP_SERVER.feature(
|
||||
lsp.TEXT_DOCUMENT_COMPLETION,
|
||||
lsp.CompletionOptions(trigger_characters=["$", " ", "-", "(", ","]),
|
||||
lsp.CompletionOptions(trigger_characters=["$", " ", "-", "(", ","], resolve_provider=True),
|
||||
)
|
||||
def on_completion(params: lsp.CompletionParams) -> lsp.CompletionList:
|
||||
result = _on_completion(params)
|
||||
@@ -300,6 +300,17 @@ def on_completion(params: lsp.CompletionParams) -> lsp.CompletionList:
|
||||
return result
|
||||
|
||||
|
||||
@LSP_SERVER.feature(lsp.COMPLETION_ITEM_RESOLVE)
|
||||
def on_completion_resolve(item: lsp.CompletionItem) -> lsp.CompletionItem:
|
||||
"""Show the .def declaration of a selected block template/address, as on hover."""
|
||||
target = item.data.get("def") if isinstance(item.data, dict) else None
|
||||
if item.documentation is None and isinstance(target, list) and len(target) == 2:
|
||||
markdown = def_hover_markdown(LSP_SERVER.def_documents_snapshot(), tuple(target))
|
||||
if markdown:
|
||||
item.documentation = lsp.MarkupContent(kind=lsp.MarkupKind.Markdown, value=markdown)
|
||||
return item
|
||||
|
||||
|
||||
# Keywords that expand to all loaded .def names: keyword -> (items, description).
|
||||
SYMBOL_LIST_KEYWORDS = {
|
||||
"BLOCK_LIST": (lambda: LSP_SERVER.block_template_items(), "block templates"),
|
||||
|
||||
Reference in New Issue
Block a user