Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-completion/src/completions/expr.rs')
-rw-r--r--crates/ide-completion/src/completions/expr.rs27
1 files changed, 25 insertions, 2 deletions
diff --git a/crates/ide-completion/src/completions/expr.rs b/crates/ide-completion/src/completions/expr.rs
index c2e5eefe10..49a96e27e7 100644
--- a/crates/ide-completion/src/completions/expr.rs
+++ b/crates/ide-completion/src/completions/expr.rs
@@ -69,8 +69,25 @@ pub(crate) fn complete_expr_path(
..
} = expr_ctx;
- let wants_mut_token =
- ref_expr_parent.as_ref().map(|it| it.mut_token().is_none()).unwrap_or(false);
+ let has_raw_token =
+ ref_expr_parent.as_ref().map(|it| it.raw_token().is_some()).unwrap_or(false);
+ let has_const_token =
+ ref_expr_parent.as_ref().map(|it| it.const_token().is_some()).unwrap_or(false);
+ let has_mut_token =
+ ref_expr_parent.as_ref().map(|it| it.mut_token().is_some()).unwrap_or(false);
+
+ let wants_raw_token = ref_expr_parent.is_some() && !has_raw_token;
+ let wants_const_token =
+ ref_expr_parent.is_some() && has_raw_token && !has_const_token && !has_mut_token;
+ let wants_mut_token = if ref_expr_parent.is_some() {
+ if has_raw_token {
+ !has_const_token && !has_mut_token
+ } else {
+ !has_mut_token
+ }
+ } else {
+ false
+ };
let scope_def_applicable = |def| match def {
ScopeDef::GenericParam(hir::GenericParam::LifetimeParam(_)) | ScopeDef::Label(_) => false,
@@ -354,6 +371,12 @@ pub(crate) fn complete_expr_path(
add_keyword("else if", "else if $1 {\n $0\n}");
}
+ if wants_raw_token {
+ add_keyword("raw", "raw ");
+ }
+ if wants_const_token {
+ add_keyword("const", "const ");
+ }
if wants_mut_token {
add_keyword("mut", "mut ");
}