aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_ide/src/completion
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2020-05-13 10:25:01 +0100
committerGitHub <[email protected]>2020-05-13 10:25:01 +0100
commita84bd9e18c74e6a3080da1466cffe810de5e714d (patch)
tree9685b925b757aeb306f3e1a633da0d261988f984 /crates/ra_ide/src/completion
parent9594fe33fabeb2f97afad86c3a5d5ed79e3d54d8 (diff)
parentdf330224080fca5eafa3327f082d18857a839dfe (diff)
Merge #4434
4434: add more specific match postfix for Result and Option r=matklad a=bnjjj In order to have the same behavior than `if let` and `while let` Co-authored-by: Benjamin Coenen <[email protected]>
Diffstat (limited to 'crates/ra_ide/src/completion')
-rw-r--r--crates/ra_ide/src/completion/complete_postfix.rs58
1 files changed, 43 insertions, 15 deletions
diff --git a/crates/ra_ide/src/completion/complete_postfix.rs b/crates/ra_ide/src/completion/complete_postfix.rs
index c5c4426cc..f2a52a407 100644
--- a/crates/ra_ide/src/completion/complete_postfix.rs
+++ b/crates/ra_ide/src/completion/complete_postfix.rs
@@ -38,8 +38,8 @@ pub(super) fn complete_postfix(acc: &mut Completions, ctx: &CompletionContext) {
38 Some(it) => it, 38 Some(it) => it,
39 None => return, 39 None => return,
40 }; 40 };
41 41 let try_enum = TryEnum::from_ty(&ctx.sema, &receiver_ty);
42 if let Some(try_enum) = TryEnum::from_ty(&ctx.sema, &receiver_ty) { 42 if let Some(try_enum) = &try_enum {
43 match try_enum { 43 match try_enum {
44 TryEnum::Result => { 44 TryEnum::Result => {
45 postfix_snippet( 45 postfix_snippet(
@@ -104,7 +104,6 @@ pub(super) fn complete_postfix(acc: &mut Completions, ctx: &CompletionContext) {
104 ) 104 )
105 .add_to(acc); 105 .add_to(acc);
106 } 106 }
107
108 // !&&&42 is a compiler error, ergo process it before considering the references 107 // !&&&42 is a compiler error, ergo process it before considering the references
109 postfix_snippet(ctx, cap, &dot_receiver, "not", "!expr", &format!("!{}", receiver_text)) 108 postfix_snippet(ctx, cap, &dot_receiver, "not", "!expr", &format!("!{}", receiver_text))
110 .add_to(acc); 109 .add_to(acc);
@@ -126,16 +125,45 @@ pub(super) fn complete_postfix(acc: &mut Completions, ctx: &CompletionContext) {
126 let dot_receiver = include_references(dot_receiver); 125 let dot_receiver = include_references(dot_receiver);
127 let receiver_text = 126 let receiver_text =
128 get_receiver_text(&dot_receiver, ctx.dot_receiver_is_ambiguous_float_literal); 127 get_receiver_text(&dot_receiver, ctx.dot_receiver_is_ambiguous_float_literal);
129 128 match try_enum {
130 postfix_snippet( 129 Some(try_enum) => {
131 ctx, 130 match try_enum {
132 cap, 131 TryEnum::Result => {
133 &dot_receiver, 132 postfix_snippet(
134 "match", 133 ctx,
135 "match expr {}", 134 cap,
136 &format!("match {} {{\n ${{1:_}} => {{$0\\}},\n}}", receiver_text), 135 &dot_receiver,
137 ) 136 "match",
138 .add_to(acc); 137 "match expr {}",
138 &format!("match {} {{\n Ok(${{1:_}}) => {{$2\\}},\n Err(${{3:_}}) => {{$0\\}},\n}}", receiver_text),
139 )
140 .add_to(acc);
141 }
142 TryEnum::Option => {
143 postfix_snippet(
144 ctx,
145 cap,
146 &dot_receiver,
147 "match",
148 "match expr {}",
149 &format!("match {} {{\n Some(${{1:_}}) => {{$2\\}},\n None => {{$0\\}},\n}}", receiver_text),
150 )
151 .add_to(acc);
152 }
153 }
154 }
155 None => {
156 postfix_snippet(
157 ctx,
158 cap,
159 &dot_receiver,
160 "match",
161 "match expr {}",
162 &format!("match {} {{\n ${{1:_}} => {{$0\\}},\n}}", receiver_text),
163 )
164 .add_to(acc);
165 }
166 }
139 167
140 postfix_snippet( 168 postfix_snippet(
141 ctx, 169 ctx,
@@ -324,7 +352,7 @@ mod tests {
324 label: "match", 352 label: "match",
325 source_range: 210..210, 353 source_range: 210..210,
326 delete: 206..210, 354 delete: 206..210,
327 insert: "match bar {\n ${1:_} => {$0\\},\n}", 355 insert: "match bar {\n Some(${1:_}) => {$2\\},\n None => {$0\\},\n}",
328 detail: "match expr {}", 356 detail: "match expr {}",
329 }, 357 },
330 CompletionItem { 358 CompletionItem {
@@ -403,7 +431,7 @@ mod tests {
403 label: "match", 431 label: "match",
404 source_range: 211..211, 432 source_range: 211..211,
405 delete: 207..211, 433 delete: 207..211,
406 insert: "match bar {\n ${1:_} => {$0\\},\n}", 434 insert: "match bar {\n Ok(${1:_}) => {$2\\},\n Err(${3:_}) => {$0\\},\n}",
407 detail: "match expr {}", 435 detail: "match expr {}",
408 }, 436 },
409 CompletionItem { 437 CompletionItem {