buildr/internal/cmd/args.go
Peter 786578bc6f
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone/pr Build is failing
feat: adapt new wire format
update to Go 1.21
2023-08-15 21:47:19 +02:00

66 lines
1.9 KiB
Go

package cmd
import (
"log/slog"
"strings"
"github.com/spf13/cobra"
"code.icb4dc0.de/buildr/buildr/internal/maps"
"code.icb4dc0.de/buildr/buildr/modules"
)
func ModulesArgsProviderFor(
initializer LevelInitializer,
registryAcc TypeRegistryAccessor,
cat modules.Category,
) KnownModulesArgProvider {
return KnownModulesArgProviderFunc(func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
if err := initializer.InitAt(cmd.Context(), InitLevelBasic); err != nil {
slog.Warn("Failed to parse config", slog.String("err", err.Error()))
return nil, cobra.ShellCompDirectiveNoFileComp
}
if len(args) != 0 {
return nil, cobra.ShellCompDirectiveNoFileComp
}
knownModules := registryAcc.TypeRegistry().Inventory()[cat]
filtered := make([]string, 0, len(knownModules))
toComplete = strings.ToLower(toComplete)
for i := range knownModules {
if strings.HasPrefix(strings.ToLower(knownModules[i]), toComplete) {
filtered = append(filtered, knownModules[i])
}
}
return filtered, cobra.ShellCompDirectiveNoFileComp
})
}
func TasksArgsProviderFor(initializer LevelInitializer, repoAcc ModuleRepositoryAccessor, cat modules.Category) KnownTasksArgProvider {
return KnownTasksArgProviderFunc(func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
if err := initializer.InitAt(cmd.Context(), InitLevelBasic); err != nil {
slog.Warn("Failed to parse config", slog.String("err", err.Error()))
return nil, cobra.ShellCompDirectiveNoFileComp
}
if len(args) != 0 {
return nil, cobra.ShellCompDirectiveNoFileComp
}
tasks := maps.Keys(repoAcc.Repository().ModulesByCategory(cat))
filtered := make([]string, 0, len(tasks))
for i := range tasks {
if strings.HasPrefix(tasks[i], toComplete) {
filtered = append(filtered, tasks[i])
}
}
return filtered, cobra.ShellCompDirectiveNoFileComp
})
}