package dedent
Install
Dune Dependency
Authors
Maintainers
Sources
sha256=f221a9cecb9ed932a7b58018fb31fb19a7b2eb2e3aba6a953235f807b7668f71
Description
A library for improving redability of multi-line string constants in code.
Published: 14 Jun 2023
README
"Dedent"
Dedent
is a library for improving readability of multi-line string constants in code:
- you can put string delimiters on their own lines
- you can indent lines to the level of surrounding code
- you can start each line with a line prefix,
>
More precisely, on an input string, Dedent
does the following:
- breaks the string into lines
- strips trailing whitespace from all lines
- drops the first line and the last line, if they are empty
- finds the line with the least indendation, and drops that indentation from all lines
- drops the line prefix from all lines, if it is present on all lines
For example:
let string =
{|
> a
> b
> c
|} |> Dedent.string
That yields the string "a\n b\n c"
.
Use Dedent.lines
to dedent and return a list of lines rather than a string. For the above example, Dedent.lines
yields:
[ "a"; " b"; " c" ]
Each of the aspects of Dedent
's input handling is optional. You don't have to use a line prefix. This yields the same string:
let string =
{|
a
b
c
|} |> Dedent.string
You don't have to indent. This yields the same string:
let string =
{|
a
b
c
|} |> Dedent.string
You don't have to put delimiters on their own lines. This yields the same string:
let string =
{|a
b
c|} |> Dedent.string
There is also an extension syntax, [%string_dedent]
, that is a variant of [%string]
that applies [Dedent.string]
to its input before substitution. For example:
let bar = "BAR" in
let string =
[%string_dedent
{|
> foo
> %{bar}
|}]
in
That yields the string "foo\n BAR"
.