src/vs/workbench/browser/parts/views/treeView.ts/TreeRenderer/getHover
class TreeRenderer:	private getHover(label: string | undefined, resource: URI | null, node: ITreeItem): string | IIconLabelMarkdownString | undefined {
		if (!(node instanceof ResolvableTreeItem) || !node.hasResolve) {
			if (resource && !node.tooltip) {
				return undefined;
			} else if (!node.tooltip) {
				return label;
			} else if (!isString(node.tooltip)) {
				return { markdown: node.tooltip, markdownNotSupportedFallback: resource ? undefined : renderMarkdownAsPlaintext(node.tooltip) }; // Passing undefined as the fallback for a resource falls back to the old native hover
			} else {
				return node.tooltip;
			}
		}

		return {
			markdown: (token: CancellationToken): Promise<IMarkdownString | string | undefined> => {
				return new Promise<IMarkdownString | string | undefined>(async (resolve) => {
					await node.resolve(token);
					resolve(node.tooltip);
				});
			},
			markdownNotSupportedFallback: resource ? undefined : label ?? '' // Passing undefined as the fallback for a resource falls back to the old native hover
		};
	}