Use enum for approximate suggestions
This commit is contained in:
parent
f5203d1073
commit
b9c44ebd3f
4 changed files with 29 additions and 15 deletions
|
@ -11,6 +11,7 @@
|
|||
use CodeSuggestion;
|
||||
use SubstitutionPart;
|
||||
use Substitution;
|
||||
use SuggestionApproximate;
|
||||
use Level;
|
||||
use std::fmt;
|
||||
use syntax_pos::{MultiSpan, Span};
|
||||
|
@ -222,7 +223,7 @@ impl Diagnostic {
|
|||
}],
|
||||
msg: msg.to_owned(),
|
||||
show_code_when_inline: false,
|
||||
approximate: false,
|
||||
approximate: SuggestionApproximate::Unspecified,
|
||||
});
|
||||
self
|
||||
}
|
||||
|
@ -253,7 +254,7 @@ impl Diagnostic {
|
|||
}],
|
||||
msg: msg.to_owned(),
|
||||
show_code_when_inline: true,
|
||||
approximate: false,
|
||||
approximate: SuggestionApproximate::Unspecified,
|
||||
});
|
||||
self
|
||||
}
|
||||
|
@ -269,7 +270,7 @@ impl Diagnostic {
|
|||
}).collect(),
|
||||
msg: msg.to_owned(),
|
||||
show_code_when_inline: true,
|
||||
approximate: false,
|
||||
approximate: SuggestionApproximate::Unspecified,
|
||||
});
|
||||
self
|
||||
}
|
||||
|
@ -277,7 +278,8 @@ impl Diagnostic {
|
|||
/// This is a suggestion that may contain mistakes or fillers and should
|
||||
/// be read and understood by a human.
|
||||
pub fn span_approximate_suggestion(&mut self, sp: Span, msg: &str,
|
||||
suggestion: String) -> &mut Self {
|
||||
suggestion: String,
|
||||
approximate: SuggestionApproximate) -> &mut Self {
|
||||
self.suggestions.push(CodeSuggestion {
|
||||
substitutions: vec![Substitution {
|
||||
parts: vec![SubstitutionPart {
|
||||
|
@ -287,13 +289,14 @@ impl Diagnostic {
|
|||
}],
|
||||
msg: msg.to_owned(),
|
||||
show_code_when_inline: true,
|
||||
approximate: true,
|
||||
approximate,
|
||||
});
|
||||
self
|
||||
}
|
||||
|
||||
pub fn span_approximate_suggestions(&mut self, sp: Span, msg: &str,
|
||||
suggestions: Vec<String>) -> &mut Self {
|
||||
suggestions: Vec<String>,
|
||||
approximate: SuggestionApproximate) -> &mut Self {
|
||||
self.suggestions.push(CodeSuggestion {
|
||||
substitutions: suggestions.into_iter().map(|snippet| Substitution {
|
||||
parts: vec![SubstitutionPart {
|
||||
|
@ -303,7 +306,7 @@ impl Diagnostic {
|
|||
}).collect(),
|
||||
msg: msg.to_owned(),
|
||||
show_code_when_inline: true,
|
||||
approximate: true,
|
||||
approximate,
|
||||
});
|
||||
self
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
use Diagnostic;
|
||||
use DiagnosticId;
|
||||
use DiagnosticStyledString;
|
||||
use SuggestionApproximate;
|
||||
|
||||
use Level;
|
||||
use Handler;
|
||||
|
@ -190,12 +191,14 @@ impl<'a> DiagnosticBuilder<'a> {
|
|||
forward!(pub fn span_approximate_suggestion(&mut self,
|
||||
sp: Span,
|
||||
msg: &str,
|
||||
suggestion: String)
|
||||
suggestion: String,
|
||||
approximate: SuggestionApproximate)
|
||||
-> &mut Self);
|
||||
forward!(pub fn span_approximate_suggestions(&mut self,
|
||||
sp: Span,
|
||||
msg: &str,
|
||||
suggestions: Vec<String>)
|
||||
suggestions: Vec<String>,
|
||||
approximate: SuggestionApproximate)
|
||||
-> &mut Self);
|
||||
forward!(pub fn set_span<S: Into<MultiSpan>>(&mut self, sp: S) -> &mut Self);
|
||||
forward!(pub fn code(&mut self, s: DiagnosticId) -> &mut Self);
|
||||
|
|
|
@ -56,6 +56,14 @@ mod lock;
|
|||
|
||||
use syntax_pos::{BytePos, Loc, FileLinesResult, FileMap, FileName, MultiSpan, Span, NO_EXPANSION};
|
||||
|
||||
#[derive(Copy, Clone, Debug, PartialEq, Hash, RustcEncodable, RustcDecodable)]
|
||||
pub enum SuggestionApproximate {
|
||||
MachineApplicable,
|
||||
HasPlaceholders,
|
||||
MaybeIncorrect,
|
||||
Unspecified
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Hash, RustcEncodable, RustcDecodable)]
|
||||
pub struct CodeSuggestion {
|
||||
/// Each substitute can have multiple variants due to multiple
|
||||
|
@ -87,7 +95,7 @@ pub struct CodeSuggestion {
|
|||
/// Sometimes we may show suggestions with placeholders,
|
||||
/// which are useful for users but not useful for
|
||||
/// tools like rustfix
|
||||
pub approximate: bool,
|
||||
pub approximate: SuggestionApproximate,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Hash, RustcEncodable, RustcDecodable)]
|
||||
|
|
|
@ -23,7 +23,7 @@ use codemap::{CodeMap, FilePathMapping};
|
|||
use syntax_pos::{self, MacroBacktrace, Span, SpanLabel, MultiSpan};
|
||||
use errors::registry::Registry;
|
||||
use errors::{DiagnosticBuilder, SubDiagnostic, CodeSuggestion, CodeMapper};
|
||||
use errors::DiagnosticId;
|
||||
use errors::{DiagnosticId, SuggestionApproximate};
|
||||
use errors::emitter::{Emitter, EmitterWriter};
|
||||
|
||||
use rustc_data_structures::sync::{self, Lrc};
|
||||
|
@ -138,7 +138,7 @@ struct DiagnosticSpan {
|
|||
suggested_replacement: Option<String>,
|
||||
/// If the suggestion is approximate
|
||||
#[rustc_serialize_exclude_null]
|
||||
suggestion_approximate: Option<bool>,
|
||||
suggestion_approximate: Option<SuggestionApproximate>,
|
||||
/// Macro invocations that created the code at this span, if any.
|
||||
expansion: Option<Box<DiagnosticSpanMacroExpansion>>,
|
||||
}
|
||||
|
@ -239,7 +239,7 @@ impl Diagnostic {
|
|||
|
||||
impl DiagnosticSpan {
|
||||
fn from_span_label(span: SpanLabel,
|
||||
suggestion: Option<(&String, bool)>,
|
||||
suggestion: Option<(&String, SuggestionApproximate)>,
|
||||
je: &JsonEmitter)
|
||||
-> DiagnosticSpan {
|
||||
Self::from_span_etc(span.span,
|
||||
|
@ -252,7 +252,7 @@ impl DiagnosticSpan {
|
|||
fn from_span_etc(span: Span,
|
||||
is_primary: bool,
|
||||
label: Option<String>,
|
||||
suggestion: Option<(&String, bool)>,
|
||||
suggestion: Option<(&String, SuggestionApproximate)>,
|
||||
je: &JsonEmitter)
|
||||
-> DiagnosticSpan {
|
||||
// obtain the full backtrace from the `macro_backtrace`
|
||||
|
@ -272,7 +272,7 @@ impl DiagnosticSpan {
|
|||
fn from_span_full(span: Span,
|
||||
is_primary: bool,
|
||||
label: Option<String>,
|
||||
suggestion: Option<(&String, bool)>,
|
||||
suggestion: Option<(&String, SuggestionApproximate)>,
|
||||
mut backtrace: vec::IntoIter<MacroBacktrace>,
|
||||
je: &JsonEmitter)
|
||||
-> DiagnosticSpan {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue