mirror of
https://github.com/rust-lang/rust.git
synced 2025-01-05 12:25:13 +00:00
properly deprecate suggestion methods
This commit is contained in:
parent
920192490f
commit
02843d9eb7
@ -33,7 +33,11 @@ pub struct DiagnosticBuilder<'a> {
|
||||
/// it easy to declare such methods on the builder.
|
||||
macro_rules! forward {
|
||||
// Forward pattern for &self -> &Self
|
||||
(pub fn $n:ident(&self, $($name:ident: $ty:ty),* $(,)*) -> &Self) => {
|
||||
(
|
||||
$(#[$attrs:meta])*
|
||||
pub fn $n:ident(&self, $($name:ident: $ty:ty),* $(,)*) -> &Self
|
||||
) => {
|
||||
$(#[$attrs])*
|
||||
pub fn $n(&self, $($name: $ty),*) -> &Self {
|
||||
#[allow(deprecated)]
|
||||
self.diagnostic.$n($($name),*);
|
||||
@ -42,7 +46,11 @@ macro_rules! forward {
|
||||
};
|
||||
|
||||
// Forward pattern for &mut self -> &mut Self
|
||||
(pub fn $n:ident(&mut self, $($name:ident: $ty:ty),* $(,)*) -> &mut Self) => {
|
||||
(
|
||||
$(#[$attrs:meta])*
|
||||
pub fn $n:ident(&mut self, $($name:ident: $ty:ty),* $(,)*) -> &mut Self
|
||||
) => {
|
||||
$(#[$attrs])*
|
||||
pub fn $n(&mut self, $($name: $ty),*) -> &mut Self {
|
||||
#[allow(deprecated)]
|
||||
self.diagnostic.$n($($name),*);
|
||||
@ -52,10 +60,15 @@ macro_rules! forward {
|
||||
|
||||
// Forward pattern for &mut self -> &mut Self, with S: Into<MultiSpan>
|
||||
// type parameter. No obvious way to make this more generic.
|
||||
(pub fn $n:ident<S: Into<MultiSpan>>(
|
||||
&mut self,
|
||||
$($name:ident: $ty:ty),*
|
||||
$(,)*) -> &mut Self) => {
|
||||
(
|
||||
$(#[$attrs:meta])*
|
||||
pub fn $n:ident<S: Into<MultiSpan>>(
|
||||
&mut self,
|
||||
$($name:ident: $ty:ty),*
|
||||
$(,)*
|
||||
) -> &mut Self
|
||||
) => {
|
||||
$(#[$attrs])*
|
||||
pub fn $n<S: Into<MultiSpan>>(&mut self, $($name: $ty),*) -> &mut Self {
|
||||
#[allow(deprecated)]
|
||||
self.diagnostic.$n($($name),*);
|
||||
@ -177,34 +190,43 @@ impl<'a> DiagnosticBuilder<'a> {
|
||||
msg: &str,
|
||||
) -> &mut Self);
|
||||
|
||||
#[deprecated(note = "Use `span_suggestion_short_with_applicability`")]
|
||||
forward!(pub fn span_suggestion_short(
|
||||
&mut self,
|
||||
sp: Span,
|
||||
msg: &str,
|
||||
suggestion: String,
|
||||
) -> &mut Self);
|
||||
forward!(
|
||||
#[deprecated(note = "Use `span_suggestion_short_with_applicability`")]
|
||||
pub fn span_suggestion_short(
|
||||
&mut self,
|
||||
sp: Span,
|
||||
msg: &str,
|
||||
suggestion: String,
|
||||
) -> &mut Self
|
||||
);
|
||||
|
||||
#[deprecated(note = "Use `multipart_suggestion_with_applicability`")]
|
||||
forward!(pub fn multipart_suggestion(
|
||||
&mut self,
|
||||
msg: &str,
|
||||
suggestion: Vec<(Span, String)>,
|
||||
) -> &mut Self);
|
||||
forward!(
|
||||
#[deprecated(note = "Use `multipart_suggestion_with_applicability`")]
|
||||
pub fn multipart_suggestion(
|
||||
&mut self,
|
||||
msg: &str,
|
||||
suggestion: Vec<(Span, String)>,
|
||||
) -> &mut Self
|
||||
);
|
||||
|
||||
#[deprecated(note = "Use `span_suggestion_with_applicability`")]
|
||||
forward!(pub fn span_suggestion(&mut self,
|
||||
sp: Span,
|
||||
msg: &str,
|
||||
suggestion: String,
|
||||
) -> &mut Self);
|
||||
forward!(
|
||||
#[deprecated(note = "Use `span_suggestion_with_applicability`")]
|
||||
pub fn span_suggestion(
|
||||
&mut self,
|
||||
sp: Span,
|
||||
msg: &str,
|
||||
suggestion: String,
|
||||
) -> &mut Self
|
||||
);
|
||||
|
||||
#[deprecated(note = "Use `span_suggestions_with_applicability`")]
|
||||
forward!(pub fn span_suggestions(&mut self,
|
||||
sp: Span,
|
||||
msg: &str,
|
||||
suggestions: Vec<String>,
|
||||
) -> &mut Self);
|
||||
forward!(
|
||||
#[deprecated(note = "Use `span_suggestions_with_applicability`")]
|
||||
pub fn span_suggestions(&mut self,
|
||||
sp: Span,
|
||||
msg: &str,
|
||||
suggestions: Vec<String>,
|
||||
) -> &mut Self
|
||||
);
|
||||
|
||||
pub fn multipart_suggestion_with_applicability(&mut self,
|
||||
msg: &str,
|
||||
|
@ -21,6 +21,8 @@ use std::cell::Cell;
|
||||
use std::ptr;
|
||||
use rustc_data_structures::sync::Lrc;
|
||||
|
||||
use errors::Applicability;
|
||||
|
||||
use syntax::ast::{Name, Ident};
|
||||
use syntax::attr;
|
||||
|
||||
@ -345,7 +347,12 @@ impl<'a> Resolver<'a> {
|
||||
let module = if orig_name.is_none() && ident.name == keywords::SelfLower.name() {
|
||||
self.session
|
||||
.struct_span_err(item.span, "`extern crate self;` requires renaming")
|
||||
.span_suggestion(item.span, "try", "extern crate self as name;".into())
|
||||
.span_suggestion_with_applicability(
|
||||
item.span,
|
||||
"try",
|
||||
"extern crate self as name;".into(),
|
||||
Applicability::HasPlaceholders,
|
||||
)
|
||||
.emit();
|
||||
return;
|
||||
} else if orig_name == Some(keywords::SelfLower.name()) {
|
||||
|
@ -4823,8 +4823,13 @@ impl<'a> Resolver<'a> {
|
||||
} else if ident.span.rust_2018() {
|
||||
let msg = "relative paths are not supported in visibilities on 2018 edition";
|
||||
self.session.struct_span_err(ident.span, msg)
|
||||
.span_suggestion(path.span, "try", format!("crate::{}", path))
|
||||
.emit();
|
||||
.span_suggestion_with_applicability(
|
||||
path.span,
|
||||
"try",
|
||||
format!("crate::{}", path),
|
||||
Applicability::MaybeIncorrect,
|
||||
)
|
||||
.emit();
|
||||
return ty::Visibility::Public;
|
||||
} else {
|
||||
let ctxt = ident.span.ctxt();
|
||||
|
@ -1,5 +1,6 @@
|
||||
use check::{FnCtxt, Expectation, Diverges, Needs};
|
||||
use check::coercion::CoerceMany;
|
||||
use errors::Applicability;
|
||||
use rustc::hir::{self, PatKind};
|
||||
use rustc::hir::def::{Def, CtorKind};
|
||||
use rustc::hir::pat_util::EnumerateAndAdjustIterator;
|
||||
@ -989,7 +990,13 @@ https://doc.rust-lang.org/reference/types.html#trait-objects");
|
||||
let suggested_name =
|
||||
find_best_match_for_name(input, &ident.as_str(), None);
|
||||
if let Some(suggested_name) = suggested_name {
|
||||
err.span_suggestion(*span, "did you mean", suggested_name.to_string());
|
||||
err.span_suggestion_with_applicability(
|
||||
*span,
|
||||
"did you mean",
|
||||
suggested_name.to_string(),
|
||||
Applicability::MaybeIncorrect,
|
||||
);
|
||||
|
||||
// we don't want to throw `E0027` in case we have thrown `E0026` for them
|
||||
unmentioned_fields.retain(|&x| x.as_str() != suggested_name.as_str());
|
||||
}
|
||||
|
@ -4063,12 +4063,13 @@ impl<'a> Parser<'a> {
|
||||
|
||||
if let Some(mut err) = delayed_err {
|
||||
if let Some(etc_span) = etc_span {
|
||||
err.multipart_suggestion(
|
||||
err.multipart_suggestion_with_applicability(
|
||||
"move the `..` to the end of the field list",
|
||||
vec![
|
||||
(etc_span, String::new()),
|
||||
(self.span, format!("{}.. }}", if ate_comma { "" } else { ", " })),
|
||||
],
|
||||
Applicability::MachineApplicable,
|
||||
);
|
||||
}
|
||||
err.emit();
|
||||
@ -6913,7 +6914,11 @@ impl<'a> Parser<'a> {
|
||||
|
||||
let mut err = self.struct_span_err(fixed_name_sp, error_msg);
|
||||
err.span_label(fixed_name_sp, "dash-separated idents are not valid");
|
||||
err.multipart_suggestion(suggestion_msg, replacement);
|
||||
err.multipart_suggestion_with_applicability(
|
||||
suggestion_msg,
|
||||
replacement,
|
||||
Applicability::MachineApplicable,
|
||||
);
|
||||
err.emit();
|
||||
}
|
||||
Ok(ident)
|
||||
|
Loading…
Reference in New Issue
Block a user