Get the FREE Ultimate OpenClaw Setup Guide β†’

clojure-review

npx machina-cli add skill Microck/ordinary-claude-skills/clojure-review --openclaw
Files (1)
SKILL.md
5.6 KB

Clojure Code Review Skill

@./../_shared/clojure-style-guide.md @./../_shared/clojure-commands.md

Review guidelines

What to flag:

  • Check compliance with the Metabase Clojure style guide (included above)
  • If CLOJURE_STYLE_GUIDE.adoc exists in the working directory, also check compliance with the community Clojure style guide
  • Flag all style guide violations

What NOT to post:

  • Do not post comments congratulating someone for trivial changes or for following style guidelines
  • Do not post comments confirming things "look good" or telling them they did something correctly
  • Only post comments about style violations or potential issues

Example bad code review comments to avoid:

This TODO comment is properly formatted with author and date - nice work!

Good addition of limit 1 to the query - this makes the test more efficient without changing its behavior.

The kondo ignore comment is appropriately placed here

Test name properly ends with -test as required by the style guide.

Special cases:

  • Do not post comments about missing parentheses (these will be caught by the linter)

Quick review checklist

Use this to scan through changes efficiently:

Naming

  • Descriptive names (no tbl, zs')
  • Pure functions named as nouns describing their return value
  • kebab-case for all variables and functions
  • Side-effect functions end with !
  • No namespace-alias repetition in function names

Documentation

  • Public vars in src or enterprise/backend/src have useful docstrings
  • Docstrings use Markdown conventions
  • References use [[other-var]] not backticks
  • TODO comments include author and date: ;; TODO (Name 1/1/25) -- description

Code Organization

  • Everything ^:private unless used elsewhere
  • No declare when avoidable (public functions near end)
  • Functions under 20 lines when possible
  • No blank lines within definition forms (except pairwise constructs in let/cond)
  • Lines ≀ 120 characters

Tests

  • Separate deftest forms for distinct test cases
  • Pure tests marked ^:parallel
  • Test names end in -test or -test-<number>

Modules

  • Correct module patterns (OSS: metabase.<module>.*, EE: metabase-enterprise.<module>.*)
  • API endpoints in <module>.api namespaces
  • Public API in <module>.core with Potemkin
  • No cheating module linters with :clj-kondo/ignore [:metabase/modules]

REST API

  • Response schemas present (:- <schema>)
  • Query params use kebab-case, bodies use snake_case
  • Routes use singular nouns (e.g., /api/dashboard/:id)
  • GET has no side effects (except analytics)
  • Malli schemas detailed and complete
  • All new endpoints have tests

MBQL

  • No raw MBQL manipulation outside lib, lib-be, or query-processor modules
  • Uses Lib and MBQL 5, not legacy MBQL

Database

  • Model and table names are singular nouns
  • Uses t2/select-one-fn instead of selecting full rows for one column
  • Logic in Toucan methods, not helper functions

Drivers

  • New multimethods documented in docs/developers-guide/driver-changelog.md
  • Passes driver argument to other driver methods (no hardcoded driver names)
  • Minimal logic in read-column-thunk

Miscellaneous

  • Example data is bird-themed when possible
  • Kondo linter suppressions use proper format (not #_:clj-kondo/ignore keyword form)

Pattern matching table

Quick scan for common issues:

PatternIssue
calculate-age, get-userPure functions should be nouns: age, user
update-db, save-modelMissing ! for side effects: update-db!, save-model!
snake_case_varShould use kebab-case
Public var without docstringAdd docstring explaining purpose
;; TODO fix thisMissing author/date: ;; TODO (Name 1/1/25) -- description
(defn foo ...) in namespace used elsewhereShould be (defn ^:private foo ...)
Function > 20 linesConsider breaking up into smaller functions
/api/dashboards/:idUse singular: /api/dashboard/:id
Query params with snake_caseUse kebab-case for query params
New API endpoint without testsAdd tests for the endpoint

Feedback format examples

For style violations:

This pure function should be named as a noun describing its return value. Consider user instead of get-user.

For missing documentation:

This public var needs a docstring explaining its purpose, inputs, and outputs.

For organization issues:

This function is only used in this namespace, so it should be marked ^:private.

For API conventions:

Query parameters should use kebab-case. Change user_id to user-id.

Source

git clone https://github.com/Microck/ordinary-claude-skills/blob/main/skills_all/clojure-review/SKILL.mdView on GitHub

Overview

Reviews Clojure and ClojureScript changes for Metabase coding standards. It’s intended for pull requests or diffs containing Clojure code, flagging style violations and code-quality issues. It references the shared clojure-style-guide and clojure-commands to ensure consistent reviews.

How This Skill Works

The skill analyzes diffs using the allowed tools (Read, Grep, Bash, Glob) and checks against the Metabase style guide, plus CLOJURE_STYLE_GUIDE.adoc if present. It reports only style violations or potential issues, avoiding generic praise or confirmations.

When to Use It

  • Reviewing a PR or diff that adds or changes Clojure or ClojureScript code for Metabase
  • When a linter or style checklist flags potential issues in Clojure code
  • When ensuring public vars have docstrings and kebab-case naming across namespaces
  • When validating module patterns, API namespaces, and MBQL/REST-related code
  • When a diff touches core style areas and you need violations-focused feedback

Quick Start

  1. Step 1: Open the PR/diff containing Clojure or ClojureScript changes
  2. Step 2: Scan against the Metabase Clojure style guide (and CLOJURE_STYLE_GUIDE.adoc if present)
  3. Step 3: Post violations-focused comments with exact references; avoid generic praise

Best Practices

  • Enforce kebab-case for all variables and functions
  • Require docstrings on public vars and use Markdown conventions in docs
  • Keep functions concise (aim for < 20 lines) and minimize unnecessary declare usage
  • Post comments only for violations or issues; avoid generic praise
  • Reference exact sections in the style guides (Metabase style guide or CLOJURE_STYLE_GUIDE.adoc) when possible

Example Use Cases

  • Public var missing a docstring
  • Function named as a noun but used as a value or returns a similar type
  • Line length exceeds 120 characters
  • Namespace alias repetition in function names
  • TODO comment without author and date

Frequently Asked Questions

Add this skill to your agents
Sponsor this space

Reach thousands of developers β†—