Docs
/

Code Metrics

Static code-metrics pack: language-agnostic complexity and quality analysis by heuristic parsing (no compiler, no AST library). Counts cyclomatic complexity from branch/decision keywords...

code-metrics

Language-agnostic static code metrics by heuristic parsing — no compiler, no AST library. Feed it source code and it measures complexity, size, and quality. Works on JavaScript/TypeScript, Python, Java, C/C++, C#, Go, Rust, Ruby, and PHP (comment syntax + keyword set per language, auto-detected).

It is an intelligent microservice: every tool has a deterministic heuristic core that runs fully offline; summary can optionally add a plain-English AI review and silently falls back to the scorecard. Results are tagged { mode: 'heuristic' | 'llm' } where a model can contribute.

How it works

Comments and string/char literals are stripped first (length-preserving), so keyword counts never fire inside comments or strings. Then:

  • cyclomatic = 1 + decision points (branch keywords + &&/|| + ternary) — the McCabe approximation.
  • halstead — distinct/total operators & operands → volume, difficulty, effort, time, estimated bugs.
  • maintainabilityIndex — the SEI/Visual-Studio formula, normalized to 0..100 with a rating.
  • loc — SLOC vs comment vs blank, and comment ratio.
  • duplicationEstimate — k-line shingling: fraction of repeated line-windows (cheap clone density).
  • functionCount — multi-language signature patterns + anonymous callbacks + avg lines/function.
  • summary — all of the above plus a composite 0..100 health score, letter grade, and flags.

Tools

ToolOutput
cyclomatic{ complexity, decisionPoints, rating, breakdown }
maintainabilityIndex{ maintainabilityIndex, rating, inputs }
halsteadoperators/operands, volume, difficulty, effort, estimatedBugs
loc{ total, source, comment, blank, commentRatio }
duplicationEstimate{ duplicationRatio, duplicatedWindows, rating }
functionCount{ functions, anonymousCallbacks, avgLinesPerFunction }
summarycomposite scorecard + healthScore + grade + flags (+ optional review)

Usage

import metrics from './index.js';

metrics.adapters.cyclomatic({ code: 'function f(x){ if(x>0){for(;;){}} return x && 1; }' });
// -> { complexity: 4, decisionPoints: 3, rating: 'simple', breakdown: { if:1, for:1, '&&/||':1 } }

metrics.adapters.summary({ code: sourceString, language: 'python' });
// -> { healthScore: 72, grade: 'B', flags: [...], metrics: { loc, cyclomatic, halstead, ... } }

DRY boundary

Measures source code (complexity/quality). Distinct from changelog (commit/release tooling) and the toolkit algorithm/graph utilities. Self-contained (Node built-ins + ../_shared/llm.js).

Source shared/engines/adapters/domain/code-metrics/README.md (no-git)markdownjson
Generated from the Leumas repository. Every page cites the file it came from.leumas.techllms.txt