50 lines
1.5 KiB
JavaScript
50 lines
1.5 KiB
JavaScript
const vscode = require("vscode");
|
|
|
|
/**
|
|
* @param {vscode.ExtensionContext} context
|
|
*/
|
|
function activate(context) {
|
|
const disposable = vscode.languages.registerHoverProvider("python", {
|
|
/**
|
|
* @param {vscode.TextDocument} document
|
|
* @param {vscode.Position} position
|
|
* @param {vscode.CancellationToken} token
|
|
*/
|
|
async provideHover(document, position, token) {
|
|
const { activeSignature, signatures } =
|
|
await vscode.commands.executeCommand(
|
|
"vscode.executeSignatureHelpProvider",
|
|
document.uri,
|
|
position
|
|
);
|
|
const { label, parameters, activeParameter } =
|
|
signatures[activeSignature];
|
|
const type_name = label
|
|
.substring(...parameters[activeParameter].label)
|
|
.split(":")
|
|
.at(-1)
|
|
.trim();
|
|
const type_list = type_name.split("|").map((x) => x.trim());
|
|
if (!type_list.includes("Res")) return;
|
|
const code_line = document.lineAt(position).text;
|
|
const res_range = document.getWordRangeAtPosition(position, /".*?"/);
|
|
let res = code_line.substring(
|
|
res_range.start.character + 1,
|
|
res_range.end.character - 1
|
|
);
|
|
if (!res.endsWith(".jpg")) res += ".png";
|
|
const img_path = `file://${vscode.workspace.workspaceFolders[0].uri.path}/mower/resources/${res}`;
|
|
const md = new vscode.MarkdownString(``);
|
|
return new vscode.Hover(md);
|
|
},
|
|
});
|
|
|
|
context.subscriptions.push(disposable);
|
|
}
|
|
|
|
function deactivate() {}
|
|
|
|
module.exports = {
|
|
activate,
|
|
deactivate,
|
|
};
|