diff options
| author | Oliver Schneider <git-spam-no-reply9815368754983@oli-obk.de> | 2017-10-27 08:21:22 +0200 |
|---|---|---|
| committer | Oliver Schneider <git-spam-no-reply9815368754983@oli-obk.de> | 2017-11-02 10:19:41 +0100 |
| commit | 6ae440e04806ef2a9d21df4ee6f9e0006db5b05f (patch) | |
| tree | 9e32f9822b288a844c88833d0e1b1d8294def353 /src/librustc_errors | |
| parent | 88fb4c4fdad1b97c3499a26e24dcbc60c6853a80 (diff) | |
Make the difference between lint codes and error codes explicit
Diffstat (limited to 'src/librustc_errors')
| -rw-r--r-- | src/librustc_errors/diagnostic.rs | 12 | ||||
| -rw-r--r-- | src/librustc_errors/diagnostic_builder.rs | 5 | ||||
| -rw-r--r-- | src/librustc_errors/emitter.rs | 19 | ||||
| -rw-r--r-- | src/librustc_errors/lib.rs | 32 |
4 files changed, 38 insertions, 30 deletions
diff --git a/src/librustc_errors/diagnostic.rs b/src/librustc_errors/diagnostic.rs index 5e0e624082e..2d70de89355 100644 --- a/src/librustc_errors/diagnostic.rs +++ b/src/librustc_errors/diagnostic.rs @@ -21,12 +21,18 @@ use snippet::Style; pub struct Diagnostic { pub level: Level, pub message: Vec<(String, Style)>, - pub code: Option<String>, + pub code: Option<DiagnosticId>, pub span: MultiSpan, pub children: Vec<SubDiagnostic>, pub suggestions: Vec<CodeSuggestion>, } +#[derive(Clone, Debug, PartialEq, Hash, RustcEncodable, RustcDecodable)] +pub enum DiagnosticId { + Error(String), + Lint(String), +} + /// For example a note attached to an error. #[derive(Clone, Debug, PartialEq, Hash, RustcEncodable, RustcDecodable)] pub struct SubDiagnostic { @@ -81,7 +87,7 @@ impl Diagnostic { Diagnostic::new_with_code(level, None, message) } - pub fn new_with_code(level: Level, code: Option<String>, message: &str) -> Self { + pub fn new_with_code(level: Level, code: Option<DiagnosticId>, message: &str) -> Self { Diagnostic { level, message: vec![(message.to_owned(), Style::NoStyle)], @@ -267,7 +273,7 @@ impl Diagnostic { self } - pub fn code(&mut self, s: String) -> &mut Self { + pub fn code(&mut self, s: DiagnosticId) -> &mut Self { self.code = Some(s); self } diff --git a/src/librustc_errors/diagnostic_builder.rs b/src/librustc_errors/diagnostic_builder.rs index 2cd433bfe3a..40b5810454b 100644 --- a/src/librustc_errors/diagnostic_builder.rs +++ b/src/librustc_errors/diagnostic_builder.rs @@ -9,6 +9,7 @@ // except according to those terms. use Diagnostic; +use DiagnosticId; use DiagnosticStyledString; use Level; @@ -192,7 +193,7 @@ impl<'a> DiagnosticBuilder<'a> { suggestions: Vec<String>) -> &mut Self); forward!(pub fn set_span<S: Into<MultiSpan>>(&mut self, sp: S) -> &mut Self); - forward!(pub fn code(&mut self, s: String) -> &mut Self); + forward!(pub fn code(&mut self, s: DiagnosticId) -> &mut Self); /// Convenience function for internal use, clients should use one of the /// struct_* methods on Handler. @@ -204,7 +205,7 @@ impl<'a> DiagnosticBuilder<'a> { /// struct_* methods on Handler. pub fn new_with_code(handler: &'a Handler, level: Level, - code: Option<String>, + code: Option<DiagnosticId>, message: &str) -> DiagnosticBuilder<'a> { let diagnostic = Diagnostic::new_with_code(level, code, message); diff --git a/src/librustc_errors/emitter.rs b/src/librustc_errors/emitter.rs index 356b3dadb7b..011be74ee7c 100644 --- a/src/librustc_errors/emitter.rs +++ b/src/librustc_errors/emitter.rs @@ -12,7 +12,7 @@ use self::Destination::*; use syntax_pos::{DUMMY_SP, FileMap, Span, MultiSpan, CharPos}; -use {Level, CodeSuggestion, DiagnosticBuilder, SubDiagnostic, CodeMapper}; +use {Level, CodeSuggestion, DiagnosticBuilder, SubDiagnostic, CodeMapper, DiagnosticId}; use RenderSpan::*; use snippet::{Annotation, AnnotationType, Line, MultilineAnnotation, StyledString, Style}; use styled_buffer::StyledBuffer; @@ -886,7 +886,7 @@ impl EmitterWriter { fn emit_message_default(&mut self, msp: &MultiSpan, msg: &Vec<(String, Style)>, - code: &Option<String>, + code: &Option<DiagnosticId>, level: &Level, max_line_num_len: usize, is_secondary: bool) @@ -905,14 +905,11 @@ impl EmitterWriter { self.msg_to_buffer(&mut buffer, msg, max_line_num_len, "note", None); } else { buffer.append(0, &level.to_string(), Style::Level(level.clone())); - match code { - // only render error codes, not lint codes - &Some(ref code) if code.starts_with("E") && code.len() == 5 => { - buffer.append(0, "[", Style::Level(level.clone())); - buffer.append(0, &code, Style::Level(level.clone())); - buffer.append(0, "]", Style::Level(level.clone())); - } - _ => {} + // only render error codes, not lint codes + if let Some(DiagnosticId::Error(ref code)) = *code { + buffer.append(0, "[", Style::Level(level.clone())); + buffer.append(0, &code, Style::Level(level.clone())); + buffer.append(0, "]", Style::Level(level.clone())); } buffer.append(0, ": ", Style::HeaderMsg); for &(ref text, _) in msg.iter() { @@ -1175,7 +1172,7 @@ impl EmitterWriter { fn emit_messages_default(&mut self, level: &Level, message: &Vec<(String, Style)>, - code: &Option<String>, + code: &Option<DiagnosticId>, span: &MultiSpan, children: &Vec<SubDiagnostic>) { let max_line_num = self.get_max_line_num(span, children); diff --git a/src/librustc_errors/lib.rs b/src/librustc_errors/lib.rs index ba7268a4bc3..b30ee7016ab 100644 --- a/src/librustc_errors/lib.rs +++ b/src/librustc_errors/lib.rs @@ -262,7 +262,7 @@ impl error::Error for ExplicitBug { } } -pub use diagnostic::{Diagnostic, SubDiagnostic, DiagnosticStyledString}; +pub use diagnostic::{Diagnostic, SubDiagnostic, DiagnosticStyledString, DiagnosticId}; pub use diagnostic_builder::DiagnosticBuilder; /// A handler deals with errors; certain errors @@ -337,11 +337,11 @@ impl Handler { pub fn struct_span_warn_with_code<'a, S: Into<MultiSpan>>(&'a self, sp: S, msg: &str, - code: &str) + code: DiagnosticId) -> DiagnosticBuilder<'a> { let mut result = DiagnosticBuilder::new(self, Level::Warning, msg); result.set_span(sp); - result.code(code.to_owned()); + result.code(code); if !self.can_emit_warnings { result.cancel(); } @@ -365,20 +365,24 @@ impl Handler { pub fn struct_span_err_with_code<'a, S: Into<MultiSpan>>(&'a self, sp: S, msg: &str, - code: &str) + code: DiagnosticId) -> DiagnosticBuilder<'a> { let mut result = DiagnosticBuilder::new(self, Level::Error, msg); result.set_span(sp); - result.code(code.to_owned()); + result.code(code); result } // FIXME: This method should be removed (every error should have an associated error code). pub fn struct_err<'a>(&'a self, msg: &str) -> DiagnosticBuilder<'a> { DiagnosticBuilder::new(self, Level::Error, msg) } - pub fn struct_err_with_code<'a>(&'a self, msg: &str, code: &str) -> DiagnosticBuilder<'a> { + pub fn struct_err_with_code<'a>( + &'a self, + msg: &str, + code: DiagnosticId, + ) -> DiagnosticBuilder<'a> { let mut result = DiagnosticBuilder::new(self, Level::Error, msg); - result.code(code.to_owned()); + result.code(code); result } pub fn struct_span_fatal<'a, S: Into<MultiSpan>>(&'a self, @@ -392,11 +396,11 @@ impl Handler { pub fn struct_span_fatal_with_code<'a, S: Into<MultiSpan>>(&'a self, sp: S, msg: &str, - code: &str) + code: DiagnosticId) -> DiagnosticBuilder<'a> { let mut result = DiagnosticBuilder::new(self, Level::Fatal, msg); result.set_span(sp); - result.code(code.to_owned()); + result.code(code); result } pub fn struct_fatal<'a>(&'a self, msg: &str) -> DiagnosticBuilder<'a> { @@ -420,7 +424,7 @@ impl Handler { pub fn span_fatal_with_code<S: Into<MultiSpan>>(&self, sp: S, msg: &str, - code: &str) + code: DiagnosticId) -> FatalError { self.emit_with_code(&sp.into(), msg, code, Fatal); FatalError @@ -436,13 +440,13 @@ impl Handler { result.set_span(sp); result } - pub fn span_err_with_code<S: Into<MultiSpan>>(&self, sp: S, msg: &str, code: &str) { + pub fn span_err_with_code<S: Into<MultiSpan>>(&self, sp: S, msg: &str, code: DiagnosticId) { self.emit_with_code(&sp.into(), msg, code, Error); } pub fn span_warn<S: Into<MultiSpan>>(&self, sp: S, msg: &str) { self.emit(&sp.into(), msg, Warning); } - pub fn span_warn_with_code<S: Into<MultiSpan>>(&self, sp: S, msg: &str, code: &str) { + pub fn span_warn_with_code<S: Into<MultiSpan>>(&self, sp: S, msg: &str, code: DiagnosticId) { self.emit_with_code(&sp.into(), msg, code, Warning); } pub fn span_bug<S: Into<MultiSpan>>(&self, sp: S, msg: &str) -> ! { @@ -546,11 +550,11 @@ impl Handler { self.abort_if_errors(); } } - pub fn emit_with_code(&self, msp: &MultiSpan, msg: &str, code: &str, lvl: Level) { + pub fn emit_with_code(&self, msp: &MultiSpan, msg: &str, code: DiagnosticId, lvl: Level) { if lvl == Warning && !self.can_emit_warnings { return; } - let mut db = DiagnosticBuilder::new_with_code(self, lvl, Some(code.to_owned()), msg); + let mut db = DiagnosticBuilder::new_with_code(self, lvl, Some(code), msg); db.set_span(msp.clone()); db.emit(); if !self.continue_after_error.get() { |
