Skip to content
Permalink
Browse files

Stabilize `unrestricted_attribute_tokens`

  • Loading branch information...
petrochenkov committed Feb 25, 2019
1 parent 8e1b5d8 commit eccc19996b1e6a38568544e0be3cfe971caa12eb
@@ -123,7 +123,6 @@
#![feature(abi_unadjusted)]
#![feature(adx_target_feature)]
#![feature(maybe_uninit, maybe_uninit_slice, maybe_uninit_array)]
#![feature(unrestricted_attribute_tokens)]
#![feature(external_doc)]

#[prelude_import]
@@ -21,8 +21,9 @@ use crate::early_buffered_lints::BufferedEarlyLintId;
use crate::source_map::Spanned;
use crate::edition::{ALL_EDITIONS, Edition};
use crate::visit::{self, FnKind, Visitor};
use crate::parse::ParseSess;
use crate::parse::{token, ParseSess};
use crate::symbol::Symbol;
use crate::tokenstream::TokenTree;

use errors::{DiagnosticBuilder, Handler};
use rustc_data_structures::fx::FxHashMap;
@@ -431,9 +432,6 @@ declare_features! (
// Added for testing E0705; perma-unstable.
(active, test_2018_feature, "1.31.0", Some(0), Some(Edition::Edition2018)),

// support for arbitrary delimited token streams in non-macro attributes
(active, unrestricted_attribute_tokens, "1.30.0", Some(55208), None),

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

@@ -700,6 +698,8 @@ declare_features! (
(accepted, cfg_target_vendor, "1.33.0", Some(29718), None),
// `extern crate self as foo;` puts local crate root into extern prelude under name `foo`.
(accepted, extern_crate_self, "1.34.0", Some(56409), None),
// support for arbitrary delimited token streams in non-macro attributes
(accepted, unrestricted_attribute_tokens, "1.34.0", Some(55208), None),
);

// If you change this, please modify `src/doc/unstable-book` as well. You must
@@ -1660,13 +1660,9 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> {

match BUILTIN_ATTRIBUTES.iter().find(|(name, ..)| attr.path == name) {
Some(&(name, _, template, _)) => self.check_builtin_attribute(attr, name, template),
None => if !self.context.features.unrestricted_attribute_tokens {
// Unfortunately, `parse_meta` cannot be called speculatively
// because it can report errors by itself, so we have to call it
// only if the feature is disabled.
if let Err(mut err) = attr.parse_meta(self.context.parse_sess) {
err.help("try enabling `#![feature(unrestricted_attribute_tokens)]`").emit()
}
None => if let Some(TokenTree::Token(_, token::Eq)) = attr.tokens.trees().next() {
// All key-value attributes are restricted to meta-item syntax.
attr.parse_meta(self.context.parse_sess).map_err(|mut err| err.emit()).ok();
}
}
}
@@ -1,7 +1,5 @@
// aux-build:derive-b.rs

#![feature(unrestricted_attribute_tokens)]

extern crate derive_b;

#[derive(Debug, PartialEq, derive_b::B, Eq, Copy, Clone)]
@@ -1,4 +1,4 @@
#![feature(custom_attribute, unrestricted_attribute_tokens)]
#![feature(custom_attribute)]

#[my_attr = !] //~ ERROR unexpected token: `!`
fn main() {}

This file was deleted.

Oops, something went wrong.

This file was deleted.

Oops, something went wrong.
@@ -1,4 +1,2 @@
#![feature(unrestricted_attribute_tokens)]

#[doc = $not_there] //~ ERROR unexpected token: `$`
fn main() { }
@@ -1,5 +1,5 @@
error: unexpected token: `$`
--> $DIR/macro-attribute.rs:3:7
--> $DIR/macro-attribute.rs:1:7
|
LL | #[doc = $not_there] //~ ERROR unexpected token: `$`
| ^
@@ -17,8 +17,6 @@ LL | #[my_attr = $expr] //~ ERROR suffixed literals are not allowed in a
...
LL | check!(-0); // ERROR, see above
| ----------- in this macro invocation
|
= help: try enabling `#![feature(unrestricted_attribute_tokens)]`

error: unexpected token: `0 + 0`
--> $DIR/malformed-interpolated.rs:5:19
@@ -28,8 +26,6 @@ LL | #[my_attr = $expr] //~ ERROR suffixed literals are not allowed in a
...
LL | check!(0 + 0); // ERROR, see above
| -------------- in this macro invocation
|
= help: try enabling `#![feature(unrestricted_attribute_tokens)]`

error: aborting due to 3 previous errors

@@ -1,5 +1,4 @@
#![feature(marker_trait_attr)]
#![feature(unrestricted_attribute_tokens)]

#[marker(always)]
trait Marker1 {}
@@ -9,8 +8,8 @@ trait Marker1 {}
trait Marker2 {}
//~^^ ERROR attribute must be of the form

#[marker(key = value)]
#[marker(key = "value")]
trait Marker3 {}
//~^^ ERROR expected unsuffixed literal or identifier, found value
//~^^ ERROR attribute must be of the form `#[marker]`

fn main() {}
@@ -1,20 +1,20 @@
error: attribute must be of the form `#[marker]`
--> $DIR/marker-attribute-with-values.rs:4:1
--> $DIR/marker-attribute-with-values.rs:3:1
|
LL | #[marker(always)]
| ^^^^^^^^^^^^^^^^^

error: attribute must be of the form `#[marker]`
--> $DIR/marker-attribute-with-values.rs:8:1
--> $DIR/marker-attribute-with-values.rs:7:1
|
LL | #[marker("never")]
| ^^^^^^^^^^^^^^^^^^

error: expected unsuffixed literal or identifier, found value
--> $DIR/marker-attribute-with-values.rs:12:10
error: attribute must be of the form `#[marker]`
--> $DIR/marker-attribute-with-values.rs:11:1
|
LL | #[marker(key = value)]
| ^^^
LL | #[marker(key = "value")]
| ^^^^^^^^^^^^^^^^^^^^^^^^

error: aborting due to 3 previous errors

@@ -1,4 +1,2 @@
#![feature(unrestricted_attribute_tokens)]

#[path*] //~ ERROR expected one of `(`, `::`, `=`, `[`, `]`, or `{`, found `*`
mod m {}
@@ -1,5 +1,5 @@
error: expected one of `(`, `::`, `=`, `[`, `]`, or `{`, found `*`
--> $DIR/attr-bad-meta.rs:3:7
--> $DIR/attr-bad-meta.rs:1:7
|
LL | #[path*] //~ ERROR expected one of `(`, `::`, `=`, `[`, `]`, or `{`, found `*`
| ^ expected one of `(`, `::`, `=`, `[`, `]`, or `{` here
@@ -8,7 +8,6 @@ extern crate derive_b;
#[B(D)] //~ ERROR `B` is ambiguous
#[B(E = "foo")] //~ ERROR `B` is ambiguous
#[B(arbitrary tokens)] //~ ERROR `B` is ambiguous
//~^ ERROR expected one of `(`, `)`, `,`, `::`, or `=`, found `tokens`
#[derive(B)]
struct B;

@@ -13,7 +13,7 @@ LL | #[B] //~ ERROR `B` is ambiguous
| ^ ambiguous name
|
note: `B` could refer to the derive helper attribute defined here
--> $DIR/proc-macro-attributes.rs:12:10
--> $DIR/proc-macro-attributes.rs:11:10
|
LL | #[derive(B)]
| ^
@@ -30,7 +30,7 @@ LL | #[B(D)] //~ ERROR `B` is ambiguous
| ^ ambiguous name
|
note: `B` could refer to the derive helper attribute defined here
--> $DIR/proc-macro-attributes.rs:12:10
--> $DIR/proc-macro-attributes.rs:11:10
|
LL | #[derive(B)]
| ^
@@ -47,7 +47,7 @@ LL | #[B(E = "foo")] //~ ERROR `B` is ambiguous
| ^ ambiguous name
|
note: `B` could refer to the derive helper attribute defined here
--> $DIR/proc-macro-attributes.rs:12:10
--> $DIR/proc-macro-attributes.rs:11:10
|
LL | #[derive(B)]
| ^
@@ -64,7 +64,7 @@ LL | #[B(arbitrary tokens)] //~ ERROR `B` is ambiguous
| ^ ambiguous name
|
note: `B` could refer to the derive helper attribute defined here
--> $DIR/proc-macro-attributes.rs:12:10
--> $DIR/proc-macro-attributes.rs:11:10
|
LL | #[derive(B)]
| ^
@@ -74,13 +74,7 @@ note: `B` could also refer to the derive macro imported here
LL | #[macro_use]
| ^^^^^^^^^^^^

error: expected one of `(`, `)`, `,`, `::`, or `=`, found `tokens`
--> $DIR/proc-macro-attributes.rs:10:15
|
LL | #[B(arbitrary tokens)] //~ ERROR `B` is ambiguous
| ^^^^^^ expected one of `(`, `)`, `,`, `::`, or `=` here

error: aborting due to 6 previous errors
error: aborting due to 5 previous errors

Some errors occurred: E0658, E0659.
For more information about an error, try `rustc --explain E0658`.
@@ -1,6 +1,8 @@
// compile-pass

#![feature(custom_attribute, unrestricted_attribute_tokens)]
#![feature(custom_attribute)]

#[my_attr(a b c d)]
#[my_attr[a b c d]]
#[my_attr{a b c d}]
fn main() {}

0 comments on commit eccc199

Please sign in to comment.
You can’t perform that action at this time.