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

费里斯克莱尔

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

扩展程序是这样的:

  • 打开文件 A --> new DocumentSymbolProvider,它运行代码以从所需方法列表中收集所有方法
  • 从文件 A 中找到的所有方法都显示在我们扩展的侧面板中
  • 打开文件 B --> new DocumentSymbolProvider 再次运行,现在针对此文件,并收集所有方法
  • 文件 A 中找到的所有方法都被文件 B 中找到的方法替换
  • [此步骤无效] 回到文件 A --> DocumentSymbolProvider 应该再次运行它的代码/从该文件中收集所有方法,并在侧面板中显示它们
  • 但是我们的代码当前所做的是:没有收集来自文件 A 的数据,扩展仍然显示来自最后一个“新”文件的所有数据,在这种情况下是文件 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
    }
}
莱克斯李

正确的逻辑应该是,

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

对于第 2 步,您应该参考vscode.window.onDidChangeActiveTextEditor,

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

用户切换到另一个UItxextField时,不会触发textFieldShouldEndEditing

避免在再次打开文件夹时自动切换到其他虚拟桌面

避免在打开文件时自动切换到其他虚拟桌面

从全屏切换到窗口时,IDXGISwapChain :: ResizeBuffers触发断点

切换到小屏幕时使抽屉打开

切换到对象时,Vue.js不会更新

在vim中,如何在新标签页中打开文件或切换到包含该文件的标签页(如果已打开)?

切换到require.js后不会触发onLoad事件

如何在Vimperator中快速切换到已打开的选项卡(缓冲区)

Lightroom不会切换到GeForce

SELinux不会切换到“强制”模式

Bootstrap 导航栏在折叠时不会切换打开

触发渲染或组件状态时,使用 InvokeAsync() 将执行切换到 Dispatcher

液晶显示屏关闭时,打开的窗口将切换到主显示

仅在新窗口中打开时切换到新窗口,并验证页面是否正确加载

CSS:当 HTML 表格行突出显示时,<a> 标签不会切换到悬停状态

在括号中切换到某个打开的文件的快捷方式

使用一个快捷方式切换到上次打开的文件

切换到UITableViewController时的调用方法

从AWS切换到Heroku时出错?

切换到root时传递命令

切换到电池时自动关闭

从窗口切换到iframe时出错

切换到其他文件系统

Ubuntu 14.04 Server:如何切换到已安装的gui

当切换到分支而不忽略它们时,如何保持忽略的文件?

切换到其他版本的Ubuntu时,有什么方法可以保存文件?

Selenium 无法切换到新打开的 Tab

从UIViewController切换到SKSCene不会显示任何内容