1#![cfg_attr(docsrs, feature(doc_cfg))]
4#![warn(clippy::print_stderr)]
5#![warn(clippy::print_stdout)]
6
7pub mod config;
8pub mod formatting;
9pub mod toml;
10
11pub fn fmt_manifest(raw_input_text: &str, config: config::Config) -> Option<String> {
12 if config.disable_all_formatting {
13 return None;
14 }
15
16 if !config.format_generated_files
17 && formatting::is_generated_file(raw_input_text, config.generated_marker_line_search_limit)
18 {
19 return None;
20 }
21
22 let mut input = raw_input_text.to_owned();
23
24 formatting::apply_newline_style(
26 config::options::NewlineStyle::Unix,
27 &mut input,
28 raw_input_text,
29 );
30
31 let mut tokens = toml::TomlTokens::parse(&input);
32
33 formatting::normalize_strings(&mut tokens);
34 formatting::normalize_datetime_separators(&mut tokens);
35 formatting::remove_unused_parent_tables(&mut tokens);
36 formatting::trim_trailing_spaces(&mut tokens);
37 formatting::normalize_space_separators(&mut tokens);
38 formatting::reflow_arrays(&mut tokens, config.array_width(), config.tab_spaces);
39 formatting::constrain_blank_lines(
40 &mut tokens,
41 config.blank_lines_lower_bound,
42 config.blank_lines_upper_bound,
43 );
44 formatting::adjust_trailing_comma(&mut tokens, config.trailing_comma);
45 formatting::normalize_indent(&mut tokens, config.hard_tabs, config.tab_spaces);
46
47 let mut formatted = tokens.to_string();
48
49 formatting::apply_newline_style(config.newline_style, &mut formatted, raw_input_text);
50
51 Some(formatted)
52}
53
54#[doc = include_str!("../README.md")]
55#[cfg(doctest)]
56pub struct ReadmeDoctests;