Skip to content

Commit

Permalink
Replace item names containing an error code with something more meani…
Browse files Browse the repository at this point in the history
…ngful

or inline such functions if useless.
  • Loading branch information
fmease committed Apr 25, 2024
1 parent 68df650 commit c7ebe19
Show file tree
Hide file tree
Showing 19 changed files with 55 additions and 50 deletions.
11 changes: 5 additions & 6 deletions compiler/rustc_ast_passes/src/ast_validation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -632,20 +632,19 @@ impl<'a> AstValidator<'a> {
}
}

fn emit_e0568(&self, span: Span, ident: Span) {
self.dcx().emit_err(errors::AutoTraitBounds { span, ident });
}

fn deny_super_traits(&self, bounds: &GenericBounds, ident_span: Span) {
if let [.., last] = &bounds[..] {
let span = ident_span.shrink_to_hi().to(last.span());
self.emit_e0568(span, ident_span);
self.dcx().emit_err(errors::AutoTraitBounds { span, ident: ident_span });
}
}

fn deny_where_clause(&self, where_clause: &WhereClause, ident_span: Span) {
if !where_clause.predicates.is_empty() {
self.emit_e0568(where_clause.span, ident_span);
// FIXME: The current diagnostic is misleading since it only talks about
// super trait and lifetime bounds while we should just say “bounds”.
self.dcx()
.emit_err(errors::AutoTraitBounds { span: where_clause.span, ident: ident_span });
}
}

Expand Down
6 changes: 6 additions & 0 deletions compiler/rustc_hir_analysis/messages.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,12 @@ hir_analysis_inherent_ty_outside_relevant = cannot define inherent `impl` for a
.help = consider moving this inherent impl into the crate defining the type if possible
.span_help = alternatively add `#[rustc_allow_incoherent_impl]` to the relevant impl items
hir_analysis_invalid_receiver_ty = invalid `self` parameter type: `{$receiver_ty}`
.note = type of `self` must be `Self` or a type that dereferences to it
hir_analysis_invalid_receiver_ty_help =
consider changing to `self`, `&self`, `&mut self`, `self: Box<Self>`, `self: Rc<Self>`, `self: Arc<Self>`, or `self: Pin<P>` (where P is one of the previous types except `Self`)
hir_analysis_invalid_union_field =
field must implement `Copy` or be wrapped in `ManuallyDrop<...>` to be used in a union
.note = union fields must not have drop side-effects, which is currently enforced via either `Copy` or `ManuallyDrop<...>`
Expand Down
18 changes: 4 additions & 14 deletions compiler/rustc_hir_analysis/src/check/wfcheck.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ use crate::autoderef::Autoderef;
use crate::collect::CollectItemTypesVisitor;
use crate::constrained_generic_params::{identify_constrained_generic_params, Parameter};
use crate::errors;
use crate::fluent_generated as fluent;

use hir::intravisit::Visitor;
use rustc_ast as ast;
Expand Down Expand Up @@ -1636,10 +1637,6 @@ fn check_fn_or_method<'tcx>(
}
}

const HELP_FOR_SELF_TYPE: &str = "consider changing to `self`, `&self`, `&mut self`, `self: Box<Self>`, \
`self: Rc<Self>`, `self: Arc<Self>`, or `self: Pin<P>` (where P is one \
of the previous types except `Self`)";

#[instrument(level = "debug", skip(wfcx))]
fn check_method_receiver<'tcx>(
wfcx: &WfCheckingCtxt<'_, 'tcx>,
Expand Down Expand Up @@ -1675,7 +1672,7 @@ fn check_method_receiver<'tcx>(
if tcx.features().arbitrary_self_types {
if !receiver_is_valid(wfcx, span, receiver_ty, self_ty, true) {
// Report error; `arbitrary_self_types` was enabled.
return Err(e0307(tcx, span, receiver_ty));
return Err(tcx.dcx().emit_err(errors::InvalidReceiverTy { span, receiver_ty }));
}
} else {
if !receiver_is_valid(wfcx, span, receiver_ty, self_ty, false) {
Expand All @@ -1690,24 +1687,17 @@ fn check_method_receiver<'tcx>(
the `arbitrary_self_types` feature",
),
)
.with_help(HELP_FOR_SELF_TYPE)
.with_help(fluent::hir_analysis_invalid_receiver_ty_help)
.emit()
} else {
// Report error; would not have worked with `arbitrary_self_types`.
e0307(tcx, span, receiver_ty)
tcx.dcx().emit_err(errors::InvalidReceiverTy { span, receiver_ty })
});
}
}
Ok(())
}

fn e0307(tcx: TyCtxt<'_>, span: Span, receiver_ty: Ty<'_>) -> ErrorGuaranteed {
struct_span_code_err!(tcx.dcx(), span, E0307, "invalid `self` parameter type: {receiver_ty}")
.with_note("type of `self` must be `Self` or a type that dereferences to it")
.with_help(HELP_FOR_SELF_TYPE)
.emit()
}

/// Returns whether `receiver_ty` would be considered a valid receiver type for `self_ty`. If
/// `arbitrary_self_types` is enabled, `receiver_ty` must transitively deref to `self_ty`, possibly
/// through a `*const/mut T` raw pointer. If the feature is not enabled, the requirements are more
Expand Down
10 changes: 10 additions & 0 deletions compiler/rustc_hir_analysis/src/errors.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1641,3 +1641,13 @@ pub struct NonConstRange {
#[primary_span]
pub span: Span,
}

#[derive(Diagnostic)]
#[diag(hir_analysis_invalid_receiver_ty, code = E0307)]
#[note]
#[help(hir_analysis_invalid_receiver_ty_help)]
pub struct InvalidReceiverTy<'tcx> {
#[primary_span]
pub span: Span,
pub receiver_ty: Ty<'tcx>,
}
14 changes: 10 additions & 4 deletions compiler/rustc_hir_typeck/src/pat.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1228,16 +1228,22 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
);
}
} else {
// Pattern has wrong number of fields.
let e =
self.e0023(pat.span, res, qpath, subpats, &variant.fields.raw, expected, had_err);
let e = self.emit_err_pat_wrong_number_of_fields(
pat.span,
res,
qpath,
subpats,
&variant.fields.raw,
expected,
had_err,
);
on_error(e);
return Ty::new_error(tcx, e);
}
pat_ty
}

fn e0023(
fn emit_err_pat_wrong_number_of_fields(
&self,
pat_span: Span,
res: Res,
Expand Down
16 changes: 5 additions & 11 deletions compiler/rustc_mir_build/src/thir/pattern/check_match.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,7 @@ use rustc_arena::{DroplessArena, TypedArena};
use rustc_ast::Mutability;
use rustc_data_structures::fx::FxIndexSet;
use rustc_data_structures::stack::ensure_sufficient_stack;
use rustc_errors::{
codes::*, struct_span_code_err, Applicability, Diag, ErrorGuaranteed, MultiSpan,
};
use rustc_errors::{codes::*, struct_span_code_err, Applicability, ErrorGuaranteed, MultiSpan};
use rustc_hir::def::*;
use rustc_hir::def_id::LocalDefId;
use rustc_hir::{self as hir, BindingMode, ByRef, HirId};
Expand All @@ -24,7 +22,6 @@ use rustc_middle::ty::{self, AdtDef, Ty, TyCtxt};
use rustc_session::lint::builtin::{
BINDINGS_WITH_VARIANT_NAME, IRREFUTABLE_LET_PATTERNS, UNREACHABLE_PATTERNS,
};
use rustc_session::Session;
use rustc_span::hygiene::DesugaringKind;
use rustc_span::{sym, Span};

Expand Down Expand Up @@ -64,10 +61,6 @@ pub(crate) fn check_match(tcx: TyCtxt<'_>, def_id: LocalDefId) -> Result<(), Err
visitor.error
}

fn create_e0004(sess: &Session, sp: Span, error_message: String) -> Diag<'_> {
struct_span_code_err!(sess.dcx(), sp, E0004, "{}", &error_message)
}

#[derive(Debug, Copy, Clone, PartialEq)]
enum RefutableFlag {
Irrefutable,
Expand Down Expand Up @@ -975,10 +968,11 @@ fn report_non_exhaustive_match<'p, 'tcx>(

// FIXME: migration of this diagnostic will require list support
let joined_patterns = joined_uncovered_patterns(cx, &witnesses);
let mut err = create_e0004(
cx.tcx.sess,
let mut err = struct_span_code_err!(
cx.tcx.dcx(),
sp,
format!("non-exhaustive patterns: {joined_patterns} not covered"),
E0004,
"non-exhaustive patterns: {joined_patterns} not covered"
);
err.span_label(
sp,
Expand Down
2 changes: 1 addition & 1 deletion tests/ui/async-await/inference_var_self_argument.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
trait Foo {
async fn foo(self: &dyn Foo) {
//~^ ERROR: `Foo` cannot be made into an object
//~| ERROR invalid `self` parameter type: &dyn Foo
//~| ERROR invalid `self` parameter type: `&dyn Foo`
todo!()
}
}
Expand Down
2 changes: 1 addition & 1 deletion tests/ui/async-await/inference_var_self_argument.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ LL | async fn foo(self: &dyn Foo) {
| ^^^ ...because method `foo` is `async`
= help: consider moving `foo` to another trait

error[E0307]: invalid `self` parameter type: &dyn Foo
error[E0307]: invalid `self` parameter type: `&dyn Foo`
--> $DIR/inference_var_self_argument.rs:5:24
|
LL | async fn foo(self: &dyn Foo) {
Expand Down
2 changes: 1 addition & 1 deletion tests/ui/async-await/issue-66312.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ error[E0308]: mismatched types
LL | if x.is_some() {
| ^^^^^^^^^^^ expected `bool`, found `()`

error[E0307]: invalid `self` parameter type: T
error[E0307]: invalid `self` parameter type: `T`
--> $DIR/issue-66312.rs:4:22
|
LL | fn is_some(self: T);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
use std::cell::Cell;

trait Trait{
fn cell(self: Cell<&Self>); //~ ERROR invalid `self` parameter type: Cell<&Self>
fn cell(self: Cell<&Self>); //~ ERROR invalid `self` parameter type: `Cell<&Self>`
}

fn main() {}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
error[E0307]: invalid `self` parameter type: Cell<&Self>
error[E0307]: invalid `self` parameter type: `Cell<&Self>`
--> $DIR/feature-gate-dispatch-from-dyn-cell.rs:6:19
|
LL | fn cell(self: Cell<&Self>);
Expand Down
2 changes: 1 addition & 1 deletion tests/ui/issues/issue-56806.stderr
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
error[E0307]: invalid `self` parameter type: Box<(dyn Trait + 'static)>
error[E0307]: invalid `self` parameter type: `Box<(dyn Trait + 'static)>`
--> $DIR/issue-56806.rs:2:34
|
LL | fn dyn_instead_of_self(self: Box<dyn Trait>);
Expand Down
2 changes: 1 addition & 1 deletion tests/ui/self/arbitrary-self-opaque.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ type Bar = impl Sized;

impl Foo {
fn foo(self: Bar) {}
//~^ ERROR: invalid `self` parameter type: Bar
//~^ ERROR: invalid `self` parameter type: `Bar`
}

fn main() {}
2 changes: 1 addition & 1 deletion tests/ui/self/arbitrary-self-opaque.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ LL | type Bar = impl Sized;
|
= note: `Bar` must be used in combination with a concrete type within the same module

error[E0307]: invalid `self` parameter type: Bar
error[E0307]: invalid `self` parameter type: `Bar`
--> $DIR/arbitrary-self-opaque.rs:8:18
|
LL | fn foo(self: Bar) {}
Expand Down
2 changes: 1 addition & 1 deletion tests/ui/span/issue-27522.stderr
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
error[E0307]: invalid `self` parameter type: &SomeType
error[E0307]: invalid `self` parameter type: `&SomeType`
--> $DIR/issue-27522.rs:6:22
|
LL | fn handler(self: &SomeType);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ help: consider changing method `bar`'s `self` parameter to be `&self`
LL | fn bar(self: &Self) {}
| ~~~~~

error[E0307]: invalid `self` parameter type: ()
error[E0307]: invalid `self` parameter type: `()`
--> $DIR/object-unsafe-trait-should-use-where-sized.rs:6:18
|
LL | fn bar(self: ()) {}
Expand Down
2 changes: 1 addition & 1 deletion tests/ui/traits/issue-78372.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ impl<T> DispatchFromDyn<Smaht<U, MISC>> for T {} //~ ERROR cannot find type `U`
//~| ERROR the trait `DispatchFromDyn` may only be implemented for a coercion between structures
trait Foo: X<u32> {}
trait X<T> {
fn foo(self: Smaht<Self, T>); //~ ERROR: invalid `self`
fn foo(self: Smaht<Self, T>); //~ ERROR: invalid `self` parameter type
}
trait Marker {}
impl Marker for dyn Foo {}
Expand Down
2 changes: 1 addition & 1 deletion tests/ui/traits/issue-78372.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ LL | trait X<T> {
LL | fn foo(self: Smaht<Self, T>);
| ^^^^^^^^^^^^^^ ...because method `foo`'s `self` parameter cannot be dispatched on

error[E0307]: invalid `self` parameter type: Smaht<Self, T>
error[E0307]: invalid `self` parameter type: `Smaht<Self, T>`
--> $DIR/issue-78372.rs:9:18
|
LL | fn foo(self: Smaht<Self, T>);
Expand Down
6 changes: 3 additions & 3 deletions tests/ui/ufcs/ufcs-explicit-self-bad.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ LL | fn dummy2(&self);
= note: expected signature `fn(&&'a Bar<_>)`
found signature `fn(&Bar<_>)`

error[E0307]: invalid `self` parameter type: isize
error[E0307]: invalid `self` parameter type: `isize`
--> $DIR/ufcs-explicit-self-bad.rs:8:18
|
LL | fn foo(self: isize, x: isize) -> isize {
Expand All @@ -24,7 +24,7 @@ LL | fn foo(self: isize, x: isize) -> isize {
= note: type of `self` must be `Self` or a type that dereferences to it
= help: consider changing to `self`, `&self`, `&mut self`, `self: Box<Self>`, `self: Rc<Self>`, `self: Arc<Self>`, or `self: Pin<P>` (where P is one of the previous types except `Self`)

error[E0307]: invalid `self` parameter type: Bar<isize>
error[E0307]: invalid `self` parameter type: `Bar<isize>`
--> $DIR/ufcs-explicit-self-bad.rs:19:18
|
LL | fn foo(self: Bar<isize>, x: isize) -> isize {
Expand All @@ -33,7 +33,7 @@ LL | fn foo(self: Bar<isize>, x: isize) -> isize {
= note: type of `self` must be `Self` or a type that dereferences to it
= help: consider changing to `self`, `&self`, `&mut self`, `self: Box<Self>`, `self: Rc<Self>`, `self: Arc<Self>`, or `self: Pin<P>` (where P is one of the previous types except `Self`)

error[E0307]: invalid `self` parameter type: &Bar<usize>
error[E0307]: invalid `self` parameter type: `&Bar<usize>`
--> $DIR/ufcs-explicit-self-bad.rs:23:18
|
LL | fn bar(self: &Bar<usize>, x: isize) -> isize {
Expand Down

0 comments on commit c7ebe19

Please sign in to comment.