From c9e265f72c301a543091d58ec10863c66b279fd0 Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Wed, 8 Jul 2020 08:16:14 +0200 Subject: Return parser error location in a list An error can have multiple locations which are returned in a listt with key "locations". --- src/Language/GraphQL/Error.hs | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'src/Language/GraphQL/Error.hs') diff --git a/src/Language/GraphQL/Error.hs b/src/Language/GraphQL/Error.hs index b36be9c..3dbc696 100644 --- a/src/Language/GraphQL/Error.hs +++ b/src/Language/GraphQL/Error.hs @@ -22,7 +22,7 @@ import qualified Data.Sequence as Seq import Data.Text (Text) import qualified Data.Text as Text import Data.Void (Void) -import Language.GraphQL.AST.Document (Name) +import Language.GraphQL.AST (Location(..), Name) import Language.GraphQL.Execute.Coerce import Language.GraphQL.Type.Schema import Prelude hiding (null) @@ -51,9 +51,9 @@ parseError ParseErrorBundle{..} = $ foldl go (Seq.empty, bundlePosState) bundleErrors where errorObject s SourcePos{..} = Error - (Text.pack $ init $ parseErrorTextPretty s) - (unPos' sourceLine) - (unPos' sourceColumn) + { message = Text.pack $ init $ parseErrorTextPretty s + , locations = [Location (unPos' sourceLine) (unPos' sourceColumn)] + } unPos' = fromIntegral . unPos go (result, state) x = let (_, newState) = reachOffset (errorOffset x) state @@ -71,7 +71,7 @@ addErr v = modify appender appender resolution@Resolution{..} = resolution{ errors = errors |> v } makeErrorMessage :: Text -> Error -makeErrorMessage s = Error s 0 0 +makeErrorMessage s = Error s [] -- | Constructs a response object containing only the error with the given -- message. @@ -85,8 +85,7 @@ addErrMsg errorMessage = (addErr . makeErrorMessage) errorMessage >> pure null -- | @GraphQL@ error. data Error = Error { message :: Text - , line :: Word - , column :: Word + , locations :: [Location] } deriving (Eq, Show) -- | The server\'s response describes the result of executing the requested -- cgit v1.2.3