Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions internal/core/arg_specs.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,17 @@ func (s ArgSpecs) GetPositionalArg() *ArgSpec {
return positionalArg
}

// GetDeprecated gets all fields filtered by the deprecation state.
func (s ArgSpecs) GetDeprecated(deprecated bool) ArgSpecs {
result := ArgSpecs{}
for _, argSpec := range s {
if argSpec.Deprecated == deprecated {
result = append(result, argSpec)
}
}
return result
}

func (s ArgSpecs) GetByName(name string) *ArgSpec {
for _, spec := range s {
if spec.Name == name {
Expand Down
8 changes: 2 additions & 6 deletions internal/core/autocomplete.go
Original file line number Diff line number Diff line change
Expand Up @@ -216,12 +216,8 @@ func BuildAutoCompleteTree(commands *Commands) *AutoCompleteNode {
node.Command = cmd

// We consider ArgSpecs as leaf in the autocomplete tree.
for _, argSpec := range cmd.ArgSpecs {
if argSpec.Deprecated {
// Do not autocomplete deprecated arguments.
continue
}

nonDeprecatedArgs := cmd.ArgSpecs.GetDeprecated(false)
for _, argSpec := range nonDeprecatedArgs {
if argSpec.Positional {
node.Children[positionalValueNodeID] = NewAutoCompleteArgNode(cmd, argSpec)
continue
Expand Down
7 changes: 1 addition & 6 deletions internal/core/cobra_usage_builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,7 @@ func buildUsageArgs(ctx context.Context, cmd *Command, deprecated bool) string {
tw := tabwriter.NewWriter(&argsBuffer, 0, 0, 3, ' ', 0)

// Filter deprecated argSpecs.
argSpecs := ArgSpecs(nil)
for _, argSpec := range cmd.ArgSpecs {
if argSpec.Deprecated == deprecated {
argSpecs = append(argSpecs, argSpec)
}
}
argSpecs := cmd.ArgSpecs.GetDeprecated(deprecated)

err := _buildUsageArgs(ctx, tw, argSpecs)
if err != nil {
Expand Down
7 changes: 3 additions & 4 deletions internal/core/cobra_utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -202,10 +202,9 @@ Relative time error: %s

case *args.UnknownArgError, *args.InvalidArgNameError:
argNames := []string(nil)
for _, argSpec := range cmd.ArgSpecs {
if !argSpec.Deprecated {
argNames = append(argNames, argSpec.Name)
}
nonDeprecatedArgs := cmd.ArgSpecs.GetDeprecated(false)
for _, argSpec := range nonDeprecatedArgs {
argNames = append(argNames, argSpec.Name)
}

return &CliError{
Expand Down
9 changes: 4 additions & 5 deletions internal/core/validate.go
Original file line number Diff line number Diff line change
Expand Up @@ -114,11 +114,10 @@ func validateNoConflict(cmd *Command, rawArgs args.RawArgs) error {

// validateDeprecated print a warning message if a deprecated argument is used
func validateDeprecated(ctx context.Context, cmd *Command) {
for _, argSpec := range cmd.ArgSpecs {
if argSpec.Deprecated {
helpCmd := cmd.GetCommandLine(extractMeta(ctx).BinaryName) + " --help"
ExtractLogger(ctx).Warningf("The argument '%s' is deprecated, more info with: %s\n", argSpec.Name, helpCmd)
}
deprecatedArgs := cmd.ArgSpecs.GetDeprecated(true)
for _, argSpec := range deprecatedArgs {
helpCmd := cmd.GetCommandLine(extractMeta(ctx).BinaryName) + " --help"
ExtractLogger(ctx).Warningf("The argument '%s' is deprecated, more info with: %s\n", argSpec.Name, helpCmd)
}
}

Expand Down