Skip to content

Commit 1140ce8

Browse files
bobbypriamaantron
authored andcommitted
Fix empty lines handling on code blocks (#135)
Fixes #132. Fixes #133.
1 parent c1cdfb6 commit 1140ce8

File tree

5 files changed

+23
-4
lines changed

5 files changed

+23
-4
lines changed

src/parser/lexer.mll

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,8 @@ let trim_leading_whitespace : string -> string = fun s ->
7474
let count_leading_whitespace : string -> int = fun line ->
7575
let rec count_leading_whitespace' : int -> int = fun index ->
7676
if index >= String.length line then
77-
index
77+
(* Ignore empty and whitespace-only lines. *)
78+
max_int
7879
else
7980
match line.[index] with
8081
| ' ' | '\t' -> count_leading_whitespace' (index + 1)
@@ -92,10 +93,13 @@ let trim_leading_whitespace : string -> string = fun s ->
9293
|> List.fold_left min max_int
9394
in
9495
let remove_whitespace : string -> string = fun line ->
95-
String.sub
96+
if String.length line < least_amount_of_whitespace then
9697
line
97-
least_amount_of_whitespace
98-
(String.length line - least_amount_of_whitespace)
98+
else
99+
String.sub
100+
line
101+
least_amount_of_whitespace
102+
(String.length line - least_amount_of_whitespace)
99103
in
100104
lines
101105
|> List.map remove_whitespace
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
((output (ok (((f.ml (1 0) (3 6)) (code_block "foo\
2+
\n\
3+
\nbar")))))
4+
(warnings ()))
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
((output (ok (((f.ml (1 0) (3 6)) (code_block "foo\
2+
\n \
3+
\nbar")))))
4+
(warnings ()))
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
((output (ok (((f.ml (1 0) (3 7)) (code_block "foo\
2+
\n \
3+
\nbar")))))
4+
(warnings ()))

test/parser/test.ml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,9 @@ let tests : test_suite list = [
275275
t "leading-whitespace-two-cr-lf" "{[ foo\r\n bar]}";
276276
t "leading-whitespace-two-different-indent" "{[ foo\n bar]}";
277277
t "leading-whitespace-two-different-indent-rev" "{[ foo\n bar]}";
278+
t "leading-whitespace-with-empty-line" "{[ foo\n\n bar]}";
279+
t "leading-whitespace-with-whitespace-line-short" "{[ foo\n \n bar]}";
280+
t "leading-whitespace-with-whitespace-line-long" "{[ foo\n \n bar]}";
278281
t "leading-tab" "{[\tfoo]}";
279282
t "leading-tab-two" "{[\tfoo\n\tbar]}";
280283
t "leading-tab-two-different-indent" "{[\tfoo\n\t\tbar]}";

0 commit comments

Comments
 (0)