vscode本身不内置函数引用分析,真正可靠的是eslint配合eslint-plugin-unused-imports或typescript-eslint的no-unused-vars规则,尤其在ts项目中更准;js项目需警惕动态调用导致的误报,且导出函数默认视为可能被外部使用,须人工验证后删除。

如何用 VSCode 插件发现项目里没人调用的函数
VSCode 本身不内置函数引用分析,但通过搭配 ESLint + eslint-plugin-unused-imports 或 typescript-eslint 的 no-unused-vars 规则,能稳定识别未被调用的函数(尤其在 TypeScript 项目中)。纯 JavaScript 项目需注意作用域和动态调用带来的误报。
- 优先启用
typescript-eslint的no-unused-vars,它比原生 ESLint 更准,能识别类型声明、命名空间内函数等边界情况 - 对
export函数要谨慎:插件默认把导出函数视为“可能被外部使用”,需手动加注释// eslint-disable-next-line no-unused-vars或配置args: "none"参数来收紧检查 - 动态调用(如
obj[funcName]()、eval、require字符串拼接)会导致函数被标记为冗余,这类必须人工确认,不能直接删除
为什么 Unused Functions 类插件常报错或不生效
市面上叫 “Unused Functions” 或 “Dead Code Detector” 的 VSCode 插件大多基于简单 AST 静态扫描,不接入项目构建配置或类型系统,容易漏判/误判。典型表现是:TSX 文件完全不检测、React 组件函数全标红、useCallback 里的函数被误报。
- 这类插件通常不读取
tsconfig.json或babel.config.js,无法理解路径别名、模块解析逻辑,导致跨文件引用识别失败 - 它们不区分“未调用”和“未导出但被其他模块 import”,容易把合法的工具函数标为冗余
- 真正可靠的方式是用语言服务支撑的方案:TypeScript 自带的
findReferencesAPI(可通过插件ES7+ React/Redux/React-Native snippets间接调用),或运行tsc --noEmit --watch配合typescript-eslint的detected模式
no-unused-vars 配置踩坑指南
开箱即用的 no-unused-vars 默认只检查变量,函数需显式开启。且不同版本规则行为差异大,尤其在类方法、箭头函数、解构参数场景下。
- 必须在
.eslintrc.js中设置:"no-unused-vars": ["error", { "args": "none", "caughtErrors": "none", "vars": "local" }],否则函数参数、catch错误变量会干扰判断 - TypeScript 项目务必关闭
varsIgnorePattern默认值(如"^_"),否则_callback这类命名会被跳过 - React 函数组件名必须匹配
jsx-fragments或react/display-name规则,否则const MyComponent = () => {}可能逃过检测
自动化清理前必须验证的三件事
自动删函数风险极高,尤其在大型项目或有运行时反射逻辑的代码中。不要依赖插件一键删除,而是用它定位 + 手动验证。
- 查 Git 历史:用
git log -S "functionName"确认该函数近期是否被修改过,避免删掉刚重构但尚未调用的新函数 - 全局搜索:在 VSCode 中按
Ctrl+Shift+F搜函数名(含引号),特别留意字符串形式的调用、测试文件、配置文件中的注册点 - 运行时验证:删之前先改函数体为
throw new Error("unused fn called"),跑一遍 E2E 或单元测试,看是否真没人触发











