Skip to content

Commit 9724ca7

Browse files
bors[bot]Veykril
andauthored
Merge #10451
10451: minor: Simplify r=Veykril a=Veykril bors r+ Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
2 parents 6ee3515 + 7faa35c commit 9724ca7

File tree

3 files changed

+45
-156
lines changed

3 files changed

+45
-156
lines changed

crates/ide_completion/src/completions/postfix.rs

+38-150
Original file line numberDiff line numberDiff line change
@@ -53,24 +53,21 @@ pub(crate) fn complete_postfix(acc: &mut Completions, ctx: &CompletionContext) {
5353
Some(it) => it,
5454
None => return,
5555
};
56+
57+
let postfix_snippet = build_postfix_snippet_builder(ctx, cap, &dot_receiver);
58+
5659
let try_enum = TryEnum::from_ty(&ctx.sema, &receiver_ty.strip_references());
5760
if let Some(try_enum) = &try_enum {
5861
match try_enum {
5962
TryEnum::Result => {
6063
postfix_snippet(
61-
ctx,
62-
cap,
63-
dot_receiver,
6464
"ifl",
6565
"if let Ok {}",
6666
&format!("if let Ok($1) = {} {{\n $0\n}}", receiver_text),
6767
)
6868
.add_to(acc);
6969

7070
postfix_snippet(
71-
ctx,
72-
cap,
73-
dot_receiver,
7471
"while",
7572
"while let Ok {}",
7673
&format!("while let Ok($1) = {} {{\n $0\n}}", receiver_text),
@@ -79,19 +76,13 @@ pub(crate) fn complete_postfix(acc: &mut Completions, ctx: &CompletionContext) {
7976
}
8077
TryEnum::Option => {
8178
postfix_snippet(
82-
ctx,
83-
cap,
84-
dot_receiver,
8579
"ifl",
8680
"if let Some {}",
8781
&format!("if let Some($1) = {} {{\n $0\n}}", receiver_text),
8882
)
8983
.add_to(acc);
9084

9185
postfix_snippet(
92-
ctx,
93-
cap,
94-
dot_receiver,
9586
"while",
9687
"while let Some {}",
9788
&format!("while let Some($1) = {} {{\n $0\n}}", receiver_text),
@@ -100,32 +91,18 @@ pub(crate) fn complete_postfix(acc: &mut Completions, ctx: &CompletionContext) {
10091
}
10192
}
10293
} else if receiver_ty.is_bool() || receiver_ty.is_unknown() {
94+
postfix_snippet("if", "if expr {}", &format!("if {} {{\n $0\n}}", receiver_text))
95+
.add_to(acc);
10396
postfix_snippet(
104-
ctx,
105-
cap,
106-
dot_receiver,
107-
"if",
108-
"if expr {}",
109-
&format!("if {} {{\n $0\n}}", receiver_text),
110-
)
111-
.add_to(acc);
112-
postfix_snippet(
113-
ctx,
114-
cap,
115-
dot_receiver,
11697
"while",
11798
"while expr {}",
11899
&format!("while {} {{\n $0\n}}", receiver_text),
119100
)
120101
.add_to(acc);
121-
postfix_snippet(ctx, cap, dot_receiver, "not", "!expr", &format!("!{}", receiver_text))
122-
.add_to(acc);
102+
postfix_snippet("not", "!expr", &format!("!{}", receiver_text)).add_to(acc);
123103
} else if let Some(trait_) = FamousDefs(&ctx.sema, ctx.krate).core_iter_IntoIterator() {
124104
if receiver_ty.impls_trait(ctx.db, trait_, &[]) {
125105
postfix_snippet(
126-
ctx,
127-
cap,
128-
dot_receiver,
129106
"for",
130107
"for ele in expr {}",
131108
&format!("for ele in {} {{\n $0\n}}", receiver_text),
@@ -134,30 +111,19 @@ pub(crate) fn complete_postfix(acc: &mut Completions, ctx: &CompletionContext) {
134111
}
135112
}
136113

137-
postfix_snippet(ctx, cap, dot_receiver, "ref", "&expr", &format!("&{}", receiver_text))
138-
.add_to(acc);
139-
postfix_snippet(
140-
ctx,
141-
cap,
142-
dot_receiver,
143-
"refm",
144-
"&mut expr",
145-
&format!("&mut {}", receiver_text),
146-
)
147-
.add_to(acc);
114+
postfix_snippet("ref", "&expr", &format!("&{}", receiver_text)).add_to(acc);
115+
postfix_snippet("refm", "&mut expr", &format!("&mut {}", receiver_text)).add_to(acc);
148116

149117
// The rest of the postfix completions create an expression that moves an argument,
150118
// so it's better to consider references now to avoid breaking the compilation
151119
let dot_receiver = include_references(dot_receiver);
152120
let receiver_text = get_receiver_text(&dot_receiver, receiver_is_ambiguous_float_literal);
121+
let postfix_snippet = build_postfix_snippet_builder(ctx, cap, &dot_receiver);
153122

154123
match try_enum {
155124
Some(try_enum) => match try_enum {
156125
TryEnum::Result => {
157126
postfix_snippet(
158-
ctx,
159-
cap,
160-
&dot_receiver,
161127
"match",
162128
"match expr {}",
163129
&format!("match {} {{\n Ok(${{1:_}}) => {{$2}},\n Err(${{3:_}}) => {{$0}},\n}}", receiver_text),
@@ -166,9 +132,6 @@ pub(crate) fn complete_postfix(acc: &mut Completions, ctx: &CompletionContext) {
166132
}
167133
TryEnum::Option => {
168134
postfix_snippet(
169-
ctx,
170-
cap,
171-
&dot_receiver,
172135
"match",
173136
"match expr {}",
174137
&format!(
@@ -181,9 +144,6 @@ pub(crate) fn complete_postfix(acc: &mut Completions, ctx: &CompletionContext) {
181144
},
182145
None => {
183146
postfix_snippet(
184-
ctx,
185-
cap,
186-
&dot_receiver,
187147
"match",
188148
"match expr {}",
189149
&format!("match {} {{\n ${{1:_}} => {{$0}},\n}}", receiver_text),
@@ -192,89 +152,19 @@ pub(crate) fn complete_postfix(acc: &mut Completions, ctx: &CompletionContext) {
192152
}
193153
}
194154

195-
postfix_snippet(
196-
ctx,
197-
cap,
198-
&dot_receiver,
199-
"box",
200-
"Box::new(expr)",
201-
&format!("Box::new({})", receiver_text),
202-
)
203-
.add_to(acc);
204-
205-
postfix_snippet(ctx, cap, &dot_receiver, "ok", "Ok(expr)", &format!("Ok({})", receiver_text))
206-
.add_to(acc);
207-
208-
postfix_snippet(
209-
ctx,
210-
cap,
211-
&dot_receiver,
212-
"err",
213-
"Err(expr)",
214-
&format!("Err({})", receiver_text),
215-
)
216-
.add_to(acc);
217-
218-
postfix_snippet(
219-
ctx,
220-
cap,
221-
&dot_receiver,
222-
"some",
223-
"Some(expr)",
224-
&format!("Some({})", receiver_text),
225-
)
226-
.add_to(acc);
227-
228-
postfix_snippet(
229-
ctx,
230-
cap,
231-
&dot_receiver,
232-
"dbg",
233-
"dbg!(expr)",
234-
&format!("dbg!({})", receiver_text),
235-
)
236-
.add_to(acc);
237-
238-
postfix_snippet(
239-
ctx,
240-
cap,
241-
&dot_receiver,
242-
"dbgr",
243-
"dbg!(&expr)",
244-
&format!("dbg!(&{})", receiver_text),
245-
)
246-
.add_to(acc);
247-
248-
postfix_snippet(
249-
ctx,
250-
cap,
251-
&dot_receiver,
252-
"call",
253-
"function(expr)",
254-
&format!("${{1}}({})", receiver_text),
255-
)
256-
.add_to(acc);
155+
postfix_snippet("box", "Box::new(expr)", &format!("Box::new({})", receiver_text)).add_to(acc);
156+
postfix_snippet("ok", "Ok(expr)", &format!("Ok({})", receiver_text)).add_to(acc);
157+
postfix_snippet("err", "Err(expr)", &format!("Err({})", receiver_text)).add_to(acc);
158+
postfix_snippet("some", "Some(expr)", &format!("Some({})", receiver_text)).add_to(acc);
159+
postfix_snippet("dbg", "dbg!(expr)", &format!("dbg!({})", receiver_text)).add_to(acc);
160+
postfix_snippet("dbgr", "dbg!(&expr)", &format!("dbg!(&{})", receiver_text)).add_to(acc);
161+
postfix_snippet("call", "function(expr)", &format!("${{1}}({})", receiver_text)).add_to(acc);
257162

258163
if let Some(parent) = dot_receiver.syntax().parent().and_then(|p| p.parent()) {
259164
if matches!(parent.kind(), STMT_LIST | EXPR_STMT) {
260-
postfix_snippet(
261-
ctx,
262-
cap,
263-
&dot_receiver,
264-
"let",
265-
"let",
266-
&format!("let $0 = {};", receiver_text),
267-
)
268-
.add_to(acc);
269-
postfix_snippet(
270-
ctx,
271-
cap,
272-
&dot_receiver,
273-
"letm",
274-
"let mut",
275-
&format!("let mut $0 = {};", receiver_text),
276-
)
277-
.add_to(acc);
165+
postfix_snippet("let", "let", &format!("let $0 = {};", receiver_text)).add_to(acc);
166+
postfix_snippet("letm", "let mut", &format!("let mut $0 = {};", receiver_text))
167+
.add_to(acc);
278168
}
279169
}
280170

@@ -305,29 +195,27 @@ fn include_references(initial_element: &ast::Expr) -> ast::Expr {
305195
resulting_element
306196
}
307197

308-
fn postfix_snippet(
309-
ctx: &CompletionContext,
198+
fn build_postfix_snippet_builder<'a>(
199+
ctx: &'a CompletionContext,
310200
cap: SnippetCap,
311-
receiver: &ast::Expr,
312-
label: &str,
313-
detail: &str,
314-
snippet: &str,
315-
) -> Builder {
316-
let edit = {
317-
let receiver_syntax = receiver.syntax();
318-
let receiver_range = ctx.sema.original_range(receiver_syntax).range;
319-
let delete_range = TextRange::new(receiver_range.start(), ctx.source_range().end());
320-
TextEdit::replace(delete_range, snippet.to_string())
321-
};
322-
let mut item = CompletionItem::new(CompletionKind::Postfix, ctx.source_range(), label);
323-
item.detail(detail).kind(CompletionItemKind::Snippet).snippet_edit(cap, edit);
324-
if ctx.original_token.text() == label {
325-
let relevance =
326-
CompletionRelevance { exact_postfix_snippet_match: true, ..Default::default() };
327-
item.set_relevance(relevance);
328-
}
201+
receiver: &'a ast::Expr,
202+
) -> impl Fn(&str, &str, &str) -> Builder + 'a {
203+
let receiver_syntax = receiver.syntax();
204+
let receiver_range = ctx.sema.original_range(receiver_syntax).range;
205+
let delete_range = TextRange::new(receiver_range.start(), ctx.source_range().end());
206+
207+
move |label, detail, snippet| {
208+
let edit = TextEdit::replace(delete_range, snippet.to_string());
209+
let mut item = CompletionItem::new(CompletionKind::Postfix, ctx.source_range(), label);
210+
item.detail(detail).kind(CompletionItemKind::Snippet).snippet_edit(cap, edit);
211+
if ctx.original_token.text() == label {
212+
let relevance =
213+
CompletionRelevance { exact_postfix_snippet_match: true, ..Default::default() };
214+
item.set_relevance(relevance);
215+
}
329216

330-
item
217+
item
218+
}
331219
}
332220

333221
#[cfg(test)]

crates/ide_completion/src/completions/postfix/format_like.rs

+5-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@
1919
use ide_db::helpers::SnippetCap;
2020
use syntax::ast::{self, AstToken};
2121

22-
use crate::{completions::postfix::postfix_snippet, context::CompletionContext, Completions};
22+
use crate::{
23+
completions::postfix::build_postfix_snippet_builder, context::CompletionContext, Completions,
24+
};
2325

2426
/// Mapping ("postfix completion item" => "macro to use")
2527
static KINDS: &[(&str, &str)] = &[
@@ -47,13 +49,14 @@ pub(crate) fn add_format_like_completions(
4749
None => return,
4850
};
4951

52+
let postfix_snippet = build_postfix_snippet_builder(ctx, cap, dot_receiver);
5053
let mut parser = FormatStrParser::new(input);
5154

5255
if parser.parse().is_ok() {
5356
for (label, macro_name) in KINDS {
5457
let snippet = parser.to_suggestion(macro_name);
5558

56-
postfix_snippet(ctx, cap, dot_receiver, label, macro_name, &snippet).add_to(acc);
59+
postfix_snippet(label, macro_name, &snippet).add_to(acc);
5760
}
5861
}
5962
}

crates/ide_diagnostics/src/handlers/unlinked_file.rs

+2-4
Original file line numberDiff line numberDiff line change
@@ -45,16 +45,14 @@ fn fixes(ctx: &DiagnosticsContext, file_id: FileId) -> Option<Vec<Assist>> {
4545
// - `$dir.rs` in the parent folder, where `$dir` is the directory containing `self.file_id`
4646
let parent = our_path.parent()?;
4747
let paths = {
48-
let temp;
4948
let parent = if module_name == "mod" {
5049
// for mod.rs we need to actually look up one higher
5150
// and take the parent as our to be module name
5251
let (name, _) = parent.name_and_extension()?;
5352
module_name = name;
54-
temp = parent.parent()?;
55-
&temp
53+
parent.parent()?
5654
} else {
57-
&parent
55+
parent
5856
};
5957
let mut paths =
6058
vec![parent.join("mod.rs")?, parent.join("lib.rs")?, parent.join("main.rs")?];

0 commit comments

Comments
 (0)