Henry Henry
  • JavaScript
  • TypeScript
  • Vue
  • ElementUI
  • React
  • HTML
  • CSS
  • 技术文档
  • GitHub 技巧
  • Nodejs
  • Chrome
  • VSCode
  • Other
  • Mac
  • Windows
  • Linux
  • Vim
  • VSCode
  • Chrome
  • iTerm
  • Mac
  • Obsidian
  • lazygit
  • Vim 技巧
  • 分类
  • 标签
  • 归档
  • 网站
  • 资源
  • Vue 资源
GitHub (opens new window)

Henry

小学生中的前端大佬
  • JavaScript
  • TypeScript
  • Vue
  • ElementUI
  • React
  • HTML
  • CSS
  • 技术文档
  • GitHub 技巧
  • Nodejs
  • Chrome
  • VSCode
  • Other
  • Mac
  • Windows
  • Linux
  • Vim
  • VSCode
  • Chrome
  • iTerm
  • Mac
  • Obsidian
  • lazygit
  • Vim 技巧
  • 分类
  • 标签
  • 归档
  • 网站
  • 资源
  • Vue 资源
GitHub (opens new window)
  • 技术文档

  • GitHub

  • Nodejs

  • Chrome

  • VSCode

    • VSCode 完整版配置
    • VSCode 简明版配置
    • VSCode 插件
    • VSCode 快捷键
    • VSCode 在 Windows 上添加右键打开菜单的显示
    • 在 Finder 中使用 VSCode 打开文件或文件夹
    • 在 Terminal 中使用 VSCode 打开文件或文件夹
    • 在代码片段中使用快速建议
    • 工作中总结的代码片段
    • VSCode 重构
    • VSCode 重构之 Abracadabra 插件
      • The Essentials: 主要常用的
        • Rename Symbol: 重命名
        • Extract Variable: 提取变量
        • Extract Type: 提取类型
        • Inline Variable: 内联变量
        • Inline Function: 内联函数
        • Change Signature: 改变函数参数
        • Move Statement Up: 向上移动语句
        • Move Statement Down: 向下移动语句
        • Highlight Identifiers: 高亮变量及其引用
      • Simplifying Conditional Logic: 简化条件逻辑
        • Invert Boolean Logic: 反转布尔逻辑
        • Remove Redundant Else: 删除多余的 Else
        • Simplify Ternary: 简化三元
        • Flip If/Else: 翻转 If/Else
        • Flip Ternary: 翻转三元
        • Convert If/Else to Ternary: 将 If/Else 转换为三元
        • Convert Ternary to If/Else: 将三元转换为 If/Else
        • Convert If/Else to Switch: 将 If/Else 转换为 Switch
        • Convert Switch to If/Else: 将 Switch 转换为 If/Else
        • Split If Statement: 拆分 If 语句
        • Merge If Statements: 合并 If 语句
        • Merge With Previous If Statement: 与前一个 if 语句合并
        • Lift Up Conditional: 提升条件语句
      • Encapsulation: 封装
        • Extract Class: 提取类
      • Moving Features: 移动特性
        • Move to Existing File: 移动到现有文件
        • Remove Dead Code: 删除无法运行的代码
      • Organizing data: 重组数据
        • Split Declaration and Initialization: 拆分声明和初始化
        • Split Multiple Declarations: 拆分多个声明
        • Convert let to const: 将 let 转换为 const
      • Working around the syntax: 围绕语法工作
        • Add Numeric Separator: 添加数字分隔符
        • Destructure Object: 解构对象
        • Convert to Arrow Function: 转换为箭头函数
        • Toggle Braces: 切换大括号
        • Convert to Template Literal: 转换为模板文字
        • Replace Binary with Assignment: 用赋值替换二进制
        • Convert For-Loop to ForEach: 将 For 循环转换为 ForEach
        • Convert ForEach to For-Of: 将 ForEach 转换为 For-Of
        • Create Factory for Constructor: 为构造函数创建工厂函数
      • Specific to TypeScript: TS 特有的
        • Extract Generic Type: 提取通用类型
        • Extract Interface
      • Specific to React: React 特有的
        • Convert to Pure Component: 转换为函数组件
        • Extract useCallback(): 提取到 useCallback
        • Wrap in JSX Fragment: 使用空标签包裹单标签
        • Remove JSX Fragment: 删除空标签
    • VSCode 重构之 JavaScript Booster 插件
    • VSCode 重构之 Hocus Pocus 插件
    • VSCode 开发插件之初识
    • VSCode 开发插件之相对路径转别名路径
    • VSCode 开发插件之发布
    • VSCode 重构之 Code Spell Checker 插件
  • VSCode 更新文档

  • Other

  • 技术
  • VSCode
Henry
2022-10-16
目录

VSCode 重构之 Abracadabra 插件

本文主要结合自己实际工作中的例子介绍重构插件 Abracadabra, refactor this! - Visual Studio Marketplace (opens new window)

快捷键别名对照表参见这里

# The Essentials: 主要常用的

# Rename Symbol: 重命名

快捷键:F2

通过引用查找的方式重命名变量或函数名

VSCode 原生已支持该功能,但无法在 .vue 文件中生效

该插件可以在 <script> 标签内使用,但仍无法在 <template> 标签内使用

# Extract Variable: 提取变量

快捷键:C + O + v

比如我们有时候需要返回一个简单的表达式,可能直接就写成 return + 表达式

当我们需要输出该表达式或者增加一些处理时,将其提取为一个变量是更好的选择

我们就可以先选中该表达式,使用快捷键即可提取为变量:

该快捷键也可以根据光标所在的位置智能提取变量:

对于多处出现的相同变量也可以同时处理

# Extract Type: 提取类型

快捷键:C + O + v

与提取变量类似,不过针对的是类型

# Inline Variable: 内联变量

快捷键:C + O + n

使用快速修复:Inline Variable

与提取变量相反

比如我们先使用一个变量接收了一个表达式,结果发现该变量只使用了一次,就可以使用该功能

# Inline Function: 内联函数

快捷键:C + O + n

与内联变量类似,不过针对的是函数;使用函数体替换对函数的每次调用

适用于函数体较简单的场景

# Change Signature: 改变函数参数

使用快速修复:Change Signature

添加、删除或更改函数参数的顺序

# Move Statement Up: 向上移动语句

快捷键:O + S + u

这里的"语句"通常指变量或函数

VSCode 原生只支持移动单行,想移动多行时,必须先选中,再移动

使用该快捷键后,不论是单行还是多行都可以一键移动,无需选中,只要保证光标在需要移动的语句上即可

# Move Statement Down: 向下移动语句

快捷键:O + S + d

与向上移动语句作用一样,只不过是向下移动

向上移动语句和向下移动语句也适用于对象属性。移动的同时也会智能格式化代码,所以你不必再为结尾的逗号而烦恼了

# Highlight Identifiers: 高亮变量及其引用

快捷键:C + O + h

突出显示对变量的所有引用

# Simplifying Conditional Logic: 简化条件逻辑

# Invert Boolean Logic: 反转布尔逻辑

使用快速修复:Invert Boolean Logic

在保留功能的同时反转逻辑表达式,最好在复杂表达式上使用

我们在写逻辑表达式时,总是按照需求或自己的想法把每一种情况都写下来,也就是符合人类逻辑的表达式,其实,只需要逆向一下,就可以得到一个简化版的表达式,更符合程序的表达式

所以当我们写了一个一眼看不明白的逻辑表达式时,不妨使用一下这个功能,没准就能简化逻辑呢

可以智能的从光标所在位置或部分选择中反转最接近的表达式

# Remove Redundant Else: 删除多余的 Else

使用快速修复:Remove Redundant Else

在不需要 else 时将其删除,从而减少嵌套代码。此重构可将嵌套条件替换为保护语句,以使代码更易于阅读

# Simplify Ternary: 简化三元

使用快速修复:Simplify Ternary

总是有人写出如下代码:

const c = a ? a : b
1

但其实与 const c = a || b 是完全一样的效果,所以为什么不使用更简单的写法呢?

# Flip If/Else: 翻转 If/Else

使用快速修复:Flip If/Else

翻转 if 和 else 语句,有点类似反转布尔逻辑的高级版,只不过是那个不改变逻辑结果,而这个会反转结果

# Flip Ternary: 翻转三元

使用快速修复:Flip Ternary

与翻转 if/else 类似

# Convert If/Else to Ternary: 将 If/Else 转换为三元

使用快速修复:Convert If/Else to Ternary

当 if/else 语句较简单时,可以转换为更简短的三元表达式,提高代码的简洁性

# Convert Ternary to If/Else: 将三元转换为 If/Else

使用快速修复:Convert Ternary to If/Else

当我们需要在三元表达式的基础上扩充逻辑时,就可以使用该功能

# Convert If/Else to Switch: 将 If/Else 转换为 Switch

使用快速修复:Convert If/Else to Switch

当多个 if 判断条件与同一个变量有关时,就可以使用该功能

# Convert Switch to If/Else: 将 Switch 转换为 If/Else

使用快速修复:Convert Switch to If/Else

当 switch 处理逻辑少于 3 个时,建议使用 if/else

# Split If Statement: 拆分 If 语句

使用快速修复:Split If Statement

拆分最近的 if 语句的逻辑表达式

只能拆分表达式最后的部分,无法自己选择拆分部分

当我们需要在表达式最后部分扩充逻辑时,就可以使用该功能

# Merge If Statements: 合并 If 语句

使用快速修复:Merge If Statements

与拆分 if 语句相反

当我们使用多个 if 语句只处理一个场景时,就可以使用该功能

它也适用于 else-if

使用快速修复:Merge else-if

它还可以合并处理连续的 if 语句

# Merge With Previous If Statement: 与前一个 if 语句合并

使用快速修复:Merge With Previous If

将光标所在的语句与上面的 if 语句合并

合并 2 个连续的 if 语句很有用,并且会智能的处理合并后的逻辑

# Lift Up Conditional: 提升条件语句

使用快速修复:Lift Up Conditional

适用于在 if 语句里嵌套 if/else 语句,想把 if/else 提升到 if 外面的场景

# Encapsulation: 封装

# Extract Class: 提取类

使用快速修复:Extract Class

# Moving Features: 移动特性

# Move to Existing File: 移动到现有文件

使用快速修复:Move to Existing File

VS Code 只能将内容移动到新文件中,该插件可以将内容移动到现有文件中

在要移动的函数上使用快速修复,选择目标文件,让它负责其余的工作。

只适用于全局声明的函数、类型、接口和变量,可以智能解析所需的导入,并防止创建循环依赖项。

# Remove Dead Code: 删除无法运行的代码

使用快速修复:Remove Dead Code

我们在老代码的基础上增加新业务时,可能会写出永运都无法访问运行的代码,就像下图一样

# Organizing data: 重组数据

# Split Declaration and Initialization: 拆分声明和初始化

使用快速修复:Split Declaration and Initialization

有人喜欢使用 let 或 const 一次声明多个变量,但本人还是喜欢分别声明,奈何改起来比较麻烦,现在好了,一键修改

只是改变以后的格式是先使用 let 声明(不论以前是 let 还是 const),后赋值

毕竟人家的功能就是拆分声明和初始化嘛,想只要拆分声明,可以使用下一个命令

# Split Multiple Declarations: 拆分多个声明

使用快速修复:Split Multiple Declarations

就是将一起声明的多个变量拆分为分别声明

const 声明的拆分完还是 const

# Convert let to const: 将 let 转换为 const

使用快速修复:Convert let to const

如果在作用域中,一个变量的值未发生改变,就可以将其 let 声明转换为 const 声明

# Working around the syntax: 围绕语法工作

# Add Numeric Separator: 添加数字分隔符

使用快速修复:Add Numeric Separator

你知道你可以写 10_000 而不是 10000 吗?好吧,现在你知道了

# Destructure Object: 解构对象

目前由于存在Destructure Object is too slow · Issue #416 · nicoespeon/abracadabra (opens new window)问题,无法使用快速修复,只能使用命令行调用:Abracadabra: Destructure Object

如果该问题已被关闭,那么就可以使用快速修复了

只要该插件可以推断出对象的类型,就可以自动对其进行解构,可能最适合 TypeScript 代码

# Convert to Arrow Function: 转换为箭头函数

使用快速修复:Convert to Arrow Function

将函数声明转换为箭头函数

# Toggle Braces: 切换大括号

使用快速修复:Toggle Braces

有时我们需要在添加更多代码之前添加大括号,但有的时候我们为了代码简洁,去掉大括号更好

这种重构允许我们在光标最近的语句上切换大括号!

它适用于:

  • If 语句(if 和 else 可以独立设置)
  • 箭头函数表达式(例如 const someFunction = () => {})
  • JSX 属性(例如 <SomeComponent anAttribute={"a value"} />)
  • 循环(for 和 while 块)

# Convert to Template Literal: 转换为模板文字

使用快速修复:Convert to Template String

目前 VS Code 已支持该重构,使用快速修复:Convert to Template String,但不支持纯字符串转模板字符串这种情况:Don't offer Convert to template string refactoring for simple strings · Issue #36784 · microsoft/TypeScript (opens new window)

所以该插件才加的这个功能

# Replace Binary with Assignment: 用赋值替换二进制

使用快速修复:Replace = with x=;这里 x 代表计算符号

这个可能看起来晦涩难懂,简单来说就是用 += 替换 =,用 -= 替换 =,等等

可以获得更短的(赋值)语法,重构必备

# Convert For-Loop to ForEach: 将 For 循环转换为 ForEach

使用快速修复:Convert to ForEach

重构老代码必备

# Convert ForEach to For-Of: 将 ForEach 转换为 For-Of

使用快速修复:Convert ForEach to For-Of

# Create Factory for Constructor: 为构造函数创建工厂函数

使用快速修复:Create Factory for Constructor

创建一个工厂函数来实例化选定的类。当您想在后台使用类公开常规函数时,这可能很有用。

不需要 new 调用常规函数,这使得它们更容易组合。

# Specific to TypeScript: TS 特有的

# Extract Generic Type: 提取通用类型

使用快速修复:Extract Generic Type

将现有类型转换为泛型,当需要使界面更通用时非常方便

# Extract Interface

使用快速修复:Extract Interface

从类中提取接口

# Specific to React: React 特有的

# Convert to Pure Component: 转换为函数组件

使用命令行调用:Convert to Pure Component

它将仅具有 render 方法、仅具有安全属性(静态和道具)且没有对功能组件的引用的 ES6 类组件转换函数组件

# Extract useCallback(): 提取到 useCallback

使用快速修复:Extract to useCallback

将函数 props 提取到 useCallback 声明中的重构。它将为您解决所需的依赖关系。

# Wrap in JSX Fragment: 使用空标签包裹单标签

使用快速修复:Wrap in JSX Fragment

使用 <></> 包裹一个单标签,适用于根标签由单个变成多个的情况

# Remove JSX Fragment: 删除空标签

使用快速修复:Remove JSX Fragment

编辑 (opens new window)
#重构#VSCode 插件#VSCode
上次更新: 6/1/2023, 10:41:10 AM
VSCode 重构
VSCode 重构之 JavaScript Booster 插件

← VSCode 重构 VSCode 重构之 JavaScript Booster 插件→

最近更新
01
version 1.15
07-01
02
version 1.14
06-27
03
version 1.13
06-27
更多文章>
Theme by Vdoing | Copyright © 2017-2023 HenryTSZ | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式