Function formatter

Source
pub fn formatter(
    input: &mut impl Read,
    output: &mut impl Write,
    language: &Language,
    operation: Operation,
) -> FormatterResult<()>
Expand description

The function that takes an input and formats, or visualises an output.

§Errors

If formatting fails for any reason, a FormatterError will be returned.

§Examples

use std::fs::File;
use std::io::{BufReader, Read};
use topiary_core::{formatter, Language, FormatterError, TopiaryQuery, Operation};

let input = "[1,2]".to_string();
let mut input = input.as_bytes();
let mut output = Vec::new();
let json = topiary_tree_sitter_facade::Language::from(tree_sitter_json::LANGUAGE);

let mut query_file = BufReader::new(File::open("../topiary-queries/queries/json.scm").expect("query file"));
let mut query_content = String::new();
query_file.read_to_string(&mut query_content).expect("read query file");

let language: Language = Language {
    name: "json".to_owned(),
    query: TopiaryQuery::new(&json.clone().into(), &query_content).unwrap(),
    grammar: json.into(),
    indent: None,
};

match formatter(&mut input, &mut output, &language, Operation::Format{ skip_idempotence: false, tolerate_parsing_errors: false }) {
  Ok(()) => {
    let formatted = String::from_utf8(output).expect("valid utf-8");
  }
  Err(FormatterError::Query(message, _)) => {
    panic!("Error in query file: {message}");
  }
  Err(_) => {
    panic!("An error occurred");
  }
}