{
  "product": "Specification (reference)",
  "title": "Linter",
  "summary": "Find problems in source without running it, without crying wolf.",
  "category": "devtools",
  "entries": [
    {
      "path": [
        "AI",
        "Rules",
        "Rule set with individual enable/disable"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Rules",
        "Severity per rule"
      ],
      "value": "off / warn / error",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Rules",
        "Presets that compose"
      ],
      "value": "recommended, strict",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Rules",
        "Custom rules via a documented plugin API"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Analysis",
        "Syntax-aware, not regex over text"
      ],
      "value": "",
      "status": "yes",
      "note": "operates on the AST"
    },
    {
      "path": [
        "AI",
        "Analysis",
        "Scope and type awareness where available"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Analysis",
        "Cross-file rules"
      ],
      "value": "unused exports, cycles",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Suppression",
        "Inline disable comments with a required reason"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Suppression",
        "Report unused suppressions"
      ],
      "value": "",
      "status": "yes",
      "note": "so they get cleaned up"
    },
    {
      "path": [
        "AI",
        "Fixes",
        "Autofix for mechanically safe rules"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Fixes",
        "Suggestions that are offered but not auto-applied"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Config",
        "Config file with inheritance and per-directory overrides"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Config",
        "Ignore file honoured"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Output",
        "Human formatter with file:line:col"
      ],
      "value": "",
      "status": "yes",
      "note": "clickable"
    },
    {
      "path": [
        "AI",
        "Output",
        "Machine formats"
      ],
      "value": "JSON, SARIF",
      "status": "yes",
      "note": "for CI annotation"
    },
    {
      "path": [
        "AI",
        "Output",
        "Exit code reflects error versus warning"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Performance",
        "Caching so unchanged files are skipped"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Performance",
        "Parallel across files"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    }
  ]
}
