diff options
| author | Eugen Wissner <belka@caraus.de> | 2019-11-22 08:00:50 +0100 |
|---|---|---|
| committer | Eugen Wissner <belka@caraus.de> | 2019-11-22 08:00:50 +0100 |
| commit | 625d7100ca123e5aff265fb843ec4979d76a9f7d (patch) | |
| tree | 22cb595ea2dd944789a5144eb373fe7be8190f11 | |
| parent | 73e21661b413192c26a539141a44b0c25e8c2aa9 (diff) | |
| download | graphql-625d7100ca123e5aff265fb843ec4979d76a9f7d.tar.gz | |
Try type parsers in a different order
| -rw-r--r-- | CHANGELOG.md | 19 | ||||
| -rw-r--r-- | src/Language/GraphQL/AST/Lexer.hs | 2 | ||||
| -rw-r--r-- | src/Language/GraphQL/AST/Parser.hs | 6 | ||||
| -rw-r--r-- | src/Language/GraphQL/AST/Transform.hs | 7 | ||||
| -rw-r--r-- | stack.yaml | 2 |
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 @@ -1,4 +1,4 @@ -resolver: lts-14.14 +resolver: lts-14.15 packages: - . |
