cargo_cargofmt/
lib.rs

1//! > Cargo file formatter
2
3#![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    // Normalize for easier manipulation
25    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;