diff --git a/plugins/swiftpm/_swift b/plugins/swiftpm/_swift new file mode 100644 index 000000000..901b5d9e2 --- /dev/null +++ b/plugins/swiftpm/_swift @@ -0,0 +1,362 @@ +#compdef swift +local context state state_descr line +typeset -A opt_args + +_swift() { + _arguments -C \ + '(- :)--help[prints the synopsis and a list of the most commonly used commands]: :->arg' \ + '(-): :->command' \ + '(-)*:: :->arg' && return + + case $state in + (command) + local tools + tools=( + 'build:build sources into binary products' + 'run:build and run an executable product' + 'package:perform operations on Swift packages' + 'test:build and run tests' + ) + _alternative \ + 'tools:common:{_describe "tool" tools }' \ + 'compiler: :_swift_compiler' && _ret=0 + ;; + (arg) + case ${words[1]} in + (build) + _swift_build + ;; + (run) + _swift_run + ;; + (package) + _swift_package + ;; + (test) + _swift_test + ;; + (*) + _swift_compiler + ;; + esac + ;; + esac +} + +_swift_dependency() { + local dependencies + dependencies=( $(swift package completion-tool list-dependencies) ) + _describe '' dependencies +} + +_swift_executable() { + local executables + executables=( $(swift package completion-tool list-executables) ) + _describe '' executables +} + +# Generates completions for swift build +# +# In the final compdef file, set the following file header: +# +# #compdef _swift_build +# local context state state_descr line +# typeset -A opt_args +_swift_build() { + arguments=( + "-Xcc[Pass flag through to all C compiler invocations]:Pass flag through to all C compiler invocations: " + "-Xswiftc[Pass flag through to all Swift compiler invocations]:Pass flag through to all Swift compiler invocations: " + "-Xlinker[Pass flag through to all linker invocations]:Pass flag through to all linker invocations: " + "-Xcxx[Pass flag through to all C++ compiler invocations]:Pass flag through to all C++ compiler invocations: " + "(--configuration -c)"{--configuration,-c}"[Build with configuration (debug|release) ]: :{_values '' 'debug[build with DEBUG configuration]' 'release[build with RELEASE configuration]'}" + "--build-path[Specify build/cache directory ]:Specify build/cache directory :_files" + "(--chdir -C)"{--chdir,-C}"[]: :_files" + "--package-path[Change working directory before any other operation]:Change working directory before any other operation:_files" + "--disable-prefetching[]" + "--disable-sandbox[Disable using the sandbox when executing subprocesses]" + "--version[]" + "--destination[]: :_files" + "(--verbose -v)"{--verbose,-v}"[Increase verbosity of informational output]" + "--no-static-swift-stdlib[Do not link Swift stdlib statically]" + "--static-swift-stdlib[Link Swift stdlib statically]" + "--enable-build-manifest-caching[Enable llbuild manifest caching [Experimental]]" + "--build-tests[Build both source and test targets]" + "--product[Build the specified product]:Build the specified product: " + "--target[Build the specified target]:Build the specified target: " + "--show-bin-path[Print the binary output path]" + ) + _arguments $arguments && return +} + +# Generates completions for swift run +# +# In the final compdef file, set the following file header: +# +# #compdef _swift_run +# local context state state_descr line +# typeset -A opt_args +_swift_run() { + arguments=( + ":The executable to run:_swift_executable" + "-Xcc[Pass flag through to all C compiler invocations]:Pass flag through to all C compiler invocations: " + "-Xswiftc[Pass flag through to all Swift compiler invocations]:Pass flag through to all Swift compiler invocations: " + "-Xlinker[Pass flag through to all linker invocations]:Pass flag through to all linker invocations: " + "-Xcxx[Pass flag through to all C++ compiler invocations]:Pass flag through to all C++ compiler invocations: " + "(--configuration -c)"{--configuration,-c}"[Build with configuration (debug|release) ]: :{_values '' 'debug[build with DEBUG configuration]' 'release[build with RELEASE configuration]'}" + "--build-path[Specify build/cache directory ]:Specify build/cache directory :_files" + "(--chdir -C)"{--chdir,-C}"[]: :_files" + "--package-path[Change working directory before any other operation]:Change working directory before any other operation:_files" + "--disable-prefetching[]" + "--disable-sandbox[Disable using the sandbox when executing subprocesses]" + "--version[]" + "--destination[]: :_files" + "(--verbose -v)"{--verbose,-v}"[Increase verbosity of informational output]" + "--no-static-swift-stdlib[Do not link Swift stdlib statically]" + "--static-swift-stdlib[Link Swift stdlib statically]" + "--enable-build-manifest-caching[Enable llbuild manifest caching [Experimental]]" + "--skip-build[Skip building the executable product]" + ) + _arguments $arguments && return +} + +# Generates completions for swift package +# +# In the final compdef file, set the following file header: +# +# #compdef _swift_package +# local context state state_descr line +# typeset -A opt_args +_swift_package() { + arguments=( + "-Xcc[Pass flag through to all C compiler invocations]:Pass flag through to all C compiler invocations: " + "-Xswiftc[Pass flag through to all Swift compiler invocations]:Pass flag through to all Swift compiler invocations: " + "-Xlinker[Pass flag through to all linker invocations]:Pass flag through to all linker invocations: " + "-Xcxx[Pass flag through to all C++ compiler invocations]:Pass flag through to all C++ compiler invocations: " + "(--configuration -c)"{--configuration,-c}"[Build with configuration (debug|release) ]: :{_values '' 'debug[build with DEBUG configuration]' 'release[build with RELEASE configuration]'}" + "--build-path[Specify build/cache directory ]:Specify build/cache directory :_files" + "(--chdir -C)"{--chdir,-C}"[]: :_files" + "--package-path[Change working directory before any other operation]:Change working directory before any other operation:_files" + "--disable-prefetching[]" + "--disable-sandbox[Disable using the sandbox when executing subprocesses]" + "--version[]" + "--destination[]: :_files" + "(--verbose -v)"{--verbose,-v}"[Increase verbosity of informational output]" + "--no-static-swift-stdlib[Do not link Swift stdlib statically]" + "--static-swift-stdlib[Link Swift stdlib statically]" + "--enable-build-manifest-caching[Enable llbuild manifest caching [Experimental]]" + '(-): :->command' + '(-)*:: :->arg' + ) + _arguments $arguments && return + case $state in + (command) + local modes + modes=( + 'update:Update package dependencies' + 'show-dependencies:Print the resolved dependency graph' + 'resolve:Resolve package dependencies' + 'fetch:' + 'completion-tool:Completion tool (for shell completions)' + 'edit:Put a package in editable mode' + 'tools-version:Manipulate tools version of the current package' + 'describe:Describe the current package' + 'clean:Delete build artifacts' + 'reset:Reset the complete cache/build directory' + 'unedit:Remove a package from editable mode' + 'generate-xcodeproj:Generates an Xcode project' + 'init:Initialize a new package' + 'dump-package:Print parsed Package.swift as JSON' + ) + _describe "mode" modes + ;; + (arg) + case ${words[1]} in + (update) + _swift_package_update + ;; + (show-dependencies) + _swift_package_show-dependencies + ;; + (resolve) + _swift_package_resolve + ;; + (fetch) + _swift_package_fetch + ;; + (completion-tool) + _swift_package_completion-tool + ;; + (edit) + _swift_package_edit + ;; + (tools-version) + _swift_package_tools-version + ;; + (describe) + _swift_package_describe + ;; + (clean) + _swift_package_clean + ;; + (reset) + _swift_package_reset + ;; + (unedit) + _swift_package_unedit + ;; + (generate-xcodeproj) + _swift_package_generate-xcodeproj + ;; + (init) + _swift_package_init + ;; + (dump-package) + _swift_package_dump-package + ;; + esac + ;; + esac +} + +_swift_package_update() { + arguments=( + ) + _arguments $arguments && return +} + +_swift_package_show-dependencies() { + arguments=( + "--format[text|dot|json|flatlist]: :{_values '' 'text[list dependencies using text format]' 'dot[list dependencies using dot format]' 'json[list dependencies using JSON format]'}" + ) + _arguments $arguments && return +} + +_swift_package_resolve() { + arguments=( + ":The name of the package to resolve:_swift_dependency" + "--version[The version to resolve at]:The version to resolve at: " + "--branch[The branch to resolve at]:The branch to resolve at: " + "--revision[The revision to resolve at]:The revision to resolve at: " + ) + _arguments $arguments && return +} + +_swift_package_fetch() { + arguments=( + ) + _arguments $arguments && return +} + +_swift_package_completion-tool() { + arguments=( + ": :{_values '' 'generate-bash-script[generate Bash completion script]' 'generate-zsh-script[generate Bash completion script]' 'list-dependencies[list all dependencies' names]' 'list-executables[list all executables' names]'}" + ) + _arguments $arguments && return +} + +_swift_package_edit() { + arguments=( + ":The name of the package to edit:_swift_dependency" + "--revision[The revision to edit]:The revision to edit: " + "--branch[The branch to create]:The branch to create: " + "--path[Create or use the checkout at this path]:Create or use the checkout at this path:_files" + ) + _arguments $arguments && return +} + +_swift_package_tools-version() { + arguments=( + "--set[Set tools version of package to the given value]:Set tools version of package to the given value: " + "--set-current[Set tools version of package to the current tools version in use]" + ) + _arguments $arguments && return +} + +_swift_package_describe() { + arguments=( + "--type[json|text]: :{_values '' 'text[describe using text format]' 'json[describe using JSON format]'}" + ) + _arguments $arguments && return +} + +_swift_package_clean() { + arguments=( + ) + _arguments $arguments && return +} + +_swift_package_reset() { + arguments=( + ) + _arguments $arguments && return +} + +_swift_package_unedit() { + arguments=( + ":The name of the package to unedit:_swift_dependency" + "--force[Unedit the package even if it has uncommited and unpushed changes.]" + ) + _arguments $arguments && return +} + +_swift_package_generate-xcodeproj() { + arguments=( + "--xcconfig-overrides[Path to xcconfig file]:Path to xcconfig file:_files" + "--enable-code-coverage[Enable code coverage in the generated project]" + "--output[Path where the Xcode project should be generated]:Path where the Xcode project should be generated:_files" + ) + _arguments $arguments && return +} + +_swift_package_init() { + arguments=( + "--type[empty|library|executable|system-module]: :{_values '' 'empty[generates an empty project]' 'library[generates project for a dynamic library]' 'executable[generates a project for a cli executable]' 'system-module[generates a project for a system module]'}" + ) + _arguments $arguments && return +} + +_swift_package_dump-package() { + arguments=( + ) + _arguments $arguments && return +} + +# Generates completions for swift test +# +# In the final compdef file, set the following file header: +# +# #compdef _swift_test +# local context state state_descr line +# typeset -A opt_args +_swift_test() { + arguments=( + "-Xcc[Pass flag through to all C compiler invocations]:Pass flag through to all C compiler invocations: " + "-Xswiftc[Pass flag through to all Swift compiler invocations]:Pass flag through to all Swift compiler invocations: " + "-Xlinker[Pass flag through to all linker invocations]:Pass flag through to all linker invocations: " + "-Xcxx[Pass flag through to all C++ compiler invocations]:Pass flag through to all C++ compiler invocations: " + "(--configuration -c)"{--configuration,-c}"[Build with configuration (debug|release) ]: :{_values '' 'debug[build with DEBUG configuration]' 'release[build with RELEASE configuration]'}" + "--build-path[Specify build/cache directory ]:Specify build/cache directory :_files" + "(--chdir -C)"{--chdir,-C}"[]: :_files" + "--package-path[Change working directory before any other operation]:Change working directory before any other operation:_files" + "--disable-prefetching[]" + "--disable-sandbox[Disable using the sandbox when executing subprocesses]" + "--version[]" + "--destination[]: :_files" + "(--verbose -v)"{--verbose,-v}"[Increase verbosity of informational output]" + "--no-static-swift-stdlib[Do not link Swift stdlib statically]" + "--static-swift-stdlib[Link Swift stdlib statically]" + "--enable-build-manifest-caching[Enable llbuild manifest caching [Experimental]]" + "--skip-build[Skip building the test target]" + "(--list-tests -l)"{--list-tests,-l}"[Lists test methods in specifier format]" + "--generate-linuxmain[Generate LinuxMain.swift entries for the package]" + "--parallel[Run the tests in parallel.]" + "(--specifier -s)"{--specifier,-s}"[]: : " + "--filter[Run test cases matching regular expression, Format: . or ./]:Run test cases matching regular expression, Format: . or ./: " + ) + _arguments $arguments && return +} + +_swift_compiler() { +} + +_swift