bmc-tpl-code-all-around/src/providers/TplHoverProvider.ts

51 lines
2.0 KiB
TypeScript
Raw Normal View History

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<vscode.Hover | null> {
// 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;
}
}