mcpField
M
matlab-review-code

matlab-review-code

github.com/matlab测试与质量1.2k171 次安装1 天前更新
代码仓库

关于 matlab-review-code

matlab-review-code 是用于检查 MATLAB 代码质量、正确性、性能及 MathWorks 规范的技能,结合静态分析与人工检查,并按严重程度整理问题。

主要功能

  1. 01运行 MATLAB 静态分析
  2. 02检查 MathWorks 命名和结构规范
  3. 03检查代码模式与复杂度
  4. 04按严重程度报告问题

适用场景

  1. 01提交前审查代码
  2. 02为交接或发表审计代码
  3. 03评估 MATLAB 规范符合情况

MCP 相关

工作流使用 `check_matlab_code` MCP 工具进行静态分析,并从 `matlab_coding_guidelines` MCP 资源读取编码规范。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/matlab/matlab-agentic-toolkit --skill matlab-review-code

安装后在 Claude Code 中输入/matlab-review-code确认已加载。

附带文件manifest.yaml

详细介绍

代码审查

通过静态分析和人工检查,系统地审查 MATLAB 代码的质量、正确性、性能,以及是否符合 MathWorks 编码规范。

适用场景

  • 用户要求审查、审核或提升代码质量
  • 用户希望检查代码是否符合 MathWorks 编码标准
  • 准备交接、发布或开源代码
  • 完成重要实现后 — 提交前进行验证
  • 用户报告“代码异味”或要求提供清理建议

不适用场景

  • 用户想要调试运行时错误 — 改用 matlab-debug-code
  • 用户想要优化性能 — 使用性能分析技能
  • 用户想要生成测试 — 改用 matlab-write-tests

工作流

  1. 运行静态分析 — 对所有目标文件使用 check_matlab_code MCP 工具
  2. 加载编码标准 — 读取 matlab_coding_guidelines MCP 资源
  3. 检查命名 — 验证函数、类、变量和文件是否符合规范
  4. 审查函数签名 — 参数块、输入/输出数量、名称-值模式
  5. 评估结构 — 函数长度、嵌套深度、复杂度
  6. 检查模式 — 向量化、预分配、现代 API 的使用
  7. 汇总 — 按严重程度报告发现:错误 > 警告 > 建议

步骤 1:静态分析

对每个文件使用 check_matlab_code MCP 工具。然后以编程方式检查结果:

info = checkcode("src/computeArea.m", "-struct");
for k = 1:numel(info)
    fprintf('Line %d (col %d-%d): %s\n', ...
        info(k).line, info(k).column(1), info(k).column(end), info(k).message);
end

对整个目录进行分析(R2022b+):

issues = codeIssues("src");
disp(issues.Issues);

步骤 2:加载编码标准

读取 matlab_coding_guidelines MCP 资源,获取权威的 MathWorks 编码标准。以此为基准,检查所有命名、格式和结构。

审查清单

命名
元素规范示例
函数lowerCamelCase,动词短语computeArea、loadData
类PascalCaseSensorReader、DataProcessor
变量lowerCamelCase,含义明确sampleRate,而不是 sr
常量UPPER_SNAKE 或 Constant 属性MAX_ITERATIONS
测试文件以 t 为前缀tComputeArea.m
应用文件PascalCaseDashboardApp.m
文件名 = 函数名文件名与主函数名一致computeArea.m → function computeArea
函数质量
检查项标准严重程度
输入数量位置输入最多 6 个警告
输出数量最多 4 个输出警告
验证存在 arguments 块警告
名称-值参数使用 options.Name 模式(而不是 varargin)建议
长度超过 50 行时标记建议
嵌套嵌套深度超过 3 层时标记警告
end 关键字所有函数都以 end 结束警告
帮助文本公共函数包含 H1 行建议
代码模式
检查项现代写法旧式写法(需标记)
多面板图形tiledlayout/nexttilesubplot
日期/时间datetimedatenum/datestr
字符串string 类型用于文本的 char 数组
向量化.*、./、逻辑索引遍历元素的循环
预分配循环前使用 zeros(n,1)在循环中不断扩展数组
数据容器table/timetable用于命名数据的原始矩阵
动态求值直接调用函数eval、evalin、assignin
高严重程度问题

以下问题应始终报告为错误:

  • 使用 eval、assignin 或 evalin — 存在安全性和可维护性风险
  • 在循环中扩展数组但未进行预分配 — 性能问题
  • 覆盖内置函数 — sum = 5 会覆盖 sum()
  • 面向公众的函数缺少 arguments 块
  • 硬编码的文件路径中包含反斜杠
checkcode 未发现的问题

check_matlab_code 不会捕获所有问题。运行静态分析后,务必检查源代码,留意这些需要目视检查的常见问题:

  • 使用 subplot — checkcode 不会标记,但应使用 tiledlayout/nexttile
  • 遮蔽内置变量 — sum = 0 会遮蔽 sum(),checkcode 可能不会标记
  • 嵌套过深(>3 层)— checkcode 不会衡量嵌套深度
  • 硬编码反斜杠路径 — checkcode 会标记未使用的变量,但不会标记路径风格
  • 魔法数字 — 代码中未标注的常量(例如 if length(x) > 10)
  • 缺少 H1 帮助文本 — checkcode 不要求提供帮助文本

即使 checkcode 返回的结果很少,也不要跳过工作流的第 3 至第 6 步。

模式

复杂度评估
function complexity = assessComplexity(filePath)
%assessComplexity Estimate cyclomatic complexity of a MATLAB function.

    arguments
        filePath (1,1) string {mustBeFile}
    end

    code = fileread(filePath);
    branchKeywords = ["if " "elseif " "case " "while " "for " "catch "];
    complexity = 1;
    for kw = branchKeywords
        complexity = complexity + numel(strfind(code, kw));
    end
end
检查工具箱依赖项
[files, products] = matlab.codetools.requiredFilesAndProducts('src/myFunction.m');
fprintf('Required products:\n');
for k = 1:numel(products)
    fprintf('  %s (ID: %d)\n', products(k).Name, products(k).ProductNumber);
end
审查报告格式

按以下格式呈现发现:

## Code Review: computeArea.m

### Static Analysis (checkcode)
- 2 warnings, 0 errors

### Naming ✓
- [x] Function: lowerCamelCase
- [x] Variables: descriptive
- [x] File name matches function

### Structure
- [x] arguments block present
- [x] Function under 50 lines
- [ ] ⚠ Nesting depth reaches 4 levels (line 32)

### Patterns
- [x] Vectorized
- [x] Modern graphics API
- [ ] ⚠ Uses datenum (line 18) — migrate to datetime

### Suggestions
1. Extract nested logic at line 32 into a local function
2. Replace datenum with datetime for date handling

约定

  • 始终先运行 check_matlab_code——它会自动捕获问题
  • 加载 matlab_coding_guidelines,以获取权威标准
  • 按严重程度报告发现:错误(必须修复)> 警告(应修复)> 建议(可选)
  • 将任何 eval、assignin 或 evalin 的用法标记为高严重性
  • 检查 requiredFilesAndProducts,确认工具箱依赖项已记录
  • 确认每个公共函数都有一行 H1 帮助文本
  • 使用 codeIssues 进行目录范围的分析(R2022b+)
  • 不要建议会改变行为的修改——审查仅作评估,不修改代码
  • 有关弃用 API 迁移的详细信息,请使用 matlab-modernize-code 技能

版权 2026 The MathWorks, Inc.


评论

支持 Markdown