From 8cdaf93f26006d5fabf02baed8d642c8840c51c3 Mon Sep 17 00:00:00 2001 From: Robin Olsen Date: Sat, 28 Feb 2026 10:44:41 +0100 Subject: [PATCH] add completions to survey --- cmd/survey/main.go | 15 +++++++-------- internal/commands/issues/completion.go | 7 ------- internal/commands/issues/create.go | 7 ++++--- internal/commands/issues/list.go | 7 ++++--- internal/commands/issues/update.go | 7 ++++--- internal/commands/survey/start.go | 8 +++++++- internal/commands/util.go | 10 ++++++++++ internal/service/interfaces.go | 21 +++++++++++---------- 8 files changed, 47 insertions(+), 35 deletions(-) create mode 100644 internal/commands/util.go diff --git a/cmd/survey/main.go b/cmd/survey/main.go index 48283da..e8f5f6e 100644 --- a/cmd/survey/main.go +++ b/cmd/survey/main.go @@ -36,14 +36,6 @@ func init() { task.RegisterInterface("web", web.NewWeb()) task.RegisterInterface("repl", repl.NewRepl()) - surveyCmd.StartCmd.RunE = runStartCmd - surveyCmd.RootCmd.AddCommand(surveyCmd.StartCmd) - surveyCmd.RootCmd.AddCommand(surveyCmd.SubmitCmd) - surveyCmd.RootCmd.AddCommand(surveyCmd.StatusCmd) - surveyCmd.RootCmd.AddCommand(surveyCmd.ListTasksCmd) - surveyCmd.RootCmd.AddCommand(surveyCmd.ListInterfacesCmd) - surveyCmd.RootCmd.AddCommand(issuesCmd.RootCmd) - task.RegisterTask("create_issue", func(app *service.App) task.Tasker { return tasks.NewCreateIssueTask(app) }) @@ -81,4 +73,11 @@ func init() { return tasks.NewBacklogRefinementTask(app) }) + surveyCmd.StartCmd.RunE = runStartCmd + surveyCmd.RootCmd.AddCommand(surveyCmd.StartCmd) + surveyCmd.RootCmd.AddCommand(surveyCmd.SubmitCmd) + surveyCmd.RootCmd.AddCommand(surveyCmd.StatusCmd) + surveyCmd.RootCmd.AddCommand(surveyCmd.ListTasksCmd) + surveyCmd.RootCmd.AddCommand(surveyCmd.ListInterfacesCmd) + surveyCmd.RootCmd.AddCommand(issuesCmd.RootCmd) } diff --git a/internal/commands/issues/completion.go b/internal/commands/issues/completion.go index 7330a28..c5075ea 100644 --- a/internal/commands/issues/completion.go +++ b/internal/commands/issues/completion.go @@ -15,13 +15,6 @@ var ( priorityRange = []string{"0", "1", "2", "3", "4"} ) -// completionFunc returns a function that provides shell completion for the given options. -func completionFunc(options []string) func(*cobra.Command, []string, string) ([]string, cobra.ShellCompDirective) { - return func(_ *cobra.Command, _ []string, _ string) ([]string, cobra.ShellCompDirective) { - return options, cobra.ShellCompDirectiveDefault - } -} - // completeIssues provides shell completion for issue IDs and titles. func completeIssues(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { issues, _ := GetIssueCompletions(cmd.Context(), toComplete) diff --git a/internal/commands/issues/create.go b/internal/commands/issues/create.go index 17a9864..df51434 100644 --- a/internal/commands/issues/create.go +++ b/internal/commands/issues/create.go @@ -4,6 +4,7 @@ import ( "fmt" "strings" + "github.com/LazyBachelor/LazyPM/internal/commands" "github.com/LazyBachelor/LazyPM/internal/models" "github.com/charmbracelet/huh" @@ -111,7 +112,7 @@ func init() { CreateCmd.Flags().StringVarP(&createFlags.issueType, "type", "t", "task", "Issue type(bug, feature, task)") CreateCmd.Flags().IntVarP(&createFlags.priority, "priority", "p", 0, "Issue priority(0-4)") - CreateCmd.RegisterFlagCompletionFunc("type", completionFunc(typeOptions)) - CreateCmd.RegisterFlagCompletionFunc("status", completionFunc(statusOptions)) - CreateCmd.RegisterFlagCompletionFunc("priority", completionFunc(priorityRange)) + CreateCmd.RegisterFlagCompletionFunc("type", commands.CompletionFunc(typeOptions)) + CreateCmd.RegisterFlagCompletionFunc("status", commands.CompletionFunc(statusOptions)) + CreateCmd.RegisterFlagCompletionFunc("priority", commands.CompletionFunc(priorityRange)) } diff --git a/internal/commands/issues/list.go b/internal/commands/issues/list.go index 79f55e0..0872bf8 100644 --- a/internal/commands/issues/list.go +++ b/internal/commands/issues/list.go @@ -3,6 +3,7 @@ package issuesCmd import ( "strings" + "github.com/LazyBachelor/LazyPM/internal/commands" "github.com/LazyBachelor/LazyPM/internal/models" "github.com/spf13/cobra" ) @@ -78,7 +79,7 @@ func init() { ListCmd.Flags().IntVarP(&listFlags.limit, "limit", "l", 25, "Limit the number of issues returned") - ListCmd.RegisterFlagCompletionFunc("status", completionFunc(statusOptions)) - ListCmd.RegisterFlagCompletionFunc("type", completionFunc(typeOptions)) - ListCmd.RegisterFlagCompletionFunc("priority", completionFunc(priorityRange)) + ListCmd.RegisterFlagCompletionFunc("status", commands.CompletionFunc(statusOptions)) + ListCmd.RegisterFlagCompletionFunc("type", commands.CompletionFunc(typeOptions)) + ListCmd.RegisterFlagCompletionFunc("priority", commands.CompletionFunc(priorityRange)) } diff --git a/internal/commands/issues/update.go b/internal/commands/issues/update.go index 92b87a8..b28e544 100644 --- a/internal/commands/issues/update.go +++ b/internal/commands/issues/update.go @@ -3,6 +3,7 @@ package issuesCmd import ( "fmt" + "github.com/LazyBachelor/LazyPM/internal/commands" "github.com/LazyBachelor/LazyPM/internal/models" "github.com/spf13/cobra" ) @@ -61,9 +62,9 @@ func init() { UpdateCmd.Flags().StringVarP(&updateFlags.issueType, "type", "t", "", "New issue type(bug, feature, task)") UpdateCmd.Flags().IntVarP(&updateFlags.priority, "priority", "p", 0, "New issue priority(0-5)") - UpdateCmd.RegisterFlagCompletionFunc("type", completionFunc(typeOptions)) - UpdateCmd.RegisterFlagCompletionFunc("status", completionFunc(statusOptions)) - UpdateCmd.RegisterFlagCompletionFunc("priority", completionFunc(priorityRange)) + UpdateCmd.RegisterFlagCompletionFunc("type", commands.CompletionFunc(typeOptions)) + UpdateCmd.RegisterFlagCompletionFunc("status", commands.CompletionFunc(statusOptions)) + UpdateCmd.RegisterFlagCompletionFunc("priority", commands.CompletionFunc(priorityRange)) } func getUpdateValues(cmd *cobra.Command) (map[string]interface{}, error) { diff --git a/internal/commands/survey/start.go b/internal/commands/survey/start.go index 1a1de58..8541017 100644 --- a/internal/commands/survey/start.go +++ b/internal/commands/survey/start.go @@ -1,6 +1,10 @@ package surveyCmd -import "github.com/spf13/cobra" +import ( + "github.com/LazyBachelor/LazyPM/internal/commands" + "github.com/LazyBachelor/LazyPM/pkg/task" + "github.com/spf13/cobra" +) var ( InterfaceType string @@ -16,4 +20,6 @@ var StartCmd = &cobra.Command{ func init() { StartCmd.Flags().StringVarP(&Task, "task", "t", "", "Specify task.") StartCmd.Flags().StringVarP(&InterfaceType, "interface", "i", "", "Specify interface.") + StartCmd.RegisterFlagCompletionFunc("task", commands.CompletionFunc(task.ListTasks())) + StartCmd.RegisterFlagCompletionFunc("interface", commands.CompletionFunc(task.ListInterfaces())) } diff --git a/internal/commands/util.go b/internal/commands/util.go new file mode 100644 index 0000000..033a022 --- /dev/null +++ b/internal/commands/util.go @@ -0,0 +1,10 @@ +package commands + +import "github.com/spf13/cobra" + +// completionFunc returns a function that provides shell completion for the given options. +func CompletionFunc(options []string) func(*cobra.Command, []string, string) ([]string, cobra.ShellCompDirective) { + return func(_ *cobra.Command, _ []string, _ string) ([]string, cobra.ShellCompDirective) { + return options, cobra.ShellCompDirectiveDefault + } +} diff --git a/internal/service/interfaces.go b/internal/service/interfaces.go index 6275d27..31c0648 100644 --- a/internal/service/interfaces.go +++ b/internal/service/interfaces.go @@ -8,17 +8,13 @@ import ( "github.com/steveyegge/beads" ) -// ValidationFeedback holds task validation status -type ValidationFeedback struct { - Success bool - Message string -} - type App struct { - Config Config - Issues IssueService - Stats StatsService - Logger *slog.Logger + Config Config + Issues IssueService + Stats StatsService + + Logger *slog.Logger + CurrentFeedback *ValidationFeedback } @@ -33,3 +29,8 @@ type StatsService interface { Save(ctx context.Context) error GetStatistics() (models.Statistics, error) } + +type ValidationFeedback struct { + Success bool + Message string +}