Properly handle attributes on statements
We now collect tokens for the underlying node wrapped by `StmtKind`
instead of storing tokens directly in `Stmt`.
`LazyTokenStream` now supports capturing a trailing semicolon after it
is initially constructed. This allows us to avoid refactoring statement
parsing to wrap the parsing of the semicolon in `parse_tokens`.
Attributes on item statements
(e.g. `fn foo() { #[bar] struct MyStruct; }`) are now treated as
item attributes, not statement attributes, which is consistent with how
we handle attributes on other kinds of statements. The feature-gating
code is adjusted so that proc-macro attributes are still allowed on item
statements on stable.
Two built-in macros (`#[global_allocator]` and `#[test]`) needed to be
adjusted to support being passed `Annotatable::Stmt`.
This commit is contained in:
parent
72da5a9d85
commit
de88bf148b
20 changed files with 485 additions and 187 deletions
|
|
@ -25,6 +25,8 @@ fn print_str(string: &'static str) {
|
|||
|
||||
macro_rules! make_stmt {
|
||||
($stmt:stmt) => {
|
||||
#[print_attr]
|
||||
#[allow(unused)]
|
||||
$stmt
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,43 +1,84 @@
|
|||
PRINT-ATTR INPUT (DISPLAY): #[allow(unused)] struct Foo { }
|
||||
PRINT-ATTR INPUT (DEBUG): TokenStream [
|
||||
Punct {
|
||||
ch: '#',
|
||||
spacing: Alone,
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:29:9: 29:10 (#12),
|
||||
},
|
||||
Group {
|
||||
delimiter: Bracket,
|
||||
stream: TokenStream [
|
||||
Ident {
|
||||
ident: "allow",
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:29:11: 29:16 (#12),
|
||||
},
|
||||
Group {
|
||||
delimiter: Parenthesis,
|
||||
stream: TokenStream [
|
||||
Ident {
|
||||
ident: "unused",
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:29:17: 29:23 (#12),
|
||||
},
|
||||
],
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:29:16: 29:24 (#12),
|
||||
},
|
||||
],
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:29:10: 29:25 (#12),
|
||||
},
|
||||
Ident {
|
||||
ident: "struct",
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:42:16: 42:22 (#0),
|
||||
},
|
||||
Ident {
|
||||
ident: "Foo",
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:42:23: 42:26 (#0),
|
||||
},
|
||||
Group {
|
||||
delimiter: Brace,
|
||||
stream: TokenStream [],
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:42:27: 42:29 (#0),
|
||||
},
|
||||
]
|
||||
PRINT-ATTR INPUT (DISPLAY): #[expect_let] let string = "Hello, world!" ;
|
||||
PRINT-ATTR INPUT (DEBUG): TokenStream [
|
||||
Punct {
|
||||
ch: '#',
|
||||
spacing: Alone,
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:45:5: 45:6 (#0),
|
||||
},
|
||||
Group {
|
||||
delimiter: Bracket,
|
||||
stream: TokenStream [
|
||||
Ident {
|
||||
ident: "expect_let",
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:45:7: 45:17 (#0),
|
||||
},
|
||||
],
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:45:6: 45:18 (#0),
|
||||
},
|
||||
Ident {
|
||||
ident: "let",
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:46:5: 46:8 (#0),
|
||||
},
|
||||
Ident {
|
||||
ident: "string",
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:46:9: 46:15 (#0),
|
||||
},
|
||||
Punct {
|
||||
ch: '=',
|
||||
spacing: Alone,
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:46:16: 46:17 (#0),
|
||||
},
|
||||
Literal {
|
||||
kind: Str,
|
||||
symbol: "Hello, world!",
|
||||
suffix: None,
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:46:18: 46:33 (#0),
|
||||
},
|
||||
Punct {
|
||||
ch: ';',
|
||||
spacing: Alone,
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:46:33: 46:34 (#0),
|
||||
},
|
||||
]
|
||||
PRINT-ATTR INPUT (DISPLAY): #[expect_print_stmt] println ! ("{}", string) ;
|
||||
|
|
@ -45,26 +86,26 @@ PRINT-ATTR INPUT (DEBUG): TokenStream [
|
|||
Punct {
|
||||
ch: '#',
|
||||
spacing: Alone,
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:49:5: 49:6 (#0),
|
||||
},
|
||||
Group {
|
||||
delimiter: Bracket,
|
||||
stream: TokenStream [
|
||||
Ident {
|
||||
ident: "expect_print_stmt",
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:49:7: 49:24 (#0),
|
||||
},
|
||||
],
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:49:6: 49:25 (#0),
|
||||
},
|
||||
Ident {
|
||||
ident: "println",
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:50:5: 50:12 (#0),
|
||||
},
|
||||
Punct {
|
||||
ch: '!',
|
||||
spacing: Alone,
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:50:12: 50:13 (#0),
|
||||
},
|
||||
Group {
|
||||
delimiter: Parenthesis,
|
||||
|
|
@ -73,36 +114,36 @@ PRINT-ATTR INPUT (DEBUG): TokenStream [
|
|||
kind: Str,
|
||||
symbol: "{}",
|
||||
suffix: None,
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:50:14: 50:18 (#0),
|
||||
},
|
||||
Punct {
|
||||
ch: ',',
|
||||
spacing: Alone,
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:50:18: 50:19 (#0),
|
||||
},
|
||||
Ident {
|
||||
ident: "string",
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:50:20: 50:26 (#0),
|
||||
},
|
||||
],
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:50:13: 50:27 (#0),
|
||||
},
|
||||
Punct {
|
||||
ch: ';',
|
||||
spacing: Alone,
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:50:27: 50:28 (#0),
|
||||
},
|
||||
]
|
||||
PRINT-ATTR INPUT (DISPLAY): second_make_stmt ! (#[allow(dead_code)] struct Bar { }) ;
|
||||
PRINT-ATTR INPUT (DEBUG): TokenStream [
|
||||
Ident {
|
||||
ident: "second_make_stmt",
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:53:5: 53:21 (#0),
|
||||
},
|
||||
Punct {
|
||||
ch: '!',
|
||||
spacing: Alone,
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:53:21: 53:22 (#0),
|
||||
},
|
||||
Group {
|
||||
delimiter: Parenthesis,
|
||||
|
|
@ -110,78 +151,149 @@ PRINT-ATTR INPUT (DEBUG): TokenStream [
|
|||
Punct {
|
||||
ch: '#',
|
||||
spacing: Alone,
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:53:23: 53:24 (#0),
|
||||
},
|
||||
Group {
|
||||
delimiter: Bracket,
|
||||
stream: TokenStream [
|
||||
Ident {
|
||||
ident: "allow",
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:53:25: 53:30 (#0),
|
||||
},
|
||||
Group {
|
||||
delimiter: Parenthesis,
|
||||
stream: TokenStream [
|
||||
Ident {
|
||||
ident: "dead_code",
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:53:31: 53:40 (#0),
|
||||
},
|
||||
],
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:53:30: 53:41 (#0),
|
||||
},
|
||||
],
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:53:24: 53:42 (#0),
|
||||
},
|
||||
Ident {
|
||||
ident: "struct",
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:53:43: 53:49 (#0),
|
||||
},
|
||||
Ident {
|
||||
ident: "Bar",
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:53:50: 53:53 (#0),
|
||||
},
|
||||
Group {
|
||||
delimiter: Brace,
|
||||
stream: TokenStream [],
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:53:54: 53:56 (#0),
|
||||
},
|
||||
],
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:53:22: 53:57 (#0),
|
||||
},
|
||||
Punct {
|
||||
ch: ';',
|
||||
spacing: Alone,
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:53:57: 53:58 (#0),
|
||||
},
|
||||
]
|
||||
PRINT-ATTR INPUT (DISPLAY): #[rustc_dummy] struct Other { }
|
||||
PRINT-ATTR INPUT (DISPLAY): #[allow(unused)] #[allow(dead_code)] struct Bar { }
|
||||
PRINT-ATTR INPUT (DEBUG): TokenStream [
|
||||
Punct {
|
||||
ch: '#',
|
||||
spacing: Alone,
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:29:9: 29:10 (#34),
|
||||
},
|
||||
Group {
|
||||
delimiter: Bracket,
|
||||
stream: TokenStream [
|
||||
Ident {
|
||||
ident: "allow",
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:29:11: 29:16 (#34),
|
||||
},
|
||||
Group {
|
||||
delimiter: Parenthesis,
|
||||
stream: TokenStream [
|
||||
Ident {
|
||||
ident: "unused",
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:29:17: 29:23 (#34),
|
||||
},
|
||||
],
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:29:16: 29:24 (#34),
|
||||
},
|
||||
],
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:29:10: 29:25 (#34),
|
||||
},
|
||||
Punct {
|
||||
ch: '#',
|
||||
spacing: Alone,
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:53:23: 53:24 (#0),
|
||||
},
|
||||
Group {
|
||||
delimiter: Bracket,
|
||||
stream: TokenStream [
|
||||
Ident {
|
||||
ident: "allow",
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:53:25: 53:30 (#0),
|
||||
},
|
||||
Group {
|
||||
delimiter: Parenthesis,
|
||||
stream: TokenStream [
|
||||
Ident {
|
||||
ident: "dead_code",
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:53:31: 53:40 (#0),
|
||||
},
|
||||
],
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:53:30: 53:41 (#0),
|
||||
},
|
||||
],
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:53:24: 53:42 (#0),
|
||||
},
|
||||
Ident {
|
||||
ident: "struct",
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:53:43: 53:49 (#0),
|
||||
},
|
||||
Ident {
|
||||
ident: "Bar",
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:53:50: 53:53 (#0),
|
||||
},
|
||||
Group {
|
||||
delimiter: Brace,
|
||||
stream: TokenStream [],
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:53:54: 53:56 (#0),
|
||||
},
|
||||
]
|
||||
PRINT-ATTR INPUT (DISPLAY): #[rustc_dummy] struct Other { } ;
|
||||
PRINT-ATTR INPUT (DEBUG): TokenStream [
|
||||
Punct {
|
||||
ch: '#',
|
||||
spacing: Alone,
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:56:5: 56:6 (#0),
|
||||
},
|
||||
Group {
|
||||
delimiter: Bracket,
|
||||
stream: TokenStream [
|
||||
Ident {
|
||||
ident: "rustc_dummy",
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:56:7: 56:18 (#0),
|
||||
},
|
||||
],
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:56:6: 56:19 (#0),
|
||||
},
|
||||
Ident {
|
||||
ident: "struct",
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:57:5: 57:11 (#0),
|
||||
},
|
||||
Ident {
|
||||
ident: "Other",
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:57:12: 57:17 (#0),
|
||||
},
|
||||
Group {
|
||||
delimiter: Brace,
|
||||
stream: TokenStream [],
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:57:18: 57:20 (#0),
|
||||
},
|
||||
Punct {
|
||||
ch: ';',
|
||||
spacing: Alone,
|
||||
span: $DIR/allowed-attr-stmt-expr.rs:57:20: 57:21 (#0),
|
||||
},
|
||||
]
|
||||
|
|
|
|||
|
|
@ -24,6 +24,8 @@ fn print_str(string: &'static str) {
|
|||
|
||||
macro_rules! make_stmt {
|
||||
($stmt:stmt) => {
|
||||
#[print_attr]
|
||||
#[allow(unused)]
|
||||
$stmt
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ LL | #[expect_print_expr]
|
|||
= help: add `#![feature(stmt_expr_attributes)]` to the crate attributes to enable
|
||||
|
||||
error[E0658]: attributes on expressions are experimental
|
||||
--> $DIR/attr-stmt-expr.rs:55:5
|
||||
--> $DIR/attr-stmt-expr.rs:57:5
|
||||
|
|
||||
LL | #[expect_expr]
|
||||
| ^^^^^^^^^^^^^^
|
||||
|
|
|
|||
|
|
@ -1,43 +1,84 @@
|
|||
PRINT-ATTR INPUT (DISPLAY): #[allow(unused)] struct Foo { }
|
||||
PRINT-ATTR INPUT (DEBUG): TokenStream [
|
||||
Punct {
|
||||
ch: '#',
|
||||
spacing: Alone,
|
||||
span: $DIR/attr-stmt-expr.rs:28:9: 28:10 (#12),
|
||||
},
|
||||
Group {
|
||||
delimiter: Bracket,
|
||||
stream: TokenStream [
|
||||
Ident {
|
||||
ident: "allow",
|
||||
span: $DIR/attr-stmt-expr.rs:28:11: 28:16 (#12),
|
||||
},
|
||||
Group {
|
||||
delimiter: Parenthesis,
|
||||
stream: TokenStream [
|
||||
Ident {
|
||||
ident: "unused",
|
||||
span: $DIR/attr-stmt-expr.rs:28:17: 28:23 (#12),
|
||||
},
|
||||
],
|
||||
span: $DIR/attr-stmt-expr.rs:28:16: 28:24 (#12),
|
||||
},
|
||||
],
|
||||
span: $DIR/attr-stmt-expr.rs:28:10: 28:25 (#12),
|
||||
},
|
||||
Ident {
|
||||
ident: "struct",
|
||||
span: $DIR/attr-stmt-expr.rs:40:16: 40:22 (#0),
|
||||
},
|
||||
Ident {
|
||||
ident: "Foo",
|
||||
span: $DIR/attr-stmt-expr.rs:40:23: 40:26 (#0),
|
||||
},
|
||||
Group {
|
||||
delimiter: Brace,
|
||||
stream: TokenStream [],
|
||||
span: $DIR/attr-stmt-expr.rs:40:27: 40:29 (#0),
|
||||
},
|
||||
]
|
||||
PRINT-ATTR INPUT (DISPLAY): #[expect_let] let string = "Hello, world!" ;
|
||||
PRINT-ATTR INPUT (DEBUG): TokenStream [
|
||||
Punct {
|
||||
ch: '#',
|
||||
spacing: Alone,
|
||||
span: $DIR/attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/attr-stmt-expr.rs:43:5: 43:6 (#0),
|
||||
},
|
||||
Group {
|
||||
delimiter: Bracket,
|
||||
stream: TokenStream [
|
||||
Ident {
|
||||
ident: "expect_let",
|
||||
span: $DIR/attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/attr-stmt-expr.rs:43:7: 43:17 (#0),
|
||||
},
|
||||
],
|
||||
span: $DIR/attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/attr-stmt-expr.rs:43:6: 43:18 (#0),
|
||||
},
|
||||
Ident {
|
||||
ident: "let",
|
||||
span: $DIR/attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/attr-stmt-expr.rs:44:5: 44:8 (#0),
|
||||
},
|
||||
Ident {
|
||||
ident: "string",
|
||||
span: $DIR/attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/attr-stmt-expr.rs:44:9: 44:15 (#0),
|
||||
},
|
||||
Punct {
|
||||
ch: '=',
|
||||
spacing: Alone,
|
||||
span: $DIR/attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/attr-stmt-expr.rs:44:16: 44:17 (#0),
|
||||
},
|
||||
Literal {
|
||||
kind: Str,
|
||||
symbol: "Hello, world!",
|
||||
suffix: None,
|
||||
span: $DIR/attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/attr-stmt-expr.rs:44:18: 44:33 (#0),
|
||||
},
|
||||
Punct {
|
||||
ch: ';',
|
||||
spacing: Alone,
|
||||
span: $DIR/attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/attr-stmt-expr.rs:44:33: 44:34 (#0),
|
||||
},
|
||||
]
|
||||
PRINT-ATTR INPUT (DISPLAY): #[expect_print_stmt] println ! ("{}", string) ;
|
||||
|
|
@ -45,26 +86,26 @@ PRINT-ATTR INPUT (DEBUG): TokenStream [
|
|||
Punct {
|
||||
ch: '#',
|
||||
spacing: Alone,
|
||||
span: $DIR/attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/attr-stmt-expr.rs:47:5: 47:6 (#0),
|
||||
},
|
||||
Group {
|
||||
delimiter: Bracket,
|
||||
stream: TokenStream [
|
||||
Ident {
|
||||
ident: "expect_print_stmt",
|
||||
span: $DIR/attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/attr-stmt-expr.rs:47:7: 47:24 (#0),
|
||||
},
|
||||
],
|
||||
span: $DIR/attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/attr-stmt-expr.rs:47:6: 47:25 (#0),
|
||||
},
|
||||
Ident {
|
||||
ident: "println",
|
||||
span: $DIR/attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/attr-stmt-expr.rs:48:5: 48:12 (#0),
|
||||
},
|
||||
Punct {
|
||||
ch: '!',
|
||||
spacing: Alone,
|
||||
span: $DIR/attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/attr-stmt-expr.rs:48:12: 48:13 (#0),
|
||||
},
|
||||
Group {
|
||||
delimiter: Parenthesis,
|
||||
|
|
@ -73,36 +114,36 @@ PRINT-ATTR INPUT (DEBUG): TokenStream [
|
|||
kind: Str,
|
||||
symbol: "{}",
|
||||
suffix: None,
|
||||
span: $DIR/attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/attr-stmt-expr.rs:48:14: 48:18 (#0),
|
||||
},
|
||||
Punct {
|
||||
ch: ',',
|
||||
spacing: Alone,
|
||||
span: $DIR/attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/attr-stmt-expr.rs:48:18: 48:19 (#0),
|
||||
},
|
||||
Ident {
|
||||
ident: "string",
|
||||
span: $DIR/attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/attr-stmt-expr.rs:48:20: 48:26 (#0),
|
||||
},
|
||||
],
|
||||
span: $DIR/attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/attr-stmt-expr.rs:48:13: 48:27 (#0),
|
||||
},
|
||||
Punct {
|
||||
ch: ';',
|
||||
spacing: Alone,
|
||||
span: $DIR/attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/attr-stmt-expr.rs:48:27: 48:28 (#0),
|
||||
},
|
||||
]
|
||||
PRINT-ATTR INPUT (DISPLAY): second_make_stmt ! (#[allow(dead_code)] struct Bar { }) ;
|
||||
PRINT-ATTR INPUT (DEBUG): TokenStream [
|
||||
Ident {
|
||||
ident: "second_make_stmt",
|
||||
span: $DIR/attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/attr-stmt-expr.rs:51:5: 51:21 (#0),
|
||||
},
|
||||
Punct {
|
||||
ch: '!',
|
||||
spacing: Alone,
|
||||
span: $DIR/attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/attr-stmt-expr.rs:51:21: 51:22 (#0),
|
||||
},
|
||||
Group {
|
||||
delimiter: Parenthesis,
|
||||
|
|
@ -110,48 +151,114 @@ PRINT-ATTR INPUT (DEBUG): TokenStream [
|
|||
Punct {
|
||||
ch: '#',
|
||||
spacing: Alone,
|
||||
span: $DIR/attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/attr-stmt-expr.rs:51:23: 51:24 (#0),
|
||||
},
|
||||
Group {
|
||||
delimiter: Bracket,
|
||||
stream: TokenStream [
|
||||
Ident {
|
||||
ident: "allow",
|
||||
span: $DIR/attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/attr-stmt-expr.rs:51:25: 51:30 (#0),
|
||||
},
|
||||
Group {
|
||||
delimiter: Parenthesis,
|
||||
stream: TokenStream [
|
||||
Ident {
|
||||
ident: "dead_code",
|
||||
span: $DIR/attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/attr-stmt-expr.rs:51:31: 51:40 (#0),
|
||||
},
|
||||
],
|
||||
span: $DIR/attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/attr-stmt-expr.rs:51:30: 51:41 (#0),
|
||||
},
|
||||
],
|
||||
span: $DIR/attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/attr-stmt-expr.rs:51:24: 51:42 (#0),
|
||||
},
|
||||
Ident {
|
||||
ident: "struct",
|
||||
span: $DIR/attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/attr-stmt-expr.rs:51:43: 51:49 (#0),
|
||||
},
|
||||
Ident {
|
||||
ident: "Bar",
|
||||
span: $DIR/attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/attr-stmt-expr.rs:51:50: 51:53 (#0),
|
||||
},
|
||||
Group {
|
||||
delimiter: Brace,
|
||||
stream: TokenStream [],
|
||||
span: $DIR/attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/attr-stmt-expr.rs:51:54: 51:56 (#0),
|
||||
},
|
||||
],
|
||||
span: $DIR/attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/attr-stmt-expr.rs:51:22: 51:57 (#0),
|
||||
},
|
||||
Punct {
|
||||
ch: ';',
|
||||
spacing: Alone,
|
||||
span: $DIR/attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/attr-stmt-expr.rs:51:57: 51:58 (#0),
|
||||
},
|
||||
]
|
||||
PRINT-ATTR INPUT (DISPLAY): #[allow(unused)] #[allow(dead_code)] struct Bar { }
|
||||
PRINT-ATTR INPUT (DEBUG): TokenStream [
|
||||
Punct {
|
||||
ch: '#',
|
||||
spacing: Alone,
|
||||
span: $DIR/attr-stmt-expr.rs:28:9: 28:10 (#34),
|
||||
},
|
||||
Group {
|
||||
delimiter: Bracket,
|
||||
stream: TokenStream [
|
||||
Ident {
|
||||
ident: "allow",
|
||||
span: $DIR/attr-stmt-expr.rs:28:11: 28:16 (#34),
|
||||
},
|
||||
Group {
|
||||
delimiter: Parenthesis,
|
||||
stream: TokenStream [
|
||||
Ident {
|
||||
ident: "unused",
|
||||
span: $DIR/attr-stmt-expr.rs:28:17: 28:23 (#34),
|
||||
},
|
||||
],
|
||||
span: $DIR/attr-stmt-expr.rs:28:16: 28:24 (#34),
|
||||
},
|
||||
],
|
||||
span: $DIR/attr-stmt-expr.rs:28:10: 28:25 (#34),
|
||||
},
|
||||
Punct {
|
||||
ch: '#',
|
||||
spacing: Alone,
|
||||
span: $DIR/attr-stmt-expr.rs:51:23: 51:24 (#0),
|
||||
},
|
||||
Group {
|
||||
delimiter: Bracket,
|
||||
stream: TokenStream [
|
||||
Ident {
|
||||
ident: "allow",
|
||||
span: $DIR/attr-stmt-expr.rs:51:25: 51:30 (#0),
|
||||
},
|
||||
Group {
|
||||
delimiter: Parenthesis,
|
||||
stream: TokenStream [
|
||||
Ident {
|
||||
ident: "dead_code",
|
||||
span: $DIR/attr-stmt-expr.rs:51:31: 51:40 (#0),
|
||||
},
|
||||
],
|
||||
span: $DIR/attr-stmt-expr.rs:51:30: 51:41 (#0),
|
||||
},
|
||||
],
|
||||
span: $DIR/attr-stmt-expr.rs:51:24: 51:42 (#0),
|
||||
},
|
||||
Ident {
|
||||
ident: "struct",
|
||||
span: $DIR/attr-stmt-expr.rs:51:43: 51:49 (#0),
|
||||
},
|
||||
Ident {
|
||||
ident: "Bar",
|
||||
span: $DIR/attr-stmt-expr.rs:51:50: 51:53 (#0),
|
||||
},
|
||||
Group {
|
||||
delimiter: Brace,
|
||||
stream: TokenStream [],
|
||||
span: $DIR/attr-stmt-expr.rs:51:54: 51:56 (#0),
|
||||
},
|
||||
]
|
||||
PRINT-ATTR INPUT (DISPLAY): #[rustc_dummy] struct Other { }
|
||||
|
|
@ -159,29 +266,29 @@ PRINT-ATTR INPUT (DEBUG): TokenStream [
|
|||
Punct {
|
||||
ch: '#',
|
||||
spacing: Alone,
|
||||
span: $DIR/attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/attr-stmt-expr.rs:54:5: 54:6 (#0),
|
||||
},
|
||||
Group {
|
||||
delimiter: Bracket,
|
||||
stream: TokenStream [
|
||||
Ident {
|
||||
ident: "rustc_dummy",
|
||||
span: $DIR/attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/attr-stmt-expr.rs:54:7: 54:18 (#0),
|
||||
},
|
||||
],
|
||||
span: $DIR/attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/attr-stmt-expr.rs:54:6: 54:19 (#0),
|
||||
},
|
||||
Ident {
|
||||
ident: "struct",
|
||||
span: $DIR/attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/attr-stmt-expr.rs:55:5: 55:11 (#0),
|
||||
},
|
||||
Ident {
|
||||
ident: "Other",
|
||||
span: $DIR/attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/attr-stmt-expr.rs:55:12: 55:17 (#0),
|
||||
},
|
||||
Group {
|
||||
delimiter: Brace,
|
||||
stream: TokenStream [],
|
||||
span: $DIR/attr-stmt-expr.rs:1:1: 1:1 (#0),
|
||||
span: $DIR/attr-stmt-expr.rs:55:18: 55:20 (#0),
|
||||
},
|
||||
]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue