@@ -21,10 +21,10 @@ module Errata.Internal.Render
21
21
, renderSourceLines
22
22
) where
23
23
24
- import qualified GHC.Arr as A
25
24
import Data.List
26
25
import qualified Data.List.NonEmpty as N
27
26
import qualified Data.Map.Strict as M
27
+ import qualified Data.IntMap.Lazy as I
28
28
import Data.Maybe
29
29
import qualified Data.Text as T
30
30
import qualified Data.Text.Lazy.Builder as TB
@@ -36,11 +36,11 @@ renderErrors :: Source source => source -> [Errata] -> TB.Builder
36
36
renderErrors source errs = unsplit " \n\n " prettified
37
37
where
38
38
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)
40
40
prettified = map (renderErrata slines) sortedErrata
41
41
42
42
-- | 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
44
44
renderErrata slines (Errata {.. }) = errorMessage
45
45
where
46
46
errorMessage = mconcat
@@ -50,7 +50,7 @@ renderErrata slines (Errata {..}) = errorMessage
50
50
]
51
51
52
52
-- | 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
54
54
renderBlock slines block@ (Block {.. }) = blockMessage
55
55
where
56
56
blockMessage = mconcat
@@ -63,7 +63,7 @@ renderBlock slines block@(Block {..}) = blockMessage
63
63
-- | The source lines for a block.
64
64
renderSourceLines
65
65
:: Source source
66
- => A. Array Int source
66
+ => I. IntMap source
67
67
-> Block
68
68
-> N. NonEmpty Pointer
69
69
-> TB. Builder
@@ -79,7 +79,7 @@ renderSourceLines slines (Block {..}) lspans = unsplit "\n" sourceLines
79
79
-- Shows a line in accordance to the style.
80
80
-- We might get a line that's out-of-bounds, usually the EOF line, so we can default to empty.
81
81
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
83
83
84
84
-- Generic prefix without line number.
85
85
prefix = mconcat
@@ -315,10 +315,3 @@ unsplit a (x:xs) = foldl' (\acc y -> acc <> a <> y) x xs
315
315
replicateB :: Int -> T. Text -> TB. Builder
316
316
replicateB n xs = TB. fromText (T. replicate n xs)
317
317
{-# 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