Skip to content

Commit 078be23

Browse files
authored
Merge pull request #228 from DannyBen/fix/sub-sub-completions
Fix completions for deep command aliases
2 parents 8b86cfc + a19a8a7 commit 078be23

File tree

7 files changed

+349
-7
lines changed

7 files changed

+349
-7
lines changed

lib/bashly/concerns/command_scopes.rb

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
module Bashly
22
# This is a `Command` concern responsible for providing additional scopes.
33
module CommandScopes
4-
# Returns an array of all full names (including aliases)
4+
# Returns an array of all full names (including aliases and aliases of
5+
# parents)
56
def all_full_names
6-
[full_name] + if parents.any?
7-
alt.map { |a| (parents + [a]).join(' ') }
7+
if parent_command
8+
parent_command.all_full_names.product(aliases).map { |a| a.join ' ' }
89
else
9-
alt
10+
aliases
1011
end
1112
end
1213

lib/bashly/script/command.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ def commands
6262
return [] unless options["commands"]
6363
options["commands"].map do |options|
6464
options['parents'] = parents + [name]
65+
options['parent_command'] = self
6566
Command.new options
6667
end
6768
end
@@ -116,6 +117,11 @@ def load_user_file(file, placeholder: true)
116117
Settings.production? ? content : "#{view_marker path}\n#{content}"
117118
end
118119

120+
# Returns the Command instance of the direct parent
121+
def parent_command
122+
options['parent_command']
123+
end
124+
119125
# Returns an array of all parents. For example, the command
120126
# "docker container run" will have [docker, container] as its parents
121127
def parents
Lines changed: 280 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,280 @@
1+
---
2+
cli:
3+
- "--help"
4+
- "--version"
5+
- "-h"
6+
- "-v"
7+
- a
8+
- alpha
9+
cli alpha:
10+
- "--help"
11+
- "-h"
12+
- b
13+
- beta
14+
- bravo
15+
cli a:
16+
- "--help"
17+
- "-h"
18+
- b
19+
- beta
20+
- bravo
21+
cli alpha bravo:
22+
- "--help"
23+
- "-h"
24+
- c
25+
- charlie
26+
cli alpha b:
27+
- "--help"
28+
- "-h"
29+
- c
30+
- charlie
31+
cli alpha beta:
32+
- "--help"
33+
- "-h"
34+
- c
35+
- charlie
36+
cli a bravo:
37+
- "--help"
38+
- "-h"
39+
- c
40+
- charlie
41+
cli a b:
42+
- "--help"
43+
- "-h"
44+
- c
45+
- charlie
46+
cli a beta:
47+
- "--help"
48+
- "-h"
49+
- c
50+
- charlie
51+
cli alpha bravo charlie:
52+
- "--help"
53+
- "-h"
54+
- d
55+
- delta
56+
cli alpha bravo c:
57+
- "--help"
58+
- "-h"
59+
- d
60+
- delta
61+
cli alpha b charlie:
62+
- "--help"
63+
- "-h"
64+
- d
65+
- delta
66+
cli alpha b c:
67+
- "--help"
68+
- "-h"
69+
- d
70+
- delta
71+
cli alpha beta charlie:
72+
- "--help"
73+
- "-h"
74+
- d
75+
- delta
76+
cli alpha beta c:
77+
- "--help"
78+
- "-h"
79+
- d
80+
- delta
81+
cli a bravo charlie:
82+
- "--help"
83+
- "-h"
84+
- d
85+
- delta
86+
cli a bravo c:
87+
- "--help"
88+
- "-h"
89+
- d
90+
- delta
91+
cli a b charlie:
92+
- "--help"
93+
- "-h"
94+
- d
95+
- delta
96+
cli a b c:
97+
- "--help"
98+
- "-h"
99+
- d
100+
- delta
101+
cli a beta charlie:
102+
- "--help"
103+
- "-h"
104+
- d
105+
- delta
106+
cli a beta c:
107+
- "--help"
108+
- "-h"
109+
- d
110+
- delta
111+
cli alpha bravo charlie delta:
112+
- "--color"
113+
- "--help"
114+
- "-c"
115+
- "-h"
116+
cli alpha bravo charlie delta*--color: &1
117+
- green
118+
- red
119+
cli alpha bravo charlie delta*-c: *1
120+
cli alpha bravo charlie d:
121+
- "--color"
122+
- "--help"
123+
- "-c"
124+
- "-h"
125+
cli alpha bravo charlie d*--color: *1
126+
cli alpha bravo charlie d*-c: *1
127+
cli alpha bravo c delta:
128+
- "--color"
129+
- "--help"
130+
- "-c"
131+
- "-h"
132+
cli alpha bravo c delta*--color: *1
133+
cli alpha bravo c delta*-c: *1
134+
cli alpha bravo c d:
135+
- "--color"
136+
- "--help"
137+
- "-c"
138+
- "-h"
139+
cli alpha bravo c d*--color: *1
140+
cli alpha bravo c d*-c: *1
141+
cli alpha b charlie delta:
142+
- "--color"
143+
- "--help"
144+
- "-c"
145+
- "-h"
146+
cli alpha b charlie delta*--color: *1
147+
cli alpha b charlie delta*-c: *1
148+
cli alpha b charlie d:
149+
- "--color"
150+
- "--help"
151+
- "-c"
152+
- "-h"
153+
cli alpha b charlie d*--color: *1
154+
cli alpha b charlie d*-c: *1
155+
cli alpha b c delta:
156+
- "--color"
157+
- "--help"
158+
- "-c"
159+
- "-h"
160+
cli alpha b c delta*--color: *1
161+
cli alpha b c delta*-c: *1
162+
cli alpha b c d:
163+
- "--color"
164+
- "--help"
165+
- "-c"
166+
- "-h"
167+
cli alpha b c d*--color: *1
168+
cli alpha b c d*-c: *1
169+
cli alpha beta charlie delta:
170+
- "--color"
171+
- "--help"
172+
- "-c"
173+
- "-h"
174+
cli alpha beta charlie delta*--color: *1
175+
cli alpha beta charlie delta*-c: *1
176+
cli alpha beta charlie d:
177+
- "--color"
178+
- "--help"
179+
- "-c"
180+
- "-h"
181+
cli alpha beta charlie d*--color: *1
182+
cli alpha beta charlie d*-c: *1
183+
cli alpha beta c delta:
184+
- "--color"
185+
- "--help"
186+
- "-c"
187+
- "-h"
188+
cli alpha beta c delta*--color: *1
189+
cli alpha beta c delta*-c: *1
190+
cli alpha beta c d:
191+
- "--color"
192+
- "--help"
193+
- "-c"
194+
- "-h"
195+
cli alpha beta c d*--color: *1
196+
cli alpha beta c d*-c: *1
197+
cli a bravo charlie delta:
198+
- "--color"
199+
- "--help"
200+
- "-c"
201+
- "-h"
202+
cli a bravo charlie delta*--color: *1
203+
cli a bravo charlie delta*-c: *1
204+
cli a bravo charlie d:
205+
- "--color"
206+
- "--help"
207+
- "-c"
208+
- "-h"
209+
cli a bravo charlie d*--color: *1
210+
cli a bravo charlie d*-c: *1
211+
cli a bravo c delta:
212+
- "--color"
213+
- "--help"
214+
- "-c"
215+
- "-h"
216+
cli a bravo c delta*--color: *1
217+
cli a bravo c delta*-c: *1
218+
cli a bravo c d:
219+
- "--color"
220+
- "--help"
221+
- "-c"
222+
- "-h"
223+
cli a bravo c d*--color: *1
224+
cli a bravo c d*-c: *1
225+
cli a b charlie delta:
226+
- "--color"
227+
- "--help"
228+
- "-c"
229+
- "-h"
230+
cli a b charlie delta*--color: *1
231+
cli a b charlie delta*-c: *1
232+
cli a b charlie d:
233+
- "--color"
234+
- "--help"
235+
- "-c"
236+
- "-h"
237+
cli a b charlie d*--color: *1
238+
cli a b charlie d*-c: *1
239+
cli a b c delta:
240+
- "--color"
241+
- "--help"
242+
- "-c"
243+
- "-h"
244+
cli a b c delta*--color: *1
245+
cli a b c delta*-c: *1
246+
cli a b c d:
247+
- "--color"
248+
- "--help"
249+
- "-c"
250+
- "-h"
251+
cli a b c d*--color: *1
252+
cli a b c d*-c: *1
253+
cli a beta charlie delta:
254+
- "--color"
255+
- "--help"
256+
- "-c"
257+
- "-h"
258+
cli a beta charlie delta*--color: *1
259+
cli a beta charlie delta*-c: *1
260+
cli a beta charlie d:
261+
- "--color"
262+
- "--help"
263+
- "-c"
264+
- "-h"
265+
cli a beta charlie d*--color: *1
266+
cli a beta charlie d*-c: *1
267+
cli a beta c delta:
268+
- "--color"
269+
- "--help"
270+
- "-c"
271+
- "-h"
272+
cli a beta c delta*--color: *1
273+
cli a beta c delta*-c: *1
274+
cli a beta c d:
275+
- "--color"
276+
- "--help"
277+
- "-c"
278+
- "-h"
279+
cli a beta c d*--color: *1
280+
cli a beta c d*-c: *1
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
---
2+
- cli alpha bravo charlie delta
3+
- cli alpha bravo charlie d
4+
- cli alpha bravo c delta
5+
- cli alpha bravo c d
6+
- cli alpha b charlie delta
7+
- cli alpha b charlie d
8+
- cli alpha b c delta
9+
- cli alpha b c d
10+
- cli alpha beta charlie delta
11+
- cli alpha beta charlie d
12+
- cli alpha beta c delta
13+
- cli alpha beta c d
14+
- cli a bravo charlie delta
15+
- cli a bravo charlie d
16+
- cli a bravo c delta
17+
- cli a bravo c d
18+
- cli a b charlie delta
19+
- cli a b charlie d
20+
- cli a b c delta
21+
- cli a b c d
22+
- cli a beta charlie delta
23+
- cli a beta charlie d
24+
- cli a beta c delta
25+
- cli a beta c d

spec/bashly/concerns/completions_command_spec.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,4 +47,15 @@
4747
end
4848
end
4949
end
50+
51+
context "with a command that has nested command aliases" do
52+
let(:fixture) { :nested_aliases }
53+
54+
describe '#completion_data' do
55+
it "returns a data structure that includes all command full names" do
56+
expect(subject.completion_data.to_yaml)
57+
.to match_approval("completions/nested_aliases")
58+
end
59+
end
60+
end
5061
end

spec/bashly/script/command_spec.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,11 @@
4646
end
4747

4848
describe '#all_full_names' do
49-
let(:fixture) { :aliases }
49+
let(:fixture) { :nested_aliases }
5050

5151
it "returns an array of all full names including aliases" do
52-
expect(subject.commands.first.all_full_names).to eq ["apt download", "apt d", "apt pull"]
52+
expect(subject.deep_commands.last.all_full_names.to_yaml)
53+
.to match_approval('script/command/nested_aliases')
5354
end
5455
end
5556

@@ -138,7 +139,6 @@
138139
end
139140
end
140141

141-
142142
describe '#environment_cariables' do
143143
it "returns an array of EnvironemntVariable objects" do
144144
expect(subject.environment_variables).to be_an Array

0 commit comments

Comments
 (0)