...
1 package validator
2
3 import (
4 "github.com/vektah/gqlparser/v2/ast"
5
6
7 . "github.com/vektah/gqlparser/v2/validator"
8 )
9
10 func init() {
11 AddRule("KnownArgumentNames", func(observers *Events, addError AddErrFunc) {
12
13 observers.OnField(func(walker *Walker, field *ast.Field) {
14 if field.Definition == nil || field.ObjectDefinition == nil {
15 return
16 }
17 for _, arg := range field.Arguments {
18 def := field.Definition.Arguments.ForName(arg.Name)
19 if def != nil {
20 continue
21 }
22
23 var suggestions []string
24 for _, argDef := range field.Definition.Arguments {
25 suggestions = append(suggestions, argDef.Name)
26 }
27
28 addError(
29 Message(`Unknown argument "%s" on field "%s.%s".`, arg.Name, field.ObjectDefinition.Name, field.Name),
30 SuggestListQuoted("Did you mean", arg.Name, suggestions),
31 At(field.Position),
32 )
33 }
34 })
35
36 observers.OnDirective(func(walker *Walker, directive *ast.Directive) {
37 if directive.Definition == nil {
38 return
39 }
40 for _, arg := range directive.Arguments {
41 def := directive.Definition.Arguments.ForName(arg.Name)
42 if def != nil {
43 continue
44 }
45
46 var suggestions []string
47 for _, argDef := range directive.Definition.Arguments {
48 suggestions = append(suggestions, argDef.Name)
49 }
50
51 addError(
52 Message(`Unknown argument "%s" on directive "@%s".`, arg.Name, directive.Name),
53 SuggestListQuoted("Did you mean", arg.Name, suggestions),
54 At(directive.Position),
55 )
56 }
57 })
58 })
59 }
60
View as plain text