diff options
| author | Eugen Wissner <belka@caraus.de> | 2020-09-05 10:00:58 +0200 |
|---|---|---|
| committer | Eugen Wissner <belka@caraus.de> | 2020-09-05 10:00:58 +0200 |
| commit | d327d9d1ce9670e51b7eef7a4272aaf3b6290228 (patch) | |
| tree | ca27d933d3fb60a1dacd29378beee51754a12825 /src/Language/GraphQL/AST | |
| parent | 14ed2098285776690bd8fea4209560bf3dba9e74 (diff) | |
| download | graphql-d327d9d1ce9670e51b7eef7a4272aaf3b6290228.tar.gz | |
Validate fragment spread type existence
Diffstat (limited to 'src/Language/GraphQL/AST')
| -rw-r--r-- | src/Language/GraphQL/AST/Document.hs | 4 | ||||
| -rw-r--r-- | src/Language/GraphQL/AST/Encoder.hs | 4 | ||||
| -rw-r--r-- | src/Language/GraphQL/AST/Parser.hs | 28 |
3 files changed, 19 insertions, 17 deletions
diff --git a/src/Language/GraphQL/AST/Document.hs b/src/Language/GraphQL/AST/Document.hs index 3b94e55..f780a9d 100644 --- a/src/Language/GraphQL/AST/Document.hs +++ b/src/Language/GraphQL/AST/Document.hs @@ -162,9 +162,9 @@ type SelectionSetOpt = [Selection] -- } -- @ data Selection - = Field (Maybe Alias) Name [Argument] [Directive] SelectionSetOpt + = Field (Maybe Alias) Name [Argument] [Directive] SelectionSetOpt Location | FragmentSpread Name [Directive] Location - | InlineFragment (Maybe TypeCondition) [Directive] SelectionSet + | InlineFragment (Maybe TypeCondition) [Directive] SelectionSet Location deriving (Eq, Show) -- ** Arguments diff --git a/src/Language/GraphQL/AST/Encoder.hs b/src/Language/GraphQL/AST/Encoder.hs index ec28b86..7428365 100644 --- a/src/Language/GraphQL/AST/Encoder.hs +++ b/src/Language/GraphQL/AST/Encoder.hs @@ -126,9 +126,9 @@ indent indentation = Lazy.Text.replicate (fromIntegral indentation) indentSymbol selection :: Formatter -> Selection -> Lazy.Text selection formatter = Lazy.Text.append indent' . encodeSelection where - encodeSelection (Field alias name args directives' selections) = + encodeSelection (Field alias name args directives' selections _) = field incrementIndent alias name args directives' selections - encodeSelection (InlineFragment typeCondition directives' selections) = + encodeSelection (InlineFragment typeCondition directives' selections _) = inlineFragment incrementIndent typeCondition directives' selections encodeSelection (FragmentSpread name directives' _) = fragmentSpread incrementIndent name directives' diff --git a/src/Language/GraphQL/AST/Parser.hs b/src/Language/GraphQL/AST/Parser.hs index e97f306..af82a9e 100644 --- a/src/Language/GraphQL/AST/Parser.hs +++ b/src/Language/GraphQL/AST/Parser.hs @@ -382,13 +382,14 @@ selection = field <?> "Selection" field :: Parser Selection -field = Field - <$> optional alias - <*> name - <*> arguments - <*> directives - <*> selectionSetOpt - <?> "Field" +field = label "Field" $ do + location <- getLocation + alias' <- optional alias + name' <- name + arguments' <- arguments + directives' <- directives + selectionSetOpt' <- selectionSetOpt + pure $ Field alias' name' arguments' directives' selectionSetOpt' location alias :: Parser Alias alias = try (name <* colon) <?> "Alias" @@ -408,12 +409,13 @@ fragmentSpread = label "FragmentSpread" $ do pure $ FragmentSpread fragmentName' directives' location inlineFragment :: Parser Selection -inlineFragment = InlineFragment - <$ spread - <*> optional typeCondition - <*> directives - <*> selectionSet - <?> "InlineFragment" +inlineFragment = label "InlineFragment" $ do + location <- getLocation + _ <- spread + typeCondition' <- optional typeCondition + directives' <- directives + selectionSet' <- selectionSet + pure $ InlineFragment typeCondition' directives' selectionSet' location fragmentDefinition :: Parser FragmentDefinition fragmentDefinition = label "FragmentDefinition" $ do |
