@@ -65,11 +65,11 @@ use hir_expand::{
6565 builtin_attr_macro:: BuiltinAttrExpander ,
6666 builtin_derive_macro:: BuiltinDeriveExpander ,
6767 builtin_fn_macro:: { BuiltinFnLikeExpander , EagerExpander } ,
68- eager:: { expand_eager_macro, ErrorEmitted , ErrorSink } ,
68+ eager:: expand_eager_macro,
6969 hygiene:: Hygiene ,
7070 proc_macro:: ProcMacroExpander ,
71- AstId , ExpandError , ExpandTo , HirFileId , InFile , MacroCallId , MacroCallKind , MacroDefId ,
72- MacroDefKind , UnresolvedMacro ,
71+ AstId , ExpandError , ExpandResult , ExpandTo , HirFileId , InFile , MacroCallId , MacroCallKind ,
72+ MacroDefId , MacroDefKind , UnresolvedMacro ,
7373} ;
7474use item_tree:: ExternBlock ;
7575use la_arena:: Idx ;
@@ -795,16 +795,15 @@ pub trait AsMacroCall {
795795 krate : CrateId ,
796796 resolver : impl Fn ( path:: ModPath ) -> Option < MacroDefId > ,
797797 ) -> Option < MacroCallId > {
798- self . as_call_id_with_errors ( db, krate, resolver, & mut |_| ( ) ) . ok ( ) ?. ok ( )
798+ self . as_call_id_with_errors ( db, krate, resolver) . ok ( ) ?. value
799799 }
800800
801801 fn as_call_id_with_errors (
802802 & self ,
803803 db : & dyn db:: DefDatabase ,
804804 krate : CrateId ,
805805 resolver : impl Fn ( path:: ModPath ) -> Option < MacroDefId > ,
806- error_sink : & mut dyn FnMut ( ExpandError ) ,
807- ) -> Result < Result < MacroCallId , ErrorEmitted > , UnresolvedMacro > ;
806+ ) -> Result < ExpandResult < Option < MacroCallId > > , UnresolvedMacro > ;
808807}
809808
810809impl AsMacroCall for InFile < & ast:: MacroCall > {
@@ -813,30 +812,23 @@ impl AsMacroCall for InFile<&ast::MacroCall> {
813812 db : & dyn db:: DefDatabase ,
814813 krate : CrateId ,
815814 resolver : impl Fn ( path:: ModPath ) -> Option < MacroDefId > ,
816- mut error_sink : & mut dyn FnMut ( ExpandError ) ,
817- ) -> Result < Result < MacroCallId , ErrorEmitted > , UnresolvedMacro > {
815+ ) -> Result < ExpandResult < Option < MacroCallId > > , UnresolvedMacro > {
818816 let expands_to = hir_expand:: ExpandTo :: from_call_site ( self . value ) ;
819817 let ast_id = AstId :: new ( self . file_id , db. ast_id_map ( self . file_id ) . ast_id ( self . value ) ) ;
820818 let h = Hygiene :: new ( db. upcast ( ) , self . file_id ) ;
821819 let path =
822820 self . value . path ( ) . and_then ( |path| path:: ModPath :: from_src ( db. upcast ( ) , path, & h) ) ;
823821
824- let path = match error_sink
825- . option ( path, || ExpandError :: Other ( "malformed macro invocation" . into ( ) ) )
826- {
827- Ok ( path) => path,
828- Err ( error) => {
829- return Ok ( Err ( error) ) ;
830- }
822+ let Some ( path) = path else {
823+ return Ok ( ExpandResult :: only_err ( ExpandError :: Other ( "malformed macro invocation" . into ( ) ) ) ) ;
831824 } ;
832825
833- macro_call_as_call_id (
826+ macro_call_as_call_id_ (
834827 db,
835828 & AstIdWithPath :: new ( ast_id. file_id , ast_id. value , path) ,
836829 expands_to,
837830 krate,
838831 resolver,
839- error_sink,
840832 )
841833 }
842834}
@@ -860,21 +852,33 @@ fn macro_call_as_call_id(
860852 expand_to : ExpandTo ,
861853 krate : CrateId ,
862854 resolver : impl Fn ( path:: ModPath ) -> Option < MacroDefId > ,
863- error_sink : & mut dyn FnMut ( ExpandError ) ,
864- ) -> Result < Result < MacroCallId , ErrorEmitted > , UnresolvedMacro > {
855+ ) -> Result < Option < MacroCallId > , UnresolvedMacro > {
856+ macro_call_as_call_id_ ( db, call, expand_to, krate, resolver) . map ( |res| res. value )
857+ }
858+
859+ fn macro_call_as_call_id_ (
860+ db : & dyn db:: DefDatabase ,
861+ call : & AstIdWithPath < ast:: MacroCall > ,
862+ expand_to : ExpandTo ,
863+ krate : CrateId ,
864+ resolver : impl Fn ( path:: ModPath ) -> Option < MacroDefId > ,
865+ ) -> Result < ExpandResult < Option < MacroCallId > > , UnresolvedMacro > {
865866 let def =
866867 resolver ( call. path . clone ( ) ) . ok_or_else ( || UnresolvedMacro { path : call. path . clone ( ) } ) ?;
867868
868869 let res = if let MacroDefKind :: BuiltInEager ( ..) = def. kind {
869870 let macro_call = InFile :: new ( call. ast_id . file_id , call. ast_id . to_node ( db. upcast ( ) ) ) ;
870871
871- expand_eager_macro ( db. upcast ( ) , krate, macro_call, def, & resolver, error_sink ) ?
872+ expand_eager_macro ( db. upcast ( ) , krate, macro_call, def, & resolver) ?
872873 } else {
873- Ok ( def. as_lazy_macro (
874- db. upcast ( ) ,
875- krate,
876- MacroCallKind :: FnLike { ast_id : call. ast_id , expand_to } ,
877- ) )
874+ ExpandResult {
875+ value : Some ( def. as_lazy_macro (
876+ db. upcast ( ) ,
877+ krate,
878+ MacroCallKind :: FnLike { ast_id : call. ast_id , expand_to } ,
879+ ) ) ,
880+ err : None ,
881+ }
878882 } ;
879883 Ok ( res)
880884}
0 commit comments