use crate::comment::{CharClasses, FullCodeCharKind};
use crate::config::{Config, FileName, Verbosity};
use crate::issues::BadIssueSeeker;
+use crate::modules::Module;
use crate::syntux::parser::{DirectoryOwnership, Parser, ParserError};
use crate::syntux::session::ParseSess;
use crate::utils::count_newlines;
pub(crate) type FileRecord = (FileName, String);
impl<'b, T: Write + 'b> Session<'b, T> {
- pub(crate) fn format_input_inner(&mut self, input: Input) -> Result<FormatReport, ErrorKind> {
+ pub(crate) fn format_input_inner(
+ &mut self,
+ input: Input,
+ is_macro_def: bool,
+ ) -> Result<FormatReport, ErrorKind> {
if !self.config.version_meets_requirement() {
return Err(ErrorKind::VersionMismatch);
}
- rustc_ast::with_globals(self.config.edition().to_libsyntax_pos_edition(), || {
+ rustc_span::with_session_globals(self.config.edition().into(), || {
if self.config.disable_all_formatting() {
// When the input is from stdin, echo back the input.
if let Input::Text(ref buf) = input {
}
let config = &self.config.clone();
- let format_result = format_project(input, config, self);
+ let format_result = format_project(input, config, self, is_macro_def);
format_result.map(|report| {
self.errors.add(&report.internal.borrow().1);
input: Input,
config: &Config,
handler: &mut T,
+ is_macro_def: bool,
) -> Result<FormatReport, ErrorKind> {
let mut timer = Timer::start();
// Parse the crate.
let mut report = FormatReport::new();
let directory_ownership = input.to_directory_ownership();
- let krate = match Parser::parse_crate(config, input, directory_ownership, &parse_session) {
+ let krate = match Parser::parse_crate(input, &parse_session) {
Ok(krate) => krate,
// Surface parse error via Session (errors are merged there from report)
Err(e) => {
let mut context = FormatContext::new(&krate, report, parse_session, config, handler);
let files = modules::ModResolver::new(
&context.parse_session,
- directory_ownership.unwrap_or(DirectoryOwnership::UnownedViaMod),
+ directory_ownership.unwrap_or(DirectoryOwnership::UnownedViaBlock),
!input_is_stdin && !config.skip_children(),
)
.visit_crate(&krate)?;
continue;
}
should_emit_verbose(input_is_stdin, config, || println!("Formatting {}", path));
- let is_root = path == main_file;
- context.format_file(path, &module, is_root)?;
+ context.format_file(path, &module, is_macro_def)?;
}
timer = timer.done_formatting();
fn format_file(
&mut self,
path: FileName,
- module: &ast::Mod,
- is_root: bool,
+ module: &Module<'_>,
+ is_macro_def: bool,
) -> Result<(), ErrorKind> {
- let snippet_provider = self.parse_session.snippet_provider(module.inner);
+ let snippet_provider = self.parse_session.snippet_provider(module.span);
let mut visitor = FmtVisitor::from_parse_sess(
&self.parse_session,
&self.config,
self.report.clone(),
);
visitor.skip_context.update_with_attrs(&self.krate.attrs);
-
- // Format inner attributes if available.
- if !self.krate.attrs.is_empty() && is_root {
- visitor.skip_empty_lines(snippet_provider.end_pos());
- if visitor.visit_attrs(&self.krate.attrs, ast::AttrStyle::Inner) {
- visitor.push_rewrite(module.inner, None);
- } else {
- visitor.format_separate_mod(module, snippet_provider.end_pos());
- }
- } else {
- visitor.last_pos = snippet_provider.start_pos();
- visitor.skip_empty_lines(snippet_provider.end_pos());
- visitor.format_separate_mod(module, snippet_provider.end_pos());
- };
+ visitor.is_macro_def = is_macro_def;
+ visitor.last_pos = snippet_provider.start_pos();
+ visitor.skip_empty_lines(snippet_provider.end_pos());
+ visitor.format_separate_mod(module, snippet_provider.end_pos());
debug_assert_eq!(
visitor.line_number,
/// Formatted code differs from existing code (--check only).
pub(crate) has_diff: bool,
+
+ /// Formatted code missed something, like lost comments or extra trailing space
+ pub(crate) has_unformatted_code_errors: bool,
}
impl ReportedErrors {
self.has_macro_format_failure |= other.has_macro_format_failure;
self.has_check_errors |= other.has_check_errors;
self.has_diff |= other.has_diff;
+ self.has_unformatted_code_errors |= other.has_unformatted_code_errors;
}
}