@@ -1036,8 +1036,8 @@ enum ReferenceConversionType {
10361036}
10371037
10381038impl < ' db > ReferenceConversion < ' db > {
1039- pub ( crate ) fn convert_type ( & self , db : & ' db dyn HirDatabase , module : hir:: Module ) -> ast :: Type {
1040- let ty = match self . conversion {
1039+ fn type_to_string ( & self , db : & ' db dyn HirDatabase , module : hir:: Module ) -> String {
1040+ match self . conversion {
10411041 ReferenceConversionType :: Copy => self
10421042 . ty
10431043 . display_source_code ( db, module. into ( ) , true )
@@ -1087,25 +1087,38 @@ impl<'db> ReferenceConversion<'db> {
10871087 . unwrap_or_else ( |_| "_" . to_owned ( ) ) ;
10881088 format ! ( "Result<&{first_type_argument_name}, &{second_type_argument_name}>" )
10891089 }
1090- } ;
1090+ }
1091+ }
10911092
1093+ pub ( crate ) fn convert_type ( & self , db : & ' db dyn HirDatabase , module : hir:: Module ) -> ast:: Type {
1094+ let ty = self . type_to_string ( db, module) ;
10921095 make:: ty ( & ty)
10931096 }
10941097
1095- pub ( crate ) fn getter ( & self , field_name : String ) -> ast:: Expr {
1096- let expr = make:: expr_field ( make:: ext:: expr_self ( ) , & field_name) ;
1098+ pub ( crate ) fn convert_type_with_factory (
1099+ & self ,
1100+ make : & SyntaxFactory ,
1101+ db : & ' db dyn HirDatabase ,
1102+ module : hir:: Module ,
1103+ ) -> ast:: Type {
1104+ let ty = self . type_to_string ( db, module) ;
1105+ make. ty ( & ty)
1106+ }
1107+
1108+ pub ( crate ) fn getter ( & self , make : & SyntaxFactory , field_name : String ) -> ast:: Expr {
1109+ let expr = make. expr_field ( make. expr_self ( ) , & field_name) ;
10971110
10981111 match self . conversion {
1099- ReferenceConversionType :: Copy => expr,
1112+ ReferenceConversionType :: Copy => expr. into ( ) ,
11001113 ReferenceConversionType :: AsRefStr
11011114 | ReferenceConversionType :: AsRefSlice
11021115 | ReferenceConversionType :: Dereferenced
11031116 | ReferenceConversionType :: Option
11041117 | ReferenceConversionType :: Result => {
11051118 if self . impls_deref {
1106- make:: expr_ref ( expr, false )
1119+ make. expr_ref ( expr. into ( ) , false )
11071120 } else {
1108- make:: expr_method_call ( expr, make:: name_ref ( "as_ref" ) , make:: arg_list ( [ ] ) )
1121+ make. expr_method_call ( expr. into ( ) , make. name_ref ( "as_ref" ) , make. arg_list ( [ ] ) )
11091122 . into ( )
11101123 }
11111124 }
0 commit comments