@@ -1083,7 +1083,7 @@ pub trait AsMacroCall {
1083
1083
& self ,
1084
1084
db : & dyn ExpandDatabase ,
1085
1085
krate : CrateId ,
1086
- resolver : impl Fn ( path:: ModPath ) -> Option < MacroDefId > ,
1086
+ resolver : impl Fn ( path:: ModPath ) -> Option < MacroDefId > + Copy ,
1087
1087
) -> Option < MacroCallId > {
1088
1088
self . as_call_id_with_errors ( db, krate, resolver) . ok ( ) ?. value
1089
1089
}
@@ -1092,7 +1092,7 @@ pub trait AsMacroCall {
1092
1092
& self ,
1093
1093
db : & dyn ExpandDatabase ,
1094
1094
krate : CrateId ,
1095
- resolver : impl Fn ( path:: ModPath ) -> Option < MacroDefId > ,
1095
+ resolver : impl Fn ( path:: ModPath ) -> Option < MacroDefId > + Copy ,
1096
1096
) -> Result < ExpandResult < Option < MacroCallId > > , UnresolvedMacro > ;
1097
1097
}
1098
1098
@@ -1101,7 +1101,7 @@ impl AsMacroCall for InFile<&ast::MacroCall> {
1101
1101
& self ,
1102
1102
db : & dyn ExpandDatabase ,
1103
1103
krate : CrateId ,
1104
- resolver : impl Fn ( path:: ModPath ) -> Option < MacroDefId > ,
1104
+ resolver : impl Fn ( path:: ModPath ) -> Option < MacroDefId > + Copy ,
1105
1105
) -> Result < ExpandResult < Option < MacroCallId > > , UnresolvedMacro > {
1106
1106
let expands_to = hir_expand:: ExpandTo :: from_call_site ( self . value ) ;
1107
1107
let ast_id = AstId :: new ( self . file_id , db. ast_id_map ( self . file_id ) . ast_id ( self . value ) ) ;
@@ -1112,12 +1112,13 @@ impl AsMacroCall for InFile<&ast::MacroCall> {
1112
1112
return Ok ( ExpandResult :: only_err ( ExpandError :: other ( "malformed macro invocation" ) ) ) ;
1113
1113
} ;
1114
1114
1115
- macro_call_as_call_id_ (
1115
+ macro_call_as_call_id_with_eager (
1116
1116
db,
1117
1117
& AstIdWithPath :: new ( ast_id. file_id , ast_id. value , path) ,
1118
1118
expands_to,
1119
1119
krate,
1120
1120
resolver,
1121
+ resolver,
1121
1122
)
1122
1123
}
1123
1124
}
@@ -1140,17 +1141,19 @@ fn macro_call_as_call_id(
1140
1141
call : & AstIdWithPath < ast:: MacroCall > ,
1141
1142
expand_to : ExpandTo ,
1142
1143
krate : CrateId ,
1143
- resolver : impl Fn ( path:: ModPath ) -> Option < MacroDefId > ,
1144
+ resolver : impl Fn ( path:: ModPath ) -> Option < MacroDefId > + Copy ,
1144
1145
) -> Result < Option < MacroCallId > , UnresolvedMacro > {
1145
- macro_call_as_call_id_ ( db, call, expand_to, krate, resolver) . map ( |res| res. value )
1146
+ macro_call_as_call_id_with_eager ( db, call, expand_to, krate, resolver, resolver)
1147
+ . map ( |res| res. value )
1146
1148
}
1147
1149
1148
- fn macro_call_as_call_id_ (
1150
+ fn macro_call_as_call_id_with_eager (
1149
1151
db : & dyn ExpandDatabase ,
1150
1152
call : & AstIdWithPath < ast:: MacroCall > ,
1151
1153
expand_to : ExpandTo ,
1152
1154
krate : CrateId ,
1153
- resolver : impl Fn ( path:: ModPath ) -> Option < MacroDefId > ,
1155
+ resolver : impl FnOnce ( path:: ModPath ) -> Option < MacroDefId > ,
1156
+ eager_resolver : impl Fn ( path:: ModPath ) -> Option < MacroDefId > ,
1154
1157
) -> Result < ExpandResult < Option < MacroCallId > > , UnresolvedMacro > {
1155
1158
let def =
1156
1159
resolver ( call. path . clone ( ) ) . ok_or_else ( || UnresolvedMacro { path : call. path . clone ( ) } ) ?;
@@ -1159,7 +1162,7 @@ fn macro_call_as_call_id_(
1159
1162
MacroDefKind :: BuiltInEager ( ..) => {
1160
1163
let macro_call = InFile :: new ( call. ast_id . file_id , call. ast_id . to_node ( db) ) ;
1161
1164
expand_eager_macro_input ( db, krate, macro_call, def, & |path| {
1162
- resolver ( path) . filter ( MacroDefId :: is_fn_like)
1165
+ eager_resolver ( path) . filter ( MacroDefId :: is_fn_like)
1163
1166
} )
1164
1167
}
1165
1168
_ if def. is_fn_like ( ) => ExpandResult {
0 commit comments