From d327d9d1ce9670e51b7eef7a4272aaf3b6290228 Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Sat, 5 Sep 2020 10:00:58 +0200 Subject: Validate fragment spread type existence --- src/Language/GraphQL/AST/Parser.hs | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) (limited to 'src/Language/GraphQL/AST/Parser.hs') 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 -- cgit v1.2.3