查看引用的结果列表包含自身

就不能像 IntelliJ 的查找用法一样,只显示用法吗。

在 VSCode 里功能特意叫 Find All References,而不是 Find Usages,难道自身也算一个引用😓 我感觉是用 language-server 触发个 symbol search,自身当然处于 result set 中。

倒是想到一种难以接受的缓解措施,便是开启 Code Lens 功能,并禁用 editor.gotoLocation.alternativeDefinitionCommand
Code Lens 会在函数、类型符号上显示一行 12 references,点击会触发一个 Peek 窗口,列出引用的 位置,而不是 引用,这下便排除了自身。
这是在玩耍 python.analysis.referencesCodeLens 时发现,可它的 pylance 属于并非开源,底下用的 pylance.showReferences 是什么逻辑并不知道。

2026-06-06 分析开源的 VSCode 内建的 TypeScript Language Features 插件,从这两段的差别结合调试可以看出

实际定义的那条记录会有 ref.isDefinition === true,而 Find Reference 动作没有过滤掉。而点击触发查找 Reference 的动作是由 client 端发起的,硬编码了 includeDeclaration: true

直接去修改 workbench.desktop.main.js 中对应的编译产物,能解决这个痛点。目前没翻到这么设计的原因。

若是想要每次更新后自动化修改 VSCode 编译产物,目前有个 Custom UI Style 插件可以做到,虽然不能直接,但它有个修改插件的功能,可以让它修改自身,让修改后的自身再去修改 VSCode。

"custom-ui-style.extensions.config": {
  "subframe7536.custom-ui-style":[
    {
      "filePath": "dist/index.js",
      "find": "patch(e){let{monospace",
      "replace": "patch(e){e=e.replaceAll(/{includeDeclaration:!0}([^?]+\\?\\.filter)/g, '{includeDeclaration:!1}$1');let{monospace",
    }
  ]
}

注意点就是需要 Reload 两次,一次修改 Custom UI Style,第二次修改 VSCode。

Ctrl+LMB 点击符号默认在预览窗口查看引用

因为默认设置是这样,Ctrl + 左键点击 会调用 goToReference(即动作 editor.action.goToReference),又因为有多个引用弹出预览窗口,然后 查看引用的结果列表包含自身,导致这次点击只会展示 当前行,想要看另外的唯一一个引用的还得多点两下。

"editor.gotoLocation.alternativeDefinitionCommand": "editor.action.goToReferences"
"editor.gotoLocation.multipleReferences": "peek"

关联:`editor.gotoLocation.alternativeDefinitionCommand`

重命名符号的输入框不支持 cursorWordPartLeft 指令

设置快捷键映射没有用,因为那不是 editor。只得一个个字符移动

Hint 下划线只有第一个字符短短的一截

比如拼写检查,只有第一个字符有个简短的三个点下划线,效果如图
new 的下面有三个点
找了很久才定位到原因,最终使用 Custom UI 插件自定义 CSS 来填补这个痛点

/* vscode/src/vs/editor/browser/widget/codeEditorWidget.ts */
/* 由 microsoft/vscode#44141 引入的 no-repeat 设置
   让 hint 下划线只有第一个字符短短的一截
   是故意这么做的,避免 SpellChecker 的检测结果不要划地到处都是 */
.monaco-workbench .squiggly-hint {
    background-repeat: repeat-x;
}