From 21a7d9cce421352e837945a2334e7ccf10160d8c Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Sat, 19 Sep 2020 18:18:26 +0200 Subject: Validate variable names are unique --- src/Language/GraphQL/AST/Document.hs | 3 ++- src/Language/GraphQL/AST/Encoder.hs | 2 +- src/Language/GraphQL/AST/Parser.hs | 13 +++++++------ 3 files changed, 10 insertions(+), 8 deletions(-) (limited to 'src/Language/GraphQL/AST') 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" -- cgit v1.2.3