-
Notifications
You must be signed in to change notification settings - Fork 12.8k
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
librustc: Always parse macro!()
/macro![]
as expressions if not followed by a semicolon.
#18958
Conversation
macro!()
/macro![]
as expressions if notmacro!()
/macro![]
as expressions if not followed by a semicolon.
6cf007c
to
bf5e242
Compare
Really liking this cleanup, thanks @pcwalton! Could you add some tests for ensuring that Other than that, r=me |
To quote from the RFC:
Does this pull request handle that? That is, this should require that all macros invoked at the top level (not inside a function or block, which I can see is handled) also must be followed by a semicolon, unless they are invoked with |
67c1b03
to
b38bbae
Compare
Now implements the rules @P1start suggested. This broke a lot of code. re-r? @alexcrichton |
Parentheses for you, and you, and you! Another heroic effort by @pcwalton! |
followed by a semicolon. This allows code like `vec![1i, 2, 3].len();` to work. This breaks code that uses macros as statements without putting semicolons after them, such as: fn main() { ... assert!(a == b) assert!(c == d) println(...); } It also breaks code that uses macros as items without semicolons: local_data_key!(foo) fn main() { println("hello world") } Add semicolons to fix this code. Those two examples can be fixed as follows: fn main() { ... assert!(a == b); assert!(c == d); println(...); } local_data_key!(foo); fn main() { println("hello world") } RFC rust-lang#378. Closes rust-lang#18635. [breaking-change]
b38bbae
to
6a855f6
Compare
This needs rebased by now 😦 |
followed by a semicolon. This allows code like `vec![1i, 2, 3].len();` to work. This breaks code that uses macros as statements without putting semicolons after them, such as: fn main() { ... assert!(a == b) assert!(c == d) println(...); } It also breaks code that uses macros as items without semicolons: local_data_key!(foo) fn main() { println("hello world") } Add semicolons to fix this code. Those two examples can be fixed as follows: fn main() { ... assert!(a == b); assert!(c == d); println(...); } local_data_key!(foo); fn main() { println("hello world") } RFC #378. Closes #18635. [breaking-change] --- Rebased version of #18958 r? @alexcrichton cc @pcwalton
Closing in favor of #19984 |
This allows code like
vec![1i, 2, 3].len();
to work.This breaks code that uses macros as statements without putting
semicolons after them, such as:
It also breaks code that uses macros as items without semicolons:
Add semicolons to fix this code. Those two examples can be fixed as
follows:
RFC #378.
Closes #18635.
[breaking-change]
r? @alexcrichton