Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Stabilize param_attrs in Rust 1.39.0 #64010

Merged
merged 1 commit into from Sep 21, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
27 changes: 0 additions & 27 deletions src/doc/unstable-book/src/language-features/param-attrs.md

This file was deleted.

2 changes: 2 additions & 0 deletions src/libsyntax/feature_gate/accepted.rs
Expand Up @@ -243,6 +243,8 @@ declare_features! (
(accepted, async_await, "1.39.0", Some(50547), None),
/// Allows mixing bind-by-move in patterns and references to those identifiers in guards.
(accepted, bind_by_move_pattern_guards, "1.39.0", Some(15287), None),
/// Allows attributes in formal function parameters.
(accepted, param_attrs, "1.39.0", Some(60406), None),

// -------------------------------------------------------------------------
// feature-group-end: accepted features
Expand Down
3 changes: 0 additions & 3 deletions src/libsyntax/feature_gate/active.rs
Expand Up @@ -489,9 +489,6 @@ declare_features! (
/// Allows the user of associated type bounds.
(active, associated_type_bounds, "1.34.0", Some(52662), None),

/// Attributes on formal function params.
(active, param_attrs, "1.36.0", Some(60406), None),

/// Allows calling constructor functions in `const fn`.
(active, const_constructor, "1.37.0", Some(61456), None),

Expand Down
1 change: 0 additions & 1 deletion src/libsyntax/feature_gate/check.rs
Expand Up @@ -892,7 +892,6 @@ pub fn check_crate(krate: &ast::Crate,
}
}

gate_all!(param_attrs, "attributes on function parameters are unstable");
gate_all!(let_chains, "`let` expressions in this position are experimental");
gate_all!(async_closure, "async closures are unstable");
gate_all!(yields, generators, "yield syntax is experimental");
Expand Down
7 changes: 0 additions & 7 deletions src/libsyntax/parse/attr.rs
Expand Up @@ -19,13 +19,6 @@ const DEFAULT_UNEXPECTED_INNER_ATTR_ERR_MSG: &str = "an inner attribute is not \
permitted in this context";

impl<'a> Parser<'a> {
crate fn parse_param_attributes(&mut self) -> PResult<'a, Vec<ast::Attribute>> {
let attrs = self.parse_outer_attributes()?;
self.sess.gated_spans.param_attrs.borrow_mut()
.extend(attrs.iter().map(|a| a.span));
Ok(attrs)
}

/// Parses attributes that appear before an item.
crate fn parse_outer_attributes(&mut self) -> PResult<'a, Vec<ast::Attribute>> {
let mut attrs: Vec<ast::Attribute> = Vec::new();
Expand Down
2 changes: 0 additions & 2 deletions src/libsyntax/parse/mod.rs
Expand Up @@ -42,8 +42,6 @@ pub type PResult<'a, T> = Result<T, DiagnosticBuilder<'a>>;
/// used and should be feature gated accordingly in `check_crate`.
#[derive(Default)]
pub struct GatedSpans {
/// Spans collected for gating `param_attrs`, e.g. `fn foo(#[attr] x: u8) {}`.
pub param_attrs: Lock<Vec<Span>>,
/// Spans collected for gating `let_chains`, e.g. `if a && let b = c {}`.
pub let_chains: Lock<Vec<Span>>,
/// Spans collected for gating `async_closure`, e.g. `async || ..`.
Expand Down
4 changes: 2 additions & 2 deletions src/libsyntax/parse/parser.rs
Expand Up @@ -979,7 +979,7 @@ impl<'a> Parser<'a> {
is_name_required: impl Fn(&token::Token) -> bool,
) -> PResult<'a, Param> {
let lo = self.token.span;
let attrs = self.parse_param_attributes()?;
let attrs = self.parse_outer_attributes()?;
if let Some(mut param) = self.parse_self_param()? {
param.attrs = attrs.into();
return self.recover_bad_self_param(param, is_trait_item);
Expand Down Expand Up @@ -1362,7 +1362,7 @@ impl<'a> Parser<'a> {
/// Returns the parsed optional self parameter with attributes and whether a self
/// shortcut was used.
fn parse_self_parameter_with_attrs(&mut self) -> PResult<'a, Option<Param>> {
let attrs = self.parse_param_attributes()?;
let attrs = self.parse_outer_attributes()?;
let param_opt = self.parse_self_param()?;
Ok(param_opt.map(|mut param| {
param.attrs = attrs.into();
Expand Down
2 changes: 1 addition & 1 deletion src/libsyntax/parse/parser/expr.rs
Expand Up @@ -1176,7 +1176,7 @@ impl<'a> Parser<'a> {
/// Parses a parameter in a closure header (e.g., `|arg, arg|`).
fn parse_fn_block_param(&mut self) -> PResult<'a, Param> {
let lo = self.token.span;
let attrs = self.parse_param_attributes()?;
let attrs = self.parse_outer_attributes()?;
let pat = self.parse_pat(PARAM_EXPECTED)?;
let t = if self.eat(&token::Colon) {
self.parse_ty()?
Expand Down
2 changes: 1 addition & 1 deletion src/test/ui/lint/lint-unused-mut-variables.rs
Expand Up @@ -3,7 +3,7 @@
// Exercise the unused_mut attribute in some positive and negative cases

#![deny(unused_mut)]
#![feature(async_closure, param_attrs)]
#![feature(async_closure)]

async fn baz_async(
mut a: i32,
Expand Down
2 changes: 1 addition & 1 deletion src/test/ui/lint/lint-unused-variables.rs
@@ -1,7 +1,7 @@
// compile-flags: --cfg something
// edition:2018

#![feature(async_closure, param_attrs)]
#![feature(async_closure)]
#![deny(unused_variables)]

async fn foo_async(
Expand Down
4 changes: 0 additions & 4 deletions src/test/ui/parser/fn-arg-doc-comment.rs
Expand Up @@ -2,14 +2,10 @@ pub fn f(
/// Comment
//~^ ERROR documentation comments cannot be applied to function parameters
//~| NOTE doc comments are not allowed here
//~| ERROR attributes on function parameters are unstable
//~| NOTE https://github.com/rust-lang/rust/issues/60406
id: u8,
/// Other
//~^ ERROR documentation comments cannot be applied to function parameters
//~| NOTE doc comments are not allowed here
//~| ERROR attributes on function parameters are unstable
//~| NOTE https://github.com/rust-lang/rust/issues/60406
a: u8,
) {}

Expand Down
33 changes: 7 additions & 26 deletions src/test/ui/parser/fn-arg-doc-comment.stderr
@@ -1,5 +1,5 @@
error: attributes cannot be applied to a function parameter's type
--> $DIR/fn-arg-doc-comment.rs:16:12
--> $DIR/fn-arg-doc-comment.rs:12:12
|
LL | fn bar(id: #[allow(dead_code)] i32) {}
| ^^^^^^^^^^^^^^^^^^^ attributes are not allowed here
Expand All @@ -11,31 +11,13 @@ LL | /// Comment
| ^^^^^^^^^^^ doc comments are not allowed here

error: documentation comments cannot be applied to function parameters
--> $DIR/fn-arg-doc-comment.rs:8:5
--> $DIR/fn-arg-doc-comment.rs:6:5
|
LL | /// Other
| ^^^^^^^^^ doc comments are not allowed here

error[E0658]: attributes on function parameters are unstable
--> $DIR/fn-arg-doc-comment.rs:2:5
|
LL | /// Comment
| ^^^^^^^^^^^
|
= note: for more information, see https://github.com/rust-lang/rust/issues/60406
= help: add `#![feature(param_attrs)]` to the crate attributes to enable

error[E0658]: attributes on function parameters are unstable
--> $DIR/fn-arg-doc-comment.rs:8:5
|
LL | /// Other
| ^^^^^^^^^
|
= note: for more information, see https://github.com/rust-lang/rust/issues/60406
= help: add `#![feature(param_attrs)]` to the crate attributes to enable

error[E0308]: mismatched types
--> $DIR/fn-arg-doc-comment.rs:22:7
--> $DIR/fn-arg-doc-comment.rs:18:7
|
LL | f("", "");
| ^^ expected u8, found reference
Expand All @@ -44,7 +26,7 @@ LL | f("", "");
found type `&'static str`

error[E0308]: mismatched types
--> $DIR/fn-arg-doc-comment.rs:22:11
--> $DIR/fn-arg-doc-comment.rs:18:11
|
LL | f("", "");
| ^^ expected u8, found reference
Expand All @@ -53,15 +35,14 @@ LL | f("", "");
found type `&'static str`

error[E0308]: mismatched types
--> $DIR/fn-arg-doc-comment.rs:29:9
--> $DIR/fn-arg-doc-comment.rs:25:9
|
LL | bar("");
| ^^ expected i32, found reference
|
= note: expected type `i32`
found type `&'static str`

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

Some errors have detailed explanations: E0308, E0658.
For more information about an error, try `rustc --explain E0308`.
For more information about this error, try `rustc --explain E0308`.
2 changes: 0 additions & 2 deletions src/test/ui/rfc-2565-param-attrs/param-attrs-2018.rs
@@ -1,7 +1,5 @@
// edition:2018

#![feature(param_attrs)]

trait Trait2015 { fn foo(#[allow(C)] i32); }
//~^ ERROR expected one of `:`, `@`, or `|`, found `)`

Expand Down
2 changes: 1 addition & 1 deletion src/test/ui/rfc-2565-param-attrs/param-attrs-2018.stderr
@@ -1,5 +1,5 @@
error: expected one of `:`, `@`, or `|`, found `)`
--> $DIR/param-attrs-2018.rs:5:41
--> $DIR/param-attrs-2018.rs:3:41
|
LL | trait Trait2015 { fn foo(#[allow(C)] i32); }
| ^ expected one of `:`, `@`, or `|` here
Expand Down
1 change: 0 additions & 1 deletion src/test/ui/rfc-2565-param-attrs/param-attrs-allowed.rs
Expand Up @@ -2,7 +2,6 @@
// compile-flags: --cfg something

#![deny(unused_mut)]
#![feature(param_attrs)]

extern "C" {
fn ffi(
Expand Down
2 changes: 0 additions & 2 deletions src/test/ui/rfc-2565-param-attrs/param-attrs-builtin-attrs.rs
@@ -1,5 +1,3 @@
#![feature(param_attrs)]

extern "C" {
fn ffi(
/// Foo
Expand Down