Skip to content

Commit d6cb723

Browse files
authored
Merge pull request #3202 from carapace-sh/unknown-bridges
support unknown bridges in lookup/diff
2 parents db219f4 + f15dea0 commit d6cb723

File tree

9 files changed

+29
-13
lines changed

9 files changed

+29
-13
lines changed

cmd/carapace/cmd/completers/completers.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -272,14 +272,26 @@ func AddSpecs(m completer.CompleterMap, parse bool) error {
272272
}
273273

274274
func Lookup(nameVariantGroup string) (*completer.Completer, error) { // TODO choice as parameter?
275-
m, err := Completers(choices.Parse(nameVariantGroup), true) // TODO lookup needs to use a quick version (skip parsing of specs for descriptions)
275+
parsed := choices.Parse(nameVariantGroup)
276+
m, err := Completers(parsed, true) // TODO lookup needs to use a quick version (skip parsing of specs for descriptions)
276277
if err != nil {
277278
return nil, err
278279
}
279280
if c, ok := m.Lookup(nameVariantGroup); ok {
280281
return c, nil
281282
}
282-
return nil, fmt.Errorf("unknonw completer/variant: %#v", nameVariantGroup)
283+
switch parsed.Group {
284+
case "", "bridge": // support unknown bridges in lookup
285+
if action, ok := bridge.Get(parsed.Variant); ok {
286+
return &completer.Completer{
287+
Name: parsed.Name,
288+
Group: "bridge",
289+
Variant: parsed.Variant,
290+
Execute: complete(parsed.Name, action(parsed.Name)),
291+
}, nil
292+
}
293+
}
294+
return nil, fmt.Errorf("unknown completer/variant: %#v", nameVariantGroup)
283295
}
284296

285297
func Description(name string) string {

cmd/carapace/cmd/diff.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ func init() {
3333
diffCmd.Flags().SetInterspersed(false)
3434

3535
carapace.Gen(diffCmd).PositionalCompletion(
36-
carapacebin.ActionCompleters(),
37-
carapacebin.ActionCompleters(),
36+
carapacebin.ActionCompleters(true),
37+
carapacebin.ActionCompleters(true),
3838
)
3939

4040
carapace.Gen(diffCmd).PositionalAnyCompletion(

cmd/carapace/cmd/invoke.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ func init() {
3030
invokeCmd.Flags().SetInterspersed(false)
3131

3232
carapace.Gen(invokeCmd).PositionalCompletion(
33-
carapacebin.ActionCompleters(),
33+
carapacebin.ActionCompleters(true),
3434
bridge.ActionCarapaceBin("_carapace", "export", "", "_carapace").Shift(1).
3535
Filter("macro", "style"),
3636
carapace.ActionCallback(func(c carapace.Context) carapace.Action {

cmd/carapace/cmd/list.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,6 @@ func init() {
5252
listCmd.Flags().Bool("names", false, "only list names")
5353

5454
carapace.Gen(listCmd).PositionalCompletion(
55-
carapacebin.ActionCompleters().NoSpace(),
55+
carapacebin.ActionCompleters(false).NoSpace(),
5656
)
5757
}

cmd/carapace/cmd/root.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ func init() {
207207
cmd.Flags().AddFlagSet(rootCmd.Flags())
208208
return carapace.ActionExecute(cmd)
209209
}
210-
return carapacebin.ActionCompleters()
210+
return carapacebin.ActionCompleters(true)
211211
}),
212212
)
213213

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ go 1.24.0
44

55
require (
66
github.com/carapace-sh/carapace v1.11.0
7-
github.com/carapace-sh/carapace-bridge v1.4.12-0.20251227001747-5537b050e32c
7+
github.com/carapace-sh/carapace-bridge v1.5.0
88
github.com/carapace-sh/carapace-selfupdate v0.0.10
99
github.com/carapace-sh/carapace-shlex v1.1.1
1010
github.com/carapace-sh/carapace-spec v1.5.0

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
github.com/carapace-sh/carapace v1.11.0 h1:dTUFXvIrUTLd9BGLsfDt4wCgEyPl8bJeZOFDmN7fIfo=
22
github.com/carapace-sh/carapace v1.11.0/go.mod h1:NVkuv1s8wyFvu7d98rdgYwqGKMB6GO1MEUZp5RcWri8=
3-
github.com/carapace-sh/carapace-bridge v1.4.12-0.20251227001747-5537b050e32c h1:E7PNP+XyUk4xy5ztQggT6XO+OfV6TS3GHNyn6FrpekE=
4-
github.com/carapace-sh/carapace-bridge v1.4.12-0.20251227001747-5537b050e32c/go.mod h1:kCUFSLpn06FPb7fDjR/jFc/v2WxzCLssRqPDCSSEJmY=
3+
github.com/carapace-sh/carapace-bridge v1.5.0 h1:7TaRw1o59QrKDO+7uLxupS8/IOUTOllPLicY8oe08FE=
4+
github.com/carapace-sh/carapace-bridge v1.5.0/go.mod h1:6C3kzrDWOmQM8FlK3rmTSWFi2I4M8jPCjzWJZWzBHD0=
55
github.com/carapace-sh/carapace-pflag v1.1.0 h1:uB33wch8ADjP878NadQnbZ5vyROcj/Ac+wUQKMcIrQM=
66
github.com/carapace-sh/carapace-pflag v1.1.0/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
77
github.com/carapace-sh/carapace-selfupdate v0.0.10 h1:ZvutqGwVvSj6TmI/tLcort63JD6PaOG0ia6squwbTuo=

pkg/actions/env/carapace.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ func init() {
6060
"CARAPACE_EXCLUDES": carapace.Batch(
6161
carapace.ActionCallback(func(c carapace.Context) carapace.Action {
6262
c.Setenv(env.CARAPACE_EXCLUDES, "")
63-
return carapacebin.ActionCompleters().Invoke(c).ToA()
63+
return carapacebin.ActionCompleters(false).Invoke(c).ToA() // TODO prevent/handle variants,groups?
6464
}),
6565
carapace.ActionValuesDescribed("*", "exclude all"),
6666
).ToA().UniqueList(","),

pkg/actions/tools/carapace/completer.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import (
1010
"github.com/carapace-sh/carapace/pkg/style"
1111
)
1212

13-
func ActionCompleters() carapace.Action {
13+
func ActionCompleters(unknownBridges bool) carapace.Action {
1414
return carapace.ActionCallback(func(c carapace.Context) carapace.Action {
1515
if strings.Count(c.Value, "@") > 1 || strings.Count(c.Value, "/") > 1 {
1616
return carapace.ActionValues()
@@ -24,7 +24,11 @@ func ActionCompleters() carapace.Action {
2424
case strings.Contains(c.Value, "/"):
2525
nameVariant, _, _ := strings.Cut(c.Value, "@")
2626
name, _, _ := strings.Cut(nameVariant, "/")
27-
return ActionVariants(name).Prefix(name + "/").NoSpace()
27+
28+
return carapace.Batch(
29+
bridge.ActionBridges(name).Unless(!unknownBridges),
30+
ActionVariants(name).Style(style.Carapace.KeywordPositive),
31+
).ToA().Unique().Prefix(name + "/").NoSpace()
2832

2933
default:
3034
return ActionNames().NoSpace()

0 commit comments

Comments
 (0)