Expand description
mfmt
Meta formatter library in Rust.
mfmt
is a language formatter library written in Rust inspired by go fmt
. It’s designed to be configuration-free and generous about styling. It simply focuses on aligning indentations.
This library is used in the following projects.
Install
cargo +nightly add mfmt
Examples
#![feature(allocator_api)]
use indoc::indoc;
use mfmt::{Builder, format, FormatOptions, line};
use std::alloc::Global;
let builder = Builder::new(Global);
let mut string = String::new();
format(
&builder.sequence([
"{".into(),
builder.indent(builder.sequence([line(), "foo".into(), line(), "bar".into()])),
line(),
"}".into(),
]),
&mut string,
FormatOptions::new(4),
)
.unwrap();
assert_eq!(
string,
indoc!(
"
{
foo
bar
}
"
)
.trim(),
);
Technical notes
Unlike the Wadler’s algorithm or some other formatters like prettier, mfmt
does not search the best format given source codes. For example, we do not have any “group” combinator. Instead, we rather give a formatter information to reconstruct the “best” format that is available in the original source codes.
References
License
Modules
- Utilities.
Structs
- Document builder.
- Format options.
Enums
- A document.
Functions
- Breaks a document into multiple lines.
- Creates an empty document.
- Flattens a document.
- Flattens a document if a
condition
is true. - Formats a document.
- Indents a document.
- Creates a new line.
- Creates a line suffix.
- Creates a document indented to a current column.
- Creates a sequence of documents.