summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2019-11-22 08:00:50 +0100
committerEugen Wissner <belka@caraus.de>2019-11-22 08:00:50 +0100
commit625d7100ca123e5aff265fb843ec4979d76a9f7d (patch)
tree22cb595ea2dd944789a5144eb373fe7be8190f11
parent73e21661b413192c26a539141a44b0c25e8c2aa9 (diff)
downloadgraphql-625d7100ca123e5aff265fb843ec4979d76a9f7d.tar.gz
Try type parsers in a different order
-rw-r--r--CHANGELOG.md19
-rw-r--r--src/Language/GraphQL/AST/Lexer.hs2
-rw-r--r--src/Language/GraphQL/AST/Parser.hs6
-rw-r--r--src/Language/GraphQL/AST/Transform.hs7
-rw-r--r--stack.yaml2
5 files changed, 23 insertions, 13 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 741a206..cc590de 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,11 +10,24 @@ All notable changes to this project will be documented in this file.
module should be imported qualified.
- All `Language.GraphQL.AST.Core.Value` data constructor prefixes were removed.
The module should be imported qualified.
-- Make `Language.GraphQL.AST.Core.Object` is now just a HashMap.
-- `Language.GraphQL.AST.Transform` is now isn't exposed publically anymore.
+- `Language.GraphQL.AST.Core.Object` is now just a HashMap.
+- `Language.GraphQL.AST.Transform` is isn't exposed publically anymore.
+- `Language.GraphQL.Schema.resolve` accepts a selection `Seq` (`Data.Sequence`)
+ instead of a list. Selections are stored as sequences internally as well.
### Added
- - Nested fragment support.
+- Nested fragment support.
+
+### Fixed
+- Consume ignored tokens after `$` and `!`. I mistakenly assumed that
+ `$variable` is a single token, same as `Type!` is a single token. This is not
+ the case, for example `Variable` is defined as `$ Name`, so these are two
+ tokens, therefore whitespaces and commas after `$` and `!` should be
+ consumed.
+
+### Improved
+- `Language.GraphQL.AST.Parser.type_`: Try type parsers in a variable
+ definition in a different order to avoid using `but`.
## [0.5.1.0] - 2019-10-22
### Deprecated
diff --git a/src/Language/GraphQL/AST/Lexer.hs b/src/Language/GraphQL/AST/Lexer.hs
index f4111a9..e4d64ca 100644
--- a/src/Language/GraphQL/AST/Lexer.hs
+++ b/src/Language/GraphQL/AST/Lexer.hs
@@ -3,7 +3,7 @@
-- | This module defines a bunch of small parsers used to parse individual
-- lexemes.
-module Language.GraphQL.AST.Lexer
+module Language.GraphQL.AST.Lexer
( Parser
, amp
, at
diff --git a/src/Language/GraphQL/AST/Parser.hs b/src/Language/GraphQL/AST/Parser.hs
index a5b6681..1505615 100644
--- a/src/Language/GraphQL/AST/Parser.hs
+++ b/src/Language/GraphQL/AST/Parser.hs
@@ -152,9 +152,9 @@ defaultValue = equals *> value
-- * Input Types
type_ :: Parser Type
-type_ = try (TypeNamed <$> name <* but "!")
- <|> TypeList <$> brackets type_
- <|> TypeNonNull <$> nonNullType
+type_ = try (TypeNonNull <$> nonNullType)
+ <|> TypeList <$> brackets type_
+ <|> TypeNamed <$> name
<?> "type_ error!"
nonNullType :: Parser NonNullType
diff --git a/src/Language/GraphQL/AST/Transform.hs b/src/Language/GraphQL/AST/Transform.hs
index 0dfc5e5..95cdfbb 100644
--- a/src/Language/GraphQL/AST/Transform.hs
+++ b/src/Language/GraphQL/AST/Transform.hs
@@ -13,12 +13,10 @@ import Control.Monad (foldM, unless)
import Control.Monad.Trans.Class (lift)
import Control.Monad.Trans.Reader (ReaderT, ask, runReaderT)
import Control.Monad.Trans.State (StateT, evalStateT, gets, modify)
-import Data.Foldable (toList)
import Data.HashMap.Strict (HashMap)
import qualified Data.HashMap.Strict as HashMap
import qualified Data.List.NonEmpty as NonEmpty
import Data.Sequence (Seq, (<|), (><))
-import qualified Data.Sequence as Sequence
import qualified Language.GraphQL.AST as Full
import qualified Language.GraphQL.AST.Core as Core
import qualified Language.GraphQL.Schema as Schema
@@ -99,10 +97,9 @@ collectFragments = do
fragmentDefinition ::
Full.FragmentDefinition ->
TransformT (Seq Core.Selection)
-fragmentDefinition (Full.FragmentDefinition name _tc _dirs sels) = do
+fragmentDefinition (Full.FragmentDefinition name _tc _dirs selections) = do
modify deleteFragmentDefinition
- selections <- traverse selection sels
- let newValue = either id pure =<< Sequence.fromList (toList selections)
+ newValue <- appendSelection selections
modify $ insertFragment newValue
liftJust newValue
where
diff --git a/stack.yaml b/stack.yaml
index 5aff6f9..a40ea8b 100644
--- a/stack.yaml
+++ b/stack.yaml
@@ -1,4 +1,4 @@
-resolver: lts-14.14
+resolver: lts-14.15
packages:
- .