1
Fork 0

Use enum for approximate suggestions

This commit is contained in:
Manish Goregaokar 2018-04-24 15:42:27 -07:00
parent f5203d1073
commit b9c44ebd3f
4 changed files with 29 additions and 15 deletions

View file

@ -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
}

View file

@ -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);

View file

@ -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)]

View file

@ -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 {