summaryrefslogtreecommitdiff
path: root/src/Language/GraphQL/AST
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2020-09-21 07:28:40 +0200
committerEugen Wissner <belka@caraus.de>2020-09-21 07:28:40 +0200
commit3e393004ae03a717218a805043d9237ca29ac947 (patch)
treedcff103322dc100eb83ba17f59f504b28b69a191 /src/Language/GraphQL/AST
parent38c3097bcf2d3c92a180c5d328cfb15ef80f0b95 (diff)
downloadgraphql-3e393004ae03a717218a805043d9237ca29ac947.tar.gz
Validate all variables are defined
Diffstat (limited to 'src/Language/GraphQL/AST')
-rw-r--r--src/Language/GraphQL/AST/Document.hs6
-rw-r--r--src/Language/GraphQL/AST/Encoder.hs2
-rw-r--r--src/Language/GraphQL/AST/Parser.hs8
3 files changed, 13 insertions, 3 deletions
diff --git a/src/Language/GraphQL/AST/Document.hs b/src/Language/GraphQL/AST/Document.hs
index b03b905..1875e49 100644
--- a/src/Language/GraphQL/AST/Document.hs
+++ b/src/Language/GraphQL/AST/Document.hs
@@ -24,6 +24,7 @@ module Language.GraphQL.AST.Document
, Location(..)
, Name
, NamedType
+ , Node(..)
, NonNullType(..)
, ObjectField(..)
, OperationDefinition(..)
@@ -70,6 +71,9 @@ instance Ord Location where
| thisLine > thatLine = GT
| otherwise = compare thisColumn thatColumn
+-- | Contains some tree node with a location.
+data Node a = Node a Location deriving (Eq, Show)
+
-- ** Document
-- | GraphQL document.
@@ -190,7 +194,7 @@ data FragmentSpread = FragmentSpread Name [Directive] Location
-- @
--
-- Here "id" is an argument for the field "user" and its value is 4.
-data Argument = Argument Name Value Location deriving (Eq,Show)
+data Argument = Argument Name (Node Value) Location deriving (Eq, Show)
-- ** Fragments
diff --git a/src/Language/GraphQL/AST/Encoder.hs b/src/Language/GraphQL/AST/Encoder.hs
index e88dcd9..176a897 100644
--- a/src/Language/GraphQL/AST/Encoder.hs
+++ b/src/Language/GraphQL/AST/Encoder.hs
@@ -159,7 +159,7 @@ arguments :: Formatter -> [Argument] -> Lazy.Text
arguments formatter = parensCommas formatter $ argument formatter
argument :: Formatter -> Argument -> Lazy.Text
-argument formatter (Argument name value' _)
+argument formatter (Argument name (Node value' _) _)
= Lazy.Text.fromStrict name
<> colon formatter
<> value formatter value'
diff --git a/src/Language/GraphQL/AST/Parser.hs b/src/Language/GraphQL/AST/Parser.hs
index 18ffd2a..29eee79 100644
--- a/src/Language/GraphQL/AST/Parser.hs
+++ b/src/Language/GraphQL/AST/Parser.hs
@@ -402,7 +402,7 @@ argument = label "Argument" $ do
location <- getLocation
name' <- name
colon
- value' <- value
+ value' <- valueNode
pure $ Argument name' value' location
fragmentSpread :: Parser FragmentSpread
@@ -439,6 +439,12 @@ fragmentName = but (symbol "on") *> name <?> "FragmentName"
typeCondition :: Parser TypeCondition
typeCondition = symbol "on" *> name <?> "TypeCondition"
+valueNode :: Parser (Node Value)
+valueNode = do
+ location <- getLocation
+ value' <- value
+ pure $ Node value' location
+
value :: Parser Value
value = Variable <$> variable
<|> Float <$> try float