|
|
@@ -545,7 +545,7 @@ fn inner_attributes( |
545 | _ => return None, |
545 | _ => return None, |
546 | } |
546 | } |
547 | }; |
547 | }; |
548 | let attrs = attrs.filter(|attr| attr.excl_token().is_some()); |
548 | let attrs = attrs.filter(|attr| attr.kind().is_inner()); |
549 | let docs = docs.filter(|doc| doc.is_inner()); |
549 | let docs = docs.filter(|doc| doc.is_inner()); |
550 | Some((attrs, docs)) |
550 | Some((attrs, docs)) |
551 | } |
551 | } |
@@ -740,7 +740,7 @@ fn collect_attrs( |
740 | let (inner_attrs, inner_docs) = inner_attributes(owner.syntax()) |
740 | let (inner_attrs, inner_docs) = inner_attributes(owner.syntax()) |
741 | .map_or((None, None), |(attrs, docs)| (Some(attrs), Some(docs))); |
741 | .map_or((None, None), |(attrs, docs)| (Some(attrs), Some(docs))); |
742 | |
742 | |
743 | let outer_attrs = owner.attrs().filter(|attr| attr.excl_token().is_none()); |
743 | let outer_attrs = owner.attrs().filter(|attr| attr.kind().is_outer()); |
744 | let attrs = outer_attrs |
744 | let attrs = outer_attrs |
745 | .chain(inner_attrs.into_iter().flatten()) |
745 | .chain(inner_attrs.into_iter().flatten()) |
746 | .map(|attr| (attr.syntax().text_range().start(), Either::Left(attr))); |
746 | .map(|attr| (attr.syntax().text_range().start(), Either::Left(attr))); |
|
|
|
@@ -125,6 +125,18 @@ pub enum AttrKind { |
125 | Outer, |
125 | Outer, |
126 | } |
126 | } |
127 | |
127 | |
| |
128 | impl AttrKind { |
| |
129 | /// Returns `true` if the attr_kind is [`Inner`]. |
| |
130 | pub fn is_inner(&self) -> bool { |
| |
131 | matches!(self, Self::Inner) |
| |
132 | } |
| |
133 | |
| |
134 | /// Returns `true` if the attr_kind is [`Outer`]. |
| |
135 | pub fn is_outer(&self) -> bool { |
| |
136 | matches!(self, Self::Outer) |
| |
137 | } |
| |
138 | } |
| |
139 | |
128 | impl ast::Attr { |
140 | impl ast::Attr { |
129 | pub fn as_simple_atom(&self) -> Option<SmolStr> { |
141 | pub fn as_simple_atom(&self) -> Option<SmolStr> { |
130 | if self.eq_token().is_some() || self.token_tree().is_some() { |
142 | if self.eq_token().is_some() || self.token_tree().is_some() { |
|
|
|
@@ -13,7 +13,7 @@ pub(crate) fn validate_block_expr(block: ast::BlockExpr, errors: &mut Vec<Syntax |
13 | _ => {} |
13 | _ => {} |
14 | } |
14 | } |
15 | } |
15 | } |
16 | errors.extend(block.attrs().map(|attr| { |
16 | errors.extend(block.attrs().filter(|attr| attr.kind().is_inner()).map(|attr| { |
17 | SyntaxError::new( |
17 | SyntaxError::new( |
18 | "A block in this position cannot accept inner attributes", |
18 | "A block in this position cannot accept inner attributes", |
19 | attr.syntax().text_range(), |
19 | attr.syntax().text_range(), |
|
|
|
@@ -0,0 +1,218 @@ |
| |
1 | [email protected] |
| |
2 | [email protected] |
| |
3 | [email protected] "fn" |
| |
4 | [email protected] " " |
| |
5 | [email protected] |
| |
6 | [email protected] "inner" |
| |
7 | [email protected] |
| |
8 | [email protected] "(" |
| |
9 | [email protected] ")" |
| |
10 | [email protected] " " |
| |
11 | [email protected] |
| |
12 | [email protected] "{" |
| |
13 | [email protected] "\n " |
| |
14 | [email protected] |
| |
15 | [email protected] "#" |
| |
16 | [email protected] "!" |
| |
17 | [email protected] "[" |
| |
18 | [email protected] |
| |
19 | [email protected] |
| |
20 | [email protected] |
| |
21 | [email protected] "doc" |
| |
22 | [email protected] |
| |
23 | [email protected] "(" |
| |
24 | [email protected] "\"Inner attributes all ..." |
| |
25 | [email protected] ")" |
| |
26 | [email protected] "]" |
| |
27 | [email protected] "\n " |
| |
28 | [email protected] "//! As are ModuleDoc ..." |
| |
29 | [email protected] "\n " |
| |
30 | [email protected] |
| |
31 | [email protected] |
| |
32 | [email protected] "{" |
| |
33 | [email protected] "\n " |
| |
34 | [email protected] |
| |
35 | [email protected] "#" |
| |
36 | [email protected] "!" |
| |
37 | [email protected] "[" |
| |
38 | [email protected] |
| |
39 | [email protected] |
| |
40 | [email protected] |
| |
41 | [email protected] "doc" |
| |
42 | [email protected] |
| |
43 | [email protected] "(" |
| |
44 | [email protected] "\"Inner attributes are ..." |
| |
45 | [email protected] ")" |
| |
46 | [email protected] "]" |
| |
47 | [email protected] "\n " |
| |
48 | [email protected] |
| |
49 | [email protected] "#" |
| |
50 | [email protected] "!" |
| |
51 | [email protected] "[" |
| |
52 | [email protected] |
| |
53 | [email protected] |
| |
54 | [email protected] |
| |
55 | [email protected] "doc" |
| |
56 | [email protected] |
| |
57 | [email protected] "(" |
| |
58 | [email protected] "\"Being validated is n ..." |
| |
59 | [email protected] ")" |
| |
60 | [email protected] "]" |
| |
61 | [email protected] "\n " |
| |
62 | [email protected] "//! As are ModuleDoc ..." |
| |
63 | [email protected] "\n " |
| |
64 | [email protected] "}" |
| |
65 | [email protected] ";" |
| |
66 | [email protected] "\n " |
| |
67 | [email protected] |
| |
68 | [email protected] "{" |
| |
69 | [email protected] "\n " |
| |
70 | [email protected] |
| |
71 | [email protected] "#" |
| |
72 | [email protected] "!" |
| |
73 | [email protected] "[" |
| |
74 | [email protected] |
| |
75 | [email protected] |
| |
76 | [email protected] |
| |
77 | [email protected] "doc" |
| |
78 | [email protected] |
| |
79 | [email protected] "(" |
| |
80 | [email protected] "\"Inner attributes are ..." |
| |
81 | [email protected] ")" |
| |
82 | [email protected] "]" |
| |
83 | [email protected] "\n " |
| |
84 | [email protected] "//! As are ModuleDoc ..." |
| |
85 | [email protected] "\n " |
| |
86 | [email protected] "}" |
| |
87 | [email protected] "\n" |
| |
88 | [email protected] "}" |
| |
89 | [email protected] "\n\n" |
| |
90 | [email protected] |
| |
91 | [email protected] "fn" |
| |
92 | [email protected] " " |
| |
93 | [email protected] |
| |
94 | [email protected] "outer" |
| |
95 | [email protected] |
| |
96 | [email protected] "(" |
| |
97 | [email protected] ")" |
| |
98 | [email protected] " " |
| |
99 | [email protected] |
| |
100 | [email protected] "{" |
| |
101 | [email protected] "\n " |
| |
102 | [email protected] |
| |
103 | [email protected] "let" |
| |
104 | [email protected] " " |
| |
105 | [email protected] |
| |
106 | [email protected] "_" |
| |
107 | [email protected] " " |
| |
108 | [email protected] "=" |
| |
109 | [email protected] " " |
| |
110 | [email protected] |
| |
111 | [email protected] |
| |
112 | [email protected] "#" |
| |
113 | [email protected] "[" |
| |
114 | [email protected] |
| |
115 | [email protected] |
| |
116 | [email protected] |
| |
117 | [email protected] "doc" |
| |
118 | [email protected] |
| |
119 | [email protected] "(" |
| |
120 | [email protected] "\"Outer attributes are ..." |
| |
121 | [email protected] ")" |
| |
122 | [email protected] "]" |
| |
123 | [email protected] " " |
| |
124 | [email protected] "{" |
| |
125 | [email protected] "}" |
| |
126 | [email protected] ";" |
| |
127 | [email protected] "\n" |
| |
128 | [email protected] "}" |
| |
129 | [email protected] "\n\n" |
| |
130 | [email protected] "// https://github.com ..." |
| |
131 | [email protected] "\n" |
| |
132 | [email protected] |
| |
133 | [email protected] "impl" |
| |
134 | [email protected] " " |
| |
135 | [email protected] |
| |
136 | [email protected] |
| |
137 | [email protected] |
| |
138 | [email protected] |
| |
139 | [email protected] "Whatever" |
| |
140 | [email protected] " " |
| |
141 | [email protected] |
| |
142 | [email protected] "{" |
| |
143 | [email protected] "\n " |
| |
144 | [email protected] |
| |
145 | [email protected] "fn" |
| |
146 | [email protected] " " |
| |
147 | [email protected] |
| |
148 | [email protected] "salsa_event" |
| |
149 | [email protected] |
| |
150 | [email protected] "(" |
| |
151 | [email protected] |
| |
152 | [email protected] "&" |
| |
153 | [email protected] |
| |
154 | [email protected] "self" |
| |
155 | [email protected] "," |
| |
156 | [email protected] " " |
| |
157 | [email protected] |
| |
158 | [email protected] |
| |
159 | [email protected] |
| |
160 | [email protected] "event_fn" |
| |
161 | [email protected] ":" |
| |
162 | [email protected] " " |
| |
163 | [email protected] |
| |
164 | [email protected] "impl" |
| |
165 | [email protected] " " |
| |
166 | [email protected] |
| |
167 | [email protected] |
| |
168 | [email protected] |
| |
169 | [email protected] |
| |
170 | [email protected] |
| |
171 | [email protected] |
| |
172 | [email protected] "Fn" |
| |
173 | [email protected] |
| |
174 | [email protected] "(" |
| |
175 | [email protected] ")" |
| |
176 | [email protected] " " |
| |
177 | [email protected] |
| |
178 | [email protected] "->" |
| |
179 | [email protected] " " |
| |
180 | [email protected] |
| |
181 | [email protected] |
| |
182 | [email protected] |
| |
183 | [email protected] |
| |
184 | [email protected] "Event" |
| |
185 | [email protected] |
| |
186 | [email protected] "<" |
| |
187 | [email protected] |
| |
188 | [email protected] |
| |
189 | [email protected] |
| |
190 | [email protected] |
| |
191 | [email protected] |
| |
192 | [email protected] "Self" |
| |
193 | [email protected] ">" |
| |
194 | [email protected] ")" |
| |
195 | [email protected] " " |
| |
196 | [email protected] |
| |
197 | [email protected] "{" |
| |
198 | [email protected] "\n " |
| |
199 | [email protected] |
| |
200 | [email protected] "#" |
| |
201 | [email protected] "!" |
| |
202 | [email protected] "[" |
| |
203 | [email protected] |
| |
204 | [email protected] |
| |
205 | [email protected] |
| |
206 | [email protected] "allow" |
| |
207 | [email protected] |
| |
208 | [email protected] "(" |
| |
209 | [email protected] "unused_variables" |
| |
210 | [email protected] ")" |
| |
211 | [email protected] "]" |
| |
212 | [email protected] " " |
| |
213 | [email protected] "// this is `inner_at ..." |
| |
214 | [email protected] "\n " |
| |
215 | [email protected] "}" |
| |
216 | [email protected] "\n" |
| |
217 | [email protected] "}" |
| |
218 | [email protected] "\n" |
|
|
|
@@ -1,4 +1,4 @@ |
1 | fn block() { |
1 | fn inner() { |
2 | #![doc("Inner attributes allowed here")] |
2 | #![doc("Inner attributes allowed here")] |
3 | //! As are ModuleDoc style comments |
3 | //! As are ModuleDoc style comments |
4 | { |
4 | { |
@@ -12,6 +12,10 @@ fn block() { |
12 | } |
12 | } |
13 | } |
13 | } |
14 | |
14 | |
| |
15 | fn outer() { |
| |
16 | let _ = #[doc("Outer attributes are always allowed")] {}; |
| |
17 | } |
| |
18 | |
15 | // https://github.com/rust-analyzer/rust-analyzer/issues/689 |
19 | // https://github.com/rust-analyzer/rust-analyzer/issues/689 |
16 | impl Whatever { |
20 | impl Whatever { |
17 | fn salsa_event(&self, event_fn: impl Fn() -> Event<Self>) { |
21 | fn salsa_event(&self, event_fn: impl Fn() -> Event<Self>) { |
|
|
|
@@ -1,178 +0,0 @@ |
1 | [email protected] |
| |
2 | [email protected] |
| |
3 | [email protected] "fn" |
| |
4 | [email protected] " " |
| |
5 | [email protected] |
| |
6 | [email protected] "block" |
| |
7 | [email protected] |
| |
8 | [email protected] "(" |
| |
9 | [email protected] ")" |
| |
10 | [email protected] " " |
| |
11 | [email protected] |
| |
12 | [email protected] "{" |
| |
13 | [email protected] "\n " |
| |
14 | [email protected] |
| |
15 | [email protected] "#" |
| |
16 | [email protected] "!" |
| |
17 | [email protected] "[" |
| |
18 | [email protected] |
| |
19 | [email protected] |
| |
20 | [email protected] |
| |
21 | [email protected] "doc" |
| |
22 | [email protected] |
| |
23 | [email protected] "(" |
| |
24 | [email protected] "\"Inner attributes all ..." |
| |
25 | [email protected] ")" |
| |
26 | [email protected] "]" |
| |
27 | [email protected] "\n " |
| |
28 | [email protected] "//! As are ModuleDoc ..." |
| |
29 | [email protected] "\n " |
| |
30 | [email protected] |
| |
31 | [email protected] |
| |
32 | [email protected] "{" |
| |
33 | [email protected] "\n " |
| |
34 | [email protected] |
| |
35 | [email protected] "#" |
| |
36 | [email protected] "!" |
| |
37 | [email protected] "[" |
| |
38 | [email protected] |
| |
39 | [email protected] |
| |
40 | [email protected] |
| |
41 | [email protected] "doc" |
| |
42 | [email protected] |
| |
43 | [email protected] "(" |
| |
44 | [email protected] "\"Inner attributes are ..." |
| |
45 | [email protected] ")" |
| |
46 | [email protected] "]" |
| |
47 | [email protected] "\n " |
| |
48 | [email protected] |
| |
49 | [email protected] "#" |
| |
50 | [email protected] "!" |
| |
51 | [email protected] "[" |
| |
52 | [email protected] |
| |
53 | [email protected] |
| |
54 | [email protected] |
| |
55 | [email protected] "doc" |
| |
56 | [email protected] |
| |
57 | [email protected] "(" |
| |
58 | [email protected] "\"Being validated is n ..." |
| |
59 | [email protected] ")" |
| |
60 | [email protected] "]" |
| |
61 | [email protected] "\n " |
| |
62 | [email protected] "//! As are ModuleDoc ..." |
| |
63 | [email protected] "\n " |
| |
64 | [email protected] "}" |
| |
65 | [email protected] ";" |
| |
66 | [email protected] "\n " |
| |
67 | [email protected] |
| |
68 | [email protected] "{" |
| |
69 | [email protected] "\n " |
| |
70 | [email protected] |
| |
71 | [email protected] "#" |
| |
72 | [email protected] "!" |
| |
73 | [email protected] "[" |
| |
74 | [email protected] |
| |
75 | [email protected] |
| |
76 | [email protected] |
| |
77 | [email protected] "doc" |
| |
78 | [email protected] |
| |
79 | [email protected] "(" |
| |
80 | [email protected] "\"Inner attributes are ..." |
| |
81 | [email protected] ")" |
| |
82 | [email protected] "]" |
| |
83 | [email protected] "\n " |
| |
84 | [email protected] "//! As are ModuleDoc ..." |
| |
85 | [email protected] "\n " |
| |
86 | [email protected] "}" |
| |
87 | [email protected] "\n" |
| |
88 | [email protected] "}" |
| |
89 | [email protected] "\n\n" |
| |
90 | [email protected] "// https://github.com ..." |
| |
91 | [email protected] "\n" |
| |
92 | [email protected] |
| |
93 | [email protected] "impl" |
| |
94 | [email protected] " " |
| |
95 | [email protected] |
| |
96 | [email protected] |
| |
97 | [email protected] |
| |
98 | [email protected] |
| |
99 | [email protected] "Whatever" |
| |
100 | [email protected] " " |
| |
101 | [email protected] |
| |
102 | [email protected] "{" |
| |
103 | [email protected] "\n " |
| |
104 | [email protected] |
| |
105 | [email protected] "fn" |
| |
106 | [email protected] " " |
| |
107 | [email protected] |
| |
108 | [email protected] "salsa_event" |
| |
109 | [email protected] |
| |
110 | [email protected] "(" |
| |
111 | [email protected] |
| |
112 | [email protected] "&" |
| |
113 | [email protected] |
| |
114 | [email protected] "self" |
| |
115 | [email protected] "," |
| |
116 | [email protected] " " |
| |
117 | [email protected] |
| |
118 | [email protected] |
| |
119 | [email protected] |
| |
120 | [email protected] "event_fn" |
| |
121 | [email protected] ":" |
| |
122 | [email protected] " " |
| |
123 | [email protected] |
| |
124 | [email protected] "impl" |
| |
125 | [email protected] " " |
| |
126 | [email protected] |
| |
127 | [email protected] |
| |
128 | [email protected] |
| |
129 | [email protected] |
| |
130 | [email protected] |
| |
131 | [email protected] |
| |
132 | [email protected] "Fn" |
| |
133 | [email protected] |
| |
134 | [email protected] "(" |
| |
135 | [email protected] ")" |
| |
136 | [email protected] " " |
| |
137 | [email protected] |
| |
138 | [email protected] "->" |
| |
139 | [email protected] " " |
| |
140 | [email protected] |
| |
141 | [email protected] |
| |
142 | [email protected] |
| |
143 | [email protected] |
| |
144 | [email protected] "Event" |
| |
145 | [email protected] |
| |
146 | [email protected] "<" |
| |
147 | [email protected] |
| |
148 | [email protected] |
| |
149 | [email protected] |
| |
150 | [email protected] |
| |
151 | [email protected] |
| |
152 | [email protected] "Self" |
| |
153 | [email protected] ">" |
| |
154 | [email protected] ")" |
| |
155 | [email protected] " " |
| |
156 | [email protected] |
| |
157 | [email protected] "{" |
| |
158 | [email protected] "\n " |
| |
159 | [email protected] |
| |
160 | [email protected] "#" |
| |
161 | [email protected] "!" |
| |
162 | [email protected] "[" |
| |
163 | [email protected] |
| |
164 | [email protected] |
| |
165 | [email protected] |
| |
166 | [email protected] "allow" |
| |
167 | [email protected] |
| |
168 | [email protected] "(" |
| |
169 | [email protected] "unused_variables" |
| |
170 | [email protected] ")" |
| |
171 | [email protected] "]" |
| |
172 | [email protected] " " |
| |
173 | [email protected] "// this is `inner_at ..." |
| |
174 | [email protected] "\n " |
| |
175 | [email protected] "}" |
| |
176 | [email protected] "\n" |
| |
177 | [email protected] "}" |
| |
178 | [email protected] "\n" |
| |
|