diff options
| author | David Bar-On <david.cdb004@gmail.com> | 2021-02-16 16:35:47 +0200 |
|---|---|---|
| committer | Caleb Cartwright <calebcartwright@users.noreply.github.com> | 2021-02-17 20:19:27 -0600 |
| commit | 4b0ed96f2eed2e49da2cceba550732ce9e7e461e (patch) | |
| tree | f95c88deaffa905d82a62c78c49511c74191448d /src | |
| parent | 61709488204bce4f82456d01482e5c31bb9e8b17 (diff) | |
| download | rust-4b0ed96f2eed2e49da2cceba550732ce9e7e461e.tar.gz rust-4b0ed96f2eed2e49da2cceba550732ce9e7e461e.zip | |
Fix for issue 4603 about extra macro body indentation (third version)
Diffstat (limited to 'src')
| -rw-r--r-- | src/formatting.rs | 4 | ||||
| -rw-r--r-- | src/lib.rs | 27 |
2 files changed, 26 insertions, 5 deletions
diff --git a/src/formatting.rs b/src/formatting.rs index 185b53b3987..e42864a5055 100644 --- a/src/formatting.rs +++ b/src/formatting.rs @@ -331,6 +331,9 @@ pub(crate) struct ReportedErrors { /// 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 { @@ -342,6 +345,7 @@ 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; } } diff --git a/src/lib.rs b/src/lib.rs index 370b7eb6c4e..db48b52f440 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -210,14 +210,22 @@ impl FormatReport { if !new_errors.is_empty() { errs.has_formatting_errors = true; } - if errs.has_operational_errors && errs.has_check_errors { + if errs.has_operational_errors && errs.has_check_errors && errs.has_unformatted_code_errors + { return; } for err in new_errors { match err.kind { - ErrorKind::LineOverflow(..) | ErrorKind::TrailingWhitespace => { + ErrorKind::LineOverflow(..) => { errs.has_operational_errors = true; } + ErrorKind::TrailingWhitespace => { + errs.has_operational_errors = true; + errs.has_unformatted_code_errors = true; + } + ErrorKind::LostComment => { + errs.has_unformatted_code_errors = true; + } ErrorKind::BadIssue(_) | ErrorKind::LicenseCheck | ErrorKind::DeprecatedAttr @@ -294,6 +302,9 @@ fn format_snippet(snippet: &str, config: &Config, is_macro_def: bool) -> Option< config.set().emit_mode(config::EmitMode::Stdout); config.set().verbose(Verbosity::Quiet); config.set().hide_parse_errors(true); + if is_macro_def { + config.set().error_on_unformatted(true); + } let (formatting_error, result) = { let input = Input::Text(snippet.into()); @@ -302,7 +313,8 @@ fn format_snippet(snippet: &str, config: &Config, is_macro_def: bool) -> Option< ( session.errors.has_macro_format_failure || session.out.as_ref().unwrap().is_empty() && !snippet.is_empty() - || result.is_err(), + || result.is_err() + || (is_macro_def && session.has_unformatted_code_errors()), result, ) }; @@ -477,13 +489,18 @@ impl<'b, T: Write + 'b> Session<'b, T> { self.errors.has_diff } + pub fn has_unformatted_code_errors(&self) -> bool { + self.errors.has_unformatted_code_errors + } + pub fn has_no_errors(&self) -> bool { !(self.has_operational_errors() || self.has_parsing_errors() || self.has_formatting_errors() || self.has_check_errors() - || self.has_diff()) - || self.errors.has_macro_format_failure + || self.has_diff() + || self.has_unformatted_code_errors() + || self.errors.has_macro_format_failure) } } |
