javascript booster 是最接近“写代码时自动补全意图”的插件,基于语法树精准识别可安全重构节点;其 light bulb 仅在语法合法且光标位于可重构语句内部(如变量或字符串字面量)时触发,要求文件为 .js/.ts,且需避免语法干扰插件及未闭合代码。

JavaScript Booster 是目前最接近“写代码时自动补全意图”的插件,不是靠猜,而是靠语法树精准识别可安全重构的节点。
JavaScript Booster 的 light bulb 为什么总不出现
它只在语法合法、且光标落在可重构语句内部时触发,比如:var str = 'a' 中光标停在 str 或 'a' 上会亮灯泡;但停在等号或分号上就不会。
- 确保文件后缀是
.js或.ts(它不处理.jsx或.vue单文件组件中的 script 块) - 禁用其他干扰语法解析的插件(比如某些过度 aggressive 的 formatter)
- 如果刚粘贴了一段未闭合的代码(如漏了右括号),整个作用域会被视为无效,灯泡直接消失
Convert to arrow function 为什么有时不生效
它要求函数体必须是单一表达式或带明确 return 语句的块,且不能含 this / arguments / super 等绑定敏感词。
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
- 这个不行:
function f() { console.log(this); return 1; }→ 有this,选项被隐藏 - 这个可以:
function f(x) { return x * 2; }→ 自动转成f = x => x * 2 - 这个也行:
const f = function(x) { return x > 0 ? 'yes' : 'no'; }→ 转成const f = x => x > 0 ? 'yes' : 'no';
Replace with template string 对 + 拼接的限制很硬
它只处理纯字符串字面量与变量的线性拼接,中间不能穿插函数调用、运算符或嵌套表达式。
- 支持:
'Hello ' + name + '!'→`Hello ${name}!` - 不支持:
'Hello ' + name.toUpperCase() + '!'→ 选项不出现 - 也不支持:
'Price: $' + price + ' (' + (price * 1.1).toFixed(2) + ')'→ 多重运算,直接跳过
Flip if-else 和 Replace with ?: 的副作用检查很关键
它会扫描整个 if 分支内所有赋值、函数调用、await 表达式,只要发现可能改变执行顺序或引发异常,就禁用该重构选项。
- 这个能转:
if (x) a = 1; else a = 2;→a = x ? 1 : 2; - 这个不能转:
if (x) doSomething(); else return false;→ 含return,语义不同,选项被屏蔽 - 这个也禁用:
if (x) await api.get(); else console.log('fail');→ await 在分支里,无法安全压缩为三元
真正难的是判断哪些重构是“安全”的——它不是简单字符串替换,而是在 AST 层做语义等价验证。很多人装了却觉得“没反应”,其实是代码本身不符合安全转换条件,而不是插件坏了。










