summaryrefslogtreecommitdiff
path: root/src/Language/GraphQL/AST
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2020-09-19 18:18:26 +0200
committerEugen Wissner <belka@caraus.de>2020-09-19 18:18:26 +0200
commit21a7d9cce421352e837945a2334e7ccf10160d8c (patch)
tree5fa09a68cd7e5f7ab9aa1db082f74093bcbeb52c /src/Language/GraphQL/AST
parent9a08aa5de73e225a9a76017aee4886ce7f6eccec (diff)
downloadgraphql-21a7d9cce421352e837945a2334e7ccf10160d8c.tar.gz
Validate variable names are unique
Diffstat (limited to 'src/Language/GraphQL/AST')
-rw-r--r--src/Language/GraphQL/AST/Document.hs3
-rw-r--r--src/Language/GraphQL/AST/Encoder.hs2
-rw-r--r--src/Language/GraphQL/AST/Parser.hs13
3 files changed, 10 insertions, 8 deletions
diff --git a/src/Language/GraphQL/AST/Document.hs b/src/Language/GraphQL/AST/Document.hs
index 5d21ca0..b03b905 100644
--- a/src/Language/GraphQL/AST/Document.hs
+++ b/src/Language/GraphQL/AST/Document.hs
@@ -253,7 +253,8 @@ data ObjectField a = ObjectField Name a
--
-- Variables are usually passed along with the query, but not in the query
-- itself. They make queries reusable.
-data VariableDefinition = VariableDefinition Name Type (Maybe ConstValue)
+data VariableDefinition =
+ VariableDefinition Name Type (Maybe ConstValue) Location
deriving (Eq, Show)
-- ** Type References
diff --git a/src/Language/GraphQL/AST/Encoder.hs b/src/Language/GraphQL/AST/Encoder.hs
index fcd415e..e88dcd9 100644
--- a/src/Language/GraphQL/AST/Encoder.hs
+++ b/src/Language/GraphQL/AST/Encoder.hs
@@ -95,7 +95,7 @@ variableDefinitions formatter
= parensCommas formatter $ variableDefinition formatter
variableDefinition :: Formatter -> VariableDefinition -> Lazy.Text
-variableDefinition formatter (VariableDefinition var ty defaultValue')
+variableDefinition formatter (VariableDefinition var ty defaultValue' _)
= variable var
<> eitherFormat formatter ": " ":"
<> type' ty
diff --git a/src/Language/GraphQL/AST/Parser.hs b/src/Language/GraphQL/AST/Parser.hs
index 62a247d..18ffd2a 100644
--- a/src/Language/GraphQL/AST/Parser.hs
+++ b/src/Language/GraphQL/AST/Parser.hs
@@ -492,12 +492,13 @@ variableDefinitions = listOptIn parens variableDefinition
<?> "VariableDefinitions"
variableDefinition :: Parser VariableDefinition
-variableDefinition = VariableDefinition
- <$> variable
- <* colon
- <*> type'
- <*> defaultValue
- <?> "VariableDefinition"
+variableDefinition = label "VariableDefinition" $ do
+ location <- getLocation
+ variableName <- variable
+ colon
+ variableType <- type'
+ variableValue <- defaultValue
+ pure $ VariableDefinition variableName variableType variableValue location
variable :: Parser Name
variable = dollar *> name <?> "Variable"