aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_syntax/tests/data/parser/ok
diff options
context:
space:
mode:
authorbors[bot] <bors[bot]@users.noreply.github.com>2019-01-31 07:06:31 +0000
committerbors[bot] <bors[bot]@users.noreply.github.com>2019-01-31 07:06:31 +0000
commit97ade899937dafcafa852177c85edb22ce0b80dc (patch)
treecf5f8bdc5647222c8300c3386c5c8d47283d5116 /crates/ra_syntax/tests/data/parser/ok
parent777c79ce6bff0e70c8367f429f058f6d87ff3864 (diff)
parent00e6b5d26c82d5faff066c24418a0eb5741efcd1 (diff)
Merge #692
692: [WIP] Correctly parse attributes r=matklad a=DJMcNab Reference - https://doc.rust-lang.org/reference/attributes.html This fixes/investigates inner attributes for: - [x] `impl` blocks - [x] `extern` blocks - [x] `fn`s (fixes #689) - [x] `mod`s (already supported) - [x] 'block expressions' (the long text just describes all 'blocks' used as statements) This also investigates/fixes outer attributes for: - [ ] 'most statements' (see also: #685, https://doc.rust-lang.org/reference/expressions.html#expression-attributes) - [x] Enum variants, Struct and Union fields (Fixed in #507) - [ ] 'Match expression arms' (@matklad can you provide a test case which explains what this means?) - [ ] 'Generic lifetime or type parameters' - [ ] 'Elements of array expressions, tuple expressions, call expressions, tuple-style struct and enum variant expressions' - [ ] 'The tail expression of block expressions' Co-authored-by: DJMcNab <[email protected]>
Diffstat (limited to 'crates/ra_syntax/tests/data/parser/ok')
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0045_block_inner_attrs.rs20
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0045_block_inner_attrs.txt167
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0045_extern_inner_attributes.rs4
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0045_extern_inner_attributes.txt26
4 files changed, 217 insertions, 0 deletions
diff --git a/crates/ra_syntax/tests/data/parser/ok/0045_block_inner_attrs.rs b/crates/ra_syntax/tests/data/parser/ok/0045_block_inner_attrs.rs
new file mode 100644
index 000000000..88df8138e
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0045_block_inner_attrs.rs
@@ -0,0 +1,20 @@
1fn block() {
2 #![doc("Inner attributes allowed here")]
3 //! As are ModuleDoc style comments
4 {
5 #![doc("Inner attributes are allowed in blocks used as statements")]
6 #![doc("Being validated is not affected by duplcates")]
7 //! As are ModuleDoc style comments
8 };
9 {
10 #![doc("Inner attributes are allowed in blocks when they are the last statement of another block")]
11 //! As are ModuleDoc style comments
12 }
13}
14
15// https://github.com/rust-analyzer/rust-analyzer/issues/689
16impl Whatever {
17 fn salsa_event(&self, event_fn: impl Fn() -> Event<Self>) {
18 #![allow(unused_variables)] // this is `inner_attr` of the block
19 }
20}
diff --git a/crates/ra_syntax/tests/data/parser/ok/0045_block_inner_attrs.txt b/crates/ra_syntax/tests/data/parser/ok/0045_block_inner_attrs.txt
new file mode 100644
index 000000000..a1ba645ef
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0045_block_inner_attrs.txt
@@ -0,0 +1,167 @@
1SOURCE_FILE@[0; 686)
2 FN_DEF@[0; 461)
3 FN_KW@[0; 2)
4 WHITESPACE@[2; 3)
5 NAME@[3; 8)
6 IDENT@[3; 8) "block"
7 PARAM_LIST@[8; 10)
8 L_PAREN@[8; 9)
9 R_PAREN@[9; 10)
10 WHITESPACE@[10; 11)
11 BLOCK@[11; 461)
12 L_CURLY@[11; 12)
13 WHITESPACE@[12; 17)
14 ATTR@[17; 57)
15 POUND@[17; 18)
16 EXCL@[18; 19)
17 TOKEN_TREE@[19; 57)
18 L_BRACK@[19; 20)
19 IDENT@[20; 23) "doc"
20 TOKEN_TREE@[23; 56)
21 L_PAREN@[23; 24)
22 STRING@[24; 55)
23 R_PAREN@[55; 56)
24 R_BRACK@[56; 57)
25 WHITESPACE@[57; 62)
26 COMMENT@[62; 97)
27 WHITESPACE@[97; 102)
28 EXPR_STMT@[102; 295)
29 BLOCK_EXPR@[102; 294)
30 BLOCK@[102; 294)
31 L_CURLY@[102; 103)
32 WHITESPACE@[103; 112)
33 ATTR@[112; 180)
34 POUND@[112; 113)
35 EXCL@[113; 114)
36 TOKEN_TREE@[114; 180)
37 L_BRACK@[114; 115)
38 IDENT@[115; 118) "doc"
39 TOKEN_TREE@[118; 179)
40 L_PAREN@[118; 119)
41 STRING@[119; 178)
42 R_PAREN@[178; 179)
43 R_BRACK@[179; 180)
44 WHITESPACE@[180; 189)
45 ATTR@[189; 244)
46 POUND@[189; 190)
47 EXCL@[190; 191)
48 TOKEN_TREE@[191; 244)
49 L_BRACK@[191; 192)
50 IDENT@[192; 195) "doc"
51 TOKEN_TREE@[195; 243)
52 L_PAREN@[195; 196)
53 STRING@[196; 242)
54 R_PAREN@[242; 243)
55 R_BRACK@[243; 244)
56 WHITESPACE@[244; 253)
57 COMMENT@[253; 288)
58 WHITESPACE@[288; 293)
59 R_CURLY@[293; 294)
60 SEMI@[294; 295)
61 WHITESPACE@[295; 300)
62 BLOCK_EXPR@[300; 459)
63 BLOCK@[300; 459)
64 L_CURLY@[300; 301)
65 WHITESPACE@[301; 310)
66 ATTR@[310; 409)
67 POUND@[310; 311)
68 EXCL@[311; 312)
69 TOKEN_TREE@[312; 409)
70 L_BRACK@[312; 313)
71 IDENT@[313; 316) "doc"
72 TOKEN_TREE@[316; 408)
73 L_PAREN@[316; 317)
74 STRING@[317; 407)
75 R_PAREN@[407; 408)
76 R_BRACK@[408; 409)
77 WHITESPACE@[409; 418)
78 COMMENT@[418; 453)
79 WHITESPACE@[453; 458)
80 R_CURLY@[458; 459)
81 WHITESPACE@[459; 460)
82 R_CURLY@[460; 461)
83 WHITESPACE@[461; 463)
84 COMMENT@[463; 523)
85 WHITESPACE@[523; 524)
86 IMPL_BLOCK@[524; 685)
87 IMPL_KW@[524; 528)
88 WHITESPACE@[528; 529)
89 PATH_TYPE@[529; 537)
90 PATH@[529; 537)
91 PATH_SEGMENT@[529; 537)
92 NAME_REF@[529; 537)
93 IDENT@[529; 537) "Whatever"
94 WHITESPACE@[537; 538)
95 ITEM_LIST@[538; 685)
96 L_CURLY@[538; 539)
97 WHITESPACE@[539; 544)
98 FN_DEF@[544; 683)
99 FN_KW@[544; 546)
100 WHITESPACE@[546; 547)
101 NAME@[547; 558)
102 IDENT@[547; 558) "salsa_event"
103 PARAM_LIST@[558; 601)
104 L_PAREN@[558; 559)
105 SELF_PARAM@[559; 564)
106 AMP@[559; 560)
107 SELF_KW@[560; 564)
108 COMMA@[564; 565)
109 WHITESPACE@[565; 566)
110 PARAM@[566; 600)
111 BIND_PAT@[566; 574)
112 NAME@[566; 574)
113 IDENT@[566; 574) "event_fn"
114 COLON@[574; 575)
115 WHITESPACE@[575; 576)
116 IMPL_TRAIT_TYPE@[576; 600)
117 IMPL_KW@[576; 580)
118 WHITESPACE@[580; 581)
119 PATH_TYPE@[581; 600)
120 PATH@[581; 600)
121 PATH_SEGMENT@[581; 600)
122 NAME_REF@[581; 583)
123 IDENT@[581; 583) "Fn"
124 PARAM_LIST@[583; 585)
125 L_PAREN@[583; 584)
126 R_PAREN@[584; 585)
127 WHITESPACE@[585; 586)
128 RET_TYPE@[586; 600)
129 THIN_ARROW@[586; 588)
130 WHITESPACE@[588; 589)
131 PATH_TYPE@[589; 600)
132 PATH@[589; 600)
133 PATH_SEGMENT@[589; 600)
134 NAME_REF@[589; 594)
135 IDENT@[589; 594) "Event"
136 TYPE_ARG_LIST@[594; 600)
137 L_ANGLE@[594; 595)
138 TYPE_ARG@[595; 599)
139 PATH_TYPE@[595; 599)
140 PATH@[595; 599)
141 PATH_SEGMENT@[595; 599)
142 NAME_REF@[595; 599)
143 IDENT@[595; 599) "Self"
144 R_ANGLE@[599; 600)
145 R_PAREN@[600; 601)
146 WHITESPACE@[601; 602)
147 BLOCK@[602; 683)
148 L_CURLY@[602; 603)
149 WHITESPACE@[603; 612)
150 ATTR@[612; 639)
151 POUND@[612; 613)
152 EXCL@[613; 614)
153 TOKEN_TREE@[614; 639)
154 L_BRACK@[614; 615)
155 IDENT@[615; 620) "allow"
156 TOKEN_TREE@[620; 638)
157 L_PAREN@[620; 621)
158 IDENT@[621; 637) "unused_variables"
159 R_PAREN@[637; 638)
160 R_BRACK@[638; 639)
161 WHITESPACE@[639; 640)
162 COMMENT@[640; 677)
163 WHITESPACE@[677; 682)
164 R_CURLY@[682; 683)
165 WHITESPACE@[683; 684)
166 R_CURLY@[684; 685)
167 WHITESPACE@[685; 686)
diff --git a/crates/ra_syntax/tests/data/parser/ok/0045_extern_inner_attributes.rs b/crates/ra_syntax/tests/data/parser/ok/0045_extern_inner_attributes.rs
new file mode 100644
index 000000000..fe67e2df4
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0045_extern_inner_attributes.rs
@@ -0,0 +1,4 @@
1extern "C" {
2 //! This is a doc comment
3 #![doc("This is also a doc comment")]
4}
diff --git a/crates/ra_syntax/tests/data/parser/ok/0045_extern_inner_attributes.txt b/crates/ra_syntax/tests/data/parser/ok/0045_extern_inner_attributes.txt
new file mode 100644
index 000000000..c68e1b271
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0045_extern_inner_attributes.txt
@@ -0,0 +1,26 @@
1SOURCE_FILE@[0; 87)
2 EXTERN_BLOCK@[0; 86)
3 ABI@[0; 10)
4 EXTERN_KW@[0; 6)
5 WHITESPACE@[6; 7)
6 STRING@[7; 10)
7 WHITESPACE@[10; 11)
8 EXTERN_ITEM_LIST@[11; 86)
9 L_CURLY@[11; 12)
10 WHITESPACE@[12; 17)
11 COMMENT@[17; 42)
12 WHITESPACE@[42; 47)
13 ATTR@[47; 84)
14 POUND@[47; 48)
15 EXCL@[48; 49)
16 TOKEN_TREE@[49; 84)
17 L_BRACK@[49; 50)
18 IDENT@[50; 53) "doc"
19 TOKEN_TREE@[53; 83)
20 L_PAREN@[53; 54)
21 STRING@[54; 82)
22 R_PAREN@[82; 83)
23 R_BRACK@[83; 84)
24 WHITESPACE@[84; 85)
25 R_CURLY@[85; 86)
26 WHITESPACE@[86; 87)