Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-completion/src/completions/item_list.rs')
-rw-r--r--crates/ide-completion/src/completions/item_list.rs10
1 files changed, 8 insertions, 2 deletions
diff --git a/crates/ide-completion/src/completions/item_list.rs b/crates/ide-completion/src/completions/item_list.rs
index 6c001bd16b..39048e4400 100644
--- a/crates/ide-completion/src/completions/item_list.rs
+++ b/crates/ide-completion/src/completions/item_list.rs
@@ -87,6 +87,9 @@ fn add_keywords(acc: &mut Completions, ctx: &CompletionContext<'_>, kind: Option
let in_block = kind.is_none();
let no_vis_qualifiers = ctx.qualifier_ctx.vis_node.is_none();
+ let no_abi_qualifiers = ctx.qualifier_ctx.abi_node.is_none();
+ let has_extern_kw =
+ ctx.qualifier_ctx.abi_node.as_ref().is_some_and(|it| it.string_token().is_none());
let has_unsafe_kw = ctx.qualifier_ctx.unsafe_tok.is_some();
let has_async_kw = ctx.qualifier_ctx.async_tok.is_some();
let has_safe_kw = ctx.qualifier_ctx.safe_tok.is_some();
@@ -118,7 +121,7 @@ fn add_keywords(acc: &mut Completions, ctx: &CompletionContext<'_>, kind: Option
}
}
- if !has_async_kw && no_vis_qualifiers && in_item_list {
+ if !has_async_kw && no_vis_qualifiers && no_abi_qualifiers && in_item_list {
add_keyword("extern", "extern $0");
}
@@ -159,11 +162,14 @@ fn add_keywords(acc: &mut Completions, ctx: &CompletionContext<'_>, kind: Option
add_keyword("static", "static $1: $2;");
} else {
if !in_inherent_impl {
- if !in_trait {
+ if !in_trait && no_abi_qualifiers {
add_keyword("extern", "extern $0");
}
add_keyword("type", "type $0");
}
+ if has_extern_kw {
+ add_keyword("crate", "crate $0;");
+ }
add_keyword("fn", "fn $1($2) {\n $0\n}");
add_keyword("unsafe", "unsafe $0");