18 releases

0.3.9 Jan 18, 2024
0.3.8 Jan 18, 2024
0.2.3 Jul 14, 2023
0.1.4 Jul 13, 2023

#576 in Programming languages

Download history 37/week @ 2023-12-22 43/week @ 2023-12-29 1/week @ 2024-01-05 171/week @ 2024-01-12 42/week @ 2024-01-19 7/week @ 2024-01-26 2/week @ 2024-02-02 16/week @ 2024-02-09 49/week @ 2024-02-16 85/week @ 2024-02-23 71/week @ 2024-03-01 38/week @ 2024-03-08 36/week @ 2024-03-15 128/week @ 2024-03-22 80/week @ 2024-03-29 32/week @ 2024-04-05

279 downloads per month
Used in schemat

Unlicense

31KB
808 lines

mfmt

GitHub Action Crate License

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

The Unlicense

No runtime deps