mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-30 13:51:31 +00:00
Merge #11530
11530: fix: Fix expand_macro always expanding the first listed derive r=Veykril a=Veykril bors r+ Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
This commit is contained in:
commit
7ce06d4b17
3 changed files with 18 additions and 4 deletions
|
@ -310,7 +310,8 @@ impl HirFileId {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return whether this file is the pseudo expansion of the derive attribute.
|
/// Return whether this file is the pseudo expansion of the derive attribute.
|
||||||
pub fn is_derive_attr_macro(&self, db: &dyn db::AstDatabase) -> bool {
|
/// See [`crate::builtin_attr_macro::derive_attr_expand`].
|
||||||
|
pub fn is_derive_attr_pseudo_expansion(&self, db: &dyn db::AstDatabase) -> bool {
|
||||||
match self.0 {
|
match self.0 {
|
||||||
HirFileIdRepr::MacroFile(macro_file) => {
|
HirFileIdRepr::MacroFile(macro_file) => {
|
||||||
let loc: MacroCallLoc = db.lookup_intern_macro_call(macro_file.macro_call_id);
|
let loc: MacroCallLoc = db.lookup_intern_macro_call(macro_file.macro_call_id);
|
||||||
|
|
|
@ -42,7 +42,7 @@ pub(crate) fn expand_macro(db: &RootDatabase, position: FilePosition) -> Option<
|
||||||
|
|
||||||
let derive = sema.descend_into_macros(tok.clone()).into_iter().find_map(|descended| {
|
let derive = sema.descend_into_macros(tok.clone()).into_iter().find_map(|descended| {
|
||||||
let hir_file = sema.hir_file_for(&descended.parent()?);
|
let hir_file = sema.hir_file_for(&descended.parent()?);
|
||||||
if !hir_file.is_derive_attr_macro(db) {
|
if !hir_file.is_derive_attr_pseudo_expansion(db) {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,7 +55,7 @@ pub(crate) fn expand_macro(db: &RootDatabase, position: FilePosition) -> Option<
|
||||||
.token_tree()?
|
.token_tree()?
|
||||||
.token_trees_and_tokens()
|
.token_trees_and_tokens()
|
||||||
.filter_map(NodeOrToken::into_token)
|
.filter_map(NodeOrToken::into_token)
|
||||||
.take_while(|it| it == &token)
|
.take_while(|it| it != &token)
|
||||||
.filter(|it| it.kind() == T![,])
|
.filter(|it| it.kind() == T![,])
|
||||||
.count();
|
.count();
|
||||||
Some(ExpandedMacro {
|
Some(ExpandedMacro {
|
||||||
|
@ -384,5 +384,18 @@ struct Foo {}
|
||||||
|
|
||||||
"#]],
|
"#]],
|
||||||
);
|
);
|
||||||
|
check(
|
||||||
|
r#"
|
||||||
|
//- minicore: copy, clone, derive
|
||||||
|
|
||||||
|
#[derive(Copy, Cl$0one)]
|
||||||
|
struct Foo {}
|
||||||
|
"#,
|
||||||
|
expect![[r#"
|
||||||
|
Clone
|
||||||
|
impl < >core::clone::Clone for Foo< >{}
|
||||||
|
|
||||||
|
"#]],
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,7 +49,7 @@ pub(crate) fn replace_derive_with_manual_impl(
|
||||||
let attr = ctx.find_node_at_offset_with_descend::<ast::Attr>()?;
|
let attr = ctx.find_node_at_offset_with_descend::<ast::Attr>()?;
|
||||||
let path = attr.path()?;
|
let path = attr.path()?;
|
||||||
let hir_file = ctx.sema.hir_file_for(attr.syntax());
|
let hir_file = ctx.sema.hir_file_for(attr.syntax());
|
||||||
if !hir_file.is_derive_attr_macro(ctx.db()) {
|
if !hir_file.is_derive_attr_pseudo_expansion(ctx.db()) {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue