From 1ee2888355623a6eb47961b8b4d15e600ebdb770 Mon Sep 17 00:00:00 2001 From: Amolith Date: Sun, 21 Dec 2025 19:18:22 -0700 Subject: [PATCH] refactor: let Cobra handle error display Remove redundant ui.Error calls outside cmd/init/. Errors are now returned directly to Cobra for consistent display. ui.Success is still used for explicit success confirmations. Assisted-by: Claude Sonnet 4 via Crush --- cmd/area/list.go | 2 -- cmd/area/show.go | 4 ---- cmd/goal/list.go | 2 -- cmd/goal/show.go | 21 ++++++--------------- cmd/ping.go | 9 --------- cmd/task/add.go | 12 ------------ cmd/task/list.go | 6 ------ cmd/task/show.go | 2 -- 8 files changed, 6 insertions(+), 52 deletions(-) diff --git a/cmd/area/list.go b/cmd/area/list.go index b25a5b3d341c265b13cc27fe16a0f856ab5b0c5b..cce15bb012c079c051196aa2d2b968d25f52ffa8 100644 --- a/cmd/area/list.go +++ b/cmd/area/list.go @@ -33,8 +33,6 @@ func init() { func runList(cmd *cobra.Command, _ []string) error { cfg, err := config.Load() if err != nil { - fmt.Fprintln(cmd.ErrOrStderr(), ui.Error.Render("Config not found; run 'lune init' to configure areas")) - return err } diff --git a/cmd/area/show.go b/cmd/area/show.go index 627d80b7230aa5e97ca1f2e98ea7ca3d4152a073..538e17b9cdf9a47fb53c6d448535042c03b3e21e 100644 --- a/cmd/area/show.go +++ b/cmd/area/show.go @@ -31,15 +31,11 @@ func runShow(cmd *cobra.Command, args []string) error { cfg, err := config.Load() if err != nil { - fmt.Fprintln(cmd.ErrOrStderr(), ui.Error.Render("Config not found; run 'lune init' to configure areas")) - return err } area := cfg.AreaByKey(areaKey) if area == nil { - fmt.Fprintln(cmd.ErrOrStderr(), ui.Error.Render("Unknown area: "+areaKey)) - return fmt.Errorf("%w: %s", ErrUnknownArea, areaKey) } diff --git a/cmd/goal/list.go b/cmd/goal/list.go index 67843b5cae2d8b17ba6232835fe54a8ad8cabbe4..29a2f19cd8b354fbe7bf59f82e7b24ab0a262dbd 100644 --- a/cmd/goal/list.go +++ b/cmd/goal/list.go @@ -38,8 +38,6 @@ func init() { func runList(cmd *cobra.Command, _ []string) error { cfg, err := config.Load() if err != nil { - fmt.Fprintln(cmd.ErrOrStderr(), ui.Error.Render("Config not found; run 'lune init' to configure areas")) - return err } diff --git a/cmd/goal/show.go b/cmd/goal/show.go index 400bec54433664443e881ec1d8c1cf80a5994d10..95fa8af16709e9020c787c1ec1c336297fd7d559 100644 --- a/cmd/goal/show.go +++ b/cmd/goal/show.go @@ -44,12 +44,10 @@ func runShow(cmd *cobra.Command, args []string) error { cfg, err := config.Load() if err != nil { - fmt.Fprintln(cmd.ErrOrStderr(), ui.Error.Render("Config not found; run 'lune init' to configure areas")) - return err } - match, err := resolveGoal(cmd, cfg, goalKey, areaKey) + match, err := resolveGoal(cfg, goalKey, areaKey) if err != nil { return err } @@ -64,19 +62,15 @@ func runShow(cmd *cobra.Command, args []string) error { return printGoalDetails(cmd, match.Goal, match.Area, counter) } -func resolveGoal(cmd *cobra.Command, cfg *config.Config, goalKey, areaKey string) (*config.GoalMatch, error) { +func resolveGoal(cfg *config.Config, goalKey, areaKey string) (*config.GoalMatch, error) { if areaKey != "" { area := cfg.AreaByKey(areaKey) if area == nil { - fmt.Fprintln(cmd.ErrOrStderr(), ui.Error.Render("Unknown area: "+areaKey)) - return nil, fmt.Errorf("%w: %s", ErrUnknownArea, areaKey) } goal := area.GoalByKey(goalKey) if goal == nil { - fmt.Fprintln(cmd.ErrOrStderr(), ui.Error.Render("Unknown goal: "+goalKey)) - return nil, fmt.Errorf("%w: %s", ErrUnknownGoal, goalKey) } @@ -87,8 +81,6 @@ func resolveGoal(cmd *cobra.Command, cfg *config.Config, goalKey, areaKey string switch len(matches) { case 0: - fmt.Fprintln(cmd.ErrOrStderr(), ui.Error.Render("Unknown goal: "+goalKey)) - return nil, fmt.Errorf("%w: %s", ErrUnknownGoal, goalKey) case 1: @@ -100,11 +92,10 @@ func resolveGoal(cmd *cobra.Command, cfg *config.Config, goalKey, areaKey string areas[i] = m.Area.Key } - fmt.Fprintf(cmd.ErrOrStderr(), "%s\n", - ui.Error.Render("Goal '"+goalKey+"' exists in multiple areas: "+strings.Join(areas, ", "))) - fmt.Fprintln(cmd.ErrOrStderr(), "Use --area to specify which one") - - return nil, fmt.Errorf("%w: %s exists in %s", ErrAmbiguousGoal, goalKey, strings.Join(areas, ", ")) + return nil, fmt.Errorf( + "%w: %s exists in %s; use --area to specify", + ErrAmbiguousGoal, goalKey, strings.Join(areas, ", "), + ) } } diff --git a/cmd/ping.go b/cmd/ping.go index b81cba2b33389e777e315cb2c98f4058947f1f80..a96bf05e7004b7dada3a9055e45fe1d61dad879b 100644 --- a/cmd/ping.go +++ b/cmd/ping.go @@ -5,7 +5,6 @@ package cmd import ( - "errors" "fmt" "git.secluded.site/lune/internal/client" @@ -19,19 +18,11 @@ var pingCmd = &cobra.Command{ RunE: func(cmd *cobra.Command, _ []string) error { c, err := client.New() if err != nil { - if errors.Is(err, client.ErrNoToken) { - fmt.Fprintln(cmd.ErrOrStderr(), ui.Error.Render("No access token configured; run 'lune init'")) - - return err - } - return err } resp, err := c.Ping(cmd.Context()) if err != nil { - fmt.Fprintln(cmd.ErrOrStderr(), ui.Error.Render("Authentication failed")) - return err } diff --git a/cmd/task/add.go b/cmd/task/add.go index fc104fdf10aeac137575166b86ff749f45b09f78..f933134a6d239704dc5b0fbc34eb622ba7a2965f 100644 --- a/cmd/task/add.go +++ b/cmd/task/add.go @@ -82,8 +82,6 @@ func runAdd(cmd *cobra.Command, args []string) error { task, err := builder.Create(cmd.Context()) if err != nil { - fmt.Fprintln(cmd.ErrOrStderr(), ui.Error.Render("Failed to create task")) - return err } @@ -125,17 +123,11 @@ func applyAreaAndGoal(cmd *cobra.Command, builder *lunatask.TaskBuilder) error { cfg, err := config.Load() if err != nil { - if errors.Is(err, config.ErrNotFound) { - fmt.Fprintln(cmd.ErrOrStderr(), ui.Error.Render("Config not found; run 'lune init' to configure areas")) - } - return err } area := cfg.AreaByKey(areaKey) if area == nil { - fmt.Fprintln(cmd.ErrOrStderr(), ui.Error.Render("Unknown area: "+areaKey)) - return fmt.Errorf("%w: %s", ErrUnknownArea, areaKey) } @@ -147,8 +139,6 @@ func applyAreaAndGoal(cmd *cobra.Command, builder *lunatask.TaskBuilder) error { goal := area.GoalByKey(goalKey) if goal == nil { - fmt.Fprintln(cmd.ErrOrStderr(), ui.Error.Render("Unknown goal: "+goalKey)) - return fmt.Errorf("%w: %s", ErrUnknownGoal, goalKey) } @@ -210,8 +200,6 @@ func applySchedule(cmd *cobra.Command, builder *lunatask.TaskBuilder) error { date, err := lunatask.ParseDate(schedule) if err != nil { - fmt.Fprintln(cmd.ErrOrStderr(), ui.Error.Render("Invalid date format: "+schedule)) - return fmt.Errorf("parsing schedule date: %w", err) } diff --git a/cmd/task/list.go b/cmd/task/list.go index 14b3f4beb25891e955544d365e5e53c102fc4138..f09347f6efa409cd3a13e11b0cc277e79d2d5b22 100644 --- a/cmd/task/list.go +++ b/cmd/task/list.go @@ -56,8 +56,6 @@ func runList(cmd *cobra.Command, _ []string) error { tasks, err := apiClient.ListTasks(cmd.Context(), nil) if err != nil { - fmt.Fprintln(cmd.ErrOrStderr(), ui.Error.Render("Failed to list tasks")) - return err } @@ -112,8 +110,6 @@ func resolveAreaFilter(cmd *cobra.Command) (string, error) { // Config not required if no area flag and we just skip default if errors.Is(err, config.ErrNotFound) { if areaKey != "" { - fmt.Fprintln(cmd.ErrOrStderr(), ui.Error.Render("Config not found; run 'lune init' to configure areas")) - return "", err } @@ -134,8 +130,6 @@ func resolveAreaFilter(cmd *cobra.Command) (string, error) { area := cfg.AreaByKey(areaKey) if area == nil { - fmt.Fprintln(cmd.ErrOrStderr(), ui.Error.Render("Unknown area: "+areaKey)) - return "", fmt.Errorf("%w: %s", ErrUnknownArea, areaKey) } diff --git a/cmd/task/show.go b/cmd/task/show.go index f8f3f46c06bfb3ecd7b3a0ce1907ddfd07116802..d7b7fc0397d5bb1e4db7fe9a4d7fcc50f2dac1aa 100644 --- a/cmd/task/show.go +++ b/cmd/task/show.go @@ -48,8 +48,6 @@ func runShow(cmd *cobra.Command, args []string) error { task, err := apiClient.GetTask(cmd.Context(), id) if err != nil { - fmt.Fprintln(cmd.ErrOrStderr(), ui.Error.Render("Failed to get task")) - return err }