javascript booster 是基于 ast 实时分析代码语义的 vscode 插件,提供如 convert to const、replace with ?: 等上下文感知重构选项,仅作用于当前 js/ts 文件局部作用域,自动规避 eval/with 等不安全场景。

JavaScript Booster 是目前最直接帮你“看懂”代码逻辑的 VSCode 插件,不是靠猜、不是靠跳转,而是把重构动作变成可感知的语义转换。
为什么光标停在代码上就弹出灯泡?
它不是简单地匹配语法关键词,而是基于 AST(抽象语法树)实时分析当前光标所在节点的上下文。比如你写 var str1 = 'jspang.com';,插件识别出这是变量声明 + 字符串字面量,才给出 Convert to const 和 Split into declaration and initialization 这类语义明确的选项。
常见错误现象:装了插件但没反应——检查是否打开了 JS/TS 文件(.js、.ts 或带 "type": "module" 的 .mjs),纯 .html 里内联的 script 不触发。
- 只对当前文件有效,不跨文件推导作用域
- 不修改 import/export 关系,所有转换都限定在局部作用域内
- 遇到
eval、with或动态属性访问(如obj[key])会自动禁用相关建议
if-else 转三元表达式为什么没报错?
它不是字符串替换,而是先校验分支中是否含副作用操作(如函数调用、赋值、await)。只有当两个分支都只返回纯值或安全表达式时,Replace with ?: 才会出现。
使用场景举例:
-
if (x > 0) { return 'pos'; } else { return 'neg'; }→ 可转 -
if (x > 0) { console.log('pos'); } else { sendAlert(); }→ 不出现该选项
参数差异:Flip if-else 会交换条件与分支逻辑,但不改变执行顺序;而 Replace with ?: 本质是表达式化,要求左侧必须能被赋值(比如不能用于 if 套 try/catch)。
箭头函数转换后为什么自动删括号?
它按 ES6 规范做最小化简化:str => { return 'hi ' + str; } 中单参数且函数体为块语句,保留括号;但换成 str => 'hi ' + str 后,自动省略大括号和 return,前提是返回值不是对象字面量(否则会加括号避免解析歧义)。
容易踩的坑:
- 原函数用了
arguments或this绑定 → 转换后行为会变,插件不会提示,需人工确认 - 函数名被用作递归调用(如
factorial(n))→ 箭头函数无名字,转换后直接报错 - 模板字符串替换(
Replace with template string)对嵌套引号敏感,'a' + b + "c"可能只转一部分
真正关键的是:它不替代你读代码,而是把“这段代码**本可以怎么写得更清晰**”这个思考过程具象化。一旦习惯看灯泡选项,你就开始下意识评估每行代码的语义密度——这才是“更懂逻辑”的起点。











