{"record":{"id":"3155cf4e90d643fe","repo":"larksuite/cli","slug":"args-field-s-flag-s-duplicates-s","errorCode":null,"errorMessage":"Args field %s flag --%s duplicates %s","messagePattern":"Args field (.+?) flag --(.+?) duplicates (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"shortcuts/common/typed_compile_args.go","lineNumber":48,"sourceCode":"\t\tif !flagNamePattern.MatchString(supplement.Name) {\n\t\t\treturn nil, nil, fmt.Errorf(\"Input.Fields[%d].Name %q is not a canonical flag name\", i, supplement.Name)\n\t\t}\n\t\tif _, exists := supplements[supplement.Name]; exists {\n\t\t\treturn nil, nil, fmt.Errorf(\"Input.Fields contains duplicate flag %q\", supplement.Name)\n\t\t}\n\t\tsupplements[supplement.Name] = supplement\n\t}\n\tvar fields []compiledInputField\n\tseenGo := make(map[string]struct{})\n\tif err := collectArgFields(argsType, nil, false, &fields, seenGo, supplements); err != nil {\n\t\treturn nil, nil, err\n\t}\n\tfieldByName := make(map[string]int, len(fields))\n\tallNames := make(map[string]string, len(fields))\n\tfor i := range fields {\n\t\tfield := &fields[i]\n\t\tif previous, exists := allNames[field.name]; exists {\n\t\t\treturn nil, nil, fmt.Errorf(\"Args field %s flag --%s duplicates %s\", field.goName, field.name, previous)\n\t\t}\n\t\tallNames[field.name] = \"--\" + field.name\n\t\tfieldByName[field.name] = i\n\t\tsupplement, hasSupplement := supplements[field.name]\n\t\tif hasSupplement {\n\t\t\tif err := mergeInputSupplement(field, supplement); err != nil {\n\t\t\t\treturn nil, nil, fmt.Errorf(\"Args field %s (--%s): %w\", field.goName, field.name, err)\n\t\t\t}\n\t\t\tdelete(supplements, field.name)\n\t\t}\n\t\tif field.description == \"\" {\n\t\t\treturn nil, nil, fmt.Errorf(\"Args field %s (--%s): description is required via doc or InputField.Description\", field.goName, field.name)\n\t\t}\n\t\tif err := validateInputCLI(field); err != nil {\n\t\t\treturn nil, nil, fmt.Errorf(\"Args field %s (--%s): %w\", field.goName, field.name, err)\n\t\t}\n\t\tfor _, alias := range field.cli.Aliases {\n\t\t\tif previous, exists := allNames[alias.Name]; exists {","sourceCodeStart":30,"sourceCodeEnd":66,"githubUrl":"https://github.com/larksuite/cli/blob/7fd6ef3c07182257ce776cdc5a614e122d5bd4b3/shortcuts/common/typed_compile_args.go#L30-L66","documentation":"After collecting struct fields, compileInput records every compiled flag name (and alias) in allNames and rejects any collision. This error means a struct Args field produced a flag name that another field (or its alias) already claimed; 'previous' names what claimed it first.","triggerScenarios":"Two struct fields mapped to the same flag (e.g. via identical flag tags or nested inline structs that both yield \"name\"), or a supplement alias colliding with an earlier flag name, during compileInput.","commonSituations":"Embedding/Inlining two structs that each define a \"status\" field; a json-tag-derived flag colliding with an explicit flag tag; an alias on one field equal to another field's primary flag.","solutions":["Rename one field's flag tag so each flag is unique.","Remove the colliding alias from field.cli.Aliases.","Flatten or restructure nested inline structs that produce overlapping flag names."],"exampleFix":"// before\ntype Args struct {\n  Source string `flag:\"name\"`\n  Target string `flag:\"name\"`\n}\n// after\ntype Args struct {\n  Source string `flag:\"source-name\"`\n  Target string `flag:\"target-name\"`\n}","handlingStrategy":"validation","validationCode":"func noFlagCollisions(args any) error {\n  names := map[string]string{}\n  t := reflect.TypeOf(args)\n  for i := 0; i < t.NumField(); i++ {\n    f := t.Field(i)\n    if n, ok := f.Tag.Lookup(\"flag\"); ok {\n      if prev, dup := names[n]; dup {\n        return fmt.Errorf(\"flag --%s declared by both %s and %s\", n, prev, f.Name)\n      }\n      names[n] = f.Name\n    }\n  }\n  return nil\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep flag names unique across the whole struct, including inline/nested structs.","Check aliases do not equal other fields' primary flags.","Avoid two struct fields sharing the same json tag."],"tags":["go","flags","collision","reflection"],"backgroundTag":"duplicate-flag-definition","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"}