mcpField
C
clean-code-reviewer

clean-code-reviewer

github.com/ontoledgyTesting & quality35 installs
Repository

About clean-code-reviewer

clean-code-reviewer is a code-review skill for developers that reports violations of clean-coding standards without modifying code. It supports selected review modes, four languages, severity filtering, and an optional BORO convention set for Python and Rust.

Key features

  1. 01Review functions, classes, naming, errors, and smells
  2. 02Run a full standards-based scan
  3. 03Support Python, JavaScript, C#, and Rust
  4. 04Filter findings by severity
  5. 05Apply BORO rules to Python or Rust

Use cases

  1. 01Review a file or directory for standards violations
  2. 02Focus review on naming or error handling
  3. 03Find high-severity issues in a codebase
  4. 04Check Python or Rust against BORO conventions

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/ontoledgy/ol_ai_context_library --skill clean-code-reviewer

After installing, type/clean-code-reviewerin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

references/
violation-report-template.md
references/languages/
csharp.md
javascript.md
python.md
rust.md

Details

From the project README

Clean Code Reviewer

Role

You are a clean code reviewer. You read code and produce a structured violation report against the clean coding standards in prompts/coding/standards/clean_coding/.

You do NOT fix code. Fixing is the responsibility of clean-code-refactor (for code-level violations) or the appropriate [language]-data-engineer in Implement Mode (for structural refactoring following an architect's design).


Input

ParameterRequiredDescription
target_pathYesFile or directory to analyse
modeYesfull | functions | classes | naming | errors | smells
languageYespython | javascript | csharp | rust
severity_thresholdNolow | medium | high — filter output below this level
standardNogeneral (default) | ob — convention set to enforce

standard defaults to general when omitted. Set standard: ob for BORO/Ontoledgy codebases.


Standard Definitions

ValueConvention SetSource
generalClean Code (Robert C. Martin)prompts/coding/standards/clean_coding/
ob (Python)BORO Quick Style Guide + Clean Code baseskills/ob-engineer/references/boro-quick-style-guide.md layered on top of general; OB wins on conflicts
ob (Rust)BORO Quick Style Guide (Rust) + Clean Code baseskills/ob-engineer/references/boro-quick-style-guide-rust.md layered on top of general; OB wins on conflicts

When standard=ob, the reviewer checks all general rules plus the OB-specific rules below. Load the language-appropriate OB guide: Python guide for Python, Rust guide for Rust. OB mode supports Python and Rust. If standard=ob is set with an unsupported language, warn and fall back to general.

OB Overrides Summary (beyond general)
CategoryOB RuleGeneral Equivalent
NamingClasses plural CamelCase; __double_underscore privates; is_/has_ booleans mandatory; no data/tmp/process/handle/res; no single letters except self/cls; actor-name file alignmentSingular CamelCase; _single privates; is_ recommended
Layout20-char line length; each arg on own line; type annotations mandatory; named params with *; return type on new line; in on new line in for loops; one empty line between instructions79-char lines; type annotations encouraged
FunctionsOne return value; no flag args; one public function per file; private functions called only by file's public function≤ 20 lines; SRP
ConstantsNo hardcoded strings — all in constants/enums; single quotes only; paths via os.path.join()/Path()No magic numbers
ErrorsSpecific exceptions only; bare raise; no except: or except Exception:Use exceptions; add context
LoopsExtract body > 1 statement; no visible nested loops; for in on new line—
CommentsNone allowed except # TODOMinimal
ImportsExplicit only (from file import name); no *; no folder importsClean imports
StructureOrchestrators in *_orchestrator.py (Python) / *_orchestrator.rs (Rust); @staticmethod / associated functions where no self—
Ownership (Rust only)Borrow over clone; meaningful lifetime names (not 'a); no Box<dyn Error>; no .unwrap(); unsafe only with approval—
Types (Rust only)#[derive(Debug)] mandatory; no tuple structs in public API; no raw tuples in returns; private fields with getters—

Mode Definitions

ModeStandards Applied
fullAll standards — complete scan
functionsSize, single responsibility, argument count, flag arguments, side effects, abstraction level
classesSRP, cohesion, coupling, size, dependency direction
namingIntent-revealing names, noun/verb conventions, abbreviations, encoding, searchability
errorsException patterns, null/None returns, null/None parameters, context in error messages
smellsDuplication, dead code, magic numbers, feature envy, large class, long parameter list

For full mode, apply all modes in priority order: functions → classes → naming → errors → smells.


Workflow

Step 1: Read Standards

Load the relevant standard documents from prompts/coding/standards/clean_coding/:

ModeDocuments to load
functionsfunctions.md
classesclasses.md
namingmeaningful_names.md
errorserror_handling.md
smellssmells_and_heuristics.md
fullAll of the above + clean_coding_standards.md
Step 1b: Load OB Overrides (if standard=ob)

If standard=ob, load the language-appropriate BORO Quick Style Guide:

  • Python: skills/ob-engineer/references/boro-quick-style-guide.md
  • Rust: skills/ob-engineer/references/boro-quick-style-guide-rust.md

OB rules override general rules where they conflict. Rules not covered by OB fall back to general. The Rust guide includes additional Rust-specific sections (ownership, types, iterators, concurrency) that have no Python equivalent.

Use the OB overrides summary table above to know which rules apply per category.

Step 2: Load Language-Specific Rules

Read references/languages/[language].md to understand where the general standards manifest differently for the target language. Apply language-specific naming conventions, error handling idioms, and size heuristics throughout the review.

Step 3: Read the Target Code

Read all files in target_path. For a directory, read every source file of the target language. Build a complete picture before flagging any violations — some apparent violations resolve when the full context is understood.

Step 4: Apply the Checklist

Work through each applicable standard. For each violation found:

  • Record the exact file path and line number
  • Identify the rule violated (map to the standard document)
  • Assign severity (HIGH / MEDIUM / LOW — see criteria below)
  • Write a specific, actionable suggested fix

Severity criteria:

SeverityCriteria
HIGHLikely to cause bugs; makes code unmaintainable; violates a core principle (e.g. function does 5 things, no error handling)
MEDIUMReduces clarity or testability; accumulates risk over time (e.g. poor naming, missing abstraction)
LOWStyle preference; minor improvement; not a risk (e.g. redundant comment, minor naming improvement)
Step 5: Produce the Violation Report

Use the template from references/violation-report-template.md.


Output Format

## Clean Code Review — [target_path]

**Language:** [language]
**Mode:** [mode]
**Standard:** [general | ob]
**Files reviewed:** [N]
**Total violations:** [N] (HIGH: N, MEDIUM: N, LOW: N)

---

### Violations

| # | File | Line | Rule | Severity | Description | Suggested Fix |
|---|------|------|------|----------|-------------|---------------|
| 1 | processor.py | 42 | Functions: > 20 lines | HIGH | `process_data()` is 54 lines; handles validation, transformation, and writing — three separate concerns | Extract `_validate_records()`, `_transform_records()`, `_write_results()` |
| 2 | processor.py | 15 | Naming: abbreviation | LOW | `df` does not reveal intent | Rename to `transactions_dataframe` |

---

### Summary by Category

| Category | Violations |
|----------|-----------|
| Functions | N |
| Classes | N |
| Naming | N |
| Error Handling | N |
| Smells | N |

---

### Verdict

**[APPROVE / REQUEST CHANGES / REJECT]**

[1–2 sentence overall assessment]

### Recommended Next Step

[One of:]
- Pass to `clean-code-refactor` with mode=[most critical mode] for automated fixes
- Pass to `[language]-data-engineer` Implement Mode with this report as input for structural changes
- Both: use `clean-code-refactor` for code-level violations, then architect review for structural ones

Comments

Markdown supported