{
  "name": "diff",
  "description": "Compare files line by line",
  "options": [
    {
      "names": [
        "-i",
        "--ignore-case"
      ],
      "description": "Ignore case differences in file contents"
    },
    {
      "names": [
        "--ignore-file-name-case"
      ],
      "description": "Ignore case when comparing file names",
      "exclusiveOn": [
        "--no-ignore-file-name-case"
      ]
    },
    {
      "names": [
        "--no-ignore-file-name-case"
      ],
      "description": "Consider case when comparing file names",
      "exclusiveOn": [
        "--ignore-file-name-case"
      ]
    },
    {
      "names": [
        "-E",
        "--ignore-tab-expansion"
      ],
      "description": "Ignore changes due to tab expansion"
    },
    {
      "names": [
        "-b",
        "--ignore-space-change"
      ],
      "description": "Ignore changes in the amount of white space"
    },
    {
      "names": [
        "-w",
        "--ignore-all-space"
      ],
      "description": "Ignore all white space"
    },
    {
      "names": [
        "-B",
        "--ignore-blank-lines"
      ],
      "description": "Ignore changes whose lines are all blank"
    },
    {
      "names": [
        "-I",
        "--ignore-matching-lines"
      ],
      "description": "Ignore changes whose lines all match RE",
      "args": [
        {
          "name": "RE"
        }
      ]
    },
    {
      "names": [
        "--strip-trailing-cr"
      ],
      "description": "Strip trailing carriage return on input"
    },
    {
      "names": [
        "-a",
        "--text"
      ],
      "description": "Treat all files as text"
    },
    {
      "names": [
        "-c",
        "-C",
        "--context"
      ],
      "description": "Output NUM lines of copied context",
      "args": [
        {
          "name": "NUM"
        }
      ]
    },
    {
      "names": [
        "-u",
        "-U",
        "--unified"
      ],
      "description": "Output NUM lines of unified context",
      "args": [
        {
          "name": "NUM"
        }
      ]
    },
    {
      "names": [
        "--label"
      ],
      "description": "Use LABEL instead of file name",
      "args": [
        {
          "name": "LABEL"
        }
      ]
    },
    {
      "names": [
        "-p",
        "--show-c-function"
      ],
      "description": "Show which C function each change is in"
    },
    {
      "names": [
        "-F",
        "--show-function-line"
      ],
      "description": "Show the most recent line matching RE",
      "args": [
        {
          "name": "RE"
        }
      ]
    },
    {
      "names": [
        "-q",
        "--brief"
      ],
      "description": "Output only whether files differ"
    },
    {
      "names": [
        "-e",
        "--ed"
      ],
      "description": "Output an ed script"
    },
    {
      "names": [
        "--normal"
      ],
      "description": "Output a normal diff"
    },
    {
      "names": [
        "-n",
        "--rcs"
      ],
      "description": "Output an RCS format diff"
    },
    {
      "names": [
        "-y",
        "--side-by-side"
      ],
      "description": "Output in two columns"
    },
    {
      "names": [
        "-W",
        "--width"
      ],
      "description": "Output at most NUM (default 130) print columns",
      "args": [
        {
          "name": "NUM"
        }
      ]
    },
    {
      "names": [
        "--left-column"
      ],
      "description": "Output only the left column of common lines"
    },
    {
      "names": [
        "--suppress-common-lines"
      ],
      "description": "Do not output common lines"
    },
    {
      "names": [
        "-D",
        "--ifdef"
      ],
      "description": "Output merged file to show `#ifdef NAME' diffs",
      "args": [
        {
          "name": "NAME"
        }
      ]
    },
    {
      "names": [
        "-l",
        "--paginate"
      ],
      "description": "Pass the output through `pr' to paginate it"
    },
    {
      "names": [
        "-t",
        "--expand-tabs"
      ],
      "description": "Expand tabs to spaces in output"
    },
    {
      "names": [
        "-T",
        "--initial-tab"
      ],
      "description": "Make tabs line up by prepending a tab"
    },
    {
      "names": [
        "-r",
        "--recursive"
      ],
      "description": "Recursively compare any subdirectories found"
    },
    {
      "names": [
        "-N",
        "--new-file"
      ],
      "description": "Treat absent files as empty"
    },
    {
      "names": [
        "--unidirectional-new-file"
      ],
      "description": "Treat absent first files as empty"
    },
    {
      "names": [
        "-s",
        "--report-identical-files"
      ],
      "description": "Report when two files are the same"
    },
    {
      "names": [
        "-x",
        "--exclude"
      ],
      "description": "Exclude files that match PAT",
      "args": [
        {
          "name": "PAT"
        }
      ]
    },
    {
      "names": [
        "-X",
        "--exclude-from"
      ],
      "description": "Exclude files that match any pattern in FILE",
      "args": [
        {
          "name": "FILE",
          "template": "filepaths"
        }
      ]
    },
    {
      "names": [
        "-S",
        "--starting-file"
      ],
      "description": "Start with FILE when comparing directories",
      "args": [
        {
          "name": "FILE",
          "template": "filepaths"
        }
      ]
    },
    {
      "names": [
        "--from-file"
      ],
      "description": "Compare FILE1 to all operands. FILE1 can be a directory",
      "args": [
        {
          "name": "FILE1",
          "template": "filepaths"
        }
      ]
    },
    {
      "names": [
        "--to-file"
      ],
      "description": "Compare all operands to FILE2. FILE2 can be a directory",
      "args": [
        {
          "name": "FILE2",
          "template": "filepaths"
        }
      ]
    },
    {
      "names": [
        "--horizon-lines"
      ],
      "description": "Keep NUM lines of the common prefix and suffix",
      "args": [
        {
          "name": "NUM"
        }
      ]
    },
    {
      "names": [
        "-d",
        "--minimal"
      ],
      "description": "Try hard to find a smaller set of changes"
    },
    {
      "names": [
        "--speed-large-files"
      ],
      "description": "Assume large files and many scattered small changes"
    },
    {
      "names": [
        "-v",
        "--version"
      ],
      "description": "Output version info"
    },
    {
      "names": [
        "--help"
      ],
      "description": "Show help"
    },
    {
      "names": [
        "--old-group-format"
      ],
      "description": "Similar, but format old input groups with GFTM",
      "args": [
        {
          "name": "GFTM",
          "description": "%<  lines from FILE1\n%>  lines from FILE2\n%=  lines common to FILE1 and FILE2\n%[-][WIDTH][.[PREC]]{doxX}LETTER  printf-style spec for LETTER\nLETTERs are as follows for new group, lower case for old group:\nF  first line number\nL  last line number\nN  number of lines = L-F+1\nE  F-1\nM  L+1\n%%  %\n%c'C'  the single character C\n%c'OOO'  the character with octal code OOO"
        }
      ]
    },
    {
      "names": [
        "--new-group-format"
      ],
      "description": "Similar, but format new input groups with GFTM",
      "args": [
        {
          "name": "GFTM",
          "description": "%<  lines from FILE1\n%>  lines from FILE2\n%=  lines common to FILE1 and FILE2\n%[-][WIDTH][.[PREC]]{doxX}LETTER  printf-style spec for LETTER\nLETTERs are as follows for new group, lower case for old group:\nF  first line number\nL  last line number\nN  number of lines = L-F+1\nE  F-1\nM  L+1\n%%  %\n%c'C'  the single character C\n%c'OOO'  the character with octal code OOO"
        }
      ]
    },
    {
      "names": [
        "--unchanged-group-format"
      ],
      "description": "Similar, but format unchanged input groups with GFTM",
      "args": [
        {
          "name": "GFTM",
          "description": "%<  lines from FILE1\n%>  lines from FILE2\n%=  lines common to FILE1 and FILE2\n%[-][WIDTH][.[PREC]]{doxX}LETTER  printf-style spec for LETTER\nLETTERs are as follows for new group, lower case for old group:\nF  first line number\nL  last line number\nN  number of lines = L-F+1\nE  F-1\nM  L+1\n%%  %\n%c'C'  the single character C\n%c'OOO'  the character with octal code OOO"
        }
      ]
    },
    {
      "names": [
        "--changed-group-format"
      ],
      "description": "Similar, but format changed input groups with GFTM",
      "args": [
        {
          "name": "GFTM",
          "description": "%<  lines from FILE1\n%>  lines from FILE2\n%=  lines common to FILE1 and FILE2\n%[-][WIDTH][.[PREC]]{doxX}LETTER  printf-style spec for LETTER\nLETTERs are as follows for new group, lower case for old group:\nF  first line number\nL  last line number\nN  number of lines = L-F+1\nE  F-1\nM  L+1\n%%  %\n%c'C'  the single character C\n%c'OOO'  the character with octal code OOO"
        }
      ]
    },
    {
      "names": [
        "--line-format"
      ],
      "description": "Format all input lines with LFMT",
      "args": [
        {
          "name": "LFTM"
        }
      ]
    },
    {
      "names": [
        "--old-line-format"
      ],
      "description": "Format old input lines with LFTM",
      "args": [
        {
          "name": "LFTM",
          "description": "%L  contents of line\n%l  contents of line, excluding any trailing newline\n%[-][WIDTH][.[PREC]]{doxX}n  printf-style spec for input line number\n%%  %\n%c'C'  the single character C\n%c'OOO'  the character with octal code OOO"
        }
      ]
    },
    {
      "names": [
        "--new-line-format"
      ],
      "description": "Format new input lines with LFTM",
      "args": [
        {
          "name": "LFTM",
          "description": "%L  contents of line\n%l  contents of line, excluding any trailing newline\n%[-][WIDTH][.[PREC]]{doxX}n  printf-style spec for input line number\n%%  %\n%c'C'  the single character C\n%c'OOO'  the character with octal code OOO"
        }
      ]
    },
    {
      "names": [
        "--unchanged-line-format"
      ],
      "description": "Format unchanged input lines with LFTM",
      "args": [
        {
          "name": "LFTM",
          "description": "%L  contents of line\n%l  contents of line, excluding any trailing newline\n%[-][WIDTH][.[PREC]]{doxX}n  printf-style spec for input line number\n%%  %\n%c'C'  the single character C\n%c'OOO'  the character with octal code OOO"
        }
      ]
    }
  ],
  "args": [
    {
      "name": "file",
      "isVariadic": true,
      "template": "filepaths"
    }
  ]
}
