【发布时间】:2022-01-03 15:58:36
【问题描述】:
我正在编写一个 vscode 扩展,它采用文档的语言并基于该语言生成一个 hello world 模板。我已经生成了一个状态栏图标,但也没有显示出来。这是我的第一个扩展,所以我对这一切都很陌生。当我使用 Control + Shift + P 运行命令时,它也会收到一个错误,即找不到该命令。
代码...
import * as vscode from 'vscode';
import "typescript";
import "./constants";
let myStatusBar : vscode.StatusBarItem;
export function activate(context: vscode.ExtensionContext, { subscriptions }: vscode.ExtensionContext) {
const codeBoilerplateCommand = 'code-boilerplate.CodeBoilerplate';
subscriptions.push(vscode.commands.registerCommand(codeBoilerplateCommand, () => {
const documentFileType = vscode.window.activeTextEditor?.document.languageId;
const documentFileName = vscode.window.activeTextEditor?.document.fileName;
const documentFilePath = vscode.window.activeTextEditor?.document.fileName.split('/');
vscode.window.showInformationMessage("Generating your Code Boilerplate... ⌛")
if (documentFileType === "javascript") {
vscode.window.activeTextEditor.edit(editBuilder => {
editBuilder.insert(new vscode.Position(0, 0), 'console.log("Hello World!")');
});
}
else if (documentFileType === "python") {
vscode.window.activeTextEditor.edit(editBuilder => {
editBuilder.insert(new vscode.Position(0, 0), 'print("Hello World!")');
});
}
else if (documentFileType === "typescript") {
vscode.window.activeTextEditor.edit(editBuilder => {
editBuilder.insert(new vscode.Position(0, 0), 'console.log("Hello World!");');
});
}
else if (documentFileType === "csharp") {
vscode.window.activeTextEditor.edit(editBuilder => {
editBuilder.insert(new vscode.Position(0, 0), 'using System;');
editBuilder.insert(new vscode.Position(3,0), 'namespace' + documentFileName + ' {');
editBuilder.insert(new vscode.Position(6,4), 'class HelloWorld {');
editBuilder.insert(new vscode.Position(9, 8), 'static void Main(string[] args) {');
editBuilder.insert(new vscode.Position(12,12), 'Console.WriteLine("Hello World!");');
editBuilder.insert(new vscode.Position(14,8), '}');
editBuilder.insert(new vscode.Position(15, 4), '}');
editBuilder.insert(new vscode.Position(16, 0), '}');
});
}
else if (documentFileType === "c") {
vscode.window.activeTextEditor.edit(editBuilder => {
editBuilder.insert(new vscode.Position(0,0), '#include <stdio.h>');
editBuilder.insert(new vscode.Position(1,0), 'int main() {');
editBuilder.insert(new vscode.Position(2,4), 'printf("Hello World!");');
editBuilder.insert(new vscode.Position(3,4), 'return 0;');
editBuilder.insert(new vscode.Position(4,0), '}');
})
}
else if (documentFileType === "cpp") {
return null;
}
else if (documentFileType === "java") {
return null;
}
}));
myStatusBar = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Right, 100);
myStatusBar.command = codeBoilerplateCommand;
subscriptions.push(myStatusBar);
subscriptions.push(vscode.window.onDidChangeActiveTextEditor(updateStatusBarItem));
subscriptions.push(vscode.window.onDidChangeTextEditorSelection(updateStatusBarItem));
updateStatusBarItem();
}
function updateStatusBarItem(): void {
myStatusBar.text = `$(new-file) Hello World!`;
myStatusBar.show();
}
export function deactivate() {
myStatusBar.dispose();
}
【问题讨论】:
-
似乎未定义的对象作为激活函数的第二个参数传入。检查传入的内容。
-
非常感谢
-
您在哪里看到
activate在context之后接受了第二个参数? -
上下文:vscode.ExtensionContext 导致错误 - 已删除,一切正常。感谢您的帮助。
-
您可能希望将其保留为
export function activate(context: vscode.ExtensionContext)并在函数主体中引用context.subscriptions- 以防您将来可能需要访问ExtensionContext的其他属性。
标签: typescript visual-studio-code vscode-extensions