Skip to content

Commit e843993

Browse files
committed
Swapped out Array for lazy IntMap
1 parent e255b73 commit e843993

File tree

1 file changed

+6
-13
lines changed

1 file changed

+6
-13
lines changed

src/Errata/Internal/Render.hs

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ module Errata.Internal.Render
2121
, renderSourceLines
2222
) where
2323

24-
import qualified GHC.Arr as A
2524
import Data.List
2625
import qualified Data.List.NonEmpty as N
2726
import qualified Data.Map.Strict as M
27+
import qualified Data.IntMap.Lazy as I
2828
import Data.Maybe
2929
import qualified Data.Text as T
3030
import qualified Data.Text.Lazy.Builder as TB
@@ -36,11 +36,11 @@ renderErrors :: Source source => source -> [Errata] -> TB.Builder
3636
renderErrors source errs = unsplit "\n\n" prettified
3737
where
3838
sortedErrata = sortOn (blockLocation . errataBlock) errs
39-
slines = let xs = sourceToLines source in A.listArray (0, length xs - 1) xs
39+
slines = let xs = sourceToLines source in I.fromList (zip [0..length xs - 1] xs)
4040
prettified = map (renderErrata slines) sortedErrata
4141

4242
-- | A single pretty error from metadata and source lines.
43-
renderErrata :: Source source => A.Array Int source -> Errata -> TB.Builder
43+
renderErrata :: Source source => I.IntMap source -> Errata -> TB.Builder
4444
renderErrata slines (Errata {..}) = errorMessage
4545
where
4646
errorMessage = mconcat
@@ -50,7 +50,7 @@ renderErrata slines (Errata {..}) = errorMessage
5050
]
5151

5252
-- | A single pretty block from block data and source lines.
53-
renderBlock :: Source source => A.Array Int source -> Block -> TB.Builder
53+
renderBlock :: Source source => I.IntMap source -> Block -> TB.Builder
5454
renderBlock slines block@(Block {..}) = blockMessage
5555
where
5656
blockMessage = mconcat
@@ -63,7 +63,7 @@ renderBlock slines block@(Block {..}) = blockMessage
6363
-- | The source lines for a block.
6464
renderSourceLines
6565
:: Source source
66-
=> A.Array Int source
66+
=> I.IntMap source
6767
-> Block
6868
-> N.NonEmpty Pointer
6969
-> TB.Builder
@@ -79,7 +79,7 @@ renderSourceLines slines (Block {..}) lspans = unsplit "\n" sourceLines
7979
-- Shows a line in accordance to the style.
8080
-- We might get a line that's out-of-bounds, usually the EOF line, so we can default to empty.
8181
showLine :: [(Column, Column)] -> Line -> TB.Builder
82-
showLine hs n = TB.fromText . maybe "" id . fmap (styleLine hs . sourceToText) $ indexLines slines (n - 1)
82+
showLine hs n = TB.fromText . maybe "" id . fmap (styleLine hs . sourceToText) $ I.lookup (n - 1) slines
8383

8484
-- Generic prefix without line number.
8585
prefix = mconcat
@@ -315,10 +315,3 @@ unsplit a (x:xs) = foldl' (\acc y -> acc <> a <> y) x xs
315315
replicateB :: Int -> T.Text -> TB.Builder
316316
replicateB n xs = TB.fromText (T.replicate n xs)
317317
{-# INLINE replicateB #-}
318-
319-
-- | Index safely into an array.
320-
indexLines :: A.Array Int s -> Int -> Maybe s
321-
indexLines slines i = if A.inRange (A.bounds slines) i
322-
then Just (A.unsafeAt slines i)
323-
else Nothing
324-
{-# INLINE indexLines #-}

0 commit comments

Comments
 (0)