Browse Source

commands and subcommands

Alexandre Joly 11 years ago
parent
commit
cf5ca2f4f3
1 changed files with 170 additions and 53 deletions
  1. 170 53
      plugins/pod/_pod

+ 170 - 53
plugins/pod/_pod

@@ -1,16 +1,29 @@
 #compdef pod
+#autoload
 
 # -----------------------------------------------------------------------------
 #          FILE:  pod.plugin.zsh
 #   DESCRIPTION:  Cocoapods autocomplete plugin for Oh-My-Zsh
+#                 http://cocoapods.org
 #        AUTHOR:  Alexandre Joly (alexandre.joly@mekanics.ch)
 #        GITHUB:  https://github.com/mekanics
+#       TWITTER:  @jolyAlexandre
 #       VERSION:  0.0.1
+#       LICENSE:  MIT
 # -----------------------------------------------------------------------------
 
-_pod_all_repos() {
-    repos=(`ls ~/.cocoapods`)
-}
+#------------------
+# TODO:
+#   - Parameters for
+#       - install
+#       - update
+#       - outdated
+#       - search
+#       - list
+#       - push
+#       - podfile-info
+#       - setup
+#------------------
 
 local -a _1st_arguments
 _1st_arguments=(
@@ -29,54 +42,158 @@ _1st_arguments=(
     'update:Update outdated project dependencies'
 )
 
-_arguments '*:: :->command'
-
-if (( CURRENT == 1 )); then
-  _describe -t commands "pod command" _1st_arguments
-  return
-fi
-
-local -a _command_args
-case "$words[1]" in
-    install)
-    _command_args=(
-        '(--no-clean)--no-clean[Leave SCM dirs like `.git` and `.svn` intact after downloading]' \
-        '(--no-integrate)--no-integrate[Skip integration of the Pods libraries in the Xcode project(s)]' \
-        '(--no-repo-update)--no-repo-update[Skip running `pod repo update before install]'
-    )
-    ;;
-    update)
-    _command_args=(
-        '(--no-clean)--no-clean[Leave SCM dirs like `.git` and `.svn intact after downloading]' \
-        '(--no-integrate)--no-integrate[Skip integration of the Pods libraries in the Xcode project(s)]' \
-        '(--no-repo-update)--no-repo-update[Skip running `pod repo update before install]'
-    )
-    ;;
-    outdated)
-    _command_args=(
-        '(--no-repo-update)--no-repo-update[Skip running `pod repo update before install]'
-    )
-    ;;
-    search)
-    _command_args=(
-        '(--full)--full[Search by name, summary, and description]' \
-        '(--stats)--stats[Show additional stats (like GitHub watchers and forks)]' \
-        '(--ios)--ios[Restricts the search to Pods supported on iOS]' \
-        '(--osx)--osx[Restricts the search to Pods supported on OS X]'
-    )
-    ;;
-    update)
-    _command_args=(
-        '(--update)--update[Run `pod repo update before listing]'
-    )
-    ;;
-esac
+local -a _repo_arguments
+_repo_arguments=(
+    'add:Add a spec repo'
+    'lint:Validates all specs in a repo'
+    'update:Update a spec repo'
+)
+
+local -a _spec_arguments
+_spec_arguments=(
+    'cat:Prints a spec file'
+    'create:Create spec file stub'
+    'edit:Edit a spec file'
+    'lint:Validates a spec file'
+    'which:Prints the path of the given spec'
+)
+
+local -a _ipc_arguments
+_ipc_arguments=(
+    'list:Lists the specifications know to CocoaPods'
+    'podfile:Converts a Podfile to YAML'
+    'repl:The repl listens to commands on standard input'
+    'spec:Converts a podspec to YAML'
+    'update-search-index:Updates the search index'
+)
+
+local -a _list_arguments
+_list_arguments=(
+    'new:Lists pods introduced in the master spec-repo since the last check'
+)
+
+__first_command_list ()
+{
+    local expl
+    declare -a tasks
+
+    tasks=(install ipc lib list outdated podfile-info push repo search setup spec update)
+
+    _wanted tasks expl 'help' compadd $tasks
+}
+
+__repo_list() {
+    _wanted application expl 'command' compadd $(command ls -1 ~/.cocoapods 2>/dev/null | sed -e 's/ /\\ /g')
+}
+
+__pod-repo() {
+    local curcontext="$curcontext" state line
+    typeset -A opt_args
+
+    _arguments -C \
+        ':command:->command' \
+        '*::options:->options'
+
+   case $state in
+       (command)
+           _describe -t commands "gem subcommand" _repo_arguments
+           return
+       ;;
+
+       (options)
+           case $line[1] in
+               (update|lint)
+                   _arguments ':feature:__repo_list'
+               ;;
+           esac
+       ;;
+    esac
+}
+
+__pod-spec() {
+    local curcontext="$curcontext" state line
+    typeset -A opt_args
 
-_arguments \
-    $_command_args \
-    '(--silent)--silent[Show nothing]' \
-    '(--version)--version[Show the version of CocoaPods]' \
-    '(--no-color)--no-color[Show output without color]' \
-    '(--verbose)--verbose[Show more debugging information]' \
-    '(--help)--help[Show help banner of specified command]' \
-    &&  return 0
+    _arguments -C \
+        ':command:->command' \
+        '*::options:->options'
+
+   case $state in
+        (command)
+            _describe -t commands "gem subcommand" _spec_arguments
+            return
+        ;;
+
+        (options)
+            #todo
+            return
+        ;;
+    esac
+}
+
+__pod-ipc() {
+    local curcontext="$curcontext" state line
+    typeset -A opt_args
+
+    _arguments -C \
+        ':command:->command' \
+        '*::options:->options'
+
+   case $state in
+        (command)
+            _describe -t commands "gem subcommand" _ipc_arguments
+            return
+        ;;
+
+        (options)
+            #todo
+            return
+        ;;
+    esac
+}
+
+
+
+local expl
+#local -a boxes installed_boxes
+
+local curcontext="$curcontext" state line
+typeset -A opt_args
+
+_arguments -C \
+    ':command:->command' \
+    '*::options:->options'
+
+case $state in
+  (command)
+      _describe -t commands "gem subcommand" _1st_arguments
+      return
+  ;;
+
+  (options)
+    case $line[1] in
+        (help)
+            _arguments ':feature:__first_command_list'
+        ;;
+
+        (repo)
+            __pod-repo
+        ;;
+
+        (spec)
+            __pod-spec
+        ;;
+
+        (ipc)
+            __pod-ipc
+        ;;
+
+        (list)
+            __pod-list
+        ;;
+
+        (install|lib|outdated|podfile-info|push|search|setup|update)
+            #_arguments ':feature:__repo_list'
+    esac
+  ;;
+esac