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