11use std:: iter:: { self , Peekable } ;
2- use std:: ops:: Deref ;
3- use std:: rc:: Rc ;
42
53use either:: Either ;
64use hir:: { sym, Adt , Crate , HasAttrs , ImportPathConfig , ModuleDef , Semantics } ;
@@ -78,10 +76,7 @@ pub(crate) fn add_missing_match_arms(acc: &mut Assists, ctx: &AssistContext<'_>)
7876
7977 let cfg = ctx. config . import_path_config ( ) ;
8078
81- // As `make` is borrowed by the closure that builds `missing_pats`, this is needed
82- // to satisfy the borrow checker.
83- let make = Rc :: new ( SyntaxFactory :: new ( ) ) ;
84- let make_weak = Rc :: downgrade ( & make) ;
79+ let make = SyntaxFactory :: new ( ) ;
8580
8681 let module = ctx. sema . scope ( expr. syntax ( ) ) ?. module ( ) ;
8782 let ( mut missing_pats, is_non_exhaustive, has_hidden_variants) : (
@@ -99,9 +94,8 @@ pub(crate) fn add_missing_match_arms(acc: &mut Assists, ctx: &AssistContext<'_>)
9994 let missing_pats = variants
10095 . into_iter ( )
10196 . filter_map ( |variant| {
102- let make = make_weak. upgrade ( ) ?;
10397 Some ( (
104- build_pat ( ctx, make, module, variant, cfg) ?,
98+ build_pat ( ctx, & make, module, variant, cfg) ?,
10599 variant. should_be_hidden ( ctx. db ( ) , module. krate ( ) ) ,
106100 ) )
107101 } )
@@ -148,17 +142,15 @@ pub(crate) fn add_missing_match_arms(acc: &mut Assists, ctx: &AssistContext<'_>)
148142 . into_iter ( )
149143 . multi_cartesian_product ( )
150144 . inspect ( |_| cov_mark:: hit!( add_missing_match_arms_lazy_computation) )
151- . filter_map ( |variants| {
145+ . map ( |variants| {
152146 let is_hidden = variants
153147 . iter ( )
154148 . any ( |variant| variant. should_be_hidden ( ctx. db ( ) , module. krate ( ) ) ) ;
155- let patterns = variants. into_iter ( ) . filter_map ( |variant| {
156- make_weak . upgrade ( ) . and_then ( |make| build_pat ( ctx , make , module , variant , cfg ) )
157- } ) ;
149+ let patterns = variants
150+ . into_iter ( )
151+ . filter_map ( |variant| build_pat ( ctx , & make , module , variant , cfg ) ) ;
158152
159- make_weak
160- . upgrade ( )
161- . map ( |make| ( ast:: Pat :: from ( make. tuple_pat ( patterns) ) , is_hidden) )
153+ ( ast:: Pat :: from ( make. tuple_pat ( patterns) ) , is_hidden)
162154 } )
163155 . filter ( |( variant_pat, _) | is_variant_missing ( & top_lvl_pats, variant_pat) ) ;
164156 (
@@ -183,17 +175,15 @@ pub(crate) fn add_missing_match_arms(acc: &mut Assists, ctx: &AssistContext<'_>)
183175 . into_iter ( )
184176 . multi_cartesian_product ( )
185177 . inspect ( |_| cov_mark:: hit!( add_missing_match_arms_lazy_computation) )
186- . filter_map ( |variants| {
178+ . map ( |variants| {
187179 let is_hidden = variants
188180 . iter ( )
189181 . any ( |variant| variant. should_be_hidden ( ctx. db ( ) , module. krate ( ) ) ) ;
190- let patterns = variants. into_iter ( ) . filter_map ( |variant| {
191- make_weak . upgrade ( ) . and_then ( |make| build_pat ( ctx , make , module , variant , cfg ) )
192- } ) ;
182+ let patterns = variants
183+ . into_iter ( )
184+ . filter_map ( |variant| build_pat ( ctx , & make , module , variant , cfg ) ) ;
193185
194- make_weak
195- . upgrade ( )
196- . map ( |make| ( ast:: Pat :: from ( make. slice_pat ( patterns) ) , is_hidden) )
186+ ( ast:: Pat :: from ( make. slice_pat ( patterns) ) , is_hidden)
197187 } )
198188 . filter ( |( variant_pat, _) | is_variant_missing ( & top_lvl_pats, variant_pat) ) ;
199189 (
@@ -303,7 +293,7 @@ pub(crate) fn add_missing_match_arms(acc: &mut Assists, ctx: &AssistContext<'_>)
303293 }
304294 }
305295
306- editor. add_mappings ( Rc :: into_inner ( make) . unwrap ( ) . finish_with_mappings ( ) ) ;
296+ editor. add_mappings ( make. take ( ) ) ;
307297 builder. add_file_edits ( ctx. file_id ( ) , editor) ;
308298 } ,
309299 )
@@ -458,7 +448,7 @@ fn resolve_array_of_enum_def(
458448
459449fn build_pat (
460450 ctx : & AssistContext < ' _ > ,
461- make : impl Deref < Target = SyntaxFactory > ,
451+ make : & SyntaxFactory ,
462452 module : hir:: Module ,
463453 var : ExtendedVariant ,
464454 cfg : ImportPathConfig ,
0 commit comments