CANNTileLang代码审查
【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skillsname: tilelang-review description: 检查代码格式是否符合 CI 规则。适用于 TileLang NPU kernel 开发时的代码规范检查和格式化。自动检测并安装缺失工具ruff、clang-format先运行检查生成报告使用醒目方式询问用户后仅在用户同意时执行修复。工作流程检测环境→自动安装缺失工具→运行检查→生成报告→醒目询问→用户确认→执行修复。使用此技能当用户要求格式检查、格式化代码、代码格式化、检查代码格式、代码 review、代码审查、修复格式、fix format、lint code、检查代码规范、提交 PR 前验证、或需要检查 Python/C 代码风格时。代码格式检查检查代码格式并生成详细报告与 CI 规则保持一致。⚠️ 核心原则询问范围 自动安装 检查和修复分离 0.询问范围: 首先询问用户检查范围修改文件 / 全部文件自动安装: 检测缺失工具并自动安装ruff、clang-format检查阶段: 只运行检查脚本生成报告不修改任何文件询问阶段: 使用醒目的方式询问用户是否修复修复阶段: 只有用户明确同意后才运行修复脚本╔═══════════════════════════════════════════════════════════════╗ ║ 检查时严禁自动修复必须等待用户确认 ║ ╚═══════════════════════════════════════════════════════════════╝工作流程步骤 0: 询问检查范围 ⭐重要第一步必须询问在开始任何检查之前必须先询问用户检查范围使用AskUserQuestion工具询问问题: 请选择代码格式检查的范围 选项: - 仅修改文件 (Recommended) - 只检查 git status 中的变更文件修改、新增、未跟踪 - 全部文件 - 检查项目中的所有 Python/C 文件检查范围说明:范围说明适用场景仅修改文件通过git status --porcelain获取变更文件提交 PR 前验证、日常开发全部文件检查项目中所有匹配的文件CI 全量检查、代码规范初始化根据用户选择执行后续步骤:选择仅修改文件: 调用脚本时不带--all参数选择全部文件: 调用脚本时带--all参数步骤 1: 环境检测检测必需工具是否已安装# 检测 ruff ruff --version # 检测 clang-format clang-format --version如未安装自动安装# 检测并安装 ruff使用独立二进制安装安装到系统路径 if ! command -v ruff /dev/null; then curl -LsSf https://astral.sh/ruff/install.sh | sh fi # 检测并安装 clang-format if ! command -v clang-format /dev/null; then # 通过系统包管理器安装 (sudo apt-get install clang-format-18 2/dev/null || \ brew install clang-format18 2/dev/null) fi自动安装命令:工具自动安装命令说明ruffcurl -LsSf https://astral.sh/ruff/install.sh \| sh下载独立二进制文件安装到~/.local/binclang-formatsudo apt-get install clang-format-18系统包管理器安装步骤 2: 运行检查脚本从 skill 的scripts/目录调用检查脚本根据步骤 0 的选择传递参数检查范围参数参数说明无参数仅检查变更文件默认--all检查所有文件Python 检查# 仅修改文件 bash ./scritps/check-python.sh # 全部文件 bash ./scritps/check-python.sh --all输出: JSON 格式{ issues: [...], // ruff 检查问题 format_issues: [...], // 需要格式化的文件 files_checked: N }C 检查# 仅修改文件 bash ./scritps/check-cpp.sh # 全部文件 bash ./scritps/check-cpp.sh --all输出: JSON 格式{ issues: [...], // 需要格式化的文件 files_checked: N }文件获取方式检查范围获取方式仅修改文件git status --porcelain获取变更文件修改、新增、未跟踪全部文件find或git ls-files获取所有匹配的文件步骤 3: 生成报告解析 JSON 输出使用templates/report.md模板生成 Markdown 报告。报告路径:.agents/reports/format-report-{timestamp}.md⚠️ 重要报告文件命名规则使用时间戳格式format-report-YYYYMMDD_HHMMSS.md如format-report-20260316_190133.md每次检查生成新的报告文件不会覆盖现有报告保留历史报告便于对比和追溯报告内容要求:1. 检查摘要表格必须包含语言、文件数、Lint 问题数、格式问题数2. Python 文件问题详情每个文件单独一个章节对于每个有问题的 Python 文件必须包含Lint 问题表格行号代码描述修复建议NCODE详细问题描述如果 ruff 提供了自动修复建议列出格式问题详情如果文件需要格式化使用ruff format --diff file获取格式差异在报告中展示格式差异的 diff 输出说明具体的格式问题如行宽超限、缩进错误、空行不规范等3. C 文件问题详情每个文件单独一个章节对于每个有问题的 C 文件必须包含格式问题详情使用clang-format --dry-run --Werror file检查使用clang-format --stylefile file | diff -u file -获取格式差异在报告中展示格式差异的 diff 输出说明具体的格式问题4. 问题统计摘要按问题类型分类统计Lint 问题按错误代码分类如 UP035、F401 等格式问题按文件数统计5. 下一步操作提示提供查看问题和手动修复的命令示例步骤 4: 询问修复 ⚠️重要必须等待用户确认⛔ 检查阶段不进行任何修复完成检查后生成报告并使用醒目的方式询问用户╔═══════════════════════════════════════════════════════════════╗ ║ 代码格式检查完成 ║ ╠═══════════════════════════════════════════════════════════════╣ ║ 发现问题数: X ║ ║ - Python: N 个文件有问题 ║ ║ - C: N 个文件需要格式化 ║ ║ ║ ║ 报告已保存到: ║ ║ .agents/reports/format-report-xxx.md ║ ║ ║ ║ 是否进行自动修复可在最后一项选择性填写单独对 C 或者 Python 进行修复║ ║ [ 是 / Y ] - 执行修复 ║ ║ [ 否 / N ] - 跳过修复 ║ ╚═══════════════════════════════════════════════════════════════╝关键规则:❌不要在检查阶段自动运行修复脚本✅必须使用AskUserQuestion工具等待用户确认✅只有用户明确同意后才执行步骤 5⚠️ 严格遵守 AskUserQuestion 格式 ⚠️使用AskUserQuestion工具时必须严格按照以下格式问题: 是否进行代码格式修复 选项: - 是 / 同意 / Y - 执行自动修复 - 否 / 拒绝 / N - 跳过修复可在最后一项选择性填写单独对 C 或者 Python 进行修复⛔ 禁止私自修改 AskUserQuestion 的内容和选项禁止行为说明❌ 添加额外选项不要添加仅修复 Python、仅修复 C等选项❌ 修改问题内容不要在问题中添加详细的问题说明文字❌ 修改选项描述不要修改选项的 label 或 description❌ 添加自定义选项不要使用 Type your own answer 提供额外选项正确示例 vs 错误示例❌错误做法私自添加选项和详细说明问题: 发现 3426 个 Python lint 问题主要是 tabs 缩进和 20 个 C 格式问题。是否进行自动修复 选项: - 是 / 同意 / Y (Recommended) - 自动修复所有 Python 和 C 格式问题 - 仅修复 Python - 仅修复 Python 文件lint format - 仅修复 C - 仅修复 C 文件format - 否 / 拒绝 / N - 不进行任何修复仅查看报告↑这是错误的私自添加了仅修复 Python、仅修复 C选项并在问题中添加了详细说明✅正确做法严格按照模板问题: 是否进行代码格式修复 选项: - 是 / 同意 / Y - 执行自动修复 - 否 / 拒绝 / N - 跳过修复可在最后一项选择性填写单独对 C 或者 Python 进行修复↑这是正确的严格遵循 skill 规定的格式没有私自添加内容为什么必须严格遵守格式保证一致性: 每次执行 skill 都使用相同的交互方式避免混乱: 额外的选项会让用户困惑不知道如何选择简化流程: 用户只需要简单的二选一不需要考虑复杂的分支符合预期: skill 的设计是有意为之不要擅自改变如果用户需要单独修复 Python 或 C用户可以在选择 否 后手动执行修复命令# 仅修复 Python bash ./scritps/fix-python.sh --all # 仅修复 C bash ./scritps/fix-cpp.sh --all步骤 5: 执行修复⚠️ 只有用户明确同意后才执行此步骤用户确认后调用修复脚本使用与检查阶段相同的参数用户确认后调用修复脚本使用与检查阶段相同的参数Python 修复# 仅修改文件 bash ./scritps/fix-python.sh # 全部文件 bash ./scritps/fix-python.sh --all执行命令:ruff check --fix files- 自动修复 lint 问题ruff format files- 格式化代码C 修复# 仅修改文件 bash ./scritps/fix-cpp.sh # 全部文件 bash ./scritps/fix-cpp.sh --all执行命令:clang-format -i --stylefile files- 格式化代码步骤 6: 更新报告✅ 修复完成后必须更新报告追加修复结果在报告末尾添加## 修复结果部分必须包含以下详细信息## 修复结果 ### filename - ✅ 已修复 #### Lint 问题修复 **问题 1**: [错误代码] 错误描述 - **位置**: 第 N 行 - **修复方式**: 自动修复 / 手动修复 - **修复前**: \\\python # 原始代码片段 \\\ - **修复后**: \\\python # 修复后代码片段 \\\ - **修复说明**: 详细描述如何修复的 #### 格式问题修复 **格式差异**: \\\diff # 使用 ruff format --diff 或 clang-format --stylefile file | diff -u file - - 原始行 修复后行 \\\ **修复说明**: - 行宽调整从 N 字符调整到 M 字符 - 缩进修正从 N 空格修正为 M 空格 - 空行调整添加/删除了空行 - 其他格式修正... ### 修复的命令 \\\bash # Python 修复 ruff check --fix files ruff format files # C 修复 clang-format -i --stylefile files \\\ ### 修复验证 **验证结果**: - ✅ Lint 问题已全部修复 - ✅ 格式问题已全部修复 - ✅ 修复后代码符合规范 **验证命令**: \\\bash # 验证 lint 问题 ruff check files # 验证格式问题 ruff format --check files # 或 clang-format --dry-run --Werror files \\\ ## 下一步 修复已完成请检查修复后的文件 \\\bash git diff files \\\ 如果确认修复正确请暂存更改 \\\bash git add files \\\文件类型语言扩展名Python.py,.pyiC.c,.cc,.cpp,.cxx,.h,.hpp,.hh,.icc配置文件技能使用项目中的配置文件pyproject.toml- ruff 设置.clang-format- clang-format 设置变更文件检测脚本使用git status --porcelain获取工作区中所有变更文件包括已修改、已暂存、未跟踪的文件提取文件路径进行检查。步骤 7: 检查报告是否生成 ⚠️重要结束前必须检查在输出报告路径之前必须执行以下检查流程检查逻辑1. 检查是否已生成报告文件.agents/reports/format-report-*.md 2. 如果报告已生成 → 输出报告路径skill 结束 3. 如果报告未生成 → 执行以下步骤 a. 分析跳过了哪些步骤步骤 3: 生成报告 b. 即使没有变更文件或没有问题也必须生成报告说明情况 c. 重新运行被跳过的步骤报告必须生成的场景所有场景都必须生成报告场景报告内容有变更文件有问题详细的问题列表和修复建议有变更文件无问题✅ 所有文件格式正确无需修复无变更文件⚠️ 未检测到变更文件Python/C跳过检查工具安装失败❌ 工具安装失败请手动安装无变更文件的报告模板# 代码格式检查报告 **检查时间**: YYYY-MM-DD HH:MM:SS ## 检查摘要 | 语言 | 文件数 | Lint 问题数 | 格式问题数 | |------|--------|-------------|------------| | Python | 0 | 0 | 0 | | C | 0 | 0 | 0 | ## ⚠️ 未检测到变更文件 本次检查未检测到需要检查的变更文件Python/C。 可能的原因 - 工作区没有新增或修改的 Python/C 文件 - 文件未被 git 跟踪请确认文件状态 ## 检查的文件类型 | 语言 | 扩展名 | |------|--------| | Python | .py, .pyi | | C | .c, .cc, .cpp, .cxx, .h, .hpp, .hh, .icc |检查报告是否生成的命令# 检查最近的报告文件 ls -la .agents/reports/format-report-*.md 2/dev/null || echo NO_REPORT_FOUND如果报告未生成的处理流程╔═══════════════════════════════════════════════════════════════╗ ║ ⚠️ 检测到报告未生成正在重新生成... ║ ╠═══════════════════════════════════════════════════════════════╣ ║ 分析跳过了步骤 3生成报告 ║ ║ 原因可能是无变更文件或其他异常 ║ ║ 操作重新生成报告... ║ ╚═══════════════════════════════════════════════════════════════╝⚠️ 结束说明skill 结束时必须执行以下步骤1. 检查报告是否已生成# 检查报告文件是否存在 ls -la .agents/reports/format-report-*.md 2/dev/null || echo NO_REPORT2. 如果报告未生成重新生成分析跳过的步骤根据实际情况生成对应的报告即使是无变更文件也要报告确保报告文件已创建3. 输出报告路径无论检查是否有问题、用户是否选择修复在 skill 结束时都必须输出报告路径 格式检查报告: .agents/reports/format-report-YYYYMMDD_HHMMSS.md⛔ 禁止在报告未生成的情况下输出虚假的报告路径【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考