Skip to content

Commit b8a2a48

Browse files
committed
added label completion
1 parent 6b0d514 commit b8a2a48

7 files changed

Lines changed: 66 additions & 0 deletions

File tree

cmd/issue_create.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,13 @@ func init() {
169169
issueCmd.AddCommand(issueCreateCmd)
170170

171171
carapace.Gen(issueCreateCmd).FlagCompletion(carapace.ActionMap{
172+
"label": carapace.ActionMultiParts(",", func(c carapace.Context) carapace.Action {
173+
if project, _, err := parseArgsRemoteAndProject(c.Args); err != nil {
174+
return carapace.ActionMessage(err.Error())
175+
} else {
176+
return action.Labels(project).Invoke(c).Filter(c.Parts).ToA()
177+
}
178+
}),
172179
"milestone": carapace.ActionCallback(func(c carapace.Context) carapace.Action {
173180
if project, _, err := parseArgsRemoteAndProject(c.Args); err != nil {
174181
return carapace.ActionMessage(err.Error())

cmd/issue_edit.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,13 @@ func init() {
227227
issueCmd.AddCommand(issueEditCmd)
228228

229229
carapace.Gen(issueEditCmd).FlagCompletion(carapace.ActionMap{
230+
"label": carapace.ActionMultiParts(",", func(c carapace.Context) carapace.Action {
231+
if project, _, err := parseArgsRemoteAndProject(c.Args); err != nil {
232+
return carapace.ActionMessage(err.Error())
233+
} else {
234+
return action.Labels(project).Invoke(c).Filter(c.Parts).ToA()
235+
}
236+
}),
230237
"milestone": carapace.ActionCallback(func(c carapace.Context) carapace.Action {
231238
if project, _, err := parseArgsRemoteAndProject(c.Args); err != nil {
232239
return carapace.ActionMessage(err.Error())

cmd/issue_list.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,13 @@ func init() {
149149

150150
issueCmd.AddCommand(issueListCmd)
151151
carapace.Gen(issueListCmd).FlagCompletion(carapace.ActionMap{
152+
"label": carapace.ActionMultiParts(",", func(c carapace.Context) carapace.Action {
153+
if project, _, err := parseArgsRemoteAndProject(c.Args); err != nil {
154+
return carapace.ActionMessage(err.Error())
155+
} else {
156+
return action.Labels(project).Invoke(c).Filter(c.Parts).ToA()
157+
}
158+
}),
152159
"milestone": carapace.ActionCallback(func(c carapace.Context) carapace.Action {
153160
if project, _, err := parseArgsRemoteAndProject(c.Args); err != nil {
154161
return carapace.ActionMessage(err.Error())

cmd/mr_create.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,13 @@ func init() {
4848
mrCmd.AddCommand(mrCreateCmd)
4949

5050
carapace.Gen(mrCreateCmd).FlagCompletion(carapace.ActionMap{
51+
"label": carapace.ActionMultiParts(",", func(c carapace.Context) carapace.Action {
52+
if project, _, err := parseArgsRemoteAndProject(c.Args); err != nil {
53+
return carapace.ActionMessage(err.Error())
54+
} else {
55+
return action.Labels(project).Invoke(c).Filter(c.Parts).ToA()
56+
}
57+
}),
5158
"milestone": carapace.ActionCallback(func(c carapace.Context) carapace.Action {
5259
if project, _, err := parseArgsRemoteAndProject(c.Args); err != nil {
5360
return carapace.ActionMessage(err.Error())

cmd/mr_edit.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,13 @@ func init() {
318318
mrCmd.AddCommand(mrEditCmd)
319319

320320
carapace.Gen(mrEditCmd).FlagCompletion(carapace.ActionMap{
321+
"label": carapace.ActionMultiParts(",", func(c carapace.Context) carapace.Action {
322+
if project, _, err := parseArgsRemoteAndProject(c.Args); err != nil {
323+
return carapace.ActionMessage(err.Error())
324+
} else {
325+
return action.Labels(project).Invoke(c).Filter(c.Parts).ToA()
326+
}
327+
}),
321328
"milestone": carapace.ActionCallback(func(c carapace.Context) carapace.Action {
322329
if project, _, err := parseArgsRemoteAndProject(c.Args); err != nil {
323330
return carapace.ActionMessage(err.Error())

cmd/mr_list.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,13 @@ func init() {
200200

201201
mrCmd.AddCommand(listCmd)
202202
carapace.Gen(listCmd).FlagCompletion(carapace.ActionMap{
203+
"label": carapace.ActionMultiParts(",", func(c carapace.Context) carapace.Action {
204+
if project, _, err := parseArgsRemoteAndProject(c.Args); err != nil {
205+
return carapace.ActionMessage(err.Error())
206+
} else {
207+
return action.Labels(project).Invoke(c).Filter(c.Parts).ToA()
208+
}
209+
}),
203210
"milestone": carapace.ActionCallback(func(c carapace.Context) carapace.Action {
204211
if project, _, err := parseArgsRemoteAndProject(c.Args); err != nil {
205212
return carapace.ActionMessage(err.Error())

internal/action/label.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package action
2+
3+
import (
4+
"time"
5+
6+
"github.com/rsteube/carapace"
7+
"github.com/rsteube/carapace/pkg/cache"
8+
lab "github.com/zaquestion/lab/internal/gitlab"
9+
)
10+
11+
func Labels(project string) carapace.Action {
12+
return carapace.ActionCallback(func(c carapace.Context) carapace.Action {
13+
if labels, err := lab.LabelList(project); err != nil {
14+
return carapace.ActionMessage(err.Error())
15+
} else {
16+
values := make([]string, len(labels)*2)
17+
for index, label := range labels {
18+
values[index*2] = label.Name
19+
values[index*2+1] = label.Description
20+
}
21+
return carapace.ActionValuesDescribed(values...)
22+
}
23+
}).Cache(5*time.Minute, cache.String(project))
24+
}

0 commit comments

Comments
 (0)