use std::path::Path;
use anyhow::Result;
use deno_ast::ParsedSource;
use dprint_core::configuration::resolve_new_line_kind;
use dprint_core::formatting::*;
use crate::swc::ensure_no_specific_syntax_errors;
use super::configuration::Configuration;
use super::generation::generate;
use super::swc::parse_swc_ast;
pub fn format_text(file_path: &Path, file_text: &str, config: &Configuration) -> Result<Option<String>> {
if super::utils::file_text_has_ignore_comment(file_text, &config.ignore_file_comment_text) {
Ok(None)
} else {
let parsed_source = parse_swc_ast(file_path, file_text)?;
inner_format(&parsed_source, config)
}
}
pub fn format_parsed_source(source: &ParsedSource, config: &Configuration) -> Result<Option<String>> {
if super::utils::file_text_has_ignore_comment(source.text_info().text_str(), &config.ignore_file_comment_text) {
Ok(None)
} else {
ensure_no_specific_syntax_errors(source)?;
inner_format(source, config)
}
}
fn inner_format(parsed_source: &ParsedSource, config: &Configuration) -> Result<Option<String>> {
let result = dprint_core::formatting::format(
|| {
#[allow(clippy::let_and_return)]
let print_items = generate(parsed_source, config);
print_items
},
config_to_print_options(parsed_source.text_info().text_str(), config),
);
if result == parsed_source.text_info().text_str() {
Ok(None)
} else {
Ok(Some(result))
}
}
#[cfg(feature = "tracing")]
pub fn trace_file(file_path: &Path, file_text: &str, config: &Configuration) -> dprint_core::formatting::TracingResult {
let parsed_source = parse_swc_ast(file_path, file_text).unwrap();
ensure_no_specific_syntax_errors(&parsed_source).unwrap();
dprint_core::formatting::trace_printing(|| generate(&parsed_source, config), config_to_print_options(file_text, config))
}
fn config_to_print_options(file_text: &str, config: &Configuration) -> PrintOptions {
PrintOptions {
indent_width: config.indent_width,
max_width: config.line_width,
use_tabs: config.use_tabs,
new_line_text: resolve_new_line_kind(file_text, config.new_line_kind),
}
}