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_env_new_line(line: &str, state: &State) -> bool {
!state.verbatim.visual
&& !state.ignore.visual
&& (line.contains(ENV_BEGIN)
|| line.contains(ENV_END)
|| line.contains(ITEM))
&& (RE_ENV_BEGIN_SHARED_LINE.is_match(line)
|| RE_ENV_END_SHARED_LINE.is_match(line)
|| RE_ITEM_SHARED_LINE.is_match(line))
}
pub fn put_env_new_line(
line: &str,
state: &State,
file: &str,
args: &Cli,
logs: &mut Vec<Log>,
) -> Option<(String, String)> {
if args.trace {
record_line_log(
logs,
Trace,
file,
state.linum_new,
state.linum_old,
line,
"Placing environment on new line.",
);
}
let comment_index = find_comment_index(line);
let comment = &get_comment(line, comment_index);
let mut text = &remove_comment(line, comment_index);
let mut temp = RE_ENV_BEGIN_SHARED_LINE
.replace(text, format!("$prev{LINE_END}$env"))
.to_string();
text = &temp;
if !text.contains(LINE_END) {
temp = RE_ENV_END_SHARED_LINE
.replace(text, format!("$prev{LINE_END}$env"))
.to_string();
text = &temp;
}
if !text.contains(LINE_END) {
temp = RE_ITEM_SHARED_LINE
.replace(text, format!("$prev{LINE_END}$env"))
.to_string();
text = &temp;
}
if text.contains(LINE_END) {
let split = text.split_once(LINE_END).unwrap();
let split_0 = split.0.to_string();
let mut split_1 = split.1.to_string();
split_1.push_str(comment);
return Some((split_0, split_1));
}
None
}