2026-10-08 20:02:08 +00:00
|
|
|
import * as vscode from 'vscode';
|
2026-10-08 22:36:29 +00:00
|
|
|
import { tplBuiltIns } from './TplBuiltIns';
|
2026-10-08 20:02:08 +00:00
|
|
|
|
|
|
|
|
export class TplHoverProvider implements vscode.HoverProvider {
|
2026-10-09 21:14:30 +00:00
|
|
|
public async provideHover(
|
|
|
|
|
document: vscode.TextDocument,
|
|
|
|
|
position: vscode.Position,
|
|
|
|
|
token: vscode.CancellationToken
|
|
|
|
|
): Promise<vscode.Hover | null> {
|
2026-10-08 20:02:08 +00:00
|
|
|
|
2026-10-09 21:14:30 +00:00
|
|
|
// 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) {
|
2026-10-08 20:02:08 +00:00
|
|
|
namespace = parts[0];
|
|
|
|
|
methodOrPatternName = parts[1];
|
2026-10-09 21:14:30 +00:00
|
|
|
} else if (parts.length === 1) {
|
|
|
|
|
methodOrPatternName = parts[0];
|
|
|
|
|
} else {
|
|
|
|
|
return null;
|
2026-10-08 20:02:08 +00:00
|
|
|
}
|
|
|
|
|
|
2026-10-09 21:14:30 +00:00
|
|
|
// BMC Namespace-Methoden (z.B. discovery.listDirectory)
|
2026-10-08 22:36:29 +00:00
|
|
|
if (namespace && tplBuiltIns[namespace] && tplBuiltIns[namespace][methodOrPatternName]) {
|
2026-10-09 21:14:30 +00:00
|
|
|
const def = tplBuiltIns[namespace][methodOrPatternName];
|
2026-10-08 22:36:29 +00:00
|
|
|
const markdown = new vscode.MarkdownString();
|
|
|
|
|
markdown.appendCodeblock(`${namespace}.${methodOrPatternName}`, 'tpl');
|
2026-10-09 21:14:30 +00:00
|
|
|
markdown.appendMarkdown(`---\n\n${def.description}`);
|
2026-10-08 22:36:29 +00:00
|
|
|
return new vscode.Hover(markdown);
|
2026-10-09 21:14:30 +00:00
|
|
|
}
|
|
|
|
|
// 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];
|
2026-10-08 22:36:29 +00:00
|
|
|
const markdown = new vscode.MarkdownString();
|
|
|
|
|
markdown.appendCodeblock(`${methodOrPatternName}`, 'tpl');
|
2026-10-09 21:14:30 +00:00
|
|
|
markdown.appendMarkdown(`---\n\n${def.description}`);
|
2026-10-08 22:36:29 +00:00
|
|
|
return new vscode.Hover(markdown);
|
|
|
|
|
}
|
|
|
|
|
|
2026-10-08 20:02:08 +00:00
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
}
|