(cmd *cobra.Command, metadata map[string]jsonCommandFlagMetadata)
| 417 | } |
| 418 | |
| 419 | func jsonCommandFlags(cmd *cobra.Command, metadata map[string]jsonCommandFlagMetadata) []jsonCommandFlag { |
| 420 | flagsByName := make(map[string]jsonCommandFlag) |
| 421 | addFlags := func(flags *pflag.FlagSet, inherited bool) { |
| 422 | if flags == nil { |
| 423 | return |
| 424 | } |
| 425 | flags.VisitAll(func(flag *pflag.Flag) { |
| 426 | if flag.Hidden { |
| 427 | return |
| 428 | } |
| 429 | if _, exists := flagsByName[flag.Name]; exists { |
| 430 | return |
| 431 | } |
| 432 | flagType := "" |
| 433 | if flag.Value != nil { |
| 434 | flagType = flag.Value.Type() |
| 435 | } |
| 436 | flagMeta := metadata[flag.Name] |
| 437 | flagsByName[flag.Name] = jsonCommandFlag{ |
| 438 | Name: flag.Name, |
| 439 | Type: flagType, |
| 440 | Default: flag.DefValue, |
| 441 | Usage: flag.Usage, |
| 442 | Inherited: inherited, |
| 443 | Shorthand: flag.Shorthand, |
| 444 | EnumValues: sortedCopyStringSlice(flagMeta.EnumValues), |
| 445 | Conflicts: sortedCopyStringSlice(flagMeta.Conflicts), |
| 446 | Required: flagMeta.Required, |
| 447 | Sensitive: flagMeta.Sensitive, |
| 448 | MayPrompt: flagMeta.MayPrompt, |
| 449 | ValueKind: commandManifestFlagValueKind(flag, flagMeta), |
| 450 | } |
| 451 | }) |
| 452 | } |
| 453 | |
| 454 | addFlags(cmd.NonInheritedFlags(), false) |
| 455 | addFlags(cmd.InheritedFlags(), true) |
| 456 | |
| 457 | names := make([]string, 0, len(flagsByName)) |
| 458 | for name := range flagsByName { |
| 459 | names = append(names, name) |
| 460 | } |
| 461 | sort.Strings(names) |
| 462 | |
| 463 | result := make([]jsonCommandFlag, 0, len(names)) |
| 464 | for _, name := range names { |
| 465 | result = append(result, flagsByName[name]) |
| 466 | } |
| 467 | return result |
| 468 | } |
| 469 | |
| 470 | // CommandManifestFor returns the JSON help manifest for a command. |
| 471 | func CommandManifestFor(cmd *cobra.Command) jsonCommandManifest { |
no test coverage detected