server: implement type definition

This commit is contained in:
dece 2022-12-03 18:06:05 +01:00
parent e20406d00b
commit b22c9838b9

View file

@ -3,13 +3,13 @@ from typing import Optional
from jedi import Script from jedi import Script
from jedi.api.classes import Name from jedi.api.classes import Name
from pygls.lsp.methods import COMPLETION, DEFINITION, HOVER from pygls.lsp.methods import COMPLETION, DEFINITION, HOVER, TYPE_DEFINITION
from pygls.lsp.types import (CompletionItem, CompletionItemKind, from pygls.lsp.types import (CompletionItem, CompletionItemKind,
CompletionList, CompletionOptions, CompletionList, CompletionOptions,
CompletionParams, DefinitionParams, Hover, CompletionParams, DefinitionParams, Hover,
HoverParams, InsertTextFormat, HoverParams, InsertTextFormat,
Location, Position, Range, Location, Position, Range,
TextDocumentPositionParams) TextDocumentPositionParams, TypeDefinitionParams)
from pygls.server import LanguageServer from pygls.server import LanguageServer
from pygls.workspace import Document from pygls.workspace import Document
@ -141,6 +141,18 @@ async def do_definition(
return get_lsp_locations(jedi_names) or None return get_lsp_locations(jedi_names) or None
@LS.feature(TYPE_DEFINITION)
async def do_type_definition(
server: LanguageServer,
params: TypeDefinitionParams,
) -> Optional[list[Location]]:
"""Return the type definition location(s) of the target symbol."""
script = get_jedi_script_from_params(params, server)
jedi_position = get_jedi_position(params.position)
jedi_names = script.infer(*jedi_position)
return get_lsp_locations(jedi_names) or None
@LS.feature(HOVER) @LS.feature(HOVER)
async def do_hover( async def do_hover(
server: LanguageServer, server: LanguageServer,