Skip to content

Commit

Permalink
Rollup merge of rust-lang#56366 - alexreg:stabilise-self_in_typedefs,…
Browse files Browse the repository at this point in the history
… r=Centril

Stabilize self_in_typedefs feature

[**Tracking Issue**](rust-lang#49303)

r? @Centril
  • Loading branch information
Centril committed Dec 2, 2018
2 parents 07504b2 + d609fdf commit 1e8c93c
Show file tree
Hide file tree
Showing 11 changed files with 25 additions and 82 deletions.
24 changes: 0 additions & 24 deletions src/doc/unstable-book/src/language-features/self-in-typedefs.md

This file was deleted.

20 changes: 4 additions & 16 deletions src/librustc_resolve/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2373,13 +2373,9 @@ impl<'a, 'crateloader: 'a> Resolver<'a, 'crateloader> {
self.with_current_self_item(item, |this| {
this.with_type_parameter_rib(HasTypeParameters(generics, ItemRibKind), |this| {
let item_def_id = this.definitions.local_def_id(item.id);
if this.session.features_untracked().self_in_typedefs {
this.with_self_rib(Def::SelfTy(None, Some(item_def_id)), |this| {
visit::walk_item(this, item);
});
} else {
this.with_self_rib(Def::SelfTy(None, Some(item_def_id)), |this| {
visit::walk_item(this, item);
}
});
});
});
}
Expand Down Expand Up @@ -3185,16 +3181,8 @@ impl<'a, 'crateloader: 'a> Resolver<'a, 'crateloader> {
if is_self_type(path, ns) {
__diagnostic_used!(E0411);
err.code(DiagnosticId::Error("E0411".into()));
let available_in = if this.session.features_untracked().self_in_typedefs {
"impls, traits, and type definitions"
} else {
"traits and impls"
};
err.span_label(span, format!("`Self` is only available in {}", available_in));
if this.current_self_item.is_some() && nightly_options::is_nightly_build() {
err.help("add #![feature(self_in_typedefs)] to the crate attributes \
to enable");
}
err.span_label(span, format!("`Self` is only available in impls, traits, \
and type definitions"));
return (err, Vec::new());
}
if is_self_value(path, ns) {
Expand Down
11 changes: 5 additions & 6 deletions src/libsyntax/feature_gate.rs
Original file line number Diff line number Diff line change
Expand Up @@ -462,9 +462,6 @@ declare_features! (
// Allows `use x::y;` to resolve through `self::x`, not just `::x`
(active, uniform_paths, "1.30.0", Some(53130), None),

// Allows `Self` in type definitions
(active, self_in_typedefs, "1.30.0", Some(49303), None),

// Allows unsized rvalues at arguments and parameters
(active, unsized_locals, "1.30.0", Some(48055), None),

Expand Down Expand Up @@ -675,21 +672,23 @@ declare_features! (
(accepted, extern_prelude, "1.30.0", Some(44660), None),
// Parentheses in patterns
(accepted, pattern_parentheses, "1.31.0", Some(51087), None),
// Allows the definition of `const fn` functions.
// Allows the definition of `const fn` functions
(accepted, min_const_fn, "1.31.0", Some(53555), None),
// Scoped lints
(accepted, tool_lints, "1.31.0", Some(44690), None),
// impl<I:Iterator> Iterator for &mut Iterator
// impl Debug for Foo<'_>
(accepted, impl_header_lifetime_elision, "1.31.0", Some(15872), None),
// `extern crate foo as bar;` puts `bar` into extern prelude.
// `extern crate foo as bar;` puts `bar` into extern prelude
(accepted, extern_crate_item_prelude, "1.31.0", Some(55599), None),
// Allows use of the :literal macro fragment specifier (RFC 1576)
(accepted, macro_literal_matcher, "1.31.0", Some(35625), None),
// Use `?` as the Kleene "at most one" operator
(accepted, macro_at_most_once_rep, "1.32.0", Some(48075), None),
// Self struct constructor (RFC 2302)
// `Self` struct constructor (RFC 2302)
(accepted, self_struct_ctor, "1.32.0", Some(51994), None),
// `Self` in type definitions (RFC 2300)
(accepted, self_in_typedefs, "1.32.0", Some(49303), None),
);

// If you change this, please modify `src/doc/unstable-book` as well. You must
Expand Down
3 changes: 1 addition & 2 deletions src/test/run-pass/self/self-in-typedefs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,11 @@
// except according to those terms.

// run-pass
#![allow(unions_with_drop_fields)]

#![feature(self_in_typedefs)]
#![feature(untagged_unions)]

#![allow(dead_code)]
#![allow(unions_with_drop_fields)]

enum A<'a, T: 'a>
where
Expand Down
2 changes: 1 addition & 1 deletion src/test/ui/error-codes/E0411.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ error[E0411]: cannot find type `Self` in this scope
--> $DIR/E0411.rs:12:6
|
LL | <Self>::foo; //~ ERROR E0411
| ^^^^ `Self` is only available in traits and impls
| ^^^^ `Self` is only available in impls, traits, and type definitions

error: aborting due to previous error

Expand Down
18 changes: 0 additions & 18 deletions src/test/ui/feature-gates/feature-gate-self_in_typedefs.rs

This file was deleted.

11 changes: 0 additions & 11 deletions src/test/ui/feature-gates/feature-gate-self_in_typedefs.stderr

This file was deleted.

1 change: 1 addition & 0 deletions src/test/ui/issues/issue-36638.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

struct Foo<Self>(Self);
//~^ ERROR expected identifier, found keyword `Self`
//~^^ ERROR E0392

trait Bar<Self> {}
//~^ ERROR expected identifier, found keyword `Self`
Expand Down
13 changes: 11 additions & 2 deletions src/test/ui/issues/issue-36638.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,19 @@ LL | struct Foo<Self>(Self);
| ^^^^ expected identifier, found keyword

error: expected identifier, found keyword `Self`
--> $DIR/issue-36638.rs:16:11
--> $DIR/issue-36638.rs:17:11
|
LL | trait Bar<Self> {}
| ^^^^ expected identifier, found keyword

error: aborting due to 2 previous errors
error[E0392]: parameter `Self` is never used
--> $DIR/issue-36638.rs:13:12
|
LL | struct Foo<Self>(Self);
| ^^^^ unused type parameter
|
= help: consider removing `Self` or using a marker such as `std::marker::PhantomData`

error: aborting due to 3 previous errors

For more information about this error, try `rustc --explain E0392`.
2 changes: 1 addition & 1 deletion src/test/ui/resolve/issue-24968.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ error[E0411]: cannot find type `Self` in this scope
--> $DIR/issue-24968.rs:11:11
|
LL | fn foo(_: Self) {
| ^^^^ `Self` is only available in traits and impls
| ^^^^ `Self` is only available in impls, traits, and type definitions

error: aborting due to previous error

Expand Down
2 changes: 1 addition & 1 deletion src/test/ui/resolve/resolve-self-in-impl-2.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ error[E0411]: expected trait, found self type `Self`
--> $DIR/resolve-self-in-impl-2.rs:14:6
|
LL | impl Self for S {} //~ ERROR expected trait, found self type `Self`
| ^^^^ `Self` is only available in traits and impls
| ^^^^ `Self` is only available in impls, traits, and type definitions

error[E0405]: cannot find trait `N` in `Self`
--> $DIR/resolve-self-in-impl-2.rs:15:12
Expand Down

0 comments on commit 1e8c93c

Please sign in to comment.