on master help sign in
Improve Region.select output
ae7e6bdEvan Czaplicki
src/Reporting/Region.hs+17−14
@@ -55,8 +55,8 @@ select (Region start end) source =
55 let
55 let
56 relevantLines =
56 relevantLines =
57 lines source
57 lines source
58− |> drop (line start)
58+ |> drop (line start - 1)
59− |> take (line end - line start)
59+ |> take (line end - line start + 1)
60 in
60 in
61 case relevantLines of
61 case relevantLines of
62 [] ->
62 [] ->
@@ -64,14 +64,17 @@ select (Region start end) source =
64
64
65 [theLine] ->
65 [theLine] ->
66 let
66 let
67− lineNumber = show (line start) ++ "|"
67+ n = line start
68+ w = length (show (n + 1))
69+ underline =
70+ replicate (column start - 1) ' '
71+ ++ replicate (max 1 (column end - column start)) '^'
68 in
72 in
69− lineNumber
73+ unlines
74+ [ addLineNumber w (n-1) ""
70− ++ theLine
75+ , addLineNumber w n theLine
71− ++ "\n"
76+ , addLineNumber w (n+1) underline
72− ++ replicate (column start + length lineNumber) ' '
77+ ]
73− ++ replicate (column end - column start) '^'
74− ++ "\n"
75
78
76 firstLine : rest ->
79 firstLine : rest ->
77 let
80 let
@@ -85,13 +88,13 @@ select (Region start end) source =
85 filteredFirstLine : init rest ++ [filteredLastLine]
88 filteredFirstLine : init rest ++ [filteredLastLine]
86
89
87 lineNumbersWidth =
90 lineNumbersWidth =
88− length (show (line end))
91+ length (show (line end + 1))
89
92
90 numberedLines =
93 numberedLines =
91 zipWith
94 zipWith
92 (addLineNumber lineNumbersWidth)
95 (addLineNumber lineNumbersWidth)
93− [line start .. line end]
96+ [line start - 1 .. line end + 1]
94− focusedRelevantLines
97+ ("" : focusedRelevantLines ++ [""])
95 in
98 in
96 unlines numberedLines ++ "\n"
99 unlines numberedLines ++ "\n"
97
100
@@ -99,9 +102,9 @@ select (Region start end) source =
99addLineNumber :: Int -> Int -> String -> String
102addLineNumber :: Int -> Int -> String -> String
100addLineNumber width n line =
103addLineNumber width n line =
101 let
104 let
102− number = show n
105+ number = if n < 0 then " " else show n
103 in
106 in
104− replicate (width - length number) ' ' ++ number ++ "|" ++ line
107+ replicate (width - length number) ' ' ++ number ++ "| " ++ line
105
108
106
109
107-- JSON
110-- JSON