import * as vscode from 'vscode'; import { tplBuiltIns } from '../data/TplBuiltIns'; export class TplHoverProvider implements vscode.HoverProvider { public async provideHover( document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken ): Promise { // Greift das Wort unter dem Mauszeiger ab, inklusive Punkte für Namespaces const range = document.getWordRangeAtPosition(position, /[a-zA-Z0-9_.]+/); if (!range) { return null; } const word = document.getText(range); const parts = word.split('.'); let namespace = ''; let methodOrPatternName = ''; if (parts.length === 2) { namespace = parts[0]; methodOrPatternName = parts[1]; } else if (parts.length === 1) { methodOrPatternName = parts[0]; } else { return null; } // BMC Namespace-Methoden (z.B. discovery.listDirectory) if (namespace && tplBuiltIns[namespace] && tplBuiltIns[namespace][methodOrPatternName]) { const def = tplBuiltIns[namespace][methodOrPatternName]; const markdown = new vscode.MarkdownString(); markdown.appendCodeblock(`${namespace}.${methodOrPatternName}`, 'tpl'); markdown.appendMarkdown(`---\n\n${def.description}`); return new vscode.Hover(markdown); } // BMC Globale Funktionen (z.B. size, datatype) else if (!namespace && tplBuiltIns['built_in_globals'] && tplBuiltIns['built_in_globals'][methodOrPatternName]) { const def = tplBuiltIns['built_in_globals'][methodOrPatternName]; const markdown = new vscode.MarkdownString(); markdown.appendCodeblock(`${methodOrPatternName}`, 'tpl'); markdown.appendMarkdown(`---\n\n${def.description}`); return new vscode.Hover(markdown); } return null; } }