WebStorm 默认不自动添加分号,需手动设置“Semicolon to terminate statements = always”并启用“Insert semicolon at end of line when typing”;.editorconfig 和 Prettier/ESLint 会覆盖该设置。

WebStorm 默认不自动在 JavaScript/TypeScript 语句末尾加 ;,必须手动开启规则,否则补全、输入、格式化都不会插入分号。
JavaScript/TypeScript 设置 Semicolon to terminate statements = always
这是最核心的开关,决定所有格式化操作(比如 Ctrl+Alt+L)是否补分号:
- 打开
Settings / Preferences → Editor → Code Style → JavaScript(或TypeScript) - 切换到
Punctuation标签页 - 将
Semicolon to terminate statements下拉框设为always - 该设置对已有代码生效方式:仅在你主动触发格式化时才插入;不会实时监听输入
启用 Insert semicolon at end of line when typing 后按 Enter 自动加分号
这个选项解决“写完一行想立刻加分号”的场景,但需注意它只在特定条件下触发:
- 勾选
Insert semicolon at end of line when typing(在同个Punctuation页面) - 必须是合法语句结尾(如
const a = 1),且光标紧贴行末(不能有空格) - 按
Enter后才会自动补;;按;再按Enter是正常行为,光标停在分号后 - 不适用于表达式片段,例如
$.ajax({})补全后光标在括号内,此时按Enter不会加分号——因为 WebStorm 不认为它已是完整语句
.editorconfig 会覆盖 WebStorm 原生设置
如果你项目根目录存在 .editorconfig,它的优先级高于 IDE 设置:
-
insert_final_newline = true影响文件末尾换行,但和分号无关 - 分号相关配置需用
semi = true(ESLint 风格)或end_of_line = lf等——但 WebStorm **不识别**这些字段 - 真正能覆盖分号行为的是 Prettier 或 ESLint 插件:一旦启用 “on save” 格式化,它们会接管整个流程,WebStorm 的
Semicolon to terminate statements就失效了 - 验证是否被覆盖:删掉插件、禁用 Save Actions 中的格式化选项,再试一次
Ctrl+Alt+L
Postfix 补全不负责加分号,别指望它
有人误以为 a != null 后按 . 弹出 ?.let 就能顺带加分号,其实不是:
- Postfix 补全默认关闭,需在
Settings → Editor → General → Postfix Completion单独为 JavaScript 启用 - 它只生成新结构(如
a?.b、a.notNull()),不修改语句边界 - 即使启用了
Insert semicolon at end of line when typing,Postfix 补全后光标位置也不满足“行末”条件,不会触发加分号
真正容易被忽略的是:分号插入行为完全依赖「语句完整性判断」,而 WebStorm 的判断逻辑比直觉更保守。写完 return foo() 按 Enter 可能不加分号,因为 return 后换行在 ASI 规则里是合法的——IDE 不会强行破坏 ASI 推断。


















