use crate::comments::*;
use crate::format::*;
use crate::logging::*;
use crate::regexes::*;
use crate::Cli;
use crate::LINE_END;
use log::Level::Trace;
pub fn remove_extra_newlines(text: &str) -> String {
let double_line_end = format!("{LINE_END}{LINE_END}");
RE_NEWLINES.replace_all(text, double_line_end).to_string()
}
pub fn remove_tabs(text: &str, args: &Cli) -> String {
let replace = (0..args.tab).map(|_| " ").collect::<String>();
text.replace('\t', &replace)
}
pub fn remove_trailing_spaces(text: &str) -> String {
RE_TRAIL.replace_all(text, LINE_END).to_string()
}
pub fn needs_split(line: &str, pattern: &Pattern) -> bool {
let contains_splittable_env =
pattern.contains_splitting && RE_SPLITTING_SHARED_LINE.is_match(line);
if contains_splittable_env {
find_comment_index(line).map_or(true, |comment_index| {
if RE_SPLITTING_SHARED_LINE_CAPTURE
.captures(line)
.unwrap() .get(2)
.unwrap() .start()
> comment_index
{
false
} else {
true
}
})
} else {
false
}
}
pub fn split_line<'a>(
line: &'a str,
state: &State,
file: &str,
args: &Cli,
logs: &mut Vec<Log>,
) -> (&'a str, &'a str) {
let captures = RE_SPLITTING_SHARED_LINE_CAPTURE.captures(line).unwrap();
let (line, [prev, rest, _]) = captures.extract();
if args.trace {
record_line_log(
logs,
Trace,
file,
state.linum_new,
state.linum_old,
line,
"Placing environment on new line.",
);
}
(prev, rest)
}