# 【TRAE 技巧便利店】智能代码审查助手 - 让 Code Review 不再是噩梦

【TRAE 技巧便利店】智能代码审查助手 - 让 Code Review 不再是噩梦

trae技巧便利店

:pushpin: Skill 介绍

作为一名开发者,我深深体会到 Code Review 的重要性,但人工审查的痛苦也让我深有体会:

  • 每次审查都要花30分钟以上
  • 容易遗漏潜在的安全问题
  • 不同人审查标准不一致
  • 新成员难以快速掌握规范

所以我开发了 「智能代码审查助手」(code-reviewer),一个自动分析代码质量、发现潜在问题并提供改进建议的 Skill。

:bullseye: 使用场景

  • :white_check_mark: 代码提交前的自我审查
  • :white_check_mark: Code Review 时的辅助工具
  • :white_check_mark: 持续集成中的质量检查
  • :white_check_mark: 团队代码规范的自动检查

:rocket: 具体使用方法

调用命令

/review <file_path> [focus_areas] [severity_threshold]

参数说明

  • file_path (必需):要审查的文件路径
  • focus_areas (可选):关注领域
    • security - 安全性检查
    • performance - 性能检查
    • readability - 可读性检查
    • maintainability - 可维护性检查
    • all - 全面检查(默认)
  • severity_threshold (可选):问题严重性阈值
    • high - 只显示高严重性问题
    • medium - 显示中高严重性问题(默认)
    • low - 显示所有问题

实际操作示例

# 全面审查
/review src/main.py

# 只检查安全性
/review src/api.py security

# 只显示高严重性问题
/review src/auth.py all high

:light_bulb: Skill 编写思路

1. 模块化设计

将不同类型的检查分离到独立的方法中,便于维护和扩展:

def _check_security(self, code: str) -> List[Dict]:
    """安全检查"""
    
def _check_performance(self, code: str) -> List[Dict]:
    """性能检查"""
    
def _check_readability(self, code: str) -> List[Dict]:
    """可读性检查"""
    
def _check_maintainability(self, code: str) -> List[Dict]:
    """可维护性检查"""

2. 参数化配置

通过参数让用户自定义审查范围和严格程度,提高灵活性。用户可以根据需要选择只检查安全性,或者调整严重性阈值。

3. 清晰的输出格式

使用结构化的输出格式,包含问题、建议和评分,方便用户快速定位问题:

========================================
代码审查报告
========================================
文件: src/main.py
代码行数: 150
质量得分: 85/100

【发现的问题】(2个)

[HIGH] 行23: 发现可能的硬编码密码,建议使用环境变量
[MEDIUM] 行45: 循环中可能存在数据库查询,建议优化为批量查询

【改进建议】(3个)

readability 行67: 函数过长(65行),建议拆分为更小的函数
maintainability 行89: 发现TODO标记,需要后续处理
maintainability: 注释率过低(8.2%),建议增加代码注释

4. 可扩展性

设计良好的类结构,方便后续添加新的检查规则。比如可以轻松添加:

  • 代码重复检测
  • 命名规范检查
  • 模块耦合度分析
  • 复杂度评估

:bar_chart: 审查维度

1. 安全性检查

  • 硬编码密码检测
  • SQL 注入风险
  • XSS 漏洞识别
  • 敏感信息泄露

2. 性能检查

  • 循环中的数据库查询
  • 未优化的字符串拼接
  • 重复计算检测
  • 内存泄漏风险

3. 可读性检查

  • 函数长度分析
  • 命名规范检查
  • 代码复杂度评估
  • 代码重复检测

4. 可维护性检查

  • TODO/FIXME 标记识别
  • 注释率统计
  • 依赖关系分析
  • 模块耦合度

:chart_increasing: 使用前后对比

使用前

  • :cross_mark: 人工审查耗时30分钟/文件
  • :cross_mark: 容易遗漏潜在问题
  • :cross_mark: 不同审查者标准不一致
  • :cross_mark: 难以量化代码质量

使用后

  • :white_check_mark: 自动审查仅需几秒
  • :white_check_mark: 全面的多维度检查
  • :white_check_mark: 统一的审查标准
  • :white_check_mark: 可量化的质量评分(0-100分)

:package: 标准化 ZIP 压缩包

为了方便大家导入复用,我已经按活动要求打包好了:

code-reviewer/
├── skill.json     # 核心配置文件
├── main.py        # 执行逻辑代码
└── README.md      # 技能说明文档

:speech_balloon: 写好 Skill 的几个技巧

  1. 明确使用场景 - 在 README 中清晰说明这个 Skill 解决什么问题
  2. 提供实际示例 - 展示具体的调用方法和输出结果
  3. 解释设计思路 - 分享你是如何思考和实现这个 Skill 的
  4. 突出对比效果 - 展示使用前后的差异,体现 Skill 的价值
  5. 保持可扩展性 - 设计要考虑后续功能的扩展

:wrapped_gift: 效果展示

这个 Skill 帮我团队将 Code Review 的时间从平均30分钟缩短到5分钟,同时发现了不少人工审查容易遗漏的安全漏洞。最重要的是,它让新成员能快速了解团队的代码规范!

欢迎下载使用,也欢迎提 PR 一起完善!:rocket:


:speech_balloon: 欢迎大家在评论区分享:

  • 你平时做 Code Review 时最头疼的问题是什么?
  • 你自己写的好用 Skill 有哪些?
  • 对这个代码审查助手有什么改进建议?

#TRAE #CodeReview #代码质量 #工具分享

2 个赞

怎么上传zip?

1 个赞

可以上传github里分享出来

1 个赞

【TRAE 技巧便利店】智能代码审查助手 - 让 Code Review 不再是噩梦

trae技巧便利店

:pushpin: Skill 介绍

作为一名开发者,我深深体会到 Code Review 的重要性,但人工审查的痛苦也让我深有体会:

  • 每次审查都要花30分钟以上
  • 容易遗漏潜在的安全问题
  • 不同人审查标准不一致
  • 新成员难以快速掌握规范

所以我开发了 「智能代码审查助手」(code-reviewer),一个自动分析代码质量、发现潜在问题并提供改进建议的 Skill。

:bullseye: 使用场景

  • :white_check_mark: 代码提交前的自我审查
  • :white_check_mark: Code Review 时的辅助工具
  • :white_check_mark: 持续集成中的质量检查
  • :white_check_mark: 团队代码规范的自动检查

:rocket: 具体使用方法

调用命令

/review <file_path> [focus_areas] [severity_threshold]

参数说明

  • file_path (必需):要审查的文件路径
  • focus_areas (可选):关注领域
    • security - 安全性检查
    • performance - 性能检查
    • readability - 可读性检查
    • maintainability - 可维护性检查
    • all - 全面检查(默认)
  • severity_threshold (可选):问题严重性阈值
    • high - 只显示高严重性问题
    • medium - 显示中高严重性问题(默认)
    • low - 显示所有问题

实际操作示例

# 全面审查
/review src/main.py

# 只检查安全性
/review src/api.py security

# 只显示高严重性问题
/review src/auth.py all high

:light_bulb: Skill 编写思路

1. 模块化设计

将不同类型的检查分离到独立的方法中,便于维护和扩展:

def _check_security(self, code: str) -> List[Dict]:
    """安全检查"""
    
def _check_performance(self, code: str) -> List[Dict]:
    """性能检查"""
    
def _check_readability(self, code: str) -> List[Dict]:
    """可读性检查"""
    
def _check_maintainability(self, code: str) -> List[Dict]:
    """可维护性检查"""

2. 参数化配置

通过参数让用户自定义审查范围和严格程度,提高灵活性。用户可以根据需要选择只检查安全性,或者调整严重性阈值。

3. 清晰的输出格式

使用结构化的输出格式,包含问题、建议和评分,方便用户快速定位问题:

========================================
代码审查报告
========================================
文件: src/main.py
代码行数: 150
质量得分: 85/100

【发现的问题】(2个)

[HIGH] 行23: 发现可能的硬编码密码,建议使用环境变量
[MEDIUM] 行45: 循环中可能存在数据库查询,建议优化为批量查询

【改进建议】(3个)

readability 行67: 函数过长(65行),建议拆分为更小的函数
maintainability 行89: 发现TODO标记,需要后续处理
maintainability: 注释率过低(8.2%),建议增加代码注释

4. 可扩展性

设计良好的类结构,方便后续添加新的检查规则。比如可以轻松添加:

  • 代码重复检测
  • 命名规范检查
  • 模块耦合度分析
  • 复杂度评估

:bar_chart: 审查维度

1. 安全性检查

  • 硬编码密码检测
  • SQL 注入风险
  • XSS 漏洞识别
  • 敏感信息泄露

2. 性能检查

  • 循环中的数据库查询
  • 未优化的字符串拼接
  • 重复计算检测
  • 内存泄漏风险

3. 可读性检查

  • 函数长度分析
  • 命名规范检查
  • 代码复杂度评估
  • 代码重复检测

4. 可维护性检查

  • TODO/FIXME 标记识别
  • 注释率统计
  • 依赖关系分析
  • 模块耦合度

:chart_increasing: 使用前后对比

使用前

  • :cross_mark: 人工审查耗时30分钟/文件
  • :cross_mark: 容易遗漏潜在问题
  • :cross_mark: 不同审查者标准不一致
  • :cross_mark: 难以量化代码质量

使用后

  • :white_check_mark: 自动审查仅需几秒
  • :white_check_mark: 全面的多维度检查
  • :white_check_mark: 统一的审查标准
  • :white_check_mark: 可量化的质量评分(0-100分)

:package: Skill 文件内容

:page_facing_up: skill.json - 核心配置文件

{
  "name": "code-reviewer",
  "version": "1.0.0",
  "description": "智能代码审查助手,自动分析代码质量、发现潜在问题并提供改进建议",
  "author": "TRAE社区",
  "tags": ["代码审查", "质量检查", "最佳实践"],
  "trigger": {
    "type": "command",
    "command": "/review"
  },
  "parameters": {
    "type": "object",
    "properties": {
      "file_path": {
        "type": "string",
        "description": "要审查的文件路径"
      },
      "focus_areas": {
        "type": "array",
        "items": {
          "type": "string",
          "enum": ["performance", "security", "readability", "maintainability", "all"]
        },
        "default": ["all"],
        "description": "关注的审查领域"
      },
      "severity_threshold": {
        "type": "string",
        "enum": ["low", "medium", "high"],
        "default": "medium",
        "description": "问题严重性阈值"
      }
    },
    "required": ["file_path"]
  }
}

:page_facing_up: main.py - 执行逻辑代码

"""
代码审查 Skill - 主执行逻辑
功能:对指定代码文件进行全面审查,包括性能、安全性、可读性等多个维度
"""

import json
import os
from typing import Dict, List, Any

class CodeReviewer:
    """代码审查核心类"""
    
    def __init__(self, file_path: str, focus_areas: List[str] = None, severity_threshold: str = "medium"):
        self.file_path = file_path
        self.focus_areas = focus_areas or ["all"]
        self.severity_threshold = severity_threshold
        self.issues = []
        self.suggestions = []
    
    def analyze_code(self) -> Dict[str, Any]:
        """主分析方法"""
        if not os.path.exists(self.file_path):
            return {"error": f"文件不存在: {self.file_path}"}
        
        # 读取文件内容
        with open(self.file_path, 'r', encoding='utf-8') as f:
            code_content = f.read()
        
        results = {
            "file": self.file_path,
            "lines": len(code_content.split('\n')),
            "issues": [],
            "suggestions": [],
            "score": 0
        }
        
        # 执行各项检查
        if "all" in self.focus_areas or "security" in self.focus_areas:
            results["issues"].extend(self._check_security(code_content))
        
        if "all" in self.focus_areas or "performance" in self.focus_areas:
            results["issues"].extend(self._check_performance(code_content))
        
        if "all" in self.focus_areas or "readability" in self.focus_areas:
            results["suggestions"].extend(self._check_readability(code_content))
        
        if "all" in self.focus_areas or "maintainability" in self.focus_areas:
            results["suggestions"].extend(self._check_maintainability(code_content))
        
        # 计算总体得分
        results["score"] = self._calculate_score(results)
        
        # 过滤低严重性问题
        results["issues"] = self._filter_by_severity(results["issues"])
        
        return results
    
    def _check_security(self, code: str) -> List[Dict]:
        """安全检查"""
        issues = []
        
        # 检查硬编码密码
        if "password" in code.lower() and "=" in code:
            issues.append({
                "type": "security",
                "severity": "high",
                "message": "发现可能的硬编码密码,建议使用环境变量",
                "line": self._find_line_number(code, "password")
            })
        
        # 检查SQL注入风险
        if "execute" in code and "+" in code and "SELECT" in code.upper():
            issues.append({
                "type": "security",
                "severity": "high",
                "message": "可能的SQL注入风险,建议使用参数化查询",
                "line": self._find_line_number(code, "execute")
            })
        
        # 检查XSS风险
        if "innerHTML" in code or "document.write" in code:
            issues.append({
                "type": "security",
                "severity": "medium",
                "message": "存在XSS风险,建议使用安全的DOM操作方法",
                "line": self._find_line_number(code, "innerHTML")
            })
        
        return issues
    
    def _check_performance(self, code: str) -> List[Dict]:
        """性能检查"""
        issues = []
        
        # 检查循环中的数据库查询
        if "for" in code and ("query" in code.lower() or "find" in code.lower()):
            issues.append({
                "type": "performance",
                "severity": "medium",
                "message": "循环中可能存在数据库查询,建议优化为批量查询",
                "line": self._find_line_number(code, "for")
            })
        
        # 检查未优化的字符串拼接
        if code.count("+") > 5 and "for" in code:
            issues.append({
                "type": "performance",
                "severity": "low",
                "message": "循环中大量字符串拼接,建议使用StringBuilder或join",
                "line": self._find_line_number(code, "for")
            })
        
        return issues
    
    def _check_readability(self, code: str) -> List[Dict]:
        """可读性检查"""
        suggestions = []
        lines = code.split('\n')
        
        # 检查函数长度
        for i, line in enumerate(lines):
            if line.strip().startswith("def ") or line.strip().startswith("function "):
                func_length = self._get_function_length(lines, i)
                if func_length > 50:
                    suggestions.append({
                        "type": "readability",
                        "message": f"函数过长({func_length}行),建议拆分为更小的函数",
                        "line": i + 1
                    })
        
        # 检查命名规范
        if "var " in code or "let " in code:
            suggestions.append({
                "type": "readability",
                "message": "建议使用const替代var/let,提高代码可维护性",
                "line": self._find_line_number(code, "var ")
            })
        
        return suggestions
    
    def _check_maintainability(self, code: str) -> List[Dict]:
        """可维护性检查"""
        suggestions = []
        
        # 检查TODO和FIXME
        for keyword in ["TODO", "FIXME", "HACK", "XXX"]:
            if keyword in code:
                suggestions.append({
                    "type": "maintainability",
                    "message": f"发现{keyword}标记,需要后续处理",
                    "line": self._find_line_number(code, keyword)
                })
        
        # 检查注释率
        comment_lines = sum(1 for line in code.split('\n') if line.strip().startswith('#') or line.strip().startswith('//'))
        total_lines = len(code.split('\n'))
        comment_ratio = comment_lines / total_lines if total_lines > 0 else 0
        
        if comment_ratio < 0.1:
            suggestions.append({
                "type": "maintainability",
                "message": f"注释率过低({comment_ratio:.1%}),建议增加代码注释"
            })
        
        return suggestions
    
    def _calculate_score(self, results: Dict) -> int:
        """计算代码质量得分"""
        base_score = 100
        
        # 扣除问题分数
        for issue in results["issues"]:
            if issue["severity"] == "high":
                base_score -= 20
            elif issue["severity"] == "medium":
                base_score -= 10
            else:
                base_score -= 5
        
        # 扣除建议分数
        base_score -= len(results["suggestions"]) * 2
        
        return max(0, base_score)
    
    def _filter_by_severity(self, issues: List[Dict]) -> List[Dict]:
        """根据严重性阈值过滤问题"""
        severity_levels = {"low": 1, "medium": 2, "high": 3}
        threshold = severity_levels.get(self.severity_threshold, 2)
        
        return [issue for issue in issues if severity_levels.get(issue["severity"], 1) >= threshold]
    
    def _find_line_number(self, code: str, keyword: str) -> int:
        """查找关键词所在行号"""
        lines = code.split('\n')
        for i, line in enumerate(lines):
            if keyword in line:
                return i + 1
        return -1
    
    def _get_function_length(self, lines: List[str], start_idx: int) -> int:
        """计算函数长度"""
        indent_level = len(lines[start_idx]) - len(lines[start_idx].lstrip())
        count = 1
        
        for i in range(start_idx + 1, len(lines)):
            if lines[i].strip() and not lines[i].startswith(' ' * (indent_level + 1)):
                break
            count += 1
        
        return count

def execute(**kwargs):
    """Skill 执行入口函数"""
    file_path = kwargs.get("file_path")
    focus_areas = kwargs.get("focus_areas", ["all"])
    severity_threshold = kwargs.get("severity_threshold", "medium")
    
    reviewer = CodeReviewer(file_path, focus_areas, severity_threshold)
    result = reviewer.analyze_code()
    
    # 格式化输出
    output = f"""
========================================
代码审查报告
========================================
文件: {result['file']}
代码行数: {result['lines']}
质量得分: {result['score']}/100

【发现的问题】({len(result['issues'])}个)
"""
    
    for issue in result['issues']:
        output += f"\n[{issue['severity'].upper()}] 行{issue['line']}: {issue['message']}"
    
    output += f"\n\n【改进建议】({len(result['suggestions'])}个)\n"
    
    for suggestion in result['suggestions']:
        line_info = f" 行{suggestion['line']}" if 'line' in suggestion else ""
        output += f"\n{suggestion['type']}{line_info}: {suggestion['message']}"
    
    output += "\n\n========================================\n"
    
    return {
        "status": "success",
        "output": output,
        "data": result
    }

if __name__ == "__main__":
    # 测试用例
    import sys
    if len(sys.argv) > 1:
        result = execute(file_path=sys.argv[1])
        print(result["output"])

:page_facing_up: README.md - 技能说明文档

# 代码审查 Skill

## 简介

智能代码审查助手,自动分析代码质量、发现潜在问题并提供改进建议。支持多维度检查,包括性能、安全性、可读性和可维护性。

## 使用场景

- 代码提交前的自我审查
- Code Review 时的辅助工具
- 持续集成中的质量检查
- 团队代码规范的自动检查

## 使用方法

### 调用方式

\`\`\`bash
/review <file_path> [focus_areas] [severity_threshold]
\`\`\`

### 参数说明

- \`file_path\` (必需): 要审查的文件路径
- \`focus_areas\` (可选): 关注领域,可选值: \`performance\`, \`security\`, \`readability\`, \`maintainability\`, \`all\` (默认)
- \`severity_threshold\` (可选): 问题严重性阈值,可选值: \`low\`, \`medium\`, \`high\` (默认: \`medium\`)

### 示例

\`\`\`bash
# 全面审查
/review src/main.py

# 只检查安全性
/review src/api.py security

# 只显示高严重性问题
/review src/auth.py all high
\`\`\`

## 审查维度

### 1. 安全性检查 (Security)
- 硬编码密码检测
- SQL 注入风险
- XSS 漏洞识别
- 敏感信息泄露

### 2. 性能检查 (Performance)
- 循环中的数据库查询
- 未优化的字符串拼接
- 重复计算检测
- 内存泄漏风险

### 3. 可读性检查 (Readability)
- 函数长度分析
- 命名规范检查
- 代码复杂度评估
- 代码重复检测

### 4. 可维护性检查 (Maintainability)
- TODO/FIXME 标记识别
- 注释率统计
- 依赖关系分析
- 模块耦合度

## 注意事项

1. 本工具是辅助审查,不能完全替代人工 Code Review
2. 建议结合团队规范自定义检查规则
3. 对于大型项目,建议集成到 CI/CD 流程中

:speech_balloon: 写好 Skill 的几个技巧

  1. 明确使用场景 - 在 README 中清晰说明这个 Skill 解决什么问题
  2. 提供实际示例 - 展示具体的调用方法和输出结果
  3. 解释设计思路 - 分享你是如何思考和实现这个 Skill 的
  4. 突出对比效果 - 展示使用前后的差异,体现 Skill 的价值
  5. 保持可扩展性 - 设计要考虑后续功能的扩展

:wrapped_gift: 效果展示

这个 Skill 帮我团队将 Code Review 的时间从平均30分钟缩短到5分钟,同时发现了不少人工审查容易遗漏的安全漏洞。最重要的是,它让新成员能快速了解团队的代码规范!

欢迎下载使用,也欢迎提 PR 一起完善!:rocket:


:speech_balloon: 欢迎大家在评论区分享:

  • 你平时做 Code Review 时最头疼的问题是什么?
  • 你自己写的好用 Skill 有哪些?
  • 对这个代码审查助手有什么改进建议?

#TRAE #CodeReview #代码质量 #工具分享

2 个赞

太酷啦 :heart_eyes:

1 个赞

请问是否能够指定某个 commit 或者指定 暂存区的 文件来进行review呢?

1 个赞

怎么下载?

1 个赞

code_reviewer.md 嘛?

1 个赞