1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
package validator
import (
"github.com/vektah/gqlparser/v2/ast"
//nolint:revive // Validator rules each use dot imports for convenience.
. "github.com/vektah/gqlparser/v2/validator"
)
func init() {
AddRule("KnownDirectives", func(observers *Events, addError AddErrFunc) {
type mayNotBeUsedDirective struct {
Name string
Line int
Column int
}
seen := map[mayNotBeUsedDirective]bool{}
observers.OnDirective(func(walker *Walker, directive *ast.Directive) {
if directive.Definition == nil {
addError(
Message(`Unknown directive "@%s".`, directive.Name),
At(directive.Position),
)
return
}
for _, loc := range directive.Definition.Locations {
if loc == directive.Location {
return
}
}
// position must be exists if directive.Definition != nil
tmp := mayNotBeUsedDirective{
Name: directive.Name,
Line: directive.Position.Line,
Column: directive.Position.Column,
}
if !seen[tmp] {
addError(
Message(`Directive "@%s" may not be used on %s.`, directive.Name, directive.Location),
At(directive.Position),
)
seen[tmp] = true
}
})
})
}
|