diff --git a/cmd/arduino-app-cli/brick/details.go b/cmd/arduino-app-cli/brick/details.go index a1ba72f1..e898c9a0 100644 --- a/cmd/arduino-app-cli/brick/details.go +++ b/cmd/arduino-app-cli/brick/details.go @@ -22,6 +22,7 @@ import ( "github.com/spf13/cobra" + "github.com/arduino/arduino-app-cli/cmd/arduino-app-cli/completion" "github.com/arduino/arduino-app-cli/cmd/arduino-app-cli/internal/servicelocator" "github.com/arduino/arduino-app-cli/cmd/feedback" "github.com/arduino/arduino-app-cli/internal/orchestrator/bricks" @@ -36,6 +37,7 @@ func newBricksDetailsCmd(cfg config.Configuration) *cobra.Command { Run: func(cmd *cobra.Command, args []string) { bricksDetailsHandler(args[0], cfg) }, + ValidArgsFunction: completion.BrickIDs(), } } diff --git a/cmd/arduino-app-cli/completion/completion.go b/cmd/arduino-app-cli/completion/completion.go index 418f9a3e..ae222201 100644 --- a/cmd/arduino-app-cli/completion/completion.go +++ b/cmd/arduino-app-cli/completion/completion.go @@ -24,6 +24,7 @@ import ( "github.com/arduino/arduino-app-cli/cmd/arduino-app-cli/internal/servicelocator" "github.com/arduino/arduino-app-cli/cmd/feedback" "github.com/arduino/arduino-app-cli/internal/orchestrator" + "github.com/arduino/arduino-app-cli/internal/orchestrator/bricks" "github.com/arduino/arduino-app-cli/internal/orchestrator/config" ) @@ -97,3 +98,24 @@ func ApplicationNamesWithFilterFunc(cfg config.Configuration, filter func(apps o return res, cobra.ShellCompDirectiveNoFileComp } } + +func BrickIDs() cobra.CompletionFunc { + return BrickIDsWithFilterFunc(func(_ bricks.BrickListItem) bool { return true }) +} + +func BrickIDsWithFilterFunc(filter func(apps bricks.BrickListItem) bool) cobra.CompletionFunc { + return func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { + brickList, err := servicelocator.GetBrickService().List() + if err != nil { + return nil, cobra.ShellCompDirectiveError + } + + var res []string + for _, brick := range brickList.Bricks { + if filter(brick) { + res = append(res, brick.ID) + } + } + return res, cobra.ShellCompDirectiveNoFileComp + } +}