public hover()

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;
	}