本文目录导读:

- 使用 ESLint(JavaScript/TypeScript)
- 使用 Prettier(代码格式化)
- Husky + lint-staged(Git提交前检查)
- Python 代码检查(Flake8 + Black)
- 使用 GitHub Actions(CI自动检查)
- 完整的 Shell 脚本示例
- 配置文件自动化
- 使用建议
我来介绍几种常见的自动检查代码规范的方法和工具配置方案。
使用 ESLint(JavaScript/TypeScript)
安装和配置
# 安装 ESLint npm install eslint --save-dev # 初始化配置 npx eslint --init
配置文件示例 (.eslintrc.js)
module.exports = {
env: {
browser: true,
es2021: true,
node: true,
},
extends: [
'eslint:recommended',
'plugin:react/recommended',
'plugin:@typescript-eslint/recommended',
],
parser: '@typescript-eslint/parser',
parserOptions: {
ecmaFeatures: {
jsx: true,
},
ecmaVersion: 12,
sourceType: 'module',
},
plugins: ['react', '@typescript-eslint'],
rules: {
'indent': ['error', 2],
'quotes': ['error', 'single'],
'semi': ['error', 'always'],
'no-unused-vars': 'error',
'no-console': 'warn',
},
};
运行脚本
{
"scripts": {
"lint": "eslint src/",
"lint:fix": "eslint src/ --fix"
}
}
使用 Prettier(代码格式化)
安装和配置
npm install prettier --save-dev
配置文件 (.prettierrc)
{
"semi": true,
"trailingComma": "es5",
"singleQuote": true,
"printWidth": 80,
"tabWidth": 2,
"useTabs": false
}
自动格式化脚本
{
"scripts": {
"format": "prettier --write \"src/**/*.{js,jsx,ts,tsx,json,css,scss}\"",
"format:check": "prettier --check \"src/**/*.{js,jsx,ts,tsx,json,css,scss}\""
}
}
Husky + lint-staged(Git提交前检查)
安装
npm install husky lint-staged --save-dev npx husky install
配置 package.json
{
"lint-staged": {
"*.{js,jsx,ts,tsx}": ["eslint --fix", "prettier --write"],
"*.{json,css,scss,md}": ["prettier --write"]
}
}
配置 Husky 钩子
# 创建 pre-commit 钩子 npx husky add .husky/pre-commit "npx lint-staged"
Python 代码检查(Flake8 + Black)
安装
pip install flake8 black isort
配置文件 (.flake8)
[flake8] max-line-length = 88 extend-ignore = E203, W503 exclude = .git,__pycache__,build,dist
运行脚本
# check_code.py
import subprocess
import sys
def run_flake8():
result = subprocess.run(
['flake8', 'src/', 'tests/'],
capture_output=True,
text=True
)
if result.returncode != 0:
print("Flake8 检查结果:")
print(result.stdout)
print(result.stderr)
return False
return True
def run_black():
result = subprocess.run(
['black', '--check', 'src/', 'tests/'],
capture_output=True,
text=True
)
if result.returncode != 0:
print("Black 格式检查结果:")
print(result.stdout)
return False
return True
def run_isort():
result = subprocess.run(
['isort', '--check-only', 'src/', 'tests/'],
capture_output=True,
text=True
)
if result.returncode != 0:
print("isort 导入排序检查:")
print(result.stdout)
return False
return True
if __name__ == "__main__":
checks = [
("Flake8", run_flake8),
("Black", run_black),
("isort", run_isort)
]
all_passed = True
for name, check_func in checks:
print(f"正在运行 {name}...")
if not check_func():
all_passed = False
print(f"❌ {name} 检查失败")
else:
print(f"✅ {name} 检查通过")
sys.exit(0 if all_passed else 1)
使用 GitHub Actions(CI自动检查)
配置文件 (.github/workflows/lint.yml)
name: Code Quality Check
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
jobs:
lint:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [16.x, 18.x]
steps:
- uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- name: Install dependencies
run: npm ci
- name: Run ESLint
run: npm run lint
- name: Run Prettier check
run: npm run format:check
完整的 Shell 脚本示例
check-code-quality.sh
#!/bin/bash
set -e
echo "=== 代码质量检查开始 ==="
echo ""
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
# 记录失败数量
FAILURES=0
# JavaScript/TypeScript 检查
check_js() {
echo -e "${YELLOW}[1/4] 运行 ESLint...${NC}"
if npx eslint src/ --max-warnings=0; then
echo -e "${GREEN} ✅ ESLint 检查通过${NC}"
else
echo -e "${RED} ❌ ESLint 检查失败${NC}"
((FAILURES++))
fi
echo -e "${YELLOW}[2/4] 检查代码格式...${NC}"
if npx prettier --check "src/**/*.{js,jsx,ts,tsx}"; then
echo -e "${GREEN} ✅ Prettier 格式检查通过${NC}"
else
echo -e "${RED} ❌ Prettier 格式检查失败${NC}"
((FAILURES++))
fi
}
# Python 检查
check_python() {
echo -e "${YELLOW}[3/4] 运行 Flake8...${NC}"
if flake8 src/ tests/; then
echo -e "${GREEN} ✅ Flake8 检查通过${NC}"
else
echo -e "${RED} ❌ Flake8 检查失败${NC}"
((FAILURES++))
fi
echo -e "${YELLOW}[4/4] 类型检查...${NC}"
if mypy src/; then
echo -e "${GREEN} ✅ mypy 类型检查通过${NC}"
else
echo -e "${RED} ❌ mypy 类型检查失败${NC}"
((FAILURES++))
fi
}
# 检测项目类型
if [ -f "package.json" ]; then
check_js
fi
if [ -f "setup.py" ] || [ -f "requirements.txt" ]; then
check_python
fi
echo ""
echo "=== 代码质量检查结束 ==="
if [ $FAILURES -eq 0 ]; then
echo -e "${GREEN}🎉 所有检查通过!${NC}"
exit 0
else
echo -e "${RED}❌ $FAILURES 个检查项失败${NC}"
exit 1
fi
配置文件自动化
初始化脚本 init-lint.sh
#!/bin/bash
echo "正在初始化代码规范检查工具..."
# 创建配置文件
cat > .eslintrc.js << 'EOF'
module.exports = {
extends: ['eslint:recommended'],
rules: {
'no-console': 'warn',
'no-unused-vars': 'error',
},
};
EOF
cat > .prettierrc << 'EOF'
{
"singleQuote": true,
"trailingComma": "all",
"printWidth": 80,
"tabWidth": 2
}
EOF
# 更新 package.json
if [ -f "package.json" ]; then
npm install --save-dev eslint prettier husky lint-staged
# 添加脚本
node -e "
const pkg = require('./package.json');
pkg.scripts = {
...pkg.scripts,
'lint': 'eslint src/',
'format': 'prettier --write \"src/**/*.{js,jsx,ts,tsx}\"',
'format:check': 'prettier --check \"src/**/*.{js,jsx,ts,tsx}\"',
'prepare': 'husky install'
};
require('fs').writeFileSync('package.json', JSON.stringify(pkg, null, 2));
"
# 初始化 husky
npx husky install
npx husky add .husky/pre-commit "npx lint-staged"
fi
echo "✅ 初始化完成!"
使用建议
- 持续集成:将检查脚本集成到 CI/CD 流程中
- 渐进式采用:先对新增代码进行检查,逐渐覆盖旧代码
- 团队统一:使用统一的配置文件和规则
- 自动修复:配置
--fix参数自动修复简单问题 - 忽略文件:使用
.eslintignore、.prettierignore排除不需要检查的文件
这样的自动化检查流程能有效保证代码质量和一致性。