buildr/internal/cmd/args.go

66 lines
1.9 KiB
Go
Raw Normal View History

package cmd
import (
"log/slog"
"strings"
"github.com/spf13/cobra"
2023-06-22 16:06:56 +00:00
"code.icb4dc0.de/buildr/buildr/internal/maps"
2023-06-22 16:06:56 +00:00
"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) {
2023-06-22 16:06:56 +00:00
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) {
2023-06-22 16:06:56 +00:00
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
})
}