Try type parsers in a different order
This commit is contained in:
parent
73e21661b4
commit
625d7100ca
19
CHANGELOG.md
19
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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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:
|
||||
- .
|
||||
|
Loading…
Reference in New Issue
Block a user