module Line : sig ... end
type 'a single_line = {
leading_blanks : Base.string; | regexp: " |
trailing_spaces : Base.string; | regexp: " |
orig : Base.string; | regexp: " |
data : 'a; |
}
Single line represent %expect
nodes with data on the first line but not on the subsequent ones.
For instance:
[%expect " blah "];
[%expect {| blah
|}]
val sexp_of_single_line : ('a -> Ppx_sexp_conv_lib.Sexp.t) -> 'a single_line -> Ppx_sexp_conv_lib.Sexp.t
val compare_single_line : ('a -> 'a -> Base.int) -> 'a single_line -> 'a single_line -> Base.int
type 'a multi_lines = {
leading_spaces : Base.string; | regexp: "\( |
trailing_spaces : Base.string; | regexp: " |
indentation : Base.string; | regexp: " |
lines : 'a Line.t Base.list; | regexp: not_blank (.* not_blank)? |
}
Any %expect
node with one or more newlines and at least one non-blank line.
This also include the case with exactly one non-blank line such as:
[%expect {|
blah
|}]
This is to preserve this formatting in case the correction is multi-line.
leading_spaces
contains everything until the first non-blank line, while trailing_spaces
is either:
- trailing blanks on the last line if of the form:
[%expect {|
abc
def |}]
- all trailing spaces from the newline character (inclusive) on the last non-blank line to the end if of the form:
[%expect {|
abc
def
|}]
val sexp_of_multi_lines : ('a -> Ppx_sexp_conv_lib.Sexp.t) -> 'a multi_lines -> Ppx_sexp_conv_lib.Sexp.t
val compare_multi_lines : ('a -> 'a -> Base.int) -> 'a multi_lines -> 'a multi_lines -> Base.int
type 'a t =
| Empty of Base.string | regexp: " |
| Single_line of 'a single_line | |
| Multi_lines of 'a multi_lines |
val sexp_of_t : ('a -> Ppx_sexp_conv_lib.Sexp.t) -> 'a t -> Ppx_sexp_conv_lib.Sexp.t
val empty : 'a t
val map : 'a t -> f:(Base.string -> 'a -> 'b) -> 'b t
val to_string : _ t -> Base.string
For single line expectation, leading blanks and trailing spaces are dropped.
Remove blank lines at the beginning and end of the list.
val reconcile : 'a t -> lines:'a Line.t Base.list -> default_indentation:Base.int -> pad_single_line:Base.bool -> 'a t
Given a contents t
and a list of lines
, try to produce a new contents containing lines
but with the same formating as t
.
default_indentation
is the indentation to use in case we ignore t
's indentation (for instance if t
is Single_line
or Empty
).
val extract_indentation : 'a Line.t Base.list -> Base.string * 'a Line.t Base.list
Compuute the longest indentation of a list of lines and trim it from every line. It returns the found indentation and the list of trimmed lines.
val stripped_original_lines : _ t -> Base.string Base.list
All the .orig
fields of Line.t
or single_line
values, using ""
for blank lines.