我创建了vs扩展程序,它需要侦听文件更改并做出相应的反应。
当您在编辑器中打开rakefile
之类的文件时,该扩展名有效,但是,如果在编辑器中没有任何文件的情况下打开vscode或欢迎页面,则会出现错误“无法读取未定义的属性”。
我将if放入 constructor 内以检查是否activeTextEditor
,因为我想向文件提供 listener ,但是有时会出现此错误,我应该在哪里做涵盖这两种情况?我的意思是仅在编辑器中打开文件
export class TaskProvider implements vscode.TaskProvider {
static MType = "rakefile";
private makePromise: Thenable<vscode.Task[]> | undefined = undefined;
constructor() {
` const filePath = vscode.window.activeTextEditor.document.fileName;
const fileWatcher = vscode.workspace.createFileSystemWatcher(filePath);
fileWatcher.onDidChange(() => (this.mPromise = this.provideTasks()));
fileWatcher.onDidCreate(() => (this.mPromise = this.provideTasks()));
如果我正在执行if内部激活功能
export function activate(_context: vscode.ExtensionContext): void {
const workspaceRoot = vscode.workspace.rootPath;
if (vscode.window.activeTextEditor) {
if (!workspaceRoot) {
return;
}
但是如果我打开相关文件(rakefile),我什么都没有得到。由于事件didint已注册
最后,我想要的是注册任务等,即使在编辑器中打开了相关文件