{
  "product": "Specification (reference)",
  "title": "Code Formatter",
  "summary": "One canonical layout, applied without argument.",
  "category": "devtools",
  "entries": [
    {
      "path": [
        "AI",
        "Core",
        "Reformat a file to canonical form"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Core",
        "Idempotent — formatting twice changes nothing"
      ],
      "value": "",
      "status": "yes",
      "note": "the defining property"
    },
    {
      "path": [
        "AI",
        "Core",
        "Never changes program semantics"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Core",
        "Preserves comments and their attachment"
      ],
      "value": "",
      "status": "yes",
      "note": "the hard part"
    },
    {
      "path": [
        "AI",
        "Layout",
        "Line width target with intelligent breaking"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Layout",
        "Indent style and size"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Layout",
        "Quote style, semicolons, trailing commas"
      ],
      "value": "",
      "status": "yes",
      "note": "few, opinionated options"
    },
    {
      "path": [
        "AI",
        "Layout",
        "Blank-line normalisation with author intent kept"
      ],
      "value": "",
      "status": "yes",
      "note": "collapse runs, keep single separations"
    },
    {
      "path": [
        "AI",
        "Scope",
        "Format a range or a selection"
      ],
      "value": "",
      "status": "yes",
      "note": "for editor integration"
    },
    {
      "path": [
        "AI",
        "Scope",
        "Ignore comments and ignore files"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Robustness",
        "Syntax errors reported without mangling the file"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Robustness",
        "Original file untouched on failure"
      ],
      "value": "",
      "status": "yes",
      "note": "atomic write"
    },
    {
      "path": [
        "AI",
        "Integration",
        "Check mode for CI"
      ],
      "value": "",
      "status": "yes",
      "note": "exit non-zero when unformatted"
    },
    {
      "path": [
        "AI",
        "Integration",
        "stdin/stdout mode"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Integration",
        "Editor plugin with format-on-save"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Performance",
        "Fast enough to run on save"
      ],
      "value": "",
      "status": "yes",
      "note": "tens of milliseconds for a typical file"
    }
  ]
}
