#compdef diffoscope

typeset -A opt_args

_diffoscope() {

  _arguments \
    '--debug[Display debug messages]' \
    '--pdb[Open the Python pdb debugger in case of crashes]' \
    '--status-fd=[Send machine-readable status to file descriptor FD]:' \
    '(--progress --no-progress)'{--progress,--no-progress}'=[Show an approximate progress bar. Default: yes if stdin is a tty, otherwise no.]:' \
    '--no-default-limits[Disable most default output limits and diff calculation limits.]' \
    '--text=[Write plain text output to given file (use - for stdout)]:' \
    '--text-color=[When to output color diff. Default: auto, meaning yes if the output is a terminal, otherwise no.]:--text-color :(never auto always)' \
    '--output-empty[If there was no difference, then output an empty diff for each output type that was specified. In --text output, an empty file is written.]' \
    '--html=[Write HTML report to given file (use - for stdout)]:' \
    '--html-dir=[Write multi-file HTML report to given directory]:' \
    '--css=[Link to an extra CSS for the HTML report]:' \
    '--jquery=[URL link to jQuery, for --html and --html-dir output. If this is a non-existent relative URL, diffoscope will create a symlink to a system installation. (Paths searched: /usr/share/javascript/jquery/jquery.js.) If not given, --html output will not use JS but --html-dir will if it can be found; give "disable" to disable JS on all outputs.]:' \
    '--json=[Write JSON text output to given file (use - for stdout)]:' \
    '--markdown=[Write Markdown text output to given file (use - for stdout)]:' \
    '--restructured-text=[Write RsT text output to given file (use - for stdout)]:' \
    '--difftool=[Compare differences one-by-one using the specified external command similar to git-difftool(1)]:' \
    '--profile=[Write profiling info to given file (use - for stdout)]:' \
    '--max-text-report-size=[Maximum bytes written in --text report. (0 to disable, default: 0)]:' \
    '--max-report-size=[Maximum bytes of a report in a given format, across all of its pages. Note that some formats, such as --html, may be restricted by even smaller limits such as --max-page-size. (0 to disable, default: 41943040)]:' \
    '--max-diff-block-lines=[Maximum number of lines output per unified-diff block, across all pages. (0 to disable, default: 1024)]:' \
    '--max-page-size=[Maximum bytes of the top-level (--html-dir) or sole (--html) page. (default: %(default)s, remains in effect even with --no-default-limits)]:' \
    '--max-page-diff-block-lines=[Maximum number of lines output per unified-diff block on the top-level (--html-dir) or sole (--html) page, before spilling it into a child page (--html-dir) or skipping the rest of the diff block. (default: %(default)s, remains in effect even with --no-default-limits)]:' \
    '--new-file[Treat absent files as empty]' \
    '--exclude=[Exclude files whose names (including any directory part) match %(metavar)s. Use this option to ignore files based on their names.]:' \
    '--exclude-command=[Exclude commands that match %(metavar)s. For example "^readelf.*\s--debug-dump=info" and '^radare2.*' can take a long time and differences here are likely secondary differences caused by something represented elsewhere. Use this option to disable commands that use a lot of resources.]:' \
    '--exclude-directory-metadata=[Exclude directory metadata. Useful if comparing files whose filesystem-level metadata is not intended to be distributed to other systems. This is true for most distributions package builders, but not true for the output of commands such as `make install`. Metadata of archive members remain un-excluded except if "recursive" choice is set. Use this option to ignore permissions, timestamps, xattrs etc. Default: False if comparing two directories, else True. Note that "file" metadata actually a property of its containing directory, and is not relevant when distributing the file across systems.]:--exclude-directory-metadata :(auto yes no recursive)' \
    '--diff-mask=[Replace/unify substrings that match regular expression %(metavar)s from output strings before applying diff. For example, to filter out a version number or changed path.]:' \
    '--fuzzy-threshold=[Threshold for fuzzy-matching (0 to disable, %(default)s is default, 400 is high fuzziness)]:' \
    '--tool-prefix-binutils=[Prefix for binutils program names, e.g. "aarch64-linux-gnu-" for a foreign-arch binary or "g" if you"re on a non-GNU system.]:' \
    '--max-diff-input-lines=[Maximum number of lines fed to diff(1) (0 to disable, default: 4194304)]:' \
    '--max-container-depth=[Maximum depth to recurse into containers. (Cannot be disabled for security reasons, default: %(default)s)]:' \
    '--max-diff-block-lines-saved=[Maximum number of lines saved per diff block. Most users should not need this, unless you run out of memory. This truncates diff(1) output before emitting it in a report, and affects all types of output, including --text and --json. (0 to disable, default: %(default)s)]:' \
    '--use-dbgsym=[When to automatically use corresponding -dbgsym packages when comparing .deb files. WHEN is one of "never", "auto", "always". Default: auto, meaning yes if two .changes or .buildinfo files are specified, otherwise no.]:--use-dbgsym :(no auto yes)' \
    '--force-details[Force recursing into the depths of file formats even if files have the same content, only really useful for debugging diffoscope. Default: %(default)s]' \
    '(--help -h)'{--help,-h}'[Show this help and exit]' \
    '--version[Show program"s version number and exit]' \
    '--list-tools=[Show external tools required and exit. If specified, the output will list packages in that distribution that satisfy these dependencies.]:--list-tools :(arch debian FreeBSD guix)' \
    '--list-debian-substvars[List packages needed for Debian in "substvar" format.]' \
    '--list-missing-tools=[Show missing external tools and exit. If specified, the output will list packages in that distribution that satisfy these dependencies.]:--list-missing-tools :(arch debian FreeBSD guix)' \
    '*:: :->args'
    _files
}
_diffoscope
