From 33318a3b01d27771c6d51ddc5899162bf3acebd8 Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Mon, 31 Aug 2020 11:06:27 +0200 Subject: Validate fragment spread target existence --- src/Language/GraphQL/AST/Document.hs | 2 +- src/Language/GraphQL/AST/Encoder.hs | 2 +- src/Language/GraphQL/AST/Parser.hs | 11 ++++++----- 3 files changed, 8 insertions(+), 7 deletions(-) (limited to 'src/Language/GraphQL/AST') diff --git a/src/Language/GraphQL/AST/Document.hs b/src/Language/GraphQL/AST/Document.hs index 72d39bb..3b94e55 100644 --- a/src/Language/GraphQL/AST/Document.hs +++ b/src/Language/GraphQL/AST/Document.hs @@ -163,7 +163,7 @@ type SelectionSetOpt = [Selection] -- @ data Selection = Field (Maybe Alias) Name [Argument] [Directive] SelectionSetOpt - | FragmentSpread Name [Directive] + | FragmentSpread Name [Directive] Location | InlineFragment (Maybe TypeCondition) [Directive] SelectionSet deriving (Eq, Show) diff --git a/src/Language/GraphQL/AST/Encoder.hs b/src/Language/GraphQL/AST/Encoder.hs index ba89d36..ec28b86 100644 --- a/src/Language/GraphQL/AST/Encoder.hs +++ b/src/Language/GraphQL/AST/Encoder.hs @@ -130,7 +130,7 @@ selection formatter = Lazy.Text.append indent' . encodeSelection field incrementIndent alias name args directives' selections encodeSelection (InlineFragment typeCondition directives' selections) = inlineFragment incrementIndent typeCondition directives' selections - encodeSelection (FragmentSpread name directives') = + encodeSelection (FragmentSpread name directives' _) = fragmentSpread incrementIndent name directives' incrementIndent | Pretty indentation <- formatter = Pretty $ indentation + 1 diff --git a/src/Language/GraphQL/AST/Parser.hs b/src/Language/GraphQL/AST/Parser.hs index 7bc51cb..e97f306 100644 --- a/src/Language/GraphQL/AST/Parser.hs +++ b/src/Language/GraphQL/AST/Parser.hs @@ -400,11 +400,12 @@ argument :: Parser Argument argument = Argument <$> name <* colon <*> value "Argument" fragmentSpread :: Parser Selection -fragmentSpread = FragmentSpread - <$ spread - <*> fragmentName - <*> directives - "FragmentSpread" +fragmentSpread = label "FragmentSpread" $ do + location <- getLocation + _ <- spread + fragmentName' <- fragmentName + directives' <- directives + pure $ FragmentSpread fragmentName' directives' location inlineFragment :: Parser Selection inlineFragment = InlineFragment -- cgit v1.2.3