@@ -29,7 +29,7 @@ use crate::{
2929 hygiene:: Hygiene ,
3030 mod_path:: ModPath ,
3131 EagerCallInfo , ExpandError , ExpandResult , ExpandTo , InFile , MacroCallId , MacroCallKind ,
32- MacroCallLoc , MacroDefId , MacroDefKind , UnresolvedMacro ,
32+ MacroCallLoc , MacroDefId , MacroDefKind ,
3333} ;
3434
3535pub fn expand_eager_macro_input (
@@ -38,7 +38,7 @@ pub fn expand_eager_macro_input(
3838 macro_call : InFile < ast:: MacroCall > ,
3939 def : MacroDefId ,
4040 resolver : & dyn Fn ( ModPath ) -> Option < MacroDefId > ,
41- ) -> Result < ExpandResult < Option < MacroCallId > > , UnresolvedMacro > {
41+ ) -> ExpandResult < Option < MacroCallId > > {
4242 let ast_map = db. ast_id_map ( macro_call. file_id ) ;
4343 // 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!
4444 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(
7171 InFile :: new ( arg_id. as_file ( ) , arg_exp. syntax_node ( ) ) ,
7272 krate,
7373 resolver,
74- ) ?
74+ )
7575 } ;
7676 let err = parse_err. or ( err) ;
7777
7878 let Some ( ( expanded_eager_input, mapping) ) = expanded_eager_input else {
79- return Ok ( ExpandResult { value : None , err } ) ;
79+ return ExpandResult { value : None , err } ;
8080 } ;
8181
8282 let ( mut subtree, expanded_eager_input_token_map) =
@@ -98,7 +98,7 @@ pub fn expand_eager_macro_input(
9898 // remap from eager input expansion to original eager input
9999 if let Some ( & og_range) = ws_mapping. get ( og_range) {
100100 if let Some ( og_token) = og_tmap. token_by_range ( og_range) {
101- ids_used. insert ( id ) ;
101+ ids_used. insert ( og_token ) ;
102102 return og_token;
103103 }
104104 }
@@ -124,7 +124,7 @@ pub fn expand_eager_macro_input(
124124 kind : MacroCallKind :: FnLike { ast_id : call_id, expand_to } ,
125125 } ;
126126
127- Ok ( ExpandResult { value : Some ( db. intern_macro_call ( loc) ) , err } )
127+ ExpandResult { value : Some ( db. intern_macro_call ( loc) ) , err }
128128}
129129
130130fn lazy_expand (
@@ -150,13 +150,13 @@ fn eager_macro_recur(
150150 curr : InFile < SyntaxNode > ,
151151 krate : CrateId ,
152152 macro_resolver : & dyn Fn ( ModPath ) -> Option < MacroDefId > ,
153- ) -> Result < ExpandResult < Option < ( SyntaxNode , FxHashMap < TextRange , TextRange > ) > > , UnresolvedMacro > {
153+ ) -> ExpandResult < Option < ( SyntaxNode , FxHashMap < TextRange , TextRange > ) > > {
154154 let original = curr. value . clone_for_update ( ) ;
155155 let mut mapping = FxHashMap :: default ( ) ;
156156
157157 let mut replacements = Vec :: new ( ) ;
158158
159- // Note : We only report a single error inside of eager expansions
159+ // FIXME : We only report a single error inside of eager expansions
160160 let mut error = None ;
161161 let mut offset = 0i32 ;
162162 let apply_offset = |it : TextSize , offset : i32 | {
@@ -187,24 +187,28 @@ fn eager_macro_recur(
187187 }
188188 } ;
189189 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+ } ,
191198 None => {
192199 error = Some ( ExpandError :: other ( "malformed macro invocation" ) ) ;
193200 continue ;
194201 }
195202 } ;
196203 let ExpandResult { value, err } = match def. kind {
197204 MacroDefKind :: BuiltInEager ( ..) => {
198- let ExpandResult { value, err } = match expand_eager_macro_input (
205+ let ExpandResult { value, err } = expand_eager_macro_input (
199206 db,
200207 krate,
201208 curr. with_value ( call. clone ( ) ) ,
202209 def,
203210 macro_resolver,
204- ) {
205- Ok ( it) => it,
206- Err ( err) => return Err ( err) ,
207- } ;
211+ ) ;
208212 match value {
209213 Some ( call_id) => {
210214 let ExpandResult { value, err : err2 } =
@@ -254,7 +258,7 @@ fn eager_macro_recur(
254258 parse. as_ref ( ) . map ( |it| it. syntax_node ( ) ) ,
255259 krate,
256260 macro_resolver,
257- ) ? ;
261+ ) ;
258262 let err = err. or ( error) ;
259263
260264 if let Some ( tt) = call. token_tree ( ) {
@@ -284,7 +288,7 @@ fn eager_macro_recur(
284288 }
285289 // check if the whole original syntax is replaced
286290 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 } ;
288292 }
289293
290294 if let Some ( insert) = value {
@@ -295,5 +299,5 @@ fn eager_macro_recur(
295299 }
296300
297301 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 }
299303}
0 commit comments