use ide_db::ty_filter::TryEnum;
use syntax::{
ast::{self, AstNode, AstToken},
+ SyntaxKind::BLOCK_EXPR,
TextRange, TextSize,
};
use text_edit::TextEdit;
)
.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 {
+ postfix_snippet(
+ ctx,
+ cap,
+ &dot_receiver,
+ "let",
+ "let",
+ &format!("let $0 = {};", receiver_text),
+ )
+ .add_to(acc);
+ postfix_snippet(
+ ctx,
+ cap,
+ &dot_receiver,
+ "letm",
+ "let mut",
+ &format!("let mut $0 = {};", receiver_text),
+ )
+ .add_to(acc);
+ }
+ }
+
if let ast::Expr::Literal(literal) = dot_receiver.clone() {
if let Some(literal_text) = ast::String::cast(literal.token()) {
add_format_like_completions(acc, ctx, &dot_receiver, cap, &literal_text);
let bar = true;
bar.<|>
}
+"#,
+ 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 postfix_completion_works_for_function_calln() {
+ check(
+ r#"
+fn foo(elt: bool) -> bool {
+ !elt
+}
+
+fn main() {
+ let bar = true;
+ foo(bar.<|>)
+}
"#,
expect![[r#"
sn box Box::new(expr)
sn call function(expr)
sn dbg dbg!(expr)
sn dbgr dbg!(&expr)
+ sn let let
+ sn letm let mut
sn match match expr {}
sn ok Ok(expr)
sn ref &expr
// - `expr.while` -> `while expr {}` or `while let ... {}` for `Option` or `Result`
// - `expr.ref` -> `&expr`
// - `expr.refm` -> `&mut expr`
+// - `expr.let` -> `let <|> = expr;`
+// - `expr.letm` -> `let mut <|> = expr;`
// - `expr.not` -> `!expr`
// - `expr.dbg` -> `dbg!(expr)`
// - `expr.dbgr` -> `dbg!(&expr)`