@@ -10,8 +10,8 @@ _yc_no_of_yarn_args() {
10
10
echo " $# words"
11
11
}
12
12
13
- _yc_list_cached_modules () {
14
- ls ~ /.npm 2> /dev/null
13
+ _yc_check_jq () {
14
+ (( ${+commands[jq]} )) || echo " \nyarn-completion needs jq\n "
15
15
}
16
16
17
17
_yc_recursively_look_for () {
@@ -24,47 +24,17 @@ _yc_recursively_look_for() {
24
24
[[ ! " $dir " = " " ]] && echo " $dir /$filename "
25
25
}
26
26
27
- _yc_get_package_json_property_object () {
28
- local package_json=" $1 "
29
- local property=" $2 "
30
- cat " $package_json " |
31
- sed -nE " /^ *\" $property \" : \{$/,/^ *\},?$/p" | # Grab scripts object
32
- sed ' 1d;$d' | # Remove first/last lines
33
- sed -E ' s/\s+"([^"]+)": "(.+)",?/\1=>\2/' # Parse into key=>value
34
- }
35
-
36
- _yc_get_package_json_property_object_keys () {
37
- local package_json=" $1 "
38
- local property=" $2 "
39
- _yc_get_package_json_property_object " $package_json " " $property " | cut -f 1 -d " ="
40
- }
41
-
42
- _yc_parse_package_json_for_script_suggestions () {
43
- local package_json=" $1 "
44
- _yc_get_package_json_property_object " $package_json " scripts |
45
- sed -E ' s/(.+)=>(.+)/\1:$ \2/' | # Parse commands into suggestions
46
- sed ' s/\(:\)[^$]/\\&/g' | # Escape ":" in commands
47
- sed ' s/\(:\)$[^ ]/\\&/g' # Escape ":$" without a space in commands
48
- }
49
-
50
- _yc_parse_package_json_for_deps () {
51
- local package_json=" $1 "
52
- _yc_get_package_json_property_object_keys " $package_json " dependencies
53
- _yc_get_package_json_property_object_keys " $package_json " devDependencies
54
- }
55
-
56
27
_yc_yarn_add_completion () {
57
28
# Only run on `yarn add ?`
58
29
[[ ! " $( _yc_no_of_yarn_args) " = " 3" ]] && return
59
30
31
+ local packages=($( yarn cache list --json | jq --raw-output ' .data.body[] | .[0]' 2> /dev/null) )
32
+
60
33
# Return if we don't have any cached modules
61
- [[ " $( _yc_list_cached_modules ) " = " " ]] && return
34
+ [[ " $# packages " = 0 ]] && return
62
35
63
36
# If we do, recommend them
64
- _values $( _yc_list_cached_modules)
65
-
66
- # Make sure we don't run default completion
67
- custom_completion=true
37
+ _values ' packages' $packages
68
38
}
69
39
70
40
_yc_yarn_remove_completion () {
@@ -77,7 +47,11 @@ _yc_yarn_remove_completion() {
77
47
# Return if we can't find package.json
78
48
[[ " $package_json " = " " ]] && return
79
49
80
- _values $( _yc_parse_package_json_for_deps " $package_json " )
50
+ local values=($( jq --raw-output ' (.devDependencies, .dependencies) | keys[]' $package_json 2> /dev/null) )
51
+
52
+ [[ " $# values" = 0 ]] && return
53
+
54
+ _values ' installed' $values
81
55
}
82
56
83
57
_yc_yarn_run_completion () {
@@ -90,15 +64,16 @@ _yc_yarn_run_completion() {
90
64
# Return if we can't find package.json
91
65
[[ " $package_json " = " " ]] && return
92
66
93
- # Parse scripts in package.json
94
- local -a options
95
- options=(${(f)" $( _yc_parse_package_json_for_script_suggestions $package_json ) " } )
67
+ local -a scripts
68
+ scripts=(${(f)" $(
69
+ jq --raw-output '
70
+ .scripts | to_entries[] | "\(.key):\(.value | gsub("\n";"\\\\n"))"
71
+ ' $package_json 2> /dev/null
72
+ ) " } )
96
73
97
- # Return if we can't parse it
98
- [[ " $# options" = 0 ]] && return
74
+ [[ " $# scripts" = 0 ]] && return
99
75
100
- # Load the completions
101
- _describe ' values' options
76
+ _describe ' scripts' scripts
102
77
}
103
78
104
79
_yc_zsh_better_yarn_completion () {
@@ -108,12 +83,15 @@ _yc_zsh_better_yarn_completion() {
108
83
# Load custom completion commands
109
84
case " $( _yc_yarn_command) " in
110
85
add)
86
+ _yc_check_jq
111
87
_yc_yarn_add_completion
112
88
;;
113
89
remove)
90
+ _yc_check_jq
114
91
_yc_yarn_remove_completion
115
92
;;
116
93
run)
94
+ _yc_check_jq
117
95
_yc_yarn_run_completion
118
96
;;
119
97
* )
0 commit comments