Skip to content

Commit

Permalink
Merge pull request #21 from adwd/feat-knowntypenames
Browse files Browse the repository at this point in the history
implement KnownTypeNames validator
  • Loading branch information
vektah committed Jul 11, 2018
2 parents 3d8af14 + 9f0e13c commit cce338e
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 1 deletion.
59 changes: 59 additions & 0 deletions validator/known_type_names.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package validator

import (
"github.com/vektah/gqlparser"
)

func init() {
addRule("KnownTypeNames", func(observers *Events, addError addErrFunc) {
observers.OnOperation(func(walker *Walker, operation *gqlparser.OperationDefinition) {
for _, vdef := range operation.VariableDefinitions {
typeName := vdef.Type.Name()
def := walker.Schema.Types[typeName]
if def != nil {
continue
}

addError(
Message(`Unknown type "%s".`, typeName),
)
}
})

observers.OnInlineFragment(func(walker *Walker, parentDef *gqlparser.Definition, inlineFragment *gqlparser.InlineFragment) {
typedName := inlineFragment.TypeCondition.Name()
if typedName == "" {
return
}

def := walker.Schema.Types[typedName]
if def != nil {
return
}

addError(
Message(`Unknown type "%s".`, typedName),
)
})

observers.OnFragment(func(walker *Walker, parentDef *gqlparser.Definition, fragment *gqlparser.FragmentDefinition) {
typeName := fragment.TypeCondition.Name()
def := walker.Schema.Types[typeName]
if def != nil {
return
}

var possibleTypes []string
for _, t := range walker.Schema.Types {
possibleTypes = append(possibleTypes, t.Name)
}

list := SuggestList(typeName, possibleTypes)

addError(
Message(`Unknown type "%s".`, typeName),
list,
)
})
})
}
2 changes: 1 addition & 1 deletion validator/suggestionList.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ func suggestionList(input string, options []string) []string {
}

func calcThreshold(a, b string) (threshold int) {
if len(a) <= len(b) {
if len(a) >= len(b) {
threshold = len(a) / 2
} else {
threshold = len(b) / 2
Expand Down
1 change: 1 addition & 0 deletions validator/validate_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ func TestSpec(t *testing.T) {
t.Run("KnownArgumentNames", runSpec(schemas, deviations, "../spec/validation/KnownArgumentNames.yml"))
t.Run("KnownDirectives", runSpec(schemas, deviations, "../spec/validation/KnownDirectives.yml"))
t.Run("KnownFragmentNames", runSpec(schemas, deviations, "../spec/validation/KnownFragmentNames.yml"))
t.Run("KnownTypeNames", runSpec(schemas, deviations, "../spec/validation/KnownTypeNames.yml"))

t.Run("LoneAnonymousOperation", runSpec(schemas, deviations, "../spec/validation/LoneAnonymousOperation.yml"))

Expand Down

0 comments on commit cce338e

Please sign in to comment.