lsp: Implement "go to definition"

This commit is contained in:
James Westman 2023-07-25 18:40:05 -05:00
parent e087aeb44f
commit 62f74178f7
7 changed files with 64 additions and 4 deletions

View file

@ -204,6 +204,7 @@ class LanguageServer:
"codeActionProvider": {},
"hoverProvider": True,
"documentSymbolProvider": True,
"definitionProvider": True,
},
"serverInfo": {
"name": "Blueprint",
@ -389,6 +390,21 @@ class LanguageServer:
self._send_response(id, [to_json(symbol) for symbol in symbols])
@command("textDocument/definition")
def definition(self, id, params):
open_file = self._open_files[params["textDocument"]["uri"]]
idx = utils.pos_to_idx(
params["position"]["line"], params["position"]["character"], open_file.text
)
definition = open_file.ast.get_reference(idx)
if definition is None:
self._send_response(id, None)
else:
self._send_response(
id,
definition.to_json(open_file.uri),
)
def _send_file_updates(self, open_file: OpenFile):
self._send_notification(
"textDocument/publishDiagnostics",