diff options
| author | Esteban Küber <esteban@kuber.com.ar> | 2019-02-05 01:35:25 -0800 |
|---|---|---|
| committer | Esteban Küber <esteban@kuber.com.ar> | 2019-02-07 01:42:54 -0800 |
| commit | 99be87aac3b9af941e74b8681643e1963ce75671 (patch) | |
| tree | b18c23ebee3a4c5d52a0f0391141002d50e3d12b /src/libsyntax | |
| parent | 7451cd8dc0b20c012fad1886b321c3dee2052577 (diff) | |
| download | rust-99be87aac3b9af941e74b8681643e1963ce75671.tar.gz rust-99be87aac3b9af941e74b8681643e1963ce75671.zip | |
unify error handling to single method
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/parse/mod.rs | 1 | ||||
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 36 | ||||
| -rw-r--r-- | src/libsyntax/parse/token.rs | 22 |
3 files changed, 25 insertions, 34 deletions
diff --git a/src/libsyntax/parse/mod.rs b/src/libsyntax/parse/mod.rs index 52c7e774ab6..317d6933207 100644 --- a/src/libsyntax/parse/mod.rs +++ b/src/libsyntax/parse/mod.rs @@ -275,6 +275,7 @@ pub fn maybe_file_to_stream( Err(err) => { let mut buffer = Vec::with_capacity(1); err.buffer(&mut buffer); + // Not using `emit_unclosed_delims` to use `db.buffer` for unmatched in srdr.unmatched_braces { let mut db = sess.span_diagnostic.struct_span_err(unmatched.found_span, &format!( "incorrect close delimiter: `{}`", diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 2e605ab6544..4a932ab7bd1 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -724,7 +724,7 @@ impl<'a> Parser<'a> { if let Some(sp) = unmatched.unclosed_span { err.span_label(sp, "in order to close this..."); } - err.span_suggestion_short_with_applicability( + err.span_suggestion_short( self.sess.source_map().next_point(self.prev_span), &format!("{} may belong here", delim.to_string()), delim.to_string(), @@ -1180,7 +1180,7 @@ impl<'a> Parser<'a> { // self.struct_span_err( // self.span, // &format!("expected `>`, found `{}`", self.this_token_to_string()), - // // ).span_suggestion_short_with_applicability( + // // ).span_suggestion_short( // ).emit(); // Ok(()) // } @@ -8503,20 +8503,7 @@ impl<'a> Parser<'a> { module: self.parse_mod_items(&token::Eof, lo)?, span: lo.to(self.span), }); - for unmatched in &self.unclosed_delims { - let mut err = self.struct_span_err(unmatched.found_span, &format!( - "incorrect close delimiter: `{}`", - pprust::token_to_string(&token::Token::CloseDelim(unmatched.found_delim)), - )); - err.span_label(unmatched.found_span, "incorrect close delimiter"); - if let Some(sp) = unmatched.candidate_span { - err.span_label(sp, "close delimiter possibly meant for this"); - } - if let Some(sp) = unmatched.unclosed_span { - err.span_label(sp, "un-closed delimiter"); - } - err.emit(); - } + emit_unclosed_delims(&self.unclosed_delims, self.diagnostic()); self.unclosed_delims.clear(); krate } @@ -8547,3 +8534,20 @@ impl<'a> Parser<'a> { } } } + +pub fn emit_unclosed_delims(unclosed_delims: &[UnmatchedBrace], handler: &errors::Handler) { + for unmatched in unclosed_delims { + let mut err = handler.struct_span_err(unmatched.found_span, &format!( + "incorrect close delimiter: `{}`", + pprust::token_to_string(&token::Token::CloseDelim(unmatched.found_delim)), + )); + err.span_label(unmatched.found_span, "incorrect close delimiter"); + if let Some(sp) = unmatched.candidate_span { + err.span_label(sp, "close delimiter possibly meant for this"); + } + if let Some(sp) = unmatched.unclosed_span { + err.span_label(sp, "un-closed delimiter"); + } + err.emit(); + } +} \ No newline at end of file diff --git a/src/libsyntax/parse/token.rs b/src/libsyntax/parse/token.rs index a0f3113a1cb..d144223d1b8 100644 --- a/src/libsyntax/parse/token.rs +++ b/src/libsyntax/parse/token.rs @@ -10,6 +10,7 @@ use crate::print::pprust; use crate::ptr::P; use crate::symbol::keywords; use crate::syntax::parse::parse_stream_from_source_str; +use crate::syntax::parse::parser::emit_unclosed_delims; use crate::tokenstream::{self, DelimSpan, TokenStream, TokenTree}; use serialize::{Decodable, Decoder, Encodable, Encoder}; @@ -547,12 +548,7 @@ impl Token { let filename = FileName::macro_expansion_source_code(&source); let (tokens, errors) = parse_stream_from_source_str( filename, source, sess, Some(span)); - for err in errors { - sess.span_diagnostic.struct_span_err( - err.found_span, - "unclosed delimiter for_real", - ).emit(); - } + emit_unclosed_delims(&errors, &sess.span_diagnostic); tokens }); @@ -800,12 +796,7 @@ fn prepend_attrs(sess: &ParseSess, sess, Some(span), ); - for err in errors { - sess.span_diagnostic.struct_span_err( - err.found_span, - "unclosed delimiter attrs", - ).emit(); - } + emit_unclosed_delims(&errors, &sess.span_diagnostic); builder.push(stream); continue } @@ -828,12 +819,7 @@ fn prepend_attrs(sess: &ParseSess, sess, Some(span), ); - for err in errors { - sess.span_diagnostic.struct_span_err( - err.found_span, - "unclosed delimiter attrs 2", - ).emit(); - } + emit_unclosed_delims(&errors, &sess.span_diagnostic); brackets.push(stream); } |
