Crate wat_formatter

Source
Expand description

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);

Modules§

config
Configuration-related types.

Functions§

format
Print the given concrete syntax tree.
format_range
Print a specific range from a root syntax tree. Returned string reflects specific syntax node, not full. Affected range may be wider than requested range, which will be returned. This returned range should be used when replacing text.