6689: Trigger .let postfix snippet in the middle of the block r=matklad a=matklad

bors r+
🤖

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
This commit is contained in:
bors[bot] 2020-12-01 12:38:45 +00:00 committed by GitHub
commit a18392bd90
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -5,7 +5,7 @@ mod format_like;
use ide_db::ty_filter::TryEnum;
use syntax::{
ast::{self, AstNode, AstToken},
SyntaxKind::BLOCK_EXPR,
SyntaxKind::{BLOCK_EXPR, EXPR_STMT},
TextRange, TextSize,
};
use text_edit::TextEdit;
@ -221,9 +221,8 @@ pub(crate) fn complete_postfix(acc: &mut Completions, ctx: &CompletionContext) {
)
.add_to(acc);
let parent_node = dot_receiver.syntax().parent().and_then(|p| p.parent());
if let Some(parent) = parent_node {
if parent.kind() == BLOCK_EXPR {
if let Some(parent) = dot_receiver.syntax().parent().and_then(|p| p.parent()) {
if matches!(parent.kind(), BLOCK_EXPR | EXPR_STMT) {
postfix_snippet(
ctx,
cap,
@ -389,6 +388,34 @@ fn main() {
)
}
#[test]
fn let_middle_block() {
check(
r#"
fn main() {
baz.l<|>
res
}
"#,
expect![[r#"
sn box Box::new(expr)
sn call function(expr)
sn dbg dbg!(expr)
sn dbgr dbg!(&expr)
sn if if expr {}
sn let let
sn letm let mut
sn match match expr {}
sn not !expr
sn ok Ok(expr)
sn ref &expr
sn refm &mut expr
sn some Some(expr)
sn while while expr {}
"#]],
);
}
#[test]
fn option_iflet() {
check_edit(