@@ -29,7 +29,7 @@ use crate::{
29
29
hygiene:: Hygiene ,
30
30
mod_path:: ModPath ,
31
31
EagerCallInfo , ExpandError , ExpandResult , ExpandTo , InFile , MacroCallId , MacroCallKind ,
32
- MacroCallLoc , MacroDefId , MacroDefKind , UnresolvedMacro ,
32
+ MacroCallLoc , MacroDefId , MacroDefKind ,
33
33
} ;
34
34
35
35
pub fn expand_eager_macro_input (
@@ -38,7 +38,7 @@ pub fn expand_eager_macro_input(
38
38
macro_call : InFile < ast:: MacroCall > ,
39
39
def : MacroDefId ,
40
40
resolver : & dyn Fn ( ModPath ) -> Option < MacroDefId > ,
41
- ) -> Result < ExpandResult < Option < MacroCallId > > , UnresolvedMacro > {
41
+ ) -> ExpandResult < Option < MacroCallId > > {
42
42
let ast_map = db. ast_id_map ( macro_call. file_id ) ;
43
43
// the expansion which the ast id map is built upon has no whitespace, so the offsets are wrong as macro_call is from the token tree that has whitespace!
44
44
let call_id = InFile :: new ( macro_call. file_id , ast_map. ast_id ( & macro_call. value ) ) ;
@@ -71,12 +71,12 @@ pub fn expand_eager_macro_input(
71
71
InFile :: new ( arg_id. as_file ( ) , arg_exp. syntax_node ( ) ) ,
72
72
krate,
73
73
resolver,
74
- ) ?
74
+ )
75
75
} ;
76
76
let err = parse_err. or ( err) ;
77
77
78
78
let Some ( ( expanded_eager_input, mapping) ) = expanded_eager_input else {
79
- return Ok ( ExpandResult { value : None , err } ) ;
79
+ return ExpandResult { value : None , err } ;
80
80
} ;
81
81
82
82
let ( mut subtree, expanded_eager_input_token_map) =
@@ -98,7 +98,7 @@ pub fn expand_eager_macro_input(
98
98
// remap from eager input expansion to original eager input
99
99
if let Some ( & og_range) = ws_mapping. get ( og_range) {
100
100
if let Some ( og_token) = og_tmap. token_by_range ( og_range) {
101
- ids_used. insert ( id ) ;
101
+ ids_used. insert ( og_token ) ;
102
102
return og_token;
103
103
}
104
104
}
@@ -124,7 +124,7 @@ pub fn expand_eager_macro_input(
124
124
kind : MacroCallKind :: FnLike { ast_id : call_id, expand_to } ,
125
125
} ;
126
126
127
- Ok ( ExpandResult { value : Some ( db. intern_macro_call ( loc) ) , err } )
127
+ ExpandResult { value : Some ( db. intern_macro_call ( loc) ) , err }
128
128
}
129
129
130
130
fn lazy_expand (
@@ -150,13 +150,13 @@ fn eager_macro_recur(
150
150
curr : InFile < SyntaxNode > ,
151
151
krate : CrateId ,
152
152
macro_resolver : & dyn Fn ( ModPath ) -> Option < MacroDefId > ,
153
- ) -> Result < ExpandResult < Option < ( SyntaxNode , FxHashMap < TextRange , TextRange > ) > > , UnresolvedMacro > {
153
+ ) -> ExpandResult < Option < ( SyntaxNode , FxHashMap < TextRange , TextRange > ) > > {
154
154
let original = curr. value . clone_for_update ( ) ;
155
155
let mut mapping = FxHashMap :: default ( ) ;
156
156
157
157
let mut replacements = Vec :: new ( ) ;
158
158
159
- // Note : We only report a single error inside of eager expansions
159
+ // FIXME : We only report a single error inside of eager expansions
160
160
let mut error = None ;
161
161
let mut offset = 0i32 ;
162
162
let apply_offset = |it : TextSize , offset : i32 | {
@@ -187,24 +187,28 @@ fn eager_macro_recur(
187
187
}
188
188
} ;
189
189
let def = match call. path ( ) . and_then ( |path| ModPath :: from_src ( db, path, hygiene) ) {
190
- Some ( path) => macro_resolver ( path. clone ( ) ) . ok_or ( UnresolvedMacro { path } ) ?,
190
+ Some ( path) => match macro_resolver ( path. clone ( ) ) {
191
+ Some ( def) => def,
192
+ None => {
193
+ error =
194
+ Some ( ExpandError :: other ( format ! ( "unresolved macro {}" , path. display( db) ) ) ) ;
195
+ continue ;
196
+ }
197
+ } ,
191
198
None => {
192
199
error = Some ( ExpandError :: other ( "malformed macro invocation" ) ) ;
193
200
continue ;
194
201
}
195
202
} ;
196
203
let ExpandResult { value, err } = match def. kind {
197
204
MacroDefKind :: BuiltInEager ( ..) => {
198
- let ExpandResult { value, err } = match expand_eager_macro_input (
205
+ let ExpandResult { value, err } = expand_eager_macro_input (
199
206
db,
200
207
krate,
201
208
curr. with_value ( call. clone ( ) ) ,
202
209
def,
203
210
macro_resolver,
204
- ) {
205
- Ok ( it) => it,
206
- Err ( err) => return Err ( err) ,
207
- } ;
211
+ ) ;
208
212
match value {
209
213
Some ( call_id) => {
210
214
let ExpandResult { value, err : err2 } =
@@ -254,7 +258,7 @@ fn eager_macro_recur(
254
258
parse. as_ref ( ) . map ( |it| it. syntax_node ( ) ) ,
255
259
krate,
256
260
macro_resolver,
257
- ) ? ;
261
+ ) ;
258
262
let err = err. or ( error) ;
259
263
260
264
if let Some ( tt) = call. token_tree ( ) {
@@ -284,7 +288,7 @@ fn eager_macro_recur(
284
288
}
285
289
// check if the whole original syntax is replaced
286
290
if call. syntax ( ) == & original {
287
- return Ok ( ExpandResult { value : value. zip ( Some ( mapping) ) , err : error } ) ;
291
+ return ExpandResult { value : value. zip ( Some ( mapping) ) , err : error } ;
288
292
}
289
293
290
294
if let Some ( insert) = value {
@@ -295,5 +299,5 @@ fn eager_macro_recur(
295
299
}
296
300
297
301
replacements. into_iter ( ) . rev ( ) . for_each ( |( old, new) | ted:: replace ( old. syntax ( ) , new) ) ;
298
- Ok ( ExpandResult { value : Some ( ( original, mapping) ) , err : error } )
302
+ ExpandResult { value : Some ( ( original, mapping) ) , err : error }
299
303
}
0 commit comments