pub(super) is_new_item: bool,
/// The receiver if this is a field or method access, i.e. writing something.<|>
pub(super) dot_receiver: Option<&'a ast::Expr>,
- /// If this is a method call in particular, i.e. the () are already there.
- pub(super) is_method_call: bool,
+ /// If this is a call (method or function) in particular, i.e. the () are already there.
+ pub(super) is_call: bool,
}
impl<'a> CompletionContext<'a> {
can_be_stmt: false,
is_new_item: false,
dot_receiver: None,
- is_method_call: false,
+ is_call: false,
};
ctx.fill(original_file, position.offset);
Ok(Some(ctx))
}
}
}
+ self.is_call = path
+ .syntax()
+ .parent()
+ .and_then(ast::PathExpr::cast)
+ .and_then(|it| it.syntax().parent().and_then(ast::CallExpr::cast))
+ .is_some()
}
if let Some(field_expr) = ast::FieldExpr::cast(parent) {
// The receiver comes before the point of insertion of the fake
.expr()
.map(|e| e.syntax().range())
.and_then(|r| find_node_with_range(original_file.syntax(), r));
- self.is_method_call = true;
+ self.is_call = true;
}
}
}
fn from_function(mut self, ctx: &CompletionContext, function: hir::Function) -> Builder {
// If not an import, add parenthesis automatically.
- if ctx.use_item_syntax.is_none() {
+ if ctx.use_item_syntax.is_none() && !ctx.is_call {
if function.signature(ctx.db).args().is_empty() {
self.snippet = Some(format!("{}()$0", self.label));
} else {