切换到已打开的文件时,DocumentSymbolProvider 不会触发

DocumentSymbolProvider does not fire when switching to already opened file

我们正在编写 VSCode 扩展,使用 API 在打开的文件中查找方法。
到目前为止一切正常,当我们在扩展开发主机中打开一个新文件时,会找到方法,因此 DocumentSymbolProvider 会触发/执行。

扩展的过程是这样的:

但是当我们切换回一个已经打开的文件时它不会触发。为了再次触发,您必须关闭文件(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
    }
}

正确的逻辑应该是,

  1. 挂钩文件 open/change 事件以生成新符号(并且只将它们保存在内存中)。
  2. 挂钩活动文本编辑器更改事件以显示新激活文档中的符号。

步骤2请参考vscode.window.onDidChangeActiveTextEditor,

https://code.visualstudio.com/api/references/vscode-api#window