vscode本身不提供快速过滤无用函数引用的功能,真正有效的是eslint配合eslint-plugin-unused-imports等静态分析插件,通过语言服务器标出疑似未使用项供人工判断,而非自动删除。

VSCode 本身没有“快速过滤无用函数引用”的插件——所谓“过滤”,其实是靠静态分析标出疑似未使用项,再人工确认。自动删=高危操作,别信。
为什么 ESLint + eslint-plugin-unused-imports 是当前最靠谱的组合
它不依赖 VSCode 插件本身,而是通过语言服务器把 no-unused-vars 和 unused-imports/no-unused-imports 规则实时反馈到编辑器里:
- 在 JS/TS 文件中,能标出未被调用的
const、function、import行(注意:仅限当前文件内静态可分析的引用) - 对
export但未被任何import的函数,不会报错——因为可能是被window.xxx或构建时注入调用 - 不识别
obj[methodName]、Reflect.get()、eval()等动态调用,这些永远会漏判 - 必须配好
jsconfig.json或tsconfig.json,否则跨文件引用关系基本断掉
Ctrl+Shift+O 按 @function 过滤后,怎么判断哪个函数真没用
这不是符号导航功能本身能回答的问题,而是要交叉验证:
- 在符号列表里选中一个函数名,按
Shift+F12查“所有引用”——如果返回空,不代表没用,只代表 LSP 没建模出来 - 立刻切到全局搜索:
Ctrl+Shift+F,输入函数名,勾选Match Whole Word和Match Case,看是否出现在字符串、注释、或require()调用中 - 搜
from '.\/或import.*functionName(正则模式),确认有没有模块 import 它 - 打开 DevTools Console,刷新页面,看有没有
ReferenceError: functionName is not defined——如果有,说明它其实被动态加载了
哪些配置项会让“未使用提示”直接失效
即使装了插件,这几个设置不对,红波浪线就根本不会出现:
-
editor.showUnused设为false:大纲和编辑器内都隐藏未使用标记(默认是true) -
typescript.preferences.includeInferredTypes开启后,可能让类型推导干扰未使用判断,建议关掉 -
outline.showUnnecessary设为true会让大纲视图显示未导出/未使用的符号,反而增加干扰 - 工作区
.vscode/settings.json里若写了"eslint.enable": false,整个 ESLint 链路就断了
真正容易被忽略的不是“怎么标出”,而是“标出来之后不敢删”——因为最常误删的是 Webpack 插件入口、Mock 工具里的生成器、测试 setup 里的辅助函数,它们从不 import,也不被 LSP 索引,但一删就坏。











