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);
- }
+ });
});
});
}
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) {
// 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),
(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
+++ /dev/null
-// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-enum StackList<'a, T: 'a> {
- Nil,
- Cons(T, &'a Self)
- //~^ ERROR cannot find type `Self` in this scope
- //~| `Self` is only available in traits and impls
-}
-
-fn main() {}