2
2
3
3
use std:: fmt:: { self , Write } ;
4
4
5
+ use hir_expand:: db:: ExpandDatabase ;
5
6
use syntax:: ast:: HasName ;
6
7
7
8
use crate :: {
@@ -18,16 +19,22 @@ pub(super) fn print_body_hir(db: &dyn DefDatabase, body: &Body, owner: DefWithBo
18
19
let header = match owner {
19
20
DefWithBodyId :: FunctionId ( it) => {
20
21
let item_tree_id = it. lookup ( db) . id ;
21
- format ! ( "fn {}" , item_tree_id. item_tree( db) [ item_tree_id. value] . name)
22
+ format ! (
23
+ "fn {}" ,
24
+ item_tree_id. item_tree( db) [ item_tree_id. value] . name. display( db. upcast( ) )
25
+ )
22
26
}
23
27
DefWithBodyId :: StaticId ( it) => {
24
28
let item_tree_id = it. lookup ( db) . id ;
25
- format ! ( "static {} = " , item_tree_id. item_tree( db) [ item_tree_id. value] . name)
29
+ format ! (
30
+ "static {} = " ,
31
+ item_tree_id. item_tree( db) [ item_tree_id. value] . name. display( db. upcast( ) )
32
+ )
26
33
}
27
34
DefWithBodyId :: ConstId ( it) => {
28
35
let item_tree_id = it. lookup ( db) . id ;
29
36
let name = match & item_tree_id. item_tree ( db) [ item_tree_id. value ] . name {
30
- Some ( name) => name. to_string ( ) ,
37
+ Some ( name) => name. display ( db . upcast ( ) ) . to_string ( ) ,
31
38
None => "_" . to_string ( ) ,
32
39
} ;
33
40
format ! ( "const {name} = " )
@@ -42,7 +49,8 @@ pub(super) fn print_body_hir(db: &dyn DefDatabase, body: &Body, owner: DefWithBo
42
49
}
43
50
} ;
44
51
45
- let mut p = Printer { body, buf : header, indent_level : 0 , needs_indent : false } ;
52
+ let mut p =
53
+ Printer { db : db. upcast ( ) , body, buf : header, indent_level : 0 , needs_indent : false } ;
46
54
if let DefWithBodyId :: FunctionId ( it) = owner {
47
55
p. buf . push ( '(' ) ;
48
56
body. params . iter ( ) . zip ( & db. function_data ( it) . params ) . for_each ( |( & param, ty) | {
@@ -61,12 +69,13 @@ pub(super) fn print_body_hir(db: &dyn DefDatabase, body: &Body, owner: DefWithBo
61
69
}
62
70
63
71
pub ( super ) fn print_expr_hir (
64
- _db : & dyn DefDatabase ,
72
+ db : & dyn DefDatabase ,
65
73
body : & Body ,
66
74
_owner : DefWithBodyId ,
67
75
expr : ExprId ,
68
76
) -> String {
69
- let mut p = Printer { body, buf : String :: new ( ) , indent_level : 0 , needs_indent : false } ;
77
+ let mut p =
78
+ Printer { db : db. upcast ( ) , body, buf : String :: new ( ) , indent_level : 0 , needs_indent : false } ;
70
79
p. print_expr ( expr) ;
71
80
p. buf
72
81
}
@@ -87,6 +96,7 @@ macro_rules! wln {
87
96
}
88
97
89
98
struct Printer < ' a > {
99
+ db : & ' a dyn ExpandDatabase ,
90
100
body : & ' a Body ,
91
101
buf : String ,
92
102
indent_level : usize ,
@@ -161,22 +171,22 @@ impl<'a> Printer<'a> {
161
171
}
162
172
Expr :: Loop { body, label } => {
163
173
if let Some ( lbl) = label {
164
- w ! ( self , "{}: " , self . body[ * lbl] . name) ;
174
+ w ! ( self , "{}: " , self . body[ * lbl] . name. display ( self . db ) ) ;
165
175
}
166
176
w ! ( self , "loop " ) ;
167
177
self . print_expr ( * body) ;
168
178
}
169
179
Expr :: While { condition, body, label } => {
170
180
if let Some ( lbl) = label {
171
- w ! ( self , "{}: " , self . body[ * lbl] . name) ;
181
+ w ! ( self , "{}: " , self . body[ * lbl] . name. display ( self . db ) ) ;
172
182
}
173
183
w ! ( self , "while " ) ;
174
184
self . print_expr ( * condition) ;
175
185
self . print_expr ( * body) ;
176
186
}
177
187
Expr :: For { iterable, pat, body, label } => {
178
188
if let Some ( lbl) = label {
179
- w ! ( self , "{}: " , self . body[ * lbl] . name) ;
189
+ w ! ( self , "{}: " , self . body[ * lbl] . name. display ( self . db ) ) ;
180
190
}
181
191
w ! ( self , "for " ) ;
182
192
self . print_pat ( * pat) ;
@@ -199,10 +209,10 @@ impl<'a> Printer<'a> {
199
209
}
200
210
Expr :: MethodCall { receiver, method_name, args, generic_args } => {
201
211
self . print_expr ( * receiver) ;
202
- w ! ( self , ".{}" , method_name) ;
212
+ w ! ( self , ".{}" , method_name. display ( self . db ) ) ;
203
213
if let Some ( args) = generic_args {
204
214
w ! ( self , "::<" ) ;
205
- print_generic_args ( args, self ) . unwrap ( ) ;
215
+ print_generic_args ( self . db , args, self ) . unwrap ( ) ;
206
216
w ! ( self , ">" ) ;
207
217
}
208
218
w ! ( self , "(" ) ;
@@ -237,13 +247,13 @@ impl<'a> Printer<'a> {
237
247
Expr :: Continue { label } => {
238
248
w ! ( self , "continue" ) ;
239
249
if let Some ( lbl) = label {
240
- w ! ( self , " {}" , self . body[ * lbl] . name) ;
250
+ w ! ( self , " {}" , self . body[ * lbl] . name. display ( self . db ) ) ;
241
251
}
242
252
}
243
253
Expr :: Break { expr, label } => {
244
254
w ! ( self , "break" ) ;
245
255
if let Some ( lbl) = label {
246
- w ! ( self , " {}" , self . body[ * lbl] . name) ;
256
+ w ! ( self , " {}" , self . body[ * lbl] . name. display ( self . db ) ) ;
247
257
}
248
258
if let Some ( expr) = expr {
249
259
self . whitespace ( ) ;
@@ -282,7 +292,7 @@ impl<'a> Printer<'a> {
282
292
w ! ( self , "{{" ) ;
283
293
self . indented ( |p| {
284
294
for field in & * * fields {
285
- w ! ( p, "{}: " , field. name) ;
295
+ w ! ( p, "{}: " , field. name. display ( self . db ) ) ;
286
296
p. print_expr ( field. expr ) ;
287
297
wln ! ( p, "," ) ;
288
298
}
@@ -299,7 +309,7 @@ impl<'a> Printer<'a> {
299
309
}
300
310
Expr :: Field { expr, name } => {
301
311
self . print_expr ( * expr) ;
302
- w ! ( self , ".{}" , name) ;
312
+ w ! ( self , ".{}" , name. display ( self . db ) ) ;
303
313
}
304
314
Expr :: Await { expr } => {
305
315
self . print_expr ( * expr) ;
@@ -437,7 +447,7 @@ impl<'a> Printer<'a> {
437
447
}
438
448
Expr :: Literal ( lit) => self . print_literal ( lit) ,
439
449
Expr :: Block { id : _, statements, tail, label } => {
440
- let label = label. map ( |lbl| format ! ( "{}: " , self . body[ lbl] . name) ) ;
450
+ let label = label. map ( |lbl| format ! ( "{}: " , self . body[ lbl] . name. display ( self . db ) ) ) ;
441
451
self . print_block ( label. as_deref ( ) , statements, tail) ;
442
452
}
443
453
Expr :: Unsafe { id : _, statements, tail } => {
@@ -513,7 +523,7 @@ impl<'a> Printer<'a> {
513
523
w ! ( self , " {{" ) ;
514
524
self . indented ( |p| {
515
525
for arg in args. iter ( ) {
516
- w ! ( p, "{}: " , arg. name) ;
526
+ w ! ( p, "{}: " , arg. name. display ( self . db ) ) ;
517
527
p. print_pat ( arg. pat ) ;
518
528
wln ! ( p, "," ) ;
519
529
}
@@ -646,11 +656,11 @@ impl<'a> Printer<'a> {
646
656
}
647
657
648
658
fn print_type_ref ( & mut self , ty : & TypeRef ) {
649
- print_type_ref ( ty, self ) . unwrap ( ) ;
659
+ print_type_ref ( self . db , ty, self ) . unwrap ( ) ;
650
660
}
651
661
652
662
fn print_path ( & mut self , path : & Path ) {
653
- print_path ( path, self ) . unwrap ( ) ;
663
+ print_path ( self . db , path, self ) . unwrap ( ) ;
654
664
}
655
665
656
666
fn print_binding ( & mut self , id : BindingId ) {
@@ -661,6 +671,6 @@ impl<'a> Printer<'a> {
661
671
BindingAnnotation :: Ref => "ref " ,
662
672
BindingAnnotation :: RefMut => "ref mut " ,
663
673
} ;
664
- w ! ( self , "{}{}" , mode, name) ;
674
+ w ! ( self , "{}{}" , mode, name. display ( self . db ) ) ;
665
675
}
666
676
}
0 commit comments