Skip to content

Use enum for approximate suggestions #50204

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Apr 30, 2018
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 10 additions & 7 deletions src/librustc_errors/diagnostic.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
use CodeSuggestion;
use SubstitutionPart;
use Substitution;
use SuggestionApproximate;
use Level;
use std::fmt;
use syntax_pos::{MultiSpan, Span};
Expand Down Expand Up @@ -222,7 +223,7 @@ impl Diagnostic {
}],
msg: msg.to_owned(),
show_code_when_inline: false,
approximate: false,
approximate: SuggestionApproximate::Unspecified,
});
self
}
Expand Down Expand Up @@ -253,7 +254,7 @@ impl Diagnostic {
}],
msg: msg.to_owned(),
show_code_when_inline: true,
approximate: false,
approximate: SuggestionApproximate::Unspecified,
});
self
}
Expand All @@ -269,15 +270,16 @@ impl Diagnostic {
}).collect(),
msg: msg.to_owned(),
show_code_when_inline: true,
approximate: false,
approximate: SuggestionApproximate::Unspecified,
});
self
}

/// 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 {
Expand All @@ -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 {
Expand All @@ -303,7 +306,7 @@ impl Diagnostic {
}).collect(),
msg: msg.to_owned(),
show_code_when_inline: true,
approximate: true,
approximate,
});
self
}
Expand Down
7 changes: 5 additions & 2 deletions src/librustc_errors/diagnostic_builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
use Diagnostic;
use DiagnosticId;
use DiagnosticStyledString;
use SuggestionApproximate;

use Level;
use Handler;
Expand Down Expand Up @@ -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);
Expand Down
10 changes: 9 additions & 1 deletion src/librustc_errors/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I feel like this should have a different name given that it seems to include non-approximate (MachineApplicable) suggestions. SuggestionDefiniteness?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see what you mean. My first suggestion would've been SuggestionApplicability, though. (Let the bikeshedding begin)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like Applicability

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated

MachineApplicable,
HasPlaceholders,
MaybeIncorrect,
Unspecified
}

#[derive(Clone, Debug, PartialEq, Hash, RustcEncodable, RustcDecodable)]
pub struct CodeSuggestion {
/// Each substitute can have multiple variants due to multiple
Expand Down Expand Up @@ -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)]
Expand Down
10 changes: 5 additions & 5 deletions src/libsyntax/json.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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};
Expand Down Expand Up @@ -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>>,
}
Expand Down Expand Up @@ -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,
Expand All @@ -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`
Expand All @@ -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 {
Expand Down