Try type parsers in a different order

This commit is contained in:
Eugen Wissner 2019-11-22 08:00:50 +01:00
parent 73e21661b4
commit 625d7100ca
5 changed files with 23 additions and 13 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -1,4 +1,4 @@
resolver: lts-14.14
resolver: lts-14.15
packages:
- .