@@ -29,6 +29,30 @@ use ra_parser::FragmentKind;
29
29
use ra_syntax:: { algo:: replace_descendants, SyntaxElement , SyntaxNode } ;
30
30
use std:: { collections:: HashMap , sync:: Arc } ;
31
31
32
+ pub fn expand_eager_macro (
33
+ db : & impl AstDatabase ,
34
+ macro_call : InFile < ast:: MacroCall > ,
35
+ def : MacroDefId ,
36
+ resolver : & dyn Fn ( ast:: Path ) -> Option < MacroDefId > ,
37
+ ) -> Option < EagerMacroId > {
38
+ let args = macro_call. value . token_tree ( ) ?;
39
+ let parsed_args = mbe:: ast_to_token_tree ( & args) ?. 0 ;
40
+ let parsed_args = mbe:: token_tree_to_syntax_node ( & parsed_args, FragmentKind :: Expr ) . ok ( ) ?. 0 ;
41
+ let result = eager_macro_recur ( db, macro_call. with_value ( parsed_args. syntax_node ( ) ) , resolver) ?;
42
+
43
+ let subtree = to_subtree ( & result) ?;
44
+
45
+ if let MacroDefKind :: BuiltInEager ( eager) = def. kind {
46
+ let ( subtree, fragment) = eager. expand ( & subtree) . ok ( ) ?;
47
+ let eager =
48
+ EagerCallLoc { def, fragment, subtree : Arc :: new ( subtree) , file_id : macro_call. file_id } ;
49
+
50
+ Some ( db. intern_eager_expansion ( eager) )
51
+ } else {
52
+ None
53
+ }
54
+ }
55
+
32
56
fn to_subtree ( node : & SyntaxNode ) -> Option < tt:: Subtree > {
33
57
let mut subtree = mbe:: syntax_node_to_token_tree ( node) ?. 0 ;
34
58
subtree. delimiter = None ;
@@ -86,27 +110,3 @@ fn eager_macro_recur(
86
110
87
111
Some ( original)
88
112
}
89
-
90
- pub fn expand_eager_macro (
91
- db : & impl AstDatabase ,
92
- macro_call : InFile < ast:: MacroCall > ,
93
- def : MacroDefId ,
94
- resolver : & dyn Fn ( ast:: Path ) -> Option < MacroDefId > ,
95
- ) -> Option < EagerMacroId > {
96
- let args = macro_call. value . token_tree ( ) ?;
97
- let parsed_args = mbe:: ast_to_token_tree ( & args) ?. 0 ;
98
- let parsed_args = mbe:: token_tree_to_syntax_node ( & parsed_args, FragmentKind :: Expr ) . ok ( ) ?. 0 ;
99
- let result = eager_macro_recur ( db, macro_call. with_value ( parsed_args. syntax_node ( ) ) , resolver) ?;
100
-
101
- let subtree = to_subtree ( & result) ?;
102
-
103
- if let MacroDefKind :: BuiltInEager ( eager) = def. kind {
104
- let ( subtree, fragment) = eager. expand ( & subtree) . ok ( ) ?;
105
- let eager =
106
- EagerCallLoc { def, fragment, subtree : Arc :: new ( subtree) , file_id : macro_call. file_id } ;
107
-
108
- Some ( db. intern_eager_expansion ( eager) )
109
- } else {
110
- None
111
- }
112
- }
0 commit comments