Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-def/src/attrs.rs')
| -rw-r--r-- | crates/hir-def/src/attrs.rs | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/crates/hir-def/src/attrs.rs b/crates/hir-def/src/attrs.rs index f4a1a3130e..14285299bf 100644 --- a/crates/hir-def/src/attrs.rs +++ b/crates/hir-def/src/attrs.rs @@ -1051,17 +1051,25 @@ impl AttrFlags { collect_attrs::<Infallible>(db, owner.into(), |attr| { if let Meta::TokenTree { path, tt } = attr && path.is1("target_feature") - && let mut tt = TokenTreeChildren::new(&tt) - && let Some(NodeOrToken::Token(enable_ident)) = tt.next() - && enable_ident.text() == "enable" - && let Some(NodeOrToken::Token(eq_token)) = tt.next() - && eq_token.kind() == T![=] - && let Some(NodeOrToken::Token(features)) = tt.next() - && let Some(features) = ast::String::cast(features) - && let Ok(features) = features.value() - && tt.next().is_none() { - result.extend(features.split(',').map(Symbol::intern)); + let mut tt = TokenTreeChildren::new(&tt); + while let Some(NodeOrToken::Token(enable_ident)) = tt.next() + && enable_ident.text() == "enable" + && let Some(NodeOrToken::Token(eq_token)) = tt.next() + && eq_token.kind() == T![=] + && let Some(NodeOrToken::Token(features)) = tt.next() + && let Some(features) = ast::String::cast(features) + && let Ok(features) = features.value() + { + result.extend(features.split(',').map(Symbol::intern)); + if tt + .next() + .and_then(NodeOrToken::into_token) + .is_none_or(|it| it.kind() != T![,]) + { + break; + } + } } ControlFlow::Continue(()) }); |