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 }) }