import * as vscode from 'vscode'; import { TplLookup } from '../core/TplLookup'; import { workspaceIndex } from '../core/WorkspaceIndex'; export class TplHoverProvider implements vscode.HoverProvider { public provideHover(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken): vscode.ProviderResult { const range = document.getWordRangeAtPosition(position, /[a-zA-Z0-9_.]+/); if (!range) return null; const word = document.getText(range); const parts = word.split('.'); if (parts.length > 1) { // 1. Suche in Core & TKU Built-Ins (Case-Insensitive) const funcData = TplLookup.getBuiltInFunction(parts[0], parts[1]); if (funcData) { const md = new vscode.MarkdownString(); md.appendCodeblock(`${parts[0]}.${parts[1]}(${funcData.snippets?.[0] || ''})`, 'tpl'); md.appendMarkdown(`---\n${funcData.description}`); return new vscode.Hover(md); } } // 2. Suche in lokalem Workspace (RAM Index) const funcName = parts.length > 1 ? parts[1] : word; const signatures = workspaceIndex.getFunctionSignatures(funcName); if (signatures.length > 0) { const sig = signatures[0]; const md = new vscode.MarkdownString(); md.appendCodeblock(`define ${sig.name}(${sig.params.join(', ')})`, 'tpl'); if (sig.docString) { md.appendMarkdown(`---\n${sig.docString}`); } return new vscode.Hover(md); } return null; } }