Refactor菜单为空需先确认TypeScript语言服务是否就位;Extract Function失败需检查选中语句语法合法性;ESLint与Prettier自动修复须按正确顺序配置;正则分组是批量重构JS逻辑的底层可控手段。

Refactor菜单为空?先确认TypeScript语言服务是否真就位
VSCode本身不带重构引擎,所有语义级操作(比如跨文件重命名、Extract Function)都依赖LSP。菜单里没“Refactor”或只有Rename Symbol,大概率不是插件没装,而是语言服务压根没起来。
- 右下角状态栏必须显示
TypeScript或JavaScript,不能是Plain Text - 在
.ts或.js文件里按F12试试能不能跳转到定义;跳不到,F2就是纯文本替换 - 打开开发者工具(
Ctrl+Shift+P→Developer: Toggle Developer Tools),看Console有没有tsserver崩溃、超时或找不到tsconfig.json的报错 -
tsconfig.json哪怕空着也得有,且必须放在工作区根目录——VSCode认的是这个路径,不是你当前打开的文件夹
Extract Function失败?检查选中范围的语法合法性
VSCode不分析逻辑,只校验语法结构。选中稍有偏差,“Cannot extract to function”就直接弹出来,不给任何提示。
- 必须选中**连续可执行语句**:不能跨
if块边界,不能以return开头(顶层return会被忽略) - JS/TS里末尾分号会触发拒绝;Python里未赋值的
let变量无法推导参数类型 - 返回值只取最后一条
return表达式,前面的console.log()或副作用语句全被原样搬进新函数 - 提取完立刻检查签名:
async丢了没?外层count这类let变量是否被当作参数传入?参数名是arg0?别手敲——光标自动停在第一个参数上,按F2就能重命名
ESLint + Prettier自动修复 ≠ 自动重构,顺序错了就互相打架
editor.codeActionsOnSave和editor.formatOnSave不是并行触发,而是有明确执行优先级。顺序错会导致格式反复拉扯,比如分号被ESLint加上又被Prettier删掉。
详细的 Three.js 3D 图形参考,涵盖场景设置、相机、几何体、材质、光照、动画、控制器、加载器、数学工具和调试。
- 先启用ESLint自动修复:
"eslint.run": "onSave"+"editor.codeActionsOnSave": { "source.fixAll.eslint": true } - 再启用格式化:
"editor.formatOnSave": true,且"editor.defaultFormatter": "esbenp.prettier-vscode" - 关键一步:禁用ESLint的格式规则,装
eslint-config-prettier并加到.eslintrc.js的extends最末尾 - Vue/TSX文件若用Volar,额外设
"volar.autoInsertDotValue": false,否则格式化会破坏ref解构
正则分组查找:批量重构JS逻辑的底层手段
当插件和LSP都搞不定时,正则分组是最后也是最可控的武器。它不依赖语义分析,靠模式匹配完成结构化替换,适合改命名规范、抽离重复模板、清理日志语句等场景。
- 打开查找面板(
Ctrl+Shift+F),点.*图标启用正则模式 - 想把
myFunction(arg)统一包一层safeCall?用find: myFunction\(([^)]+)\),replace: safeCall(() => myFunction($1)) - 驼峰转下划线:
find: ([a-z])([A-Z]),replace: $1_$2;注意要多跑几次,因为一次只匹配相邻的一对 - 捕获组编号按
(出现顺序来,$1、$2别写反;非捕获组用(?:...)避免干扰编号
真正难的不是写正则,而是判断哪些逻辑该交给LSP做语义重构、哪些该用正则暴力扫——前者保安全,后者保可控。两者混用时,务必先备份或开Git暂存,不然一替错就全项目飘红。

















