norns

Lint rules

The static checks behind norns lint, each tied to a documented Civet or Pug pitfall.

norns lint is a fast regex scan, not a compiler. It exists because the pitfalls below either compile to something wrong at runtime or fail with an error that points at the wrong line. Every rule maps to an entry on the Civet or Pug pitfalls page.

#Civet rules

Applied to whole .c / .civet files and to <script> blocks whose language is Civet (the default in .n files). Comment lines and string contents are ignored.

Rule Severity Trigger Fix
civet/no-isnt error isnt anywhere in code use !==; isnt compiles to a bare identifier reference
civet/no-async-generator-method error an indented async *name( (class method shorthand) a callback API or a top-level async function*
civet/state-const-reassign error name := $state ... followed later by an assignment to name declare it with .=, which emits let

#Pug rules

Applied to template lines of .n / .svelte files, outside <script> and <style> blocks.

Rule Severity Trigger Fix
pug/svelte-block-needs-pipe error a line starting with {@, {#, {: or {/ prefix with | so Pug emits it as text
pug/no-pug-interpolation error #{ not escaped as \#{ Svelte {expr}; Pug interpolation runs at preprocess time with no runtime data
pug/each-as-form error +each('item of items') +each('items as item'), optionally with a (item.id) key

#Vite config

Rule Severity Trigger
vite/allowed-hosts warning server.allowedHosts is neither true nor a list; reverse-proxied dev requests will be blocked

#Scope

The walk skips node_modules, .svelte-kit, .git, build, dist, static, .next, .cache, .turbo, data, coverage and every dot-directory. A file that cannot be read produces a lint/read-error warning instead of aborting the run.

#Output

src/routes/+page.n
    18  error  pug/each-as-form  Svelte `{#each}` takes `items as item`, not `item of items`. ...

norns lint: 1 error(s), 0 warning(s) across 1 file(s).

--json returns the same findings as { file, line, severity, rule, msg } records with file relative to the project root.