From 651856d4a3b37467cd26a5c5d8de52bd76a9be7f Mon Sep 17 00:00:00 2001
From: Roman Dzieciol <roman.dzieciol@gmail.com>
Date: Sun, 7 Apr 2019 23:26:43 +0100
Subject: Update the swiftpm plugin autocompletion for Swift 5.0

---
 plugins/swiftpm/README.md |  19 ++++
 plugins/swiftpm/_swift    | 235 ++++++++++++++++++++++++++++++++--------------
 2 files changed, 183 insertions(+), 71 deletions(-)

(limited to 'plugins')

diff --git a/plugins/swiftpm/README.md b/plugins/swiftpm/README.md
index 07ca25651..d9462fb7f 100644
--- a/plugins/swiftpm/README.md
+++ b/plugins/swiftpm/README.md
@@ -20,3 +20,22 @@ plugins=(... swiftpm)
 | `spx` | Generates an Xcode project          | `swift package generate-xcodeproj` |
 | `sps` | Print the resolved dependency graph | `swift package show-dependencies`  |
 | `spd` | Print parsed Package.swift as JSON  | `swift package dump-package`       |
+
+## Autocompletion
+
+The `_swift` file enables autocompletion for Swift Package Manager. Current version supports Swift 5.0
+
+
+### Updating the autocompletion for new version of Swift
+
+To update autocompletion to the Swift version present on your system:
+```
+swift package completion-tool generate-zsh-script > ~/.oh-my-zsh/plugins/swiftpm/_swift
+```
+
+### Known issues
+
+If `swiftpm` is not added to your zsh plugins list, autocompletion will still be triggered but will result in errors:
+```
+_values:compvalues:10: not enough arguments
+```
diff --git a/plugins/swiftpm/_swift b/plugins/swiftpm/_swift
index bed6e13a7..1366b4d9c 100644
--- a/plugins/swiftpm/_swift
+++ b/plugins/swiftpm/_swift
@@ -72,16 +72,23 @@ _swift_build() {
         "--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"
-        "--sanitize[Turn on runtime checks for erroneous behavior]: :{_values '' 'address[enable Address sanitizer]' 'thread[enable Thread sanitizer]'}"
+        "--sanitize[Turn on runtime checks for erroneous behavior]: :{_values '' 'address[enable Address sanitizer]' 'thread[enable Thread sanitizer]' 'undefined[enable Undefined Behavior sanitizer]'}"
         "--disable-prefetching[]"
         "--skip-update[Skip updating dependencies from their remote during a resolution]"
         "--disable-sandbox[Disable using the sandbox when executing subprocesses]"
+        "--disable-package-manifest-caching[Disable caching Package.swift manifests]"
         "--version[]"
         "--destination[]: :_files"
         "(--verbose -v)"{--verbose,-v}"[Increase verbosity of informational output]"
         "--no-static-swift-stdlib[Do not link Swift stdlib statically \[default\]]"
         "--static-swift-stdlib[Link Swift stdlib statically]"
-        "--enable-build-manifest-caching[Enable llbuild manifest caching \[Experimental\]]"
+        "--enable-llbuild-library[Enable building with the llbuild library]"
+        "--force-resolved-versions[]"
+        "--disable-automatic-resolution[Disable automatic resolution if Package.resolved file is out-of-date]"
+        "--enable-index-store[Enable indexing-while-building feature]"
+        "--disable-index-store[Disable indexing-while-building feature]"
+        "--enable-pubgrub-resolver[\[Experimental\] Enable the new Pubgrub dependency resolver]"
+        "--enable-parseable-module-interfaces[]"
         "--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: "
@@ -108,17 +115,26 @@ _swift_run() {
         "--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"
-        "--sanitize[Turn on runtime checks for erroneous behavior]: :{_values '' 'address[enable Address sanitizer]' 'thread[enable Thread sanitizer]'}"
+        "--sanitize[Turn on runtime checks for erroneous behavior]: :{_values '' 'address[enable Address sanitizer]' 'thread[enable Thread sanitizer]' 'undefined[enable Undefined Behavior sanitizer]'}"
         "--disable-prefetching[]"
         "--skip-update[Skip updating dependencies from their remote during a resolution]"
         "--disable-sandbox[Disable using the sandbox when executing subprocesses]"
+        "--disable-package-manifest-caching[Disable caching Package.swift manifests]"
         "--version[]"
         "--destination[]: :_files"
         "(--verbose -v)"{--verbose,-v}"[Increase verbosity of informational output]"
         "--no-static-swift-stdlib[Do not link Swift stdlib statically \[default\]]"
         "--static-swift-stdlib[Link Swift stdlib statically]"
-        "--enable-build-manifest-caching[Enable llbuild manifest caching \[Experimental\]]"
+        "--enable-llbuild-library[Enable building with the llbuild library]"
+        "--force-resolved-versions[]"
+        "--disable-automatic-resolution[Disable automatic resolution if Package.resolved file is out-of-date]"
+        "--enable-index-store[Enable indexing-while-building feature]"
+        "--disable-index-store[Disable indexing-while-building feature]"
+        "--enable-pubgrub-resolver[\[Experimental\] Enable the new Pubgrub dependency resolver]"
+        "--enable-parseable-module-interfaces[]"
         "--skip-build[Skip building the executable product]"
+        "--build-tests[Build both source and test targets]"
+        "--repl[Launch Swift REPL for the package]"
     )
     _arguments $arguments && return
 }
@@ -140,16 +156,23 @@ _swift_package() {
         "--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"
-        "--sanitize[Turn on runtime checks for erroneous behavior]: :{_values '' 'address[enable Address sanitizer]' 'thread[enable Thread sanitizer]'}"
+        "--sanitize[Turn on runtime checks for erroneous behavior]: :{_values '' 'address[enable Address sanitizer]' 'thread[enable Thread sanitizer]' 'undefined[enable Undefined Behavior sanitizer]'}"
         "--disable-prefetching[]"
         "--skip-update[Skip updating dependencies from their remote during a resolution]"
         "--disable-sandbox[Disable using the sandbox when executing subprocesses]"
+        "--disable-package-manifest-caching[Disable caching Package.swift manifests]"
         "--version[]"
         "--destination[]: :_files"
         "(--verbose -v)"{--verbose,-v}"[Increase verbosity of informational output]"
         "--no-static-swift-stdlib[Do not link Swift stdlib statically \[default\]]"
         "--static-swift-stdlib[Link Swift stdlib statically]"
-        "--enable-build-manifest-caching[Enable llbuild manifest caching \[Experimental\]]"
+        "--enable-llbuild-library[Enable building with the llbuild library]"
+        "--force-resolved-versions[]"
+        "--disable-automatic-resolution[Disable automatic resolution if Package.resolved file is out-of-date]"
+        "--enable-index-store[Enable indexing-while-building feature]"
+        "--disable-index-store[Disable indexing-while-building feature]"
+        "--enable-pubgrub-resolver[\[Experimental\] Enable the new Pubgrub dependency resolver]"
+        "--enable-parseable-module-interfaces[]"
         '(-): :->command'
         '(-)*:: :->arg'
     )
@@ -158,91 +181,124 @@ _swift_package() {
         (command)
             local modes
             modes=(
-                'edit:Put a package in editable mode'
-                'clean:Delete build artifacts'
-                'init:Initialize a new package'
-                'dump-package:Print parsed Package.swift as JSON'
+                'update:Update package dependencies'
                 'describe:Describe the current package'
+                'resolve:Resolve package dependencies'
+                'tools-version:Manipulate tools version of the current package'
                 'unedit:Remove a package from editable mode'
-                'update:Update package dependencies'
+                'show-dependencies:Print the resolved dependency graph'
+                'fetch:'
+                'dump-package:Print parsed Package.swift as JSON'
+                'edit:Put a package in editable mode'
+                'config:Manipulate configuration of the package'
                 'completion-tool:Completion tool (for shell completions)'
-                'tools-version:Manipulate tools version of the current package'
-                'reset:Reset the complete cache/build directory'
-                'resolve:Resolve package dependencies'
+                'clean:Delete build artifacts'
                 'generate-xcodeproj:Generates an Xcode project'
-                'fetch:'
-                'show-dependencies:Print the resolved dependency graph'
+                'reset:Reset the complete cache/build directory'
+                'init:Initialize a new package'
             )
             _describe "mode" modes
             ;;
         (arg)
             case ${words[1]} in
-                (edit)
-                    _swift_package_edit
-                    ;;
-                (clean)
-                    _swift_package_clean
-                    ;;
-                (init)
-                    _swift_package_init
-                    ;;
-                (dump-package)
-                    _swift_package_dump-package
+                (update)
+                    _swift_package_update
                     ;;
                 (describe)
                     _swift_package_describe
                     ;;
+                (resolve)
+                    _swift_package_resolve
+                    ;;
+                (tools-version)
+                    _swift_package_tools-version
+                    ;;
                 (unedit)
                     _swift_package_unedit
                     ;;
-                (update)
-                    _swift_package_update
+                (show-dependencies)
+                    _swift_package_show-dependencies
                     ;;
-                (completion-tool)
-                    _swift_package_completion-tool
+                (fetch)
+                    _swift_package_fetch
                     ;;
-                (tools-version)
-                    _swift_package_tools-version
+                (dump-package)
+                    _swift_package_dump-package
                     ;;
-                (reset)
-                    _swift_package_reset
+                (edit)
+                    _swift_package_edit
                     ;;
-                (resolve)
-                    _swift_package_resolve
+                (config)
+                    _swift_package_config
+                    ;;
+                (completion-tool)
+                    _swift_package_completion-tool
+                    ;;
+                (clean)
+                    _swift_package_clean
                     ;;
                 (generate-xcodeproj)
                     _swift_package_generate-xcodeproj
                     ;;
-                (fetch)
-                    _swift_package_fetch
+                (reset)
+                    _swift_package_reset
                     ;;
-                (show-dependencies)
-                    _swift_package_show-dependencies
+                (init)
+                    _swift_package_init
                     ;;
             esac
             ;;
     esac
 }
 
-_swift_package_edit() {
+_swift_package_update() {
     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_clean() {
+_swift_package_describe() {
     arguments=(
+        "--type[json|text]: :{_values '' 'text[describe using text format]' 'json[describe using JSON format]'}"
     )
     _arguments $arguments && return
 }
 
-_swift_package_init() {
+_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_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_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_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_fetch() {
     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
 }
@@ -253,54 +309,80 @@ _swift_package_dump-package() {
     _arguments $arguments && return
 }
 
-_swift_package_describe() {
+_swift_package_edit() {
     arguments=(
-        "--type[json|text]: :{_values '' 'text[describe using text format]' 'json[describe using JSON format]'}"
+        ":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_unedit() {
+_swift_package_config() {
     arguments=(
-        ":The name of the package to unedit:_swift_dependency"
-        "--force[Unedit the package even if it has uncommited and unpushed changes.]"
+        '(-): :->command'
+        '(-)*:: :->arg'
     )
     _arguments $arguments && return
+    case $state in
+        (command)
+            local modes
+            modes=(
+                'unset-mirror:Remove an existing mirror'
+                'set-mirror:Set a mirror for a dependency'
+                'get-mirror:Print mirror configuration for the given package dependency'
+            )
+            _describe "mode" modes
+            ;;
+        (arg)
+            case ${words[1]} in
+                (unset-mirror)
+                    _swift_package_config_unset-mirror
+                    ;;
+                (set-mirror)
+                    _swift_package_config_set-mirror
+                    ;;
+                (get-mirror)
+                    _swift_package_config_get-mirror
+                    ;;
+            esac
+            ;;
+    esac
 }
 
-_swift_package_update() {
+_swift_package_config_unset-mirror() {
     arguments=(
+        "--package-url[The package dependency url]:The package dependency url: "
+        "--mirror-url[The mirror url]:The mirror url: "
     )
     _arguments $arguments && return
 }
 
-_swift_package_completion-tool() {
+_swift_package_config_set-mirror() {
     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]'}"
+        "--package-url[The package dependency url]:The package dependency url: "
+        "--mirror-url[The mirror url]:The mirror url: "
     )
     _arguments $arguments && return
 }
 
-_swift_package_tools-version() {
+_swift_package_config_get-mirror() {
     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]"
+        "--package-url[The package dependency url]:The package dependency url: "
     )
     _arguments $arguments && return
 }
 
-_swift_package_reset() {
+_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_resolve() {
+_swift_package_clean() {
     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
 }
@@ -312,19 +394,21 @@ _swift_package_generate-xcodeproj() {
         "--output[Path where the Xcode project should be generated]:Path where the Xcode project should be generated:_files"
         "--legacy-scheme-generator[Use the legacy scheme generator]"
         "--watch[Watch for changes to the Package manifest to regenerate the Xcode project]"
+        "--skip-extra-files[Do not add file references for extra files to the generated Xcode project]"
     )
     _arguments $arguments && return
 }
 
-_swift_package_fetch() {
+_swift_package_reset() {
     arguments=(
     )
     _arguments $arguments && return
 }
 
-_swift_package_show-dependencies() {
+_swift_package_init() {
     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]'}"
+        "--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]'}"
+        "--name[Provide custom package name]:Provide custom package name: "
     )
     _arguments $arguments && return
 }
@@ -346,23 +430,32 @@ _swift_test() {
         "--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"
-        "--sanitize[Turn on runtime checks for erroneous behavior]: :{_values '' 'address[enable Address sanitizer]' 'thread[enable Thread sanitizer]'}"
+        "--sanitize[Turn on runtime checks for erroneous behavior]: :{_values '' 'address[enable Address sanitizer]' 'thread[enable Thread sanitizer]' 'undefined[enable Undefined Behavior sanitizer]'}"
         "--disable-prefetching[]"
         "--skip-update[Skip updating dependencies from their remote during a resolution]"
         "--disable-sandbox[Disable using the sandbox when executing subprocesses]"
+        "--disable-package-manifest-caching[Disable caching Package.swift manifests]"
         "--version[]"
         "--destination[]: :_files"
         "(--verbose -v)"{--verbose,-v}"[Increase verbosity of informational output]"
         "--no-static-swift-stdlib[Do not link Swift stdlib statically \[default\]]"
         "--static-swift-stdlib[Link Swift stdlib statically]"
-        "--enable-build-manifest-caching[Enable llbuild manifest caching \[Experimental\]]"
+        "--enable-llbuild-library[Enable building with the llbuild library]"
+        "--force-resolved-versions[]"
+        "--disable-automatic-resolution[Disable automatic resolution if Package.resolved file is out-of-date]"
+        "--enable-index-store[Enable indexing-while-building feature]"
+        "--disable-index-store[Disable indexing-while-building feature]"
+        "--enable-pubgrub-resolver[\[Experimental\] Enable the new Pubgrub dependency resolver]"
+        "--enable-parseable-module-interfaces[]"
         "--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.]"
+        "--num-workers[Number of tests to execute in parallel.]:Number of tests to execute in parallel.: "
         "(--specifier -s)"{--specifier,-s}"[]: : "
         "--xunit-output[]: :_files"
         "--filter[Run test cases matching regular expression, Format: <test-target>.<test-case> or <test-target>.<test-case>/<test>]:Run test cases matching regular expression, Format: <test-target>.<test-case> or <test-target>.<test-case>/<test>: "
+        "--enable-code-coverage[Test with code coverage enabled]"
     )
     _arguments $arguments && return
 }
-- 
cgit v1.2.3-70-g09d2