@@ -72,6 +72,7 @@ let trim_trailing_blank_lines : string -> string = fun s ->
72
72
73
73
let trim_leading_whitespace : first_line_offset:int -> string -> string =
74
74
fun ~first_line_offset s ->
75
+ (* * Returns [None] for an empty, [Some ident] for an indented line. *)
75
76
let count_leading_whitespace line =
76
77
let rec count_leading_whitespace ' index len =
77
78
if index = len then None
@@ -83,21 +84,17 @@ let trim_leading_whitespace : first_line_offset:int -> string -> string =
83
84
let len = String. length line in
84
85
(* '\r' may remain because we only split on '\n' below. This is important
85
86
for the first line, which would be considered not empty without this check. *)
86
- let len, ending =
87
- if len > 0 && line.[len - 1 ] = '\r' then (len - 1 , " \r\n " ) else (len, " \n " )
88
- in
89
- match count_leading_whitespace' 0 len with
90
- | Some index -> `Leading_whitespace index
91
- | None -> `Blank_line ending
87
+ let len = if len > 0 && line.[len - 1 ] = '\r' then len - 1 else len in
88
+ count_leading_whitespace' 0 len
92
89
in
93
90
94
91
let lines = Astring.String. cuts ~sep: " \n " s in
95
92
96
93
let least_amount_of_whitespace =
97
94
List. fold_left (fun least_so_far line ->
98
95
match (count_leading_whitespace line, least_so_far) with
99
- | (`Leading_whitespace n , None) -> Some n
100
- | (`Leading_whitespace n , Some least ) when n < least -> Some n
96
+ | (Some _ as n' , None) -> n'
97
+ | (Some n as n' , Some least ) when n < least -> n'
101
98
| _ -> least_so_far)
102
99
in
103
100
@@ -106,9 +103,9 @@ let trim_leading_whitespace : first_line_offset:int -> string -> string =
106
103
| [] -> 0 , None
107
104
| first_line :: tl ->
108
105
begin match count_leading_whitespace first_line with
109
- | `Leading_whitespace n ->
106
+ | Some n ->
110
107
n, least_amount_of_whitespace (Some (first_line_offset + n)) tl
111
- | `Blank_line _ ->
108
+ | None ->
112
109
0 , least_amount_of_whitespace None tl
113
110
end
114
111
in
0 commit comments