Skip to content

Commit 437db19

Browse files
committed
refactor: move fields into CmdOutputOpts, warn on plaintext --fields
Remove the standalone `fields []string` positional parameter from CmdOutput and pass fields exclusively through CmdOutputOpts.Fields. This eliminates the dual-path API and simplifies every call site. Also emit a stderr warning when --fields is used with plaintext output, since the flag is silently ignored in that mode. Made-with: Cursor
1 parent e2d388c commit 437db19

7 files changed

Lines changed: 76 additions & 66 deletions

File tree

cmd/config/config.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ func outputSetAction(newFields []string) (string, error) {
287287
Items: newFields,
288288
}
289289
fieldsJSON, _ := json.Marshal(fields)
290-
output, err := output.CmdOutput("update", viper.GetString(cliflags.OutputFlag), fieldsJSON, nil)
290+
output, err := output.CmdOutput("update", viper.GetString(cliflags.OutputFlag), fieldsJSON)
291291
if err != nil {
292292
return "", errs.NewError(err.Error())
293293
}
@@ -302,7 +302,7 @@ func outputUnsetAction(newField string) (string, error) {
302302
Key: newField,
303303
}
304304
fieldJSON, _ := json.Marshal(field)
305-
output, err := output.CmdOutput("delete", viper.GetString(cliflags.OutputFlag), fieldJSON, nil)
305+
output, err := output.CmdOutput("delete", viper.GetString(cliflags.OutputFlag), fieldJSON)
306306
if err != nil {
307307
return "", errs.NewError(err.Error())
308308
}

cmd/flags/archive.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,8 @@ func makeArchiveRequest(client resources.Client) func(*cobra.Command, []string)
5151
return output.NewCmdOutputError(err, cliflags.GetOutputKind(cmd))
5252
}
5353

54-
output, err := output.CmdOutput("update", cliflags.GetOutputKind(cmd), res, cliflags.GetFields(cmd), output.CmdOutputOpts{
54+
output, err := output.CmdOutput("update", cliflags.GetOutputKind(cmd), res, output.CmdOutputOpts{
55+
Fields: cliflags.GetFields(cmd),
5556
ResourceName: "flags",
5657
})
5758
if err != nil {

cmd/flags/toggle.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,8 @@ func runE(client resources.Client) func(*cobra.Command, []string) error {
7373
return output.NewCmdOutputError(err, cliflags.GetOutputKind(cmd))
7474
}
7575

76-
output, err := output.CmdOutput("update", cliflags.GetOutputKind(cmd), res, cliflags.GetFields(cmd), output.CmdOutputOpts{
76+
output, err := output.CmdOutput("update", cliflags.GetOutputKind(cmd), res, output.CmdOutputOpts{
77+
Fields: cliflags.GetFields(cmd),
7778
ResourceName: "flags",
7879
})
7980
if err != nil {

cmd/members/invite.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,8 @@ func runE(client resources.Client) func(*cobra.Command, []string) error {
6363
return output.NewCmdOutputError(err, cliflags.GetOutputKind(cmd))
6464
}
6565

66-
output, err := output.CmdOutput("update", cliflags.GetOutputKind(cmd), res, cliflags.GetFields(cmd), output.CmdOutputOpts{
66+
output, err := output.CmdOutput("update", cliflags.GetOutputKind(cmd), res, output.CmdOutputOpts{
67+
Fields: cliflags.GetFields(cmd),
6768
ResourceName: "members",
6869
})
6970
if err != nil {

cmd/resources/resources.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -349,7 +349,8 @@ func (op *OperationCmd) makeRequest(cmd *cobra.Command, args []string) error {
349349
res = []byte(fmt.Sprintf(`{"key": %q}`, urlParms[len(urlParms)-1]))
350350
}
351351

352-
output, err := output.CmdOutput(cmd.Use, cliflags.GetOutputKind(cmd), res, cliflags.GetFields(cmd), output.CmdOutputOpts{
352+
output, err := output.CmdOutput(cmd.Use, cliflags.GetOutputKind(cmd), res, output.CmdOutputOpts{
353+
Fields: cliflags.GetFields(cmd),
353354
ResourceName: cmd.Parent().Name(),
354355
})
355356
if err != nil {

internal/output/resource_output.go

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"fmt"
77
"math"
88
"net/url"
9+
"os"
910
"strconv"
1011
"strings"
1112

@@ -19,16 +20,17 @@ type CmdOutputOpts struct {
1920
}
2021

2122
// CmdOutput returns a response from a resource action formatted based on the output flag along with
22-
// an optional message based on the action. When fields is non-empty and outputKind is "json",
23-
// only the specified top-level fields are included in the output. When resourceName matches a
23+
// an optional message based on the action. When opts.Fields is non-empty and outputKind is "json",
24+
// only the specified top-level fields are included in the output. When opts.ResourceName matches a
2425
// registered resource, list output uses table formatting and singular output uses key-value pairs.
25-
func CmdOutput(action string, outputKind string, input []byte, fields []string, opts ...CmdOutputOpts) (string, error) {
26-
var resourceName string
26+
func CmdOutput(action string, outputKind string, input []byte, opts ...CmdOutputOpts) (string, error) {
27+
var (
28+
fields []string
29+
resourceName string
30+
)
2731
if len(opts) > 0 {
2832
resourceName = opts[0].ResourceName
29-
if len(fields) == 0 {
30-
fields = opts[0].Fields
31-
}
33+
fields = opts[0].Fields
3234
}
3335

3436
if outputKind == "json" {
@@ -42,6 +44,10 @@ func CmdOutput(action string, outputKind string, input []byte, fields []string,
4244
return string(input), nil
4345
}
4446

47+
if len(fields) > 0 {
48+
fmt.Fprintln(os.Stderr, "note: --fields is only supported with JSON output; ignoring")
49+
}
50+
4551
var (
4652
maybeResource resource
4753
maybeResources resources

0 commit comments

Comments
 (0)