29 lines
1.4 KiB
Markdown
29 lines
1.4 KiB
Markdown
---
|
|
name: add-diagnostic
|
|
description: 'Add a new diagnostic code following the defineDiagnostics() conventions from nostics'
|
|
user-invocable: true
|
|
allowed-tools: Read Grep Glob Edit Write
|
|
license: MIT
|
|
---
|
|
|
|
# Add a New Diagnostic Code
|
|
|
|
1. **Find the catalog.** Grep for `defineDiagnostics` to locate the `codes` object the new entry belongs in. With several catalogs, pick by area.
|
|
2. **Pick the code.** `PREFIX_XNNNN`: `PREFIX` is the project name uppercased (`NUXT`, `I18N`); `X` is the area letter (`B` build, `R` runtime, `C` config, `D` deprecation); `NNNN` is the next free number. Read existing codes to choose. Never rename or reuse a published code.
|
|
3. **Add the entry:**
|
|
|
|
```ts
|
|
LIB_R0001: {
|
|
why: (p: { hook: string }) => `${p.hook}() must run at the top of setup().`, // string or typed fn; becomes Error.message (required)
|
|
fix: 'Move the call into setup() or a composable it calls.', // optional, but add whenever the fix is known
|
|
docs: 'https://example.com/custom', // optional: overrides docsBase, or `false` to opt out
|
|
},
|
|
```
|
|
|
|
- `why` is the only required field. Params from `why` and `fix` are intersected and required at the call site.
|
|
- Runtime fields (`cause`, `sources`) are passed at the call site, never in the definition.
|
|
|
|
4. **Call it:** `diagnostics.LIB_R0001({ hook })` to report, `throw diagnostics.LIB_R0001({ hook, cause: err })` to raise. Both run the reporters.
|
|
|
|
Full API and reporter/formatter/plugin details: the `nostics` skill.
|