Code Spell Checker 默认不检查变量名,需配置 cSpell.checkPrograms、cSpell.enabledLanguageIds 和 cSpell.ignorePaths 才能校验 JS/TS/Python 等语言中的声明式标识符(如 const userNmae),但属性访问、类型别名等仍不支持。

Code Spell Checker 默认不检查变量名,必须手动配置
它默认只检查注释、字符串字面量和普通文本,let userName = "john" 中的 userName 不会被校验——这不是 bug,是设计使然。变量名属于代码标识符(identifier),Spell Checker 默认跳过所有语法 token,除非你明确告诉它“这些也得查”。
要启用变量名拼写检查,需在工作区或用户设置中开启 cSpell.allowAutomaticLanguageDetection 并配合 cSpell.language 或自定义词典规则,但更直接有效的方式是启用 cSpell.diagnosticLevel + cSpell.enabledLanguageIds 的组合,并额外启用 cSpell.checkPrograms(注意:该选项仅在 v2.4+ 版本支持)。
-
cSpell.checkPrograms设为true,它才会尝试解析 JS/TS/Python 等语言中的标识符(包括变量、函数、类名) - 确保
cSpell.enabledLanguageIds包含"javascript"、"typescript"、"python"等对应语言 ID - 若用 TypeScript,建议同时启用
cSpell.ignorePaths排除node_modules和dist,否则大量第三方变量名会触发误报
VSCode 设置里怎么加这三行关键配置
打开 VSCode 设置(Ctrl+,),切到「JSON」编辑模式(右上角 {} 图标),在 settings.json 里插入以下内容:
{
"cSpell.checkPrograms": true,
"cSpell.enabledLanguageIds": ["javascript", "typescript", "python", "html", "markdown"],
"cSpell.ignorePaths": ["**/node_modules/**", "**/dist/**", "**/build/**"]
}
保存后重启 VSCode 或重载窗口(Ctrl+Shift+P → “Developer: Reload Window”)。此时再写 const userNmae = "test",userNmae 就会下划红线并提示 “Did you mean ‘userName’?”。
注意:cSpell.checkPrograms 是开关型配置,不是布尔值数组;如果设成 "true"(字符串)或遗漏引号,VSCode 会静默忽略该配置,不会报错也不会生效。
为什么有些变量名还是没被标红?常见漏检原因
即使开了 cSpell.checkPrograms,仍可能漏检,主要因为 Code Spell Checker 对标识符的提取有边界限制:
- 只检查“声明处”的变量名,比如
const myVar会被查,但obj.myVar中的myVar不会(属于属性访问,非声明) - 首字母大写的 PascalCase 名称(如
MyComponent)默认被当作专有名词跳过,需在cSpell.words中显式添加小写变体,或关闭cSpell.ignoreWordsStartingWithCapital - TypeScript 类型别名(
type UsrInfo = {...})中的UsrInfo不会被检查,因为类型声明不被视为“程序标识符”,只有值层面的声明才纳入范围 - ES6 解构赋值中的别名(
const { userName: usrName } = data)中usrName会被检查,但原始键名userName不会——它来自对象字面量,不属于当前作用域声明
想让拼写检查更准,还得配词典和忽略规则
光靠默认词典会把大量技术词汇(如 jsx、tsconfig、zod)标红。建议在项目根目录加 .cspell.json 文件,而不是全堆在 settings.json 里:
{
"version": "0.2",
"language": "en",
"words": ["jsx", "tsconfig", "zod", "vite", "pnpm"],
"ignoreWords": ["id", "url", "api", "ui", "ux"],
"ignoreRegExpList": ["[A-Z]{2,}"]
}
ignoreRegExpList 很实用:比如匹配全大写缩写(HTTP、URL),避免反复右键“Add to dictionary”。但注意正则必须写成字符串形式,不能写 /[A-Z]{2,}/g,否则加载失败。
真正麻烦的是跨项目一致性——不同团队对 userid vs userId 的偏好不同,这类命名规范没法靠拼写检查解决,得靠 ESLint + @typescript-eslint/naming-convention 配合使用。Code Spell Checker 只管“像不像英文”,不管“符不符合团队约定”。


















