Skip to content

Commit 068eddf

Browse files
authored
validator: make rules exported and allow custom set of rules for Validate (#320)
* validator: make rules exported and allow custom set of rules be passed to the Validate * use format string as a first argument to Message() --------- Co-authored-by: Kirill Grigorev <kirill.grigorev@omnevo.net>
1 parent ed10d5c commit 068eddf

30 files changed

Lines changed: 298 additions & 124 deletions

validator/imported_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,11 @@ import (
1111
"testing"
1212

1313
"github.com/stretchr/testify/require"
14+
"gopkg.in/yaml.v2"
15+
1416
"github.com/vektah/gqlparser/v2"
1517
"github.com/vektah/gqlparser/v2/ast"
1618
"github.com/vektah/gqlparser/v2/gqlerror"
17-
"gopkg.in/yaml.v2"
1819
)
1920

2021
type Spec struct {

validator/rules/fields_on_correct_type.go

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package validator
1+
package rules
22

33
import (
44
"fmt"
@@ -11,8 +11,9 @@ import (
1111
. "github.com/vektah/gqlparser/v2/validator"
1212
)
1313

14-
func init() {
15-
AddRule("FieldsOnCorrectType", func(observers *Events, addError AddErrFunc) {
14+
var FieldsOnCorrectTypeRule = Rule{
15+
Name: "FieldsOnCorrectType",
16+
RuleFunc: func(observers *Events, addError AddErrFunc) {
1617
observers.OnField(func(walker *Walker, field *ast.Field) {
1718
if field.ObjectDefinition == nil || field.Definition != nil {
1819
return
@@ -27,14 +28,18 @@ func init() {
2728
}
2829

2930
addError(
30-
Message(message),
31+
Message("%s", message),
3132
At(field.Position),
3233
)
3334
})
34-
})
35+
},
36+
}
37+
38+
func init() {
39+
AddRule(FieldsOnCorrectTypeRule.Name, FieldsOnCorrectTypeRule.RuleFunc)
3540
}
3641

37-
// Go through all of the implementations of type, as well as the interfaces
42+
// Go through all the implementations of type, as well as the interfaces
3843
// that they implement. If any of those types include the provided field,
3944
// suggest them, sorted by how often the type is referenced, starting
4045
// with Interfaces.

validator/rules/fragments_on_composite_types.go

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package validator
1+
package rules
22

33
import (
44
"fmt"
@@ -9,8 +9,9 @@ import (
99
. "github.com/vektah/gqlparser/v2/validator"
1010
)
1111

12-
func init() {
13-
AddRule("FragmentsOnCompositeTypes", func(observers *Events, addError AddErrFunc) {
12+
var FragmentsOnCompositeTypesRule = Rule{
13+
Name: "FragmentsOnCompositeTypes",
14+
RuleFunc: func(observers *Events, addError AddErrFunc) {
1415
observers.OnInlineFragment(func(walker *Walker, inlineFragment *ast.InlineFragment) {
1516
fragmentType := walker.Schema.Types[inlineFragment.TypeCondition]
1617
if fragmentType == nil || fragmentType.IsCompositeType() {
@@ -20,7 +21,7 @@ func init() {
2021
message := fmt.Sprintf(`Fragment cannot condition on non composite type "%s".`, inlineFragment.TypeCondition)
2122

2223
addError(
23-
Message(message),
24+
Message("%s", message),
2425
At(inlineFragment.Position),
2526
)
2627
})
@@ -33,9 +34,13 @@ func init() {
3334
message := fmt.Sprintf(`Fragment "%s" cannot condition on non composite type "%s".`, fragment.Name, fragment.TypeCondition)
3435

3536
addError(
36-
Message(message),
37+
Message("%s", message),
3738
At(fragment.Position),
3839
)
3940
})
40-
})
41+
},
42+
}
43+
44+
func init() {
45+
AddRule(FragmentsOnCompositeTypesRule.Name, FragmentsOnCompositeTypesRule.RuleFunc)
4146
}

validator/rules/known_argument_names.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package validator
1+
package rules
22

33
import (
44
"github.com/vektah/gqlparser/v2/ast"
@@ -7,8 +7,9 @@ import (
77
. "github.com/vektah/gqlparser/v2/validator"
88
)
99

10-
func init() {
11-
AddRule("KnownArgumentNames", func(observers *Events, addError AddErrFunc) {
10+
var KnownArgumentNamesRule = Rule{
11+
Name: "KnownArgumentNames",
12+
RuleFunc: func(observers *Events, addError AddErrFunc) {
1213
// A GraphQL field is only valid if all supplied arguments are defined by that field.
1314
observers.OnField(func(walker *Walker, field *ast.Field) {
1415
if field.Definition == nil || field.ObjectDefinition == nil {
@@ -55,5 +56,9 @@ func init() {
5556
)
5657
}
5758
})
58-
})
59+
},
60+
}
61+
62+
func init() {
63+
AddRule(KnownArgumentNamesRule.Name, KnownArgumentNamesRule.RuleFunc)
5964
}

validator/rules/known_directives.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package validator
1+
package rules
22

33
import (
44
"github.com/vektah/gqlparser/v2/ast"
@@ -7,8 +7,9 @@ import (
77
. "github.com/vektah/gqlparser/v2/validator"
88
)
99

10-
func init() {
11-
AddRule("KnownDirectives", func(observers *Events, addError AddErrFunc) {
10+
var KnownDirectivesRule = Rule{
11+
Name: "KnownDirectives",
12+
RuleFunc: func(observers *Events, addError AddErrFunc) {
1213
type mayNotBeUsedDirective struct {
1314
Name string
1415
Line int
@@ -45,5 +46,9 @@ func init() {
4546
seen[tmp] = true
4647
}
4748
})
48-
})
49+
},
50+
}
51+
52+
func init() {
53+
AddRule(KnownDirectivesRule.Name, KnownDirectivesRule.RuleFunc)
4954
}
Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package validator
1+
package rules
22

33
import (
44
"github.com/vektah/gqlparser/v2/ast"
@@ -7,8 +7,9 @@ import (
77
. "github.com/vektah/gqlparser/v2/validator"
88
)
99

10-
func init() {
11-
AddRule("KnownFragmentNames", func(observers *Events, addError AddErrFunc) {
10+
var KnownFragmentNamesRule = Rule{
11+
Name: "KnownFragmentNames",
12+
RuleFunc: func(observers *Events, addError AddErrFunc) {
1213
observers.OnFragmentSpread(func(walker *Walker, fragmentSpread *ast.FragmentSpread) {
1314
if fragmentSpread.Definition == nil {
1415
addError(
@@ -17,5 +18,9 @@ func init() {
1718
)
1819
}
1920
})
20-
})
21+
},
22+
}
23+
24+
func init() {
25+
AddRule(KnownFragmentNamesRule.Name, KnownFragmentNamesRule.RuleFunc)
2126
}

validator/rules/known_root_type.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package validator
1+
package rules
22

33
import (
44
"fmt"
@@ -9,8 +9,9 @@ import (
99
. "github.com/vektah/gqlparser/v2/validator"
1010
)
1111

12-
func init() {
13-
AddRule("KnownRootType", func(observers *Events, addError AddErrFunc) {
12+
var KnownRootTypeRule = Rule{
13+
Name: "KnownRootType",
14+
RuleFunc: func(observers *Events, addError AddErrFunc) {
1415
// A query's root must be a valid type. Surprisingly, this isn't
1516
// checked anywhere else!
1617
observers.OnOperation(func(walker *Walker, operation *ast.OperationDefinition) {
@@ -33,5 +34,9 @@ func init() {
3334
At(operation.Position))
3435
}
3536
})
36-
})
37+
},
38+
}
39+
40+
func init() {
41+
AddRule(KnownRootTypeRule.Name, KnownRootTypeRule.RuleFunc)
3742
}

validator/rules/known_type_names.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package validator
1+
package rules
22

33
import (
44
"github.com/vektah/gqlparser/v2/ast"
@@ -7,8 +7,9 @@ import (
77
. "github.com/vektah/gqlparser/v2/validator"
88
)
99

10-
func init() {
11-
AddRule("KnownTypeNames", func(observers *Events, addError AddErrFunc) {
10+
var KnownTypeNamesRule = Rule{
11+
Name: "KnownTypeNames",
12+
RuleFunc: func(observers *Events, addError AddErrFunc) {
1213
observers.OnVariable(func(walker *Walker, variable *ast.VariableDefinition) {
1314
typeName := variable.Type.Name()
1415
typdef := walker.Schema.Types[typeName]
@@ -57,5 +58,9 @@ func init() {
5758
At(fragment.Position),
5859
)
5960
})
60-
})
61+
},
62+
}
63+
64+
func init() {
65+
AddRule(KnownTypeNamesRule.Name, KnownTypeNamesRule.RuleFunc)
6166
}
Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package validator
1+
package rules
22

33
import (
44
"github.com/vektah/gqlparser/v2/ast"
@@ -7,8 +7,9 @@ import (
77
. "github.com/vektah/gqlparser/v2/validator"
88
)
99

10-
func init() {
11-
AddRule("LoneAnonymousOperation", func(observers *Events, addError AddErrFunc) {
10+
var LoneAnonymousOperationRule = Rule{
11+
Name: "LoneAnonymousOperation",
12+
RuleFunc: func(observers *Events, addError AddErrFunc) {
1213
observers.OnOperation(func(walker *Walker, operation *ast.OperationDefinition) {
1314
if operation.Name == "" && len(walker.Document.Operations) > 1 {
1415
addError(
@@ -17,5 +18,9 @@ func init() {
1718
)
1819
}
1920
})
20-
})
21+
},
22+
}
23+
24+
func init() {
25+
AddRule(LoneAnonymousOperationRule.Name, LoneAnonymousOperationRule.RuleFunc)
2126
}

validator/rules/no_fragment_cycles.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package validator
1+
package rules
22

33
import (
44
"fmt"
@@ -10,8 +10,9 @@ import (
1010
. "github.com/vektah/gqlparser/v2/validator"
1111
)
1212

13-
func init() {
14-
AddRule("NoFragmentCycles", func(observers *Events, addError AddErrFunc) {
13+
var NoFragmentCyclesRule = Rule{
14+
Name: "NoFragmentCycles",
15+
RuleFunc: func(observers *Events, addError AddErrFunc) {
1516
visitedFrags := make(map[string]bool)
1617

1718
observers.OnFragment(func(walker *Walker, fragment *ast.FragmentDefinition) {
@@ -67,7 +68,11 @@ func init() {
6768

6869
recursive(fragment)
6970
})
70-
})
71+
},
72+
}
73+
74+
func init() {
75+
AddRule(NoFragmentCyclesRule.Name, NoFragmentCyclesRule.RuleFunc)
7176
}
7277

7378
func getFragmentSpreads(node ast.SelectionSet) []*ast.FragmentSpread {

0 commit comments

Comments
 (0)