Skip to content

Commit 7bae9c9

Browse files
committed
add 'for' postfix completion
1 parent 60e304c commit 7bae9c9

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

crates/ide_completion/src/completions/postfix.rs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22
33
mod format_like;
44

5-
use ide_db::{helpers::SnippetCap, ty_filter::TryEnum};
5+
use ide_db::{
6+
helpers::{FamousDefs, SnippetCap},
7+
ty_filter::TryEnum,
8+
};
69
use syntax::{
710
ast::{self, AstNode, AstToken},
811
SyntaxKind::{BLOCK_EXPR, EXPR_STMT},
@@ -110,6 +113,18 @@ pub(crate) fn complete_postfix(acc: &mut Completions, ctx: &CompletionContext) {
110113
.add_to(acc);
111114
postfix_snippet(ctx, cap, dot_receiver, "not", "!expr", &format!("!{}", receiver_text))
112115
.add_to(acc);
116+
} else if let Some(trait_) = FamousDefs(&ctx.sema, ctx.krate).core_iter_IntoIterator() {
117+
if receiver_ty.impls_trait(ctx.db, trait_, &[]) {
118+
postfix_snippet(
119+
ctx,
120+
cap,
121+
dot_receiver,
122+
"for",
123+
"for ele in expr {}",
124+
&format!("for ele in {} {{\n $0\n}}", receiver_text),
125+
)
126+
.add_to(acc);
127+
}
113128
}
114129

115130
postfix_snippet(ctx, cap, dot_receiver, "ref", "&expr", &format!("&{}", receiver_text))

crates/ide_db/src/helpers.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,10 @@ impl FamousDefs<'_, '_> {
134134
self.find_trait("core:iter:traits:iterator:Iterator")
135135
}
136136

137+
pub fn core_iter_IntoIterator(&self) -> Option<Trait> {
138+
self.find_trait("core:iter:traits:collect:IntoIterator")
139+
}
140+
137141
pub fn core_iter(&self) -> Option<Module> {
138142
self.find_module("core:iter")
139143
}

0 commit comments

Comments
 (0)