{"record":{"id":"5026f7010658b9c8","repo":"larksuite/cli","slug":"duplicate-alias-s","errorCode":null,"errorMessage":"duplicate alias --%s","messagePattern":"duplicate alias --(.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"shortcuts/common/typed_compile_args.go","lineNumber":350,"sourceCode":"\t\tif kind != reflect.Slice && kind != reflect.Array && kind != reflect.Struct && kind != reflect.Map && kind != reflect.Interface {\n\t\t\treturn fmt.Errorf(\"encoding json requires array, object, oneOf, or custom JSON input\")\n\t\t}\n\t\tif isNilCapable(field.valueType) && field.nullable == nil && !field.shapeExplicit && !shapeExplicitlyNullable(field.shape) {\n\t\t\treturn fmt.Errorf(\"nil-capable encoding=json input must declare nullable or nonnullable\")\n\t\t}\n\tdefault:\n\t\treturn fmt.Errorf(\"unknown CLI encoding %q\", field.cli.Encoding)\n\t}\n\tseenAliases := make(map[string]struct{})\n\tfor i, alias := range field.cli.Aliases {\n\t\tif !aliasNamePattern.MatchString(alias.Name) {\n\t\t\treturn fmt.Errorf(\"alias[%d] name %q is invalid\", i, alias.Name)\n\t\t}\n\t\tif alias.Name == field.name {\n\t\t\treturn fmt.Errorf(\"alias[%d] duplicates canonical flag --%s\", i, field.name)\n\t\t}\n\t\tif _, duplicate := seenAliases[alias.Name]; duplicate {\n\t\t\treturn fmt.Errorf(\"duplicate alias --%s\", alias.Name)\n\t\t}\n\t\tseenAliases[alias.Name] = struct{}{}\n\t\tswitch alias.Mode {\n\t\tcase typedAliasNormalize:\n\t\t\tif alias.Conflict != \"\" {\n\t\t\t\treturn fmt.Errorf(\"normalize alias --%s cannot declare Conflict\", alias.Name)\n\t\t\t}\n\t\t\tif alias.Deprecated {\n\t\t\t\treturn fmt.Errorf(\"deprecated alias --%s must use independent mode so Cobra can emit its warning\", alias.Name)\n\t\t\t}\n\t\tcase typedAliasIndependent:\n\t\t\tswitch alias.Conflict {\n\t\t\tcase typedAliasCanonicalWins, typedAliasErrorIfBoth:\n\t\t\tcase typedAliasTrimmedEqualOrError:\n\t\t\t\tif indirectKind(field.valueType) != reflect.String {\n\t\t\t\t\treturn fmt.Errorf(\"trimmed_equal_or_error alias --%s requires string input\", alias.Name)\n\t\t\t\t}\n\t\t\tdefault:","sourceCodeStart":332,"sourceCodeEnd":368,"githubUrl":"https://github.com/larksuite/cli/blob/7fd6ef3c07182257ce776cdc5a614e122d5bd4b3/shortcuts/common/typed_compile_args.go#L332-L368","documentation":"Aliases within one field must be unique; seenAliases tracks names already registered and a repeated name aborts compilation of the input struct. (Distinct aliases across different fields are a separate concern.)","triggerScenarios":"cli tag lists the same alias twice, e.g. cli:\"alias=ids;alias=identifiers;alias=ids\"; the second occurrence hits the seenAliases map and fails.","commonSituations":"Merging alias lists from two branches or field copies; mechanically appending aliases without noticing a duplicate.","solutions":["Delete the duplicate alias entry, keeping one.","Rename one of the colliding aliases to a distinct valid name.","Grep the tag for the duplicated name to find both occurrences."],"exampleFix":"// before\ncli:\"alias=ids;alias=identifier;alias=ids\"\n// after\ncli:\"alias=ids;alias=identifier\"","handlingStrategy":"validation","validationCode":"func noDuplicateAliases(aliases []string) error {\n\tseen := map[string]bool{}\n\tfor _, a := range aliases {\n\t\tif seen[a] { return fmt.Errorf(\"duplicate alias --%s\", a) }\n\t\tseen[a] = true\n\t}\n\treturn nil\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep alias lists short and manually deduplicated.","When merging branches, diff cli tags for colliding aliases.","Add a lint/test that parses all cli tags and rejects duplicate alias entries."],"tags":["cli","alias","duplicate-flag","authoring-time"],"backgroundTag":"invalid-cli-tag-encoding","analyzedSha":"7fd6ef3c07182257ce776cdc5a614e122d5bd4b3","analyzedAt":"2026-09-04T21:17:44.649Z","contentChangedAt":"2026-09-04T21:17:44.649Z","schemaVersion":2},"datasetVersion":"2026-09-12T02:17:10.037Z"}