in server/src/graphStore.ts [639:690]
public hover(uri: string, position: lsp.Position): lsp.Hover | undefined {
const ranges = this.findRange(this.toDatabase(uri), position);
if (ranges === undefined) {
return undefined;
}
const findHover = (range: RangeResult): lsp.Hover | undefined => {
const [hoverResult, anchorId] = this.getResultForId(range.id, EdgeLabels.textDocument_hover);
if (hoverResult === undefined || hoverResult.result === undefined) {
return undefined;
}
const result: lsp.Hover = Object.assign(Object.create(null), hoverResult.result);
if (result.range === undefined) {
result.range = {
start: {
line: range.startLine,
character: range.startCharacter
},
end: {
line: range.endLine,
character: range.endCharacter
}
};
}
return result;
};
let result: lsp.Hover | undefined;
for (const range of ranges) {
result = findHover(range);
if (result !== undefined) {
break;
}
}
if (result === undefined) {
return undefined;
}
// Workaround to remove empty object. Need to find out why they are in the dump
// in the first place.
if (Array.isArray(result.contents)) {
for (let i = 0; i < result.contents.length;) {
const elem = result.contents[i];
if (typeof elem !== 'string' && elem.language === undefined && elem.value === undefined) {
result.contents.splice(i, 1);
} else {
i++;
}
}
}
return result;
}