66 lines
1.9 KiB
Go
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
|
|
})
|
|
}
|