70dfb6ef92f3bedc460e300e94e3456942ff328c

Author
Marc Cornellà <hello@mcornella.com>
Committer
Marc Cornellà <hello@mcornella.com>
Date

Message

refactor(composer): improve completion and use official Zsh completion if available

Diff

 1diff --git a/plugins/composer/composer.plugin.zsh b/plugins/composer/composer.plugin.zsh
 2index ba29503e423598f820278d8b1f4e437e2b369f4a..f2076c2201524ae87354995f05af17ee281801cb 100644
 3--- a/plugins/composer/composer.plugin.zsh
 4+++ b/plugins/composer/composer.plugin.zsh
 5@@ -1,18 +1,34 @@
 6-_composer () {
 7+## Basic Composer command completion
 8+# Since Zsh 5.7, an improved composer command completion is provided
 9+if ! is-at-least 5.7; then
10+  _composer () {
11     local curcontext="$curcontext" state line
12     typeset -A opt_args
13-    _arguments \
14-        '*:: :->subcmds'
15+    _arguments '*:: :->subcmds'
16 
17-    if (( CURRENT == 1 )) || ( ((CURRENT == 2)) && [ "$words[1]" = "global" ] ) ; then
18-        compadd $(_composer_get_command_list)
19+    if (( CURRENT == 1 )) || ( (( CURRENT == 2 )) && [[ "$words[1]" = "global" ]] ); then
20+      # Command list
21+      local -a subcmds
22+      subcmds=("${(@f)"$($_comp_command1 --no-ansi 2>/dev/null | awk '
23+        /Available commands/{ r=1 }
24+        r == 1 && /^[ \t]*[a-z]+/{
25+          gsub(/^[ \t]+/, "")
26+          gsub(/  +/, ":")
27+          print $0
28+        }
29+      ')"}")
30+      _describe -t commands 'composer command' subcmds
31     else
32-        compadd $(_composer_get_required_list)
33+      # Required list
34+      compadd $($_comp_command1 show -s --no-ansi 2>/dev/null \
35+        | sed '1,/requires/d' \
36+        | awk 'NF > 0 && !/^requires \(dev\)/{ print $1 }')
37     fi
38-}
39+  }
40 
41-compdef _composer composer
42-compdef _composer composer.phar
43+  compdef _composer composer
44+  compdef _composer composer.phar
45+fi
46 
47 
48 ## Aliases