in server/src/session.ts [980:1013]
private onHover(params: lsp.TextDocumentPositionParams): lsp.Hover|null {
const lsInfo = this.getLSAndScriptInfo(params.textDocument);
if (lsInfo === null) {
return null;
}
const {languageService, scriptInfo} = lsInfo;
const offset = lspPositionToTsPosition(scriptInfo, params.position);
const info = languageService.getQuickInfoAtPosition(scriptInfo.fileName, offset);
if (!info) {
return null;
}
const {kind, kindModifiers, textSpan, displayParts, documentation} = info;
let desc = kindModifiers ? kindModifiers + ' ' : '';
if (displayParts && displayParts.length > 0) {
// displayParts does not contain info about kindModifiers
// but displayParts does contain info about kind
desc += displayParts.map(dp => dp.text).join('');
} else {
desc += kind;
}
const contents: lsp.MarkedString[] = [{
language: 'typescript',
value: desc,
}];
if (documentation) {
for (const d of documentation) {
contents.push(d.text);
}
}
return {
contents,
range: tsTextSpanToLspRange(scriptInfo, textSpan),
};
}