#compdef godot

# zsh completion for the Godot editor
# To use it, install this file as `_godot` in a directory specified in your
# `fpath` environment variable then restart your shell.
#
# Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md).
# Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.

_arguments \
  "1::path to scene or 'project.godot' file:_files" \
  '(-h --help)'{-h,--help}'[display the full help message]' \
  '--version[display the version string]' \
  '(-v --verbose)'{-v,--verbose}'[use verbose stdout mode]' \
  '(-q --quiet)'{-q,--quiet}'[quiet mode, silences stdout messages (errors are still displayed)]' \
  '(-e --editor)'{-e,--editor}'[start the editor instead of running the scene]' \
  '(-p --project-manager)'{-p,--project-manager}'[start the project manager, even if a project is auto-detected]' \
  '--debug-server[start the editor debug server]:editor debugger listen address' \
  '--quit[quit after the first iteration]' \
  '(-l --language)'{-l,--language}'[use a specific locale (<locale> being a two-letter code)]:two-letter locale code' \
  "--path[path to a project (<directory> must contain a 'project.godot' file)]:path to directory with 'project.godot' file:_dirs" \
  '(-u --upwards)'{-u,--upwards}'[scan folders upwards for project.godot file]' \
  '--main-pack[path to a pack (.pck) file to load]:path to .pck file:_files' \
  '--render-thread[set the render thread mode]:render thread mode:(unsafe safe separate)' \
  '--remote-fs[use a remote filesystem]:remote filesystem address' \
  '--remote-fs-password[password for remote filesystem]:remote filesystem password' \
  '--audio-driver[set the audio driver]:audio driver name' \
  '--audio-output-latency[override audio output latency in milliseconds (default is 15 ms)]:number of milliseconds' \
  '--display-driver[set the display driver]:display driver name' \
  "--rendering-method[set the renderer]:renderer name:((forward_plus\:'Desktop renderer' mobile\:'Desktop and mobile renderer' gl_compatibility\:'Desktop, mobile and web renderer'))" \
  "--rendering-driver[set the rendering driver]:rendering driver name:((vulkan\:'Vulkan renderer' opengl3\:'OpenGL ES 3.0 renderer' dummy\:'Dummy renderer'))" \
  "--gpu-index[use a specific GPU (run with --verbose to get available device list)]:device index" \
  '--text-driver[set the text driver]:text driver name' \
  '--tablet-driver[set the pen tablet input driver]:tablet driver name' \
  '--headless[enable headless mode (--display-driver headless --audio-driver Dummy), useful for servers and with --script]' \
  '--log-file[write output/error log to the specified path instead of the default location defined by the project]:path to output log file' \
  '--write-movie[write a video to the specified path (usually with .avi or .png extension)]:path to output video file' \
  '(-f --fullscreen)'{-f,--fullscreen}'[request fullscreen mode]' \
  '(-m --maximized)'{-m,--maximized}'[request a maximized window]' \
  '(-w --windowed)'{-w,--windowed}'[request windowed mode]' \
  '(-t --always-on-top)'{-t,--always-on-top}'[request an always-on-top window]' \
  '--resolution[request window resolution]:resolution in WxH format' \
  '--position[request window position]:position in X,Y format' \
  '--single-window[use a single window (no separate subwindows)]' \
  '--xr-mode[select Extended Reality (XR) mode]:Extended Reality (XR) mode:(default off on)' \
  '(-d --debug)'{-d,--debug}'[debug (local stdout debugger)]' \
  '(-b --breakpoints)'{-b,--breakpoints}'[specify the breakpoint list as source::line comma-separated pairs, no spaces (use %20 instead)]:breakpoint list' \
  '--profiling[enable profiling in the script debugger]' \
  '--gpu-profile[show a GPU profile of the tasks that took the most time during frame rendering]' \
  '--gpu-validation[enable graphics API validation layers for debugging]' \
  '--gpu-abort[abort on graphics API usage errors (usually validation layer errors)]' \
  '--remote-debug[enable remote debugging]:remote debugger address' \
  '--debug-collisions[show collision shapes when running the scene]' \
  '--debug-navigation[show navigation polygons when running the scene]' \
  '--debug-stringnames[print all StringName allocations to stdout when the engine quits]' \
  '--frame-delay[set a maximum number of frames per second rendered (can be used to limit power usage), a value of 0 results in unlimited framerate]:maximum frames per seocnd' \
  '--frame-delay[simulate high CPU load (delay each frame by the given number of milliseconds)]:number of milliseconds' \
  '--time-scale[force time scale (higher values are faster, 1.0 is normal speed)]:time scale' \
  '--disable-vsync[disable vertical synchronization even if enabled in the project settings]' \
  '--disable-render-loop[disable render loop so rendering only occurs when called explicitly from script]' \
  '--disable-crash-handler[disable crash handler when supported by the platform code]' \
  '--fixed-fps[force a fixed number of frames per second (this setting disables real-time synchronization)]:frames per second' \
  '--print-fps[print the frames per second to the stdout]' \
  '(-s, --script)'{-s,--script}'[run a script]:path to script:_files' \
  '--check-only[only parse for errors and quit (use with --script)]' \
  '--export-release[export the project in release mode using the given preset and output path]:export preset name then path' \
  '--export-debug[export the project in debug mode using the given preset and output path]:export preset name then path' \
  '--export-pack[export the project data only as a PCK or ZIP file using the given preset and output path]:export preset name then path' \
  '--convert-3to4[converts project from Godot 3.x to Godot 4.x]' \
  '--validate-conversion-3to4[shows what elements will be renamed when converting project from Godot 3.x to Godot 4.x]' \
  '--doctool[dump the engine API reference to the given path in XML format, merging if existing files are found]:path to base Godot build directory (optional):_dirs' \
  '--no-docbase[disallow dumping the base types (used with --doctool)]' \
  '--build-solutions[build the scripting solutions (e.g. for C# projects)]' \
  '--dump-gdextension-interface[generate GDExtension header file 'gdextension_interface.h' in the current folder. This file is the base file required to implement a GDExtension.]' \
  '--dump-extension-api[generate JSON dump of the Godot API for GDExtension bindings named "extension_api.json" in the current folder]' \
  '--benchmark[benchmark the run time and print it to console]' \
  '--benchmark-file[benchmark the run time and save it to a given file in JSON format]:path to output JSON file' \
  '--test[run all unit tests; run with "--test --help" for more information]'
