5 unstable releases

new 0.3.2 Feb 7, 2025
0.3.1 Feb 6, 2025
0.3.0 Feb 5, 2025
0.2.0 Jan 5, 2025
0.1.0 Nov 30, 2024

#306 in WebAssembly

Download history 88/week @ 2024-11-24 65/week @ 2024-12-01 15/week @ 2024-12-08 1/week @ 2024-12-15 158/week @ 2025-01-05 8/week @ 2025-01-12 371/week @ 2025-02-02

381 downloads per month
Used in 2 crates (via wat_service)

MIT license

165KB
5K SLoC

The formatter (pretty printer) for the WebAssembly Text Format.

This formatter can format a tree that contains syntax errors.

Usage

Full

The [format()] function only accepts parsed syntax tree, so you should use the parser to parse source code first.

use rowan::ast::AstNode;
use wat_formatter::format;
use wat_syntax::ast::Root;

let input = "( module )";
let (tree, _) = wat_parser::parse(input);
let root = Root::cast(tree).unwrap();
assert_eq!("(module)\n", format(&root, &Default::default()));

For customizing the formatting behavior, please refer to config.

Range

You can format only a specific range of code by calling format_range function.

Beside the root syntax tree and format options, this function also accepts requested range and LineIndex.

Notes:

  • Returned formatted string is corresponding to specific syntax node. It isn't full text, so you may replace by yourself.
  • Affected range will equal or be wider than the range you give, so you should use returned range when replacing, not original range.
use line_index::LineIndex;
use rowan::{ast::AstNode, TextRange, TextSize};
use wat_formatter::format_range;
use wat_syntax::ast::Root;

let input = "( module ( func ) )";
let line_index = LineIndex::new(input);
let (tree, _) = wat_parser::parse(input);
let root = Root::cast(tree).unwrap();
let (formatted, range) = format_range(
    &root,
    &Default::default(),
    TextRange::new(TextSize::new(13), TextSize::new(17)),
    &line_index,
).unwrap();
assert_eq!("(func)", &formatted);
assert_eq!(TextRange::new(TextSize::new(9), TextSize::new(17)), range);

Dependencies

~1MB
~19K SLoC