@@ -65,11 +65,11 @@ use hir_expand::{
65
65
builtin_attr_macro:: BuiltinAttrExpander ,
66
66
builtin_derive_macro:: BuiltinDeriveExpander ,
67
67
builtin_fn_macro:: { BuiltinFnLikeExpander , EagerExpander } ,
68
- eager:: { expand_eager_macro, ErrorEmitted , ErrorSink } ,
68
+ eager:: expand_eager_macro,
69
69
hygiene:: Hygiene ,
70
70
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 ,
73
73
} ;
74
74
use item_tree:: ExternBlock ;
75
75
use la_arena:: Idx ;
@@ -795,16 +795,15 @@ pub trait AsMacroCall {
795
795
krate : CrateId ,
796
796
resolver : impl Fn ( path:: ModPath ) -> Option < MacroDefId > ,
797
797
) -> 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
799
799
}
800
800
801
801
fn as_call_id_with_errors (
802
802
& self ,
803
803
db : & dyn db:: DefDatabase ,
804
804
krate : CrateId ,
805
805
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 > ;
808
807
}
809
808
810
809
impl AsMacroCall for InFile < & ast:: MacroCall > {
@@ -813,30 +812,23 @@ impl AsMacroCall for InFile<&ast::MacroCall> {
813
812
db : & dyn db:: DefDatabase ,
814
813
krate : CrateId ,
815
814
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 > {
818
816
let expands_to = hir_expand:: ExpandTo :: from_call_site ( self . value ) ;
819
817
let ast_id = AstId :: new ( self . file_id , db. ast_id_map ( self . file_id ) . ast_id ( self . value ) ) ;
820
818
let h = Hygiene :: new ( db. upcast ( ) , self . file_id ) ;
821
819
let path =
822
820
self . value . path ( ) . and_then ( |path| path:: ModPath :: from_src ( db. upcast ( ) , path, & h) ) ;
823
821
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 ( ) ) ) ) ;
831
824
} ;
832
825
833
- macro_call_as_call_id (
826
+ macro_call_as_call_id_ (
834
827
db,
835
828
& AstIdWithPath :: new ( ast_id. file_id , ast_id. value , path) ,
836
829
expands_to,
837
830
krate,
838
831
resolver,
839
- error_sink,
840
832
)
841
833
}
842
834
}
@@ -860,21 +852,33 @@ fn macro_call_as_call_id(
860
852
expand_to : ExpandTo ,
861
853
krate : CrateId ,
862
854
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 > {
865
866
let def =
866
867
resolver ( call. path . clone ( ) ) . ok_or_else ( || UnresolvedMacro { path : call. path . clone ( ) } ) ?;
867
868
868
869
let res = if let MacroDefKind :: BuiltInEager ( ..) = def. kind {
869
870
let macro_call = InFile :: new ( call. ast_id . file_id , call. ast_id . to_node ( db. upcast ( ) ) ) ;
870
871
871
- expand_eager_macro ( db. upcast ( ) , krate, macro_call, def, & resolver, error_sink ) ?
872
+ expand_eager_macro ( db. upcast ( ) , krate, macro_call, def, & resolver) ?
872
873
} 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
+ }
878
882
} ;
879
883
Ok ( res)
880
884
}
0 commit comments