...

Source file src/github.com/vektah/gqlparser/v2/validator/rules/scalar_leafs.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("ScalarLeafs", func(observers *Events, addError AddErrFunc) {
    12  		observers.OnField(func(walker *Walker, field *ast.Field) {
    13  			if field.Definition == nil {
    14  				return
    15  			}
    16  
    17  			fieldType := walker.Schema.Types[field.Definition.Type.Name()]
    18  			if fieldType == nil {
    19  				return
    20  			}
    21  
    22  			if fieldType.IsLeafType() && len(field.SelectionSet) > 0 {
    23  				addError(
    24  					Message(`Field "%s" must not have a selection since type "%s" has no subfields.`, field.Name, fieldType.Name),
    25  					At(field.Position),
    26  				)
    27  			}
    28  
    29  			if !fieldType.IsLeafType() && len(field.SelectionSet) == 0 {
    30  				addError(
    31  					Message(`Field "%s" of type "%s" must have a selection of subfields.`, field.Name, field.Definition.Type.String()),
    32  					Suggestf(`"%s { ... }"`, field.Name),
    33  					At(field.Position),
    34  				)
    35  			}
    36  		})
    37  	})
    38  }
    39  

View as plain text