@@ -8,8 +8,8 @@ use crate::{
88 CompletionItemKind ,
99} ;
1010
11- pub ( crate ) fn render_struct_pat < ' a > (
12- ctx : RenderContext < ' a > ,
11+ pub ( crate ) fn render_struct_pat (
12+ ctx : RenderContext < ' _ > ,
1313 strukt : hir:: Struct ,
1414 local_name : Option < Name > ,
1515) -> Option < CompletionItem > {
@@ -30,24 +30,7 @@ pub(crate) fn render_struct_pat<'a>(
3030 let fields_omitted = n_fields - fields. len ( ) > 0 ;
3131
3232 let name = local_name. unwrap_or_else ( || strukt. name ( ctx. db ( ) ) ) . to_string ( ) ;
33- let mut pat = match strukt. kind ( ctx. db ( ) ) {
34- StructKind :: Tuple if ctx. snippet_cap ( ) . is_some ( ) => {
35- render_tuple_as_pat ( & fields, & name, fields_omitted)
36- }
37- StructKind :: Record => {
38- render_record_as_pat ( ctx. db ( ) , ctx. snippet_cap ( ) , & fields, & name, fields_omitted)
39- }
40- _ => return None ,
41- } ;
42-
43- if ctx. completion . is_param {
44- pat. push ( ':' ) ;
45- pat. push ( ' ' ) ;
46- pat. push_str ( & name) ;
47- }
48- if ctx. snippet_cap ( ) . is_some ( ) {
49- pat. push_str ( "$0" ) ;
50- }
33+ let pat = render_pat ( & ctx, & name, strukt. kind ( ctx. db ( ) ) , & fields, fields_omitted) ?;
5134
5235 let mut completion = CompletionItem :: new ( CompletionKind :: Snippet , ctx. source_range ( ) , name)
5336 . kind ( CompletionItemKind :: Binding )
@@ -62,8 +45,8 @@ pub(crate) fn render_struct_pat<'a>(
6245 Some ( completion. build ( ) )
6346}
6447
65- pub ( crate ) fn render_variant_pat < ' a > (
66- ctx : RenderContext < ' a > ,
48+ pub ( crate ) fn render_variant_pat (
49+ ctx : RenderContext < ' _ > ,
6750 variant : hir:: Variant ,
6851 local_name : Option < Name > ,
6952) -> Option < CompletionItem > {
@@ -80,7 +63,29 @@ pub(crate) fn render_variant_pat<'a>(
8063 let fields_omitted = n_fields - fields. len ( ) > 0 ;
8164
8265 let name = local_name. unwrap_or_else ( || variant. name ( ctx. db ( ) ) ) . to_string ( ) ;
83- let mut pat = match variant. kind ( ctx. db ( ) ) {
66+ let pat = render_pat ( & ctx, & name, variant. kind ( ctx. db ( ) ) , & fields, fields_omitted) ?;
67+
68+ let mut completion = CompletionItem :: new ( CompletionKind :: Snippet , ctx. source_range ( ) , name)
69+ . kind ( CompletionItemKind :: Binding )
70+ . set_documentation ( ctx. docs ( variant) )
71+ . set_deprecated ( ctx. is_deprecated ( variant) )
72+ . detail ( & pat) ;
73+ if let Some ( snippet_cap) = ctx. snippet_cap ( ) {
74+ completion = completion. insert_snippet ( snippet_cap, pat) ;
75+ } else {
76+ completion = completion. insert_text ( pat) ;
77+ }
78+ Some ( completion. build ( ) )
79+ }
80+
81+ fn render_pat (
82+ ctx : & RenderContext < ' _ > ,
83+ name : & str ,
84+ kind : StructKind ,
85+ fields : & [ hir:: Field ] ,
86+ fields_omitted : bool ,
87+ ) -> Option < String > {
88+ let mut pat = match kind {
8489 StructKind :: Tuple if ctx. snippet_cap ( ) . is_some ( ) => {
8590 render_tuple_as_pat ( & fields, & name, fields_omitted)
8691 }
@@ -98,17 +103,7 @@ pub(crate) fn render_variant_pat<'a>(
98103 if ctx. snippet_cap ( ) . is_some ( ) {
99104 pat. push_str ( "$0" ) ;
100105 }
101- let mut completion = CompletionItem :: new ( CompletionKind :: Snippet , ctx. source_range ( ) , name)
102- . kind ( CompletionItemKind :: Binding )
103- . set_documentation ( ctx. docs ( variant) )
104- . set_deprecated ( ctx. is_deprecated ( variant) )
105- . detail ( & pat) ;
106- if let Some ( snippet_cap) = ctx. snippet_cap ( ) {
107- completion = completion. insert_snippet ( snippet_cap, pat) ;
108- } else {
109- completion = completion. insert_text ( pat) ;
110- }
111- Some ( completion. build ( ) )
106+ Some ( pat)
112107}
113108
114109fn render_record_as_pat (
0 commit comments