切换到已打开的文件时,DocumentSymbolProvider 不会触发
DocumentSymbolProvider does not fire when switching to already opened file
我们正在编写 VSCode 扩展,使用 API 在打开的文件中查找方法。
到目前为止一切正常,当我们在扩展开发主机中打开一个新文件时,会找到方法,因此 DocumentSymbolProvider 会触发/执行。
扩展的过程是这样的:
- 打开文件 A --> 新的 DocumentSymbolProvider,其中 运行 是从所需方法列表中收集所有方法的代码
- 从文件 A 中找到的所有方法都会显示在我们扩展程序的侧面板中
- 打开文件 B --> 再次新建 DocumentSymbolProvider 运行s,现在针对此文件,并收集所有方法
- 从文件 A 中找到的所有方法都替换为从文件 B 中找到的方法
- [此步骤无效] 返回文件 A --> DocumentSymbolProvider 应该 运行 它的代码/再次从该文件中收集所有方法,并在侧面板中显示它们
- 但是我们的代码目前做了什么:没有收集文件 A 的数据,扩展仍然显示最后一个 'new' 文件的所有数据,在本例中是文件 B
但是当我们切换回一个已经打开的文件时它不会触发。为了再次触发,您必须关闭文件(vscode 中的选项卡)并再次打开它。
是否需要执行某些操作以便在切换文件选项卡时也触发 DocumentSymbolProvider?我们已经试过把
onDidChangeEmitter = new vscode.EventEmitter<vscode.Uri>();
onDidChange = this.onDidChangeEmitter.event;
进入 DocumentSymbolProvider,它看起来像这样:
class JavaDocumentSymbolProvider implements vscode.DocumentSymbolProvider {
onDidChangeEmitter = new vscode.EventEmitter<vscode.Uri>();
onDidChange = this.onDidChangeEmitter.event;
public provideDocumentSymbols(document: vscode.TextDocument, token: vscode.CancellationToken): Thenable<vscode.SymbolInformation[]> {
// code to find methods
}
}
正确的逻辑应该是,
- 挂钩文件 open/change 事件以生成新符号(并且只将它们保存在内存中)。
- 挂钩活动文本编辑器更改事件以显示新激活文档中的符号。
步骤2请参考vscode.window.onDidChangeActiveTextEditor
,
https://code.visualstudio.com/api/references/vscode-api#window
我们正在编写 VSCode 扩展,使用 API 在打开的文件中查找方法。
到目前为止一切正常,当我们在扩展开发主机中打开一个新文件时,会找到方法,因此 DocumentSymbolProvider 会触发/执行。
扩展的过程是这样的:
- 打开文件 A --> 新的 DocumentSymbolProvider,其中 运行 是从所需方法列表中收集所有方法的代码
- 从文件 A 中找到的所有方法都会显示在我们扩展程序的侧面板中
- 打开文件 B --> 再次新建 DocumentSymbolProvider 运行s,现在针对此文件,并收集所有方法
- 从文件 A 中找到的所有方法都替换为从文件 B 中找到的方法
- [此步骤无效] 返回文件 A --> DocumentSymbolProvider 应该 运行 它的代码/再次从该文件中收集所有方法,并在侧面板中显示它们
- 但是我们的代码目前做了什么:没有收集文件 A 的数据,扩展仍然显示最后一个 'new' 文件的所有数据,在本例中是文件 B
但是当我们切换回一个已经打开的文件时它不会触发。为了再次触发,您必须关闭文件(vscode 中的选项卡)并再次打开它。
是否需要执行某些操作以便在切换文件选项卡时也触发 DocumentSymbolProvider?我们已经试过把
onDidChangeEmitter = new vscode.EventEmitter<vscode.Uri>();
onDidChange = this.onDidChangeEmitter.event;
进入 DocumentSymbolProvider,它看起来像这样:
class JavaDocumentSymbolProvider implements vscode.DocumentSymbolProvider {
onDidChangeEmitter = new vscode.EventEmitter<vscode.Uri>();
onDidChange = this.onDidChangeEmitter.event;
public provideDocumentSymbols(document: vscode.TextDocument, token: vscode.CancellationToken): Thenable<vscode.SymbolInformation[]> {
// code to find methods
}
}
正确的逻辑应该是,
- 挂钩文件 open/change 事件以生成新符号(并且只将它们保存在内存中)。
- 挂钩活动文本编辑器更改事件以显示新激活文档中的符号。
步骤2请参考vscode.window.onDidChangeActiveTextEditor
,
https://code.visualstudio.com/api/references/vscode-api#window