Skip to content

Commit 71f1701

Browse files
authored
refactor(core): add a filter to get deprecated ArgSpec (#1446)
1 parent d35d8e4 commit 71f1701

File tree

5 files changed

+21
-21
lines changed

5 files changed

+21
-21
lines changed

internal/core/arg_specs.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,17 @@ func (s ArgSpecs) GetPositionalArg() *ArgSpec {
2424
return positionalArg
2525
}
2626

27+
// GetDeprecated gets all fields filtered by the deprecation state.
28+
func (s ArgSpecs) GetDeprecated(deprecated bool) ArgSpecs {
29+
result := ArgSpecs{}
30+
for _, argSpec := range s {
31+
if argSpec.Deprecated == deprecated {
32+
result = append(result, argSpec)
33+
}
34+
}
35+
return result
36+
}
37+
2738
func (s ArgSpecs) GetByName(name string) *ArgSpec {
2839
for _, spec := range s {
2940
if spec.Name == name {

internal/core/autocomplete.go

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -216,12 +216,8 @@ func BuildAutoCompleteTree(commands *Commands) *AutoCompleteNode {
216216
node.Command = cmd
217217

218218
// We consider ArgSpecs as leaf in the autocomplete tree.
219-
for _, argSpec := range cmd.ArgSpecs {
220-
if argSpec.Deprecated {
221-
// Do not autocomplete deprecated arguments.
222-
continue
223-
}
224-
219+
nonDeprecatedArgs := cmd.ArgSpecs.GetDeprecated(false)
220+
for _, argSpec := range nonDeprecatedArgs {
225221
if argSpec.Positional {
226222
node.Children[positionalValueNodeID] = NewAutoCompleteArgNode(cmd, argSpec)
227223
continue

internal/core/cobra_usage_builder.go

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,7 @@ func buildUsageArgs(ctx context.Context, cmd *Command, deprecated bool) string {
2525
tw := tabwriter.NewWriter(&argsBuffer, 0, 0, 3, ' ', 0)
2626

2727
// Filter deprecated argSpecs.
28-
argSpecs := ArgSpecs(nil)
29-
for _, argSpec := range cmd.ArgSpecs {
30-
if argSpec.Deprecated == deprecated {
31-
argSpecs = append(argSpecs, argSpec)
32-
}
33-
}
28+
argSpecs := cmd.ArgSpecs.GetDeprecated(deprecated)
3429

3530
err := _buildUsageArgs(ctx, tw, argSpecs)
3631
if err != nil {

internal/core/cobra_utils.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -202,10 +202,9 @@ Relative time error: %s
202202

203203
case *args.UnknownArgError, *args.InvalidArgNameError:
204204
argNames := []string(nil)
205-
for _, argSpec := range cmd.ArgSpecs {
206-
if !argSpec.Deprecated {
207-
argNames = append(argNames, argSpec.Name)
208-
}
205+
nonDeprecatedArgs := cmd.ArgSpecs.GetDeprecated(false)
206+
for _, argSpec := range nonDeprecatedArgs {
207+
argNames = append(argNames, argSpec.Name)
209208
}
210209

211210
return &CliError{

internal/core/validate.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -114,11 +114,10 @@ func validateNoConflict(cmd *Command, rawArgs args.RawArgs) error {
114114

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

0 commit comments

Comments
 (0)