怎样用脚本批量重构代码格式?

wen 实用脚本 4

本文目录导读:

怎样用脚本批量重构代码格式?

  1. 使用 Prettier(最推荐)
  2. ESLint 自动修复
  3. 针对特定语言的工具
  4. 自定义脚本方案
  5. 使用强大的 sed 命令
  6. 项目级自动化配置
  7. Git Hooks 自动化
  8. 使用建议

使用 Prettier(最推荐)

安装和配置

# 安装 Prettier
npm install -g prettier
# 创建配置文件 .prettierrc
{
  "semi": true,
  "singleQuote": true,
  "tabWidth": 2,
  "trailingComma": "es5",
  "printWidth": 100
}

批量格式化

# 格式化所有 JS/TS 文件
prettier --write "src/**/*.{js,jsx,ts,tsx}"
# 格式化多种类型文件
prettier --write "src/**/*.{js,json,css,md}"

ESLint 自动修复

# 安装 ESLint
npm install -g eslint
# 运行自动修复
eslint --fix "src/**/*.js"
# 结合 prettier
eslint --fix --ext .js,.jsx,.ts,.tsx src/

针对特定语言的工具

Python (Black)

# 安装 Black
pip install black
# 批量格式化
black src/
black --line-length 100 src/**/*.py

Go (gofmt)

# 格式化所有 Go 文件
gofmt -w .
gofmt -l .  # 列出需要格式化的文件

Java (Google Java Format)

# 批量格式化
java -jar google-java-format-1.15.0-all-deps.jar -r src/**/*.java

自定义脚本方案

Python 脚本示例

import os
import re
from pathlib import Path
def format_python_files(root_dir):
    """批量格式化 Python 文件"""
    for path in Path(root_dir).rglob("*.py"):
        with open(path, 'r') as f:
            content = f.read()
        # 自定义格式规则
        # 1. 移除多余空行
        content = re.sub(r'\n{3,}', '\n\n', content)
        # 2. 统一缩进为4空格
        content = re.sub(r'^    ', '\t', content, flags=re.MULTILINE)
        # 3. 确保文件末尾有换行
        content = content.rstrip() + '\n'
        with open(path, 'w') as f:
            f.write(content)
# 使用
format_python_files("./src")

Shell 脚本示例

#!/bin/bash
# batch_format.sh
# 格式配置
EXTENSIONS=("*.js" "*.jsx" "*.ts" "*.tsx")
ROOT_DIR="$1"
if [ -z "$ROOT_DIR" ]; then
    ROOT_DIR="."
fi
format_file() {
    local file="$1"
    echo "格式化工��: $file"
    # 自定义格式化逻辑
    # 移除尾部空白
    sed -i 's/[[:space:]]*$//' "$file"
    # 确保文件末尾有换行
    sed -i -e '$a\' "$file"
}
# 遍历文件
for ext in "${EXTENSIONS[@]}"; do
    find "$ROOT_DIR" -type f -name "$ext" | while read file; do
        format_file "$file"
    done
done
echo "格式化完成!"

使用强大的 sed 命令

# 移除尾部空白
find . -name "*.py" -exec sed -i 's/[[:space:]]*$//' {} \;
# 统一换行符 (CRLF -> LF)
find . -type f \( -name "*.js" -o -name "*.py" \) -exec dos2unix {} \;
# 转换缩进 (4空格 -> 2空格)
find . -name "*.js" -exec sed -i 's/    /  /g' {} \;

项目级自动化配置

创建格式化脚本 format.sh

#!/bin/bash
set -e
echo "===== 开始代码格式化 ====="
# 检查工具是否存在
command -v prettier >/dev/null 2>&1 || { echo "需要安装 prettier"; exit 1; }
# 运行格式化
prettier --write "src/**/*.{js,ts,jsx,tsx,json,css,scss,md}" --log-level warn
# 运行 ESLint 修复
npx eslint --fix "src/**/*.{js,ts,jsx,tsx}" --quiet
echo "===== 格式化完成! ====="

package.json 配置

{
  "scripts": {
    "format": "bash format.sh",
    "format:check": "prettier --check \"src/**/*.{js,ts}\"",
    "format:write": "prettier --write \"src/**/*.{js,ts}\""
  }
}

Git Hooks 自动化

pre-commit hook

#!/bin/bash
# .git/hooks/pre-commit
# 暂存区文件格式化
FILES=$(git diff --cached --name-only --diff-filter=ACM)
if [ -n "$FILES" ]; then
    echo "格式化暂存的文件..."
    # 对暂存文件运行格式化
    for FILE in $FILES; do
        if [[ $FILE == *.js || $FILE == *.ts ]]; then
            npx prettier --write "$FILE"
            git add "$FILE"
        fi
    done
fi

使用建议

  1. 版本控制:先提交当前代码,再运行格式化
  2. 渐进式应用:按模块分批格式化,便于排查问题
  3. 配置文件:创建 .editorconfig 统一编辑器设置
  4. CI/CD:在持续集成中加入格式检查

选择哪种方法取决于你的项目语言、团队规范和现有工具链,Prettier 是最通用和推荐的选择。

抱歉,评论功能暂时关闭!