Skip to content

Commit

Permalink
Auto merge of #54111 - nikomatsakis:issue-53686-keywords-and-macros, …
Browse files Browse the repository at this point in the history
…r=alexcrichton

warn about keywords in macro invocations

Fixes #53686

r? @alexcrichton
  • Loading branch information
bors committed Sep 11, 2018
2 parents 7ee7207 + 0cd8e0d commit f17c230
Show file tree
Hide file tree
Showing 8 changed files with 81 additions and 14 deletions.
7 changes: 7 additions & 0 deletions src/librustc/lint/context.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1117,6 +1117,13 @@ impl<'a> ast_visit::Visitor<'a> for EarlyContext<'a> {
}

fn visit_mac(&mut self, mac: &'a ast::Mac) {
// FIXME(#54110): So, this setup isn't really right. I think
// that (a) the libsyntax visitor ought to be doing this as
// part of `walk_mac`, and (b) we should be calling
// `visit_path`, *but* that would require a `NodeId`, and I
// want to get #53686 fixed quickly. -nmatsakis
ast_visit::walk_path(self, &mac.node.path);

run_lints!(self, check_mac, mac);
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/librustc_lint/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ pub fn register_builtins(store: &mut lint::LintStore, sess: Option<&Session>) {
macro_rules! add_pre_expansion_builtin {
($sess:ident, $($name:ident),*,) => (
{$(
store.register_early_pass($sess, false, box $name);
store.register_pre_expansion_pass($sess, box $name);
)*}
)
}
Expand Down
4 changes: 3 additions & 1 deletion src/test/ui/rust-2018/async-ident.fixed
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,9 @@ macro_rules! foo {
//~| WARN hard error in the 2018 edition
}

foo!(async);
foo!(r#async);
//~^ ERROR async
//~| WARN hard error in the 2018 edition

mod dont_lint_raw {
fn r#async() {}
Expand Down
2 changes: 2 additions & 0 deletions src/test/ui/rust-2018/async-ident.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ macro_rules! foo {
}

foo!(async);
//~^ ERROR async
//~| WARN hard error in the 2018 edition

mod dont_lint_raw {
fn r#async() {}
Expand Down
33 changes: 21 additions & 12 deletions src/test/ui/rust-2018/async-ident.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,16 @@ LL | ($async:expr, async) => {};
= note: for more information, see issue #49716 <https://github.com/rust-lang/rust/issues/49716>

error: `async` is a keyword in the 2018 edition
--> $DIR/async-ident.rs:36:11
--> $DIR/async-ident.rs:29:6
|
LL | foo!(async);
| ^^^^^ help: you can use a raw identifier to stay compatible: `r#async`
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in the 2018 edition!
= note: for more information, see issue #49716 <https://github.com/rust-lang/rust/issues/49716>

error: `async` is a keyword in the 2018 edition
--> $DIR/async-ident.rs:38:11
|
LL | trait async {}
| ^^^^^ help: you can use a raw identifier to stay compatible: `r#async`
Expand All @@ -40,7 +49,7 @@ LL | trait async {}
= note: for more information, see issue #49716 <https://github.com/rust-lang/rust/issues/49716>

error: `async` is a keyword in the 2018 edition
--> $DIR/async-ident.rs:40:10
--> $DIR/async-ident.rs:42:10
|
LL | impl async for MyStruct {}
| ^^^^^ help: you can use a raw identifier to stay compatible: `r#async`
Expand All @@ -49,7 +58,7 @@ LL | impl async for MyStruct {}
= note: for more information, see issue #49716 <https://github.com/rust-lang/rust/issues/49716>

error: `async` is a keyword in the 2018 edition
--> $DIR/async-ident.rs:46:12
--> $DIR/async-ident.rs:48:12
|
LL | static async: u32 = 0;
| ^^^^^ help: you can use a raw identifier to stay compatible: `r#async`
Expand All @@ -58,7 +67,7 @@ LL | static async: u32 = 0;
= note: for more information, see issue #49716 <https://github.com/rust-lang/rust/issues/49716>

error: `async` is a keyword in the 2018 edition
--> $DIR/async-ident.rs:52:11
--> $DIR/async-ident.rs:54:11
|
LL | const async: u32 = 0;
| ^^^^^ help: you can use a raw identifier to stay compatible: `r#async`
Expand All @@ -67,7 +76,7 @@ LL | const async: u32 = 0;
= note: for more information, see issue #49716 <https://github.com/rust-lang/rust/issues/49716>

error: `async` is a keyword in the 2018 edition
--> $DIR/async-ident.rs:58:15
--> $DIR/async-ident.rs:60:15
|
LL | impl Foo { fn async() {} }
| ^^^^^ help: you can use a raw identifier to stay compatible: `r#async`
Expand All @@ -76,7 +85,7 @@ LL | impl Foo { fn async() {} }
= note: for more information, see issue #49716 <https://github.com/rust-lang/rust/issues/49716>

error: `async` is a keyword in the 2018 edition
--> $DIR/async-ident.rs:63:12
--> $DIR/async-ident.rs:65:12
|
LL | struct async {}
| ^^^^^ help: you can use a raw identifier to stay compatible: `r#async`
Expand All @@ -85,7 +94,7 @@ LL | struct async {}
= note: for more information, see issue #49716 <https://github.com/rust-lang/rust/issues/49716>

error: `async` is a keyword in the 2018 edition
--> $DIR/async-ident.rs:66:9
--> $DIR/async-ident.rs:68:9
|
LL | let async: async = async {};
| ^^^^^ help: you can use a raw identifier to stay compatible: `r#async`
Expand All @@ -94,7 +103,7 @@ LL | let async: async = async {};
= note: for more information, see issue #49716 <https://github.com/rust-lang/rust/issues/49716>

error: `async` is a keyword in the 2018 edition
--> $DIR/async-ident.rs:66:16
--> $DIR/async-ident.rs:68:16
|
LL | let async: async = async {};
| ^^^^^ help: you can use a raw identifier to stay compatible: `r#async`
Expand All @@ -103,7 +112,7 @@ LL | let async: async = async {};
= note: for more information, see issue #49716 <https://github.com/rust-lang/rust/issues/49716>

error: `async` is a keyword in the 2018 edition
--> $DIR/async-ident.rs:66:24
--> $DIR/async-ident.rs:68:24
|
LL | let async: async = async {};
| ^^^^^ help: you can use a raw identifier to stay compatible: `r#async`
Expand All @@ -112,7 +121,7 @@ LL | let async: async = async {};
= note: for more information, see issue #49716 <https://github.com/rust-lang/rust/issues/49716>

error: `async` is a keyword in the 2018 edition
--> $DIR/async-ident.rs:77:19
--> $DIR/async-ident.rs:79:19
|
LL | () => (pub fn async() {})
| ^^^^^ help: you can use a raw identifier to stay compatible: `r#async`
Expand All @@ -121,13 +130,13 @@ LL | () => (pub fn async() {})
= note: for more information, see issue #49716 <https://github.com/rust-lang/rust/issues/49716>

error: `async` is a keyword in the 2018 edition
--> $DIR/async-ident.rs:84:6
--> $DIR/async-ident.rs:86:6
|
LL | (async) => (1)
| ^^^^^ help: you can use a raw identifier to stay compatible: `r#async`
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in the 2018 edition!
= note: for more information, see issue #49716 <https://github.com/rust-lang/rust/issues/49716>

error: aborting due to 14 previous errors
error: aborting due to 15 previous errors

16 changes: 16 additions & 0 deletions src/test/ui/rust-2018/try-macro.fixed
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
// Test that `try!` macros are rewritten.

// run-rustfix
// compile-pass

#![warn(rust_2018_compatibility)]
#![allow(unused_variables)]
#![allow(dead_code)]

fn foo() -> Result<usize, ()> {
let x: Result<usize, ()> = Ok(22);
r#try!(x);
Ok(44)
}

fn main() { }
16 changes: 16 additions & 0 deletions src/test/ui/rust-2018/try-macro.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
// Test that `try!` macros are rewritten.

// run-rustfix
// compile-pass

#![warn(rust_2018_compatibility)]
#![allow(unused_variables)]
#![allow(dead_code)]

fn foo() -> Result<usize, ()> {
let x: Result<usize, ()> = Ok(22);
try!(x);
Ok(44)
}

fn main() { }
15 changes: 15 additions & 0 deletions src/test/ui/rust-2018/try-macro.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
warning: `try` is a keyword in the 2018 edition
--> $DIR/try-macro.rs:12:5
|
LL | try!(x);
| ^^^ help: you can use a raw identifier to stay compatible: `r#try`
|
note: lint level defined here
--> $DIR/try-macro.rs:6:9
|
LL | #![warn(rust_2018_compatibility)]
| ^^^^^^^^^^^^^^^^^^^^^^^
= note: #[warn(keyword_idents)] implied by #[warn(rust_2018_compatibility)]
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in the 2018 edition!
= note: for more information, see issue #49716 <https://github.com/rust-lang/rust/issues/49716>

0 comments on commit f17c230

Please sign in to comment.