no_unused_fragments.go

 1package validator
 2
 3import (
 4	"github.com/vektah/gqlparser/ast"
 5	. "github.com/vektah/gqlparser/validator"
 6)
 7
 8func init() {
 9	AddRule("NoUnusedFragments", func(observers *Events, addError AddErrFunc) {
10
11		inFragmentDefinition := false
12		fragmentNameUsed := make(map[string]bool)
13
14		observers.OnFragmentSpread(func(walker *Walker, fragmentSpread *ast.FragmentSpread) {
15			if !inFragmentDefinition {
16				fragmentNameUsed[fragmentSpread.Name] = true
17			}
18		})
19
20		observers.OnFragment(func(walker *Walker, fragment *ast.FragmentDefinition) {
21			inFragmentDefinition = true
22			if !fragmentNameUsed[fragment.Name] {
23				addError(
24					Message(`Fragment "%s" is never used.`, fragment.Name),
25					At(fragment.Position),
26				)
27			}
28		})
29	})
30}