...

Source file src/github.com/vektah/gqlparser/v2/validator/rules/unique_argument_names.go

Documentation: github.com/vektah/gqlparser/v2/validator/rules

     1  package validator
     2  
     3  import (
     4  	"github.com/vektah/gqlparser/v2/ast"
     5  
     6  	//nolint:revive // Validator rules each use dot imports for convenience.
     7  	. "github.com/vektah/gqlparser/v2/validator"
     8  )
     9  
    10  func init() {
    11  	AddRule("UniqueArgumentNames", func(observers *Events, addError AddErrFunc) {
    12  		observers.OnField(func(walker *Walker, field *ast.Field) {
    13  			checkUniqueArgs(field.Arguments, addError)
    14  		})
    15  
    16  		observers.OnDirective(func(walker *Walker, directive *ast.Directive) {
    17  			checkUniqueArgs(directive.Arguments, addError)
    18  		})
    19  	})
    20  }
    21  
    22  func checkUniqueArgs(args ast.ArgumentList, addError AddErrFunc) {
    23  	knownArgNames := map[string]int{}
    24  
    25  	for _, arg := range args {
    26  		if knownArgNames[arg.Name] == 1 {
    27  			addError(
    28  				Message(`There can be only one argument named "%s".`, arg.Name),
    29  				At(arg.Position),
    30  			)
    31  		}
    32  
    33  		knownArgNames[arg.Name]++
    34  	}
    35  }
    36  

View as plain text