2026-10-08 20:02:08 +00:00
|
|
|
import * as vscode from 'vscode';
|
2026-10-28 21:04:56 +00:00
|
|
|
import { TplLookup } from '../core/TplLookup';
|
|
|
|
|
import { workspaceIndex } from '../core/WorkspaceIndex';
|
2026-10-08 20:02:08 +00:00
|
|
|
|
|
|
|
|
export class TplHoverProvider implements vscode.HoverProvider {
|
2026-10-28 21:04:56 +00:00
|
|
|
public provideHover(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken): vscode.ProviderResult<vscode.Hover> {
|
2026-10-09 21:14:30 +00:00
|
|
|
const range = document.getWordRangeAtPosition(position, /[a-zA-Z0-9_.]+/);
|
2026-10-28 21:04:56 +00:00
|
|
|
if (!range) return null;
|
|
|
|
|
|
2026-10-18 01:03:33 +00:00
|
|
|
const word = document.getText(range);
|
2026-10-09 21:14:30 +00:00
|
|
|
const parts = word.split('.');
|
|
|
|
|
|
2026-10-28 21:04:56 +00:00
|
|
|
if (parts.length > 1) {
|
|
|
|
|
// 1. Suche in Core & TKU Built-Ins (Case-Insensitive)
|
|
|
|
|
const funcData = TplLookup.getBuiltInFunction(parts[0], parts[1]);
|
|
|
|
|
if (funcData) {
|
2026-10-18 01:03:33 +00:00
|
|
|
const md = new vscode.MarkdownString();
|
2026-10-28 21:04:56 +00:00
|
|
|
md.appendCodeblock(`${parts[0]}.${parts[1]}(${funcData.snippets?.[0] || ''})`, 'tpl');
|
|
|
|
|
md.appendMarkdown(`---\n${funcData.description}`);
|
2026-10-18 01:03:33 +00:00
|
|
|
return new vscode.Hover(md);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2026-10-28 21:04:56 +00:00
|
|
|
// 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}`);
|
2026-10-12 19:43:46 +00:00
|
|
|
}
|
2026-10-28 21:04:56 +00:00
|
|
|
return new vscode.Hover(md);
|
2026-10-09 21:14:30 +00:00
|
|
|
}
|
|
|
|
|
|
2026-10-08 20:02:08 +00:00
|
|
|
return null;
|
|
|
|
|
}
|
2026-10-27 16:48:03 +00:00
|
|
|
}
|