@@ -6,49 +6,62 @@ send_completions() {
66 echo $' # completely (https://github.com/bashly-framework/completely)'
77 echo $' # Modifying it manually is not recommended'
88 echo $' '
9- echo $' _cli_completions_route_flag_expects_value () {'
9+ echo $' _cli_completions_node_flag_state () {'
1010 echo $' case "$1:$2" in'
11- echo $' 2:--user|2:-u) return 0 ;;'
12- echo $' 2:--password|2:-p) return 0 ;;'
11+ echo $' 0:--help|0:-h) return 0 ;;'
12+ echo $' 0:--version|0:-v) return 0 ;;'
13+ echo $' 1:--help|1:-h) return 0 ;;'
14+ echo $' 1:--force|1:-f) return 0 ;;'
15+ echo $' 2:--user|2:-u) return 2 ;;'
16+ echo $' 2:--password|2:-p) return 2 ;;'
17+ echo $' 2:--help|2:-h) return 0 ;;'
1318 echo $' esac'
1419 echo $' '
1520 echo $' return 1'
1621 echo $' }'
1722 echo $' '
18- echo $' _cli_completions_resolve_route() {'
19- echo $' route_id='
20- echo $' route_word_count=-1'
21- echo $' route_has_positionals=0'
22- echo $' positional_index=0'
23- echo $' if (( ${#non_options[@]} >= 0 )) &&'
24- echo $' (( 0 > route_word_count ))'
25- echo $' then'
26- echo $' route_id=0'
27- echo $' route_word_count=0'
28- echo $' route_has_positionals=0'
29- echo $' positional_index=$((${#non_options[@]} - 0))'
30- echo $' fi'
23+ echo $' _cli_completions_option_seen() {'
24+ echo $' local completed_option option_name'
25+ echo $' for completed_option in "${completed_options[@]}"; do'
26+ echo $' for option_name in "$@"; do'
27+ echo $' [[ "$completed_option" == "$option_name" ]] && return 0'
28+ echo $' done'
29+ echo $' done'
3130 echo $' '
32- echo $' if (( ${#non_options[@]} >= 1 )) &&'
33- echo $' (( 1 > route_word_count )) &&'
34- echo $' [[ "${non_options[0]}" == "download" || "${non_options[0]}" == "d" ]]'
35- echo $' then'
36- echo $' route_id=1'
37- echo $' route_word_count=1'
38- echo $' route_has_positionals=1'
39- echo $' positional_index=$((${#non_options[@]} - 1))'
40- echo $' fi'
31+ echo $' return 1'
32+ echo $' }'
4133 echo $' '
42- echo $' if (( ${#non_options[@]} >= 1 )) &&'
43- echo $' (( 1 > route_word_count )) &&'
44- echo $' [[ "${non_options[0]}" == "upload" || "${non_options[0]}" == "u" ]]'
45- echo $' then'
46- echo $' route_id=2'
47- echo $' route_word_count=1'
48- echo $' route_has_positionals=1'
49- echo $' positional_index=$((${#non_options[@]} - 1))'
50- echo $' fi'
34+ echo $' _cli_completions_resolve_node() {'
35+ echo $' node_id=0'
36+ echo $' node_word_count=0'
37+ echo $' positional_index=0'
38+ echo $' '
39+ echo $' local word'
40+ echo $' for word in "${non_options[@]}"; do'
41+ echo $' case "$node_id:$word" in'
42+ echo $' 0:download)'
43+ echo $' node_id=1'
44+ echo $' node_word_count=1'
45+ echo $' ;;'
46+ echo $' 0:d)'
47+ echo $' node_id=1'
48+ echo $' node_word_count=1'
49+ echo $' ;;'
50+ echo $' 0:upload)'
51+ echo $' node_id=2'
52+ echo $' node_word_count=1'
53+ echo $' ;;'
54+ echo $' 0:u)'
55+ echo $' node_id=2'
56+ echo $' node_word_count=1'
57+ echo $' ;;'
58+ echo $' *)'
59+ echo $' break'
60+ echo $' ;;'
61+ echo $' esac'
62+ echo $' done'
5163 echo $' '
64+ echo $' positional_index=$((${#non_options[@]} - node_word_count))'
5265 echo $' }'
5366 echo $' '
5467 echo $' _cli_completions() {'
@@ -65,11 +78,12 @@ send_completions() {
6578 echo $' '
6679 echo $' local non_options=()'
6780 echo $' local completed_options=()'
68- echo $' local route_id='
69- echo $' local route_word_count=-1'
70- echo $' local route_has_positionals=0'
81+ echo $' local node_id='
82+ echo $' local node_word_count=-1'
7183 echo $' local positional_index=0'
72- echo $' _cli_completions_resolve_route'
84+ echo $' local invalid_completion=0'
85+ echo $' local flag_state=0'
86+ echo $' _cli_completions_resolve_node'
7387 echo $' '
7488 echo $' local skip_next=0'
7589 echo $' for word in "${completed[@]}"; do'
@@ -79,25 +93,28 @@ send_completions() {
7993 echo $' fi'
8094 echo $' '
8195 echo $' if [[ "${word:0:1}" == "-" ]]; then'
96+ echo $' _cli_completions_node_flag_state "$node_id" "$word"'
97+ echo $' flag_state=$?'
98+ echo $' if (( flag_state == 1 )); then'
99+ echo $' invalid_completion=1'
100+ echo $' break'
101+ echo $' fi'
102+ echo $' '
82103 echo $' completed_options+=("$word")'
83- echo $' if _cli_completions_route_flag_expects_value "$route_id" "$word" ; then'
104+ echo $' if (( flag_state == 2 )) ; then'
84105 echo $' skip_next=1'
85106 echo $' fi'
86107 echo $' continue'
87108 echo $' fi'
88109 echo $' '
89110 echo $' non_options+=("$word")'
90- echo $' _cli_completions_resolve_route '
111+ echo $' _cli_completions_resolve_node '
91112 echo $' done'
92113 echo $' '
93114 echo $' COMPREPLY=()'
115+ echo $' (( invalid_completion )) && return'
94116 echo $' '
95- echo $' if [[ -z "$route_id" ]] || { (( route_word_count == 0 )) && (( !route_has_positionals )) && [[ "${cur:0:1}" != "-" ]]; }; then'
96- echo $' while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "download d upload u" -- "$cur")'
97- echo $' return'
98- echo $' fi'
99- echo $' '
100- echo $' case "$route_id:$prev" in'
117+ echo $' case "$node_id:$prev" in'
101118 echo $' 2:--user|2:-u)'
102119 echo $' return'
103120 echo $' ;;'
@@ -106,90 +123,43 @@ send_completions() {
106123 echo $' ;;'
107124 echo $' esac'
108125 echo $' '
126+ echo $' if [[ "${cur:0:1}" != "-" ]] && (( positional_index == 0 )); then'
127+ echo $' case "$node_id" in'
128+ echo $' 0)'
129+ echo $' while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "download d upload u" -- "$cur")'
130+ echo $' return'
131+ echo $' ;;'
132+ echo $' esac'
133+ echo $' fi'
134+ echo $' '
109135 echo $' if [[ "${cur:0:1}" == "-" ]]; then'
110- echo $' case "$route_id " in'
136+ echo $' case "$node_id " in'
111137 echo $' 0)'
112138 echo $' local words=()'
113- echo $' local option_seen=0'
114- echo $' for completed_option in "${completed_options[@]}"; do'
115- echo $' case "$completed_option" in'
116- echo $' --help|-h) option_seen=1 ;;'
117- echo $' esac'
118- echo $' done'
119- echo $' if ((!option_seen)); then'
120- echo $' words+=("--help" "-h")'
121- echo $' fi'
122- echo $' local option_seen=0'
123- echo $' for completed_option in "${completed_options[@]}"; do'
124- echo $' case "$completed_option" in'
125- echo $' --version|-v) option_seen=1 ;;'
126- echo $' esac'
127- echo $' done'
128- echo $' if ((!option_seen)); then'
129- echo $' words+=("--version" "-v")'
130- echo $' fi'
139+ echo $' _cli_completions_option_seen "--help" "-h" || words+=("--help" "-h")'
140+ echo $' _cli_completions_option_seen "--version" "-v" || words+=("--version" "-v")'
131141 echo $' while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "${words[*]}" -- "$cur")'
132142 echo $' return'
133143 echo $' ;;'
134144 echo $' 1)'
135145 echo $' local words=()'
136- echo $' local option_seen=0'
137- echo $' for completed_option in "${completed_options[@]}"; do'
138- echo $' case "$completed_option" in'
139- echo $' --help|-h) option_seen=1 ;;'
140- echo $' esac'
141- echo $' done'
142- echo $' if ((!option_seen)); then'
143- echo $' words+=("--help" "-h")'
144- echo $' fi'
145- echo $' local option_seen=0'
146- echo $' for completed_option in "${completed_options[@]}"; do'
147- echo $' case "$completed_option" in'
148- echo $' --force|-f) option_seen=1 ;;'
149- echo $' esac'
150- echo $' done'
151- echo $' if ((!option_seen)); then'
152- echo $' words+=("--force" "-f")'
153- echo $' fi'
146+ echo $' _cli_completions_option_seen "--help" "-h" || words+=("--help" "-h")'
147+ echo $' _cli_completions_option_seen "--force" "-f" || words+=("--force" "-f")'
154148 echo $' while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "${words[*]}" -- "$cur")'
155149 echo $' return'
156150 echo $' ;;'
157151 echo $' 2)'
158152 echo $' local words=()'
159- echo $' local option_seen=0'
160- echo $' for completed_option in "${completed_options[@]}"; do'
161- echo $' case "$completed_option" in'
162- echo $' --help|-h) option_seen=1 ;;'
163- echo $' esac'
164- echo $' done'
165- echo $' if ((!option_seen)); then'
166- echo $' words+=("--help" "-h")'
167- echo $' fi'
168- echo $' local option_seen=0'
169- echo $' for completed_option in "${completed_options[@]}"; do'
170- echo $' case "$completed_option" in'
171- echo $' --user|-u) option_seen=1 ;;'
172- echo $' esac'
173- echo $' done'
174- echo $' if ((!option_seen)); then'
175- echo $' words+=("--user" "-u")'
176- echo $' fi'
177- echo $' local option_seen=0'
178- echo $' for completed_option in "${completed_options[@]}"; do'
179- echo $' case "$completed_option" in'
180- echo $' --password|-p) option_seen=1 ;;'
181- echo $' esac'
182- echo $' done'
183- echo $' if ((!option_seen)); then'
184- echo $' words+=("--password" "-p")'
185- echo $' fi'
153+ echo $' _cli_completions_option_seen "--help" "-h" || words+=("--help" "-h")'
154+ echo $' _cli_completions_option_seen "--user" "-u" || words+=("--user" "-u")'
155+ echo $' _cli_completions_option_seen "--password" "-p" || words+=("--password" "-p")'
186156 echo $' while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "${words[*]}" -- "$cur")'
187157 echo $' return'
188158 echo $' ;;'
189159 echo $' esac'
190160 echo $' fi'
191161 echo $' '
192- echo $' case "$route_id :$positional_index" in'
162+ echo $' case "$node_id :$positional_index" in'
193163 echo $' 1:0)'
194164 echo $' return'
195165 echo $' ;;'
0 commit comments