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