使用全局符号表优化 VSCode 跳转功能

1,994 阅读1分钟

使用全局符号表优化 VSCode 跳转功能

2022-04-15-17-16-42.png Goto Symbol 插件提供在未明确函数来源时使用转到定义功能会展示出所有同名函数的定义。

优点:

  • 不破坏原有语言服务器的功能
  • 支持定义跳转
  • 支持显示函数注释
  • 理论上支持多种语言(仅测试了 JavaScript)

背景

我手头的项目由于使用了自定义命名空间来隔离函数作用域,导致 Review 代码的过程中 VSCode 无法直接跳转到函数定义,这点 WebStorm 做的就很好,即使函数引入不明确也可以提供跳转或展示一个函数定义列表让用户自己选择跳转。

实现原理

当一个项目的根目录中有 jsconfig.jsontsconfig.json 时,VSCode 会为这个项目建立一个工作区符号表,可以通过快捷键 Ctrl+T 呼出这个面板,在这个面板中可以查找到项目中定义的全部符号(Symbol)。同样 VSCode API 中也提供了调用工作区符号的提供者命令 vscode.executeWorkspaceSymbolProvider,所以只需要借助于这个命令的能力,即可对现有的转到定义功能进行调整。

具体过程是先执行 vscode.executeDefinitionProvider 命令,通过已经注册的语言服务查询当前光标位置的函数是否有定义,如果找到定义就直接返回这些定义(这能保证不破坏其他语言服务器提供的功能,并保证这个扩展仅在找不到定义时才执行)。如果找不到定义在通过 vscode.executeWorkspaceSymbolProvider 命令从全局符号表中查找定义并返回全部结果。

插件地址

https://marketplace.visualstudio.com/items?itemName=justwe9517.goto-symbol