Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Review MATLAB code for quality, performance, maintainability, and adherence to MathWorks coding standards. Uses check_matlab_code and matlab_coding_guidelines. Use when reviewing code, checking style, finding code smells, assessing quality, or preparing code for handoff or publication.
.claude/skills/matlab-matlab-review-code/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-20 | ✗→✓ | ▲ Improved | 81% | 0% |
| case-07 | ✓→✗ | ▼ Worse | 55% | 0% |
| case-03 | ✓→✓ | = Same ✓ | 210% | 0% |
| case-04 | ✓→✓ | = Same ✓ | 90% | 0% |
| case-05 | ✓→✓ | = Same ✓ | 63% | 0% |
Systematically review MATLAB code for quality, correctness, performance, and adherence to MathWorks coding conventions using static analysis and manual inspection patterns.
matlab-debugging insteadmatlab-testing insteadcheck_matlab_code MCP tool on all target filesmatlab_coding_guidelines MCP resourceUse the check_matlab_code MCP tool on each file. Then inspect results programmatically:
matlabinfo = 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
For directory-wide analysis (R2022b+):
matlabissues = codeIssues("src"); disp(issues.Issues);
Read the matlab_coding_guidelines MCP resource to get the authoritative MathWorks coding standards. Use these as the baseline for all naming, formatting, and structural checks.
| Element | Convention | Example | |---------|-----------|---------| | Functions | lowerCamelCase, verb phrase | computeArea, loadData | | Classes | PascalCase | SensorReader, DataProcessor | | Variables | lowerCamelCase, descriptive | sampleRate not sr | | Constants | UPPER_SNAKE or Constant property | MAX_ITERATIONS | | Test files | t prefix | tComputeArea.m | | App files | PascalCase | DashboardApp.m | | File = function | File name matches primary function | computeArea.m → function computeArea |
| Check | Standard | Severity | |-------|----------|----------| | Input count | Max 6 positional inputs | Warning | | Output count | Max 4 outputs | Warning | | Validation | arguments block present | Warning | | Name-value args | options.Name pattern (not varargin) | Suggestion | | Length | Flag if >50 lines | Suggestion | | Nesting | Flag if >3 levels deep | Warning | | end keyword | All functions terminated with end | Warning | | Help text | H1 line present for public functions | Suggestion |
| Check | Modern | Legacy (flag it) | |-------|--------|-------------------| | Multi-panel figures | tiledlayout/nexttile | subplot | | Date/time | datetime | datenum/datestr | | Strings | string type | char arrays for text | | Vectorization | .*, ./, logical indexing | Loops over elements | | Preallocation | zeros(n,1) before loop | Growing arrays in loops | | Data containers | table/timetable | Raw matrices for named data | | Dynamic eval | Direct function calls | eval, evalin, assignin |
These should always be reported as errors:
eval, assignin, or evalin — security and maintainability risksum = 5 shadows sum()arguments block in public-facing functionscheck_matlab_code does NOT catch all issues. After running static analysis, always scan the source code for these common problems that require visual inspection:
subplot usage — not flagged by checkcode, but should use tiledlayout/nexttilesum = 0 shadows sum(), checkcode may not flag itif length(x) > 10)Do not skip Steps 3-6 of the workflow just because checkcode returns few results.
matlabfunction 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
matlab[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
Present findings in this format:
## 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 handlingcheck_matlab_code as the first step — it catches issues automaticallymatlab_coding_guidelines for the authoritative standardeval, assignin, or evalin as high-severityrequiredFilesAndProducts to verify toolbox dependencies are documentedcodeIssues for directory-wide analysis (R2022b+)matlab-modernize-code skillCopyright 2026 The MathWorks, Inc.
Other measured skills in the registry, with their headline benchmark lift.