Code Spell Checker 不检查变量名拼写,需用 eslint-plugin-spellcheck;该插件基于 AST 扫描标识符,支持变量、函数等命名校验,须配合 ESLint 和 TypeScript 配置,启用 identifiers: true 并正确设置 lang 与 skipWords。

Code Spell Checker 本身不检查变量名拼写,它只校验注释、字符串、普通文本中的单词。想让 useState 不被写成 useStae 或 recieveData 这类错误,必须换思路——靠 ESLint。
eslint-plugin-spellcheck 是唯一靠谱的变量名拼写方案
这个插件把拼写检查逻辑嵌入 ESLint 流程,能真正扫描标识符(Identifier 节点),包括变量名、函数名、属性名、导入名等。
- 它依赖 ESLint 的 AST 解析能力,不是简单正则匹配,所以能区分
userProfile(驼峰)和纯单词profile - 默认词典是英文,中文变量名(如
用户列表)不会被识别,也不建议用中文命名变量 - 需要配合
eslint+typescript-eslint(如果是 TS 项目)一起工作,单独装没用
安装与基础配置:
- 运行 npm install eslint-plugin-spellcheck --save-dev
- 在 .eslintrc.cjs 或 .eslintrc.json 中添加:
"plugins": ["spellcheck"],
"rules": {
"spellcheck/spell-checker": ["warn", {
"comments": false,
"strings": false,
"identifiers": true,
"lang": "en-US",
"skipWords": ["api", "ui", "jwt", "http"]
}]
}
- identifiers: true 是关键,它打开变量名检查;comments: false 和 strings: false 是为了避免和 Code Spell Checker 重复干活
为什么不能只靠 Code Spell Checker 检查变量名
Code Spell Checker 的设计目标很明确:文本内容校验。它把整个源码当纯文本扫,根本不知道哪段是变量、哪段是字符串。
- 你写
const recieveData = useData();,它只会把recieveData当一个“大写开头的单词”跳过(默认不检查标识符) - 即使你强行用
cSpell.allowCompoundWords: true,它也只会拆成recieve+Data,但recieve是常见拼写错误,不在词典里 → 依然不报 - 它没有 AST 上下文,无法判断
recieveData是声明还是调用,更没法知道这是 React Hook 的返回值命名惯例
换句话说:它连“这是个变量名”都识别不了,谈不上检查拼写。
真实项目中容易漏掉的三个配置点
-
skipWords必须填项目高频缩写,否则authToken、reqBody这类会频繁误报;漏加一个,每天都要点三次“忽略” - TypeScript 用户必须确认
@typescript-eslint/parser已启用,否则 ESLint 会跳过.ts文件,插件完全不触发 -
lang值写成"en"会导致部分美式拼写(如color)不被识别,应明确写"en-US"或"en-GB"
变量名拼写错误属于语义层问题,得用语义工具来管。装了 Code Spell Checker 还以为万事大吉,结果 useEffct 在代码里躺了三天没人发现——这种事在没配 eslint-plugin-spellcheck 的团队里太常见。


















