关于 matlab-review-code
matlab-review-code 是用于检查 MATLAB 代码质量、正确性、性能及 MathWorks 规范的技能,结合静态分析与人工检查,并按严重程度整理问题。
主要功能
- 01运行 MATLAB 静态分析
- 02检查 MathWorks 命名和结构规范
- 03检查代码模式与复杂度
- 04按严重程度报告问题
适用场景
- 01提交前审查代码
- 02为交接或发表审计代码
- 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
工作流
- 运行静态分析 — 对所有目标文件使用
check_matlab_codeMCP 工具 - 加载编码标准 — 读取
matlab_coding_guidelinesMCP 资源 - 检查命名 — 验证函数、类、变量和文件是否符合规范
- 审查函数签名 — 参数块、输入/输出数量、名称-值模式
- 评估结构 — 函数长度、嵌套深度、复杂度
- 检查模式 — 向量化、预分配、现代 API 的使用
- 汇总 — 按严重程度报告发现:错误 > 警告 > 建议
步骤 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 |
| 类 | PascalCase | SensorReader、DataProcessor |
| 变量 | lowerCamelCase,含义明确 | sampleRate,而不是 sr |
| 常量 | UPPER_SNAKE 或 Constant 属性 | MAX_ITERATIONS |
| 测试文件 | 以 t 为前缀 | tComputeArea.m |
| 应用文件 | PascalCase | DashboardApp.m |
| 文件名 = 函数名 | 文件名与主函数名一致 | computeArea.m → function computeArea |
函数质量
| 检查项 | 标准 | 严重程度 |
|---|---|---|
| 输入数量 | 位置输入最多 6 个 | 警告 |
| 输出数量 | 最多 4 个输出 | 警告 |
| 验证 | 存在 arguments 块 | 警告 |
| 名称-值参数 | 使用 options.Name 模式(而不是 varargin) | 建议 |
| 长度 | 超过 50 行时标记 | 建议 |
| 嵌套 | 嵌套深度超过 3 层时标记 | 警告 |
end 关键字 | 所有函数都以 end 结束 | 警告 |
| 帮助文本 | 公共函数包含 H1 行 | 建议 |
代码模式
| 检查项 | 现代写法 | 旧式写法(需标记) |
|---|---|---|
| 多面板图形 | tiledlayout/nexttile | subplot |
| 日期/时间 | datetime | datenum/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