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.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,
CompletionList, CompletionOptions,
CompletionParams, DefinitionParams, Hover,
HoverParams, InsertTextFormat,
Location, Position, Range,
TextDocumentPositionParams)
TextDocumentPositionParams, TypeDefinitionParams)
from pygls.server import LanguageServer
from pygls.workspace import Document
@ -141,6 +141,18 @@ async def do_definition(
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)
async def do_hover(
server: LanguageServer,