meow lint analyzes your source for syntax and semantic problems over the same
Oxc syntax tree the runtime and formatter are built on. There’s no second parser
to warm up and no ESLint config to assemble.
What it checks
For each file, meow builds the concrete syntax tree and the semantic graph (scopes, bindings, references) and surfaces three kinds of findings:- Parse errors — malformed syntax, caught with precise spans. These always fail the run.
- Semantic errors — problems that need scope/binding analysis.
- Curated rules — a focused set of correctness checks that walk the shared syntax tree:
Rules you don’t mention in config keep these recommended defaults; anything outside
the set is
off.
Every finding is rendered as a structured diagnostic with the offending line and a
caret marker, labeled by rule id:
Exit codes
meow lint follows standard lint semantics:
- Errors fail the run (exit non-zero), so they gate CI cleanly.
- Warnings print but pass (exit zero) — they surface issues without blocking.
Configuring rules
Rule severities live in your one config file, keyed by rule id. A rule you don’t list keeps its recommended default:meow.config.json
"error", "warn", or "off". Setting a rule to "off" suppresses
it; promoting a warning to "error" makes it fail the run. See the
configuration reference.
meow lint and meow fmt are built on the same Oxc parser and syntax-tree engine
(meow-graph) the runtime runs on — there’s no separate linter toolchain to install
or keep in sync. meow check is the exception: it delegates to the TypeScript
compiler (tsc) for full type analysis. See the
architecture overview for how the pieces fit together.Format next
Reprint your code from the same tree.