TypeScript Code Quality
| This documentation was generated with the assistance of AI. Please report any inaccuracies. |
Run this project’s TypeScript static-analysis and formatting tools — ESLint (flat config, plus Oxlint when it’s
set up alongside ESLint), tsc --noEmit type-checking, Prettier --check, Biome when the project chose it, and Stylelint for CSS/SCSS when
configured — then report every issue found (file, line, rule id, message), grouped by tool and classified by rule
id. This is a read-only reporting skill: it runs the configured tools and reports results, it does not fix issues
unless asked to as an explicit follow-up.
Purpose
iru-typescript-code-quality gives a single, framework-aware lint/type-check/format pass across the npm
ecosystem’s fragmented tooling. It detects the project’s framework (npm/TypeScript library, React, Angular, React
Native, Ionic, Hilla frontend, NestJS, Next.js) from package.json to pick the right invocation (e.g. ng lint vs a direct
npx eslint) and the right rule-id prefixes to classify against, verifies each tool’s own config file actually
exists before trusting a "zero issues" result from it, runs what the project’s own lint script runs, and — unlike Java’s Checkstyle/PMD/SpotBugs trio, which
always analyze the whole project — every tool here except tsc accepts a glob directly, so a scoped invocation
narrows what actually runs rather than just what gets reported.
Framework-specific behavior:
-
NestJS 12 scaffolds lint with Oxlint (
oxlint --type-aware) plus Prettier and no ESLint, so Oxlint is the primary linter there; older Nest projects use ESLint plus Prettier like any other ESLint project. -
Next.js 16 removed
next lint, so the skill runs plaineslintwith theeslint-config-nextflat config (next lintonly on Next 15 or older, orbiome checkwhen the project chose Biome), and runsnext typegenbeforetsc --noEmitso the generated route types exist. Rule ids from@next/next/andjsx-a11y/are classified alongside the usual ones. -
React Native resolves a toolchain first (
expoin dependencies means expo, even with prebuild output;react-nativewithoutexpomeans metro, a bare CLI app). Metro apps use@react-native/eslint-config(the legacy.eslintrc.jswith ESLint 8, or its/flatexport; an ESLint 9 crash from an incompatible plugin is reported as a crash, never as zero issues), expo apps useeslint-config-expo. Both run as plaineslintover the whole app becauseexpo lintonly coverssrc/,app/andcomponents/. Prettier is scoped to source files (*/.{js,jsx,ts,tsx}) so the nativeandroid//ios/projects are not flagged, andtsc --noEmiton Expo with TypeScript 6 may need"types": ["jest"], reported as a single configuration finding. Rule ids fromreact-native/,@react-native/,ft-flow/,expo/andimport/*are classified.
For UI projects (React/Vite, Next.js, Ionic, Hilla, Angular) it also sums the accessibility lint rules already in the
ESLint buckets (jsx-a11y/*, angular-eslint’s template accessibility rules) into one accessibility subtotal so the
accessibility level of the catalog’s UI contract (see Building user interfaces)
can be read at a glance; when neither plugin is configured it says "accessibility lint not configured" instead, and
never adds the plugin or edits the config.
Plugin
Shipped by the iru-typescript plugin of the ai-catalog marketplace (install with /plugin install iru-typescript@ai-catalog; see Plugins).
Inputs
| Argument | Required | Description | Default |
|---|---|---|---|
|
No |
Scopes both the run and the report to specific files. ESLint, Oxlint, Prettier, and Stylelint accept the glob
directly and only analyze what it matches; |
None — omitting it checks and reports the whole project. |
Outputs
-
A plain-text summary in the conversation — never a written file.
-
Findings grouped first by tool (ESLint, Oxlint, Biome,
tsc, Prettier, Stylelint), then by rule id/diagnostic code within each tool. -
Per issue: file:line, rule id (or
TS<code>or Biomelint/<group>/<rule>category), and message; Prettier findings are filed under a singleformattingbucket since it has no rule ids. -
A total issue count per tool and an overall total; a tool whose config isn’t found is reported as "not configured, skipped" rather than a misleading clean pass.
-
When the prompt supplies a baseline (a prior per-rule-id count, e.g. from
iru-typescript-code-one-task-group), only the new-vs-baseline regressions per rule id — not the full current list. -
For a UI project, an
accessibilitysubtotal right below the overall total (or "accessibility lint not configured"). -
No source, ESLint,
tsc, Prettier, or Stylelint configuration is ever modified.
Execution flow
Dependencies
Invokes
None — iru-typescript-code-quality is a leaf skill; it only runs ESLint/Oxlint/tsc/Prettier/Stylelint and
reads their generated reports, it does not call any other skill in this catalog.
Invoked by
-
Code — Step 3 and 7, quality baseline and comparison for TypeScript, NestJS and Next.js, via the
iru-gate-runneragent. -
TypeScript Code One Task Group — Steps 1 and 3.6, once per task group’s bucket, via the
iru-gate-runneragent, to capture a pre-change baseline covering every file the bucket touches and later diff the post-change result against it. -
NestJS Code One Task Group — Step 1 and 3.7, lint, tsc and Prettier baseline and regression check, via the
iru-gate-runneragent. -
Next.js Code One Task Group — Step 1 and 3.6, baseline and regression diff including typegen and tsc, via the
iru-gate-runneragent. -
React Native Code One Task Group — Step 1 baseline capture and the Step 3 quality regression check for React Native apps, via the
iru-gate-runneragent.
Related agents
-
iru-gate-runner— both callers above always invoke this skill from inside airu-gate-runnersub-agent they spawn, not inline.
Source
SKILL.md on GitHub — the file this page was generated from.