on master help sign in
Position is no longer reported twice
commit18c98cb902286e77378992294af91342975cebcc authorJorge Acereda <jacereda@gmail.com> dateSat 12 Jan 2019, 14:30 (8 years ago) parent4a8b9c2
2 files changed+22−11
src/Idris/Output.hs+4−3 src/Idris/Parser/Stack.hs+18−8
src/Idris/Output.hs+4−3
@@ -75,9 +75,10 @@ instance Message SimpleWarning where
7575formatMessage :: Message w => w -> Idris OutputDoc
7676formatMessage w = do
7777 i <- getIState
78− maybeSource <- case messageSource w of
79− Just src -> pure (Just src)
80− Nothing -> readSource fc
78+ rs <- readSource fc
79+ let maybeSource = case rs of
80+ Just src -> Just src
81+ Nothing -> messageSource w
8182 let maybeFormattedSource = maybeSource >>= layoutSource fc (regions (idris_highlightedRegions i))
8283 return $ layoutMessage (layoutFC fc) maybeFormattedSource (messageText w)
8384 where
src/Idris/Parser/Stack.hs+18−8
@@ -62,19 +62,29 @@ runparser p i inputname s =
6262
6363{- * Parse errors -}
6464
65−newtype ParseError = ParseError (P.ParseErrorBundle String Void)
65+newtype ParseError = ParseError { unParseError :: P.ParseErrorBundle String Void }
66+
67+parseError :: ParseError -> P.ParseError String Void
68+parseError = NonEmpty.head . P.bundleErrors . unParseError
69+
70+parseErrorPosState :: ParseError -> P.PosState String
71+parseErrorPosState = P.bundlePosState . unParseError
72+
73+parseErrorOffset :: ParseError -> Int
74+parseErrorOffset = P.errorOffset . parseError
6675
6776instance Message ParseError where
68− messageExtent (ParseError err) = sourcePositionFC pos
77+ messageExtent err = sourcePositionFC pos
78+ where
79+ (pos, _) = P.reachOffsetNoLine (parseErrorOffset err) (parseErrorPosState err)
80+ messageText = PP.text . init . P.parseErrorTextPretty . parseError
81+ messageSource err = Just sline
6982 where
70− (pos, _) = P.reachOffsetNoLine (P.errorOffset err') (P.bundlePosState err)
71− err' = NonEmpty.head . P.bundleErrors $ err
72− messageText (ParseError err) = PP.text . init . P.errorBundlePretty $ err
73− messageSource (ParseError err) = Just . P.sourceName . P.pstateSourcePos . P.bundlePosState $ err
83+ (_, sline, _) = P.reachOffset (parseErrorOffset err) (parseErrorPosState err)
7484
7585-- | A fully formatted parse error, with caret and bar, etc.
76−prettyError :: ParseError -> String
77−prettyError (ParseError err) = P.errorBundlePretty err
86+prettyError :: ParseError -> String
87+prettyError = P.errorBundlePretty . unParseError
7888
7989{- * Mark and restore -}
8090