Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-completion/src/completions.rs')
-rw-r--r--crates/ide-completion/src/completions.rs52
1 files changed, 45 insertions, 7 deletions
diff --git a/crates/ide-completion/src/completions.rs b/crates/ide-completion/src/completions.rs
index 4f522ee761..750b022259 100644
--- a/crates/ide-completion/src/completions.rs
+++ b/crates/ide-completion/src/completions.rs
@@ -36,9 +36,9 @@ use crate::{
const_::render_const,
function::{render_fn, render_method},
literal::{render_struct_literal, render_variant_lit},
- macro_::render_macro,
+ macro_::{render_macro, render_macro_pat},
pattern::{render_struct_pat, render_variant_pat},
- render_field, render_path_resolution, render_resolution_simple, render_tuple_field,
+ render_field, render_path_resolution, render_pattern_resolution, render_tuple_field,
type_alias::{render_type_alias, render_type_alias_with_eq},
union_literal::render_union_literal,
RenderContext,
@@ -134,10 +134,14 @@ impl Completions {
item.add_to(self);
}
- pub(crate) fn add_crate_roots(&mut self, ctx: &CompletionContext) {
+ pub(crate) fn add_crate_roots(
+ &mut self,
+ ctx: &CompletionContext,
+ path_ctx: &PathCompletionCtx,
+ ) {
ctx.process_all_names(&mut |name, res| match res {
ScopeDef::ModuleDef(hir::ModuleDef::Module(m)) if m.is_crate_root(ctx.db) => {
- self.add_module(ctx, m, name);
+ self.add_module(ctx, path_ctx, m, name);
}
_ => (),
});
@@ -160,25 +164,36 @@ impl Completions {
);
}
- pub(crate) fn add_resolution_simple(
+ pub(crate) fn add_pattern_resolution(
&mut self,
ctx: &CompletionContext,
+ pattern_ctx: &PatternContext,
local_name: hir::Name,
resolution: hir::ScopeDef,
) {
if ctx.is_scope_def_hidden(resolution) {
+ cov_mark::hit!(qualified_path_doc_hidden);
return;
}
- self.add(render_resolution_simple(RenderContext::new(ctx), local_name, resolution).build());
+ self.add(
+ render_pattern_resolution(RenderContext::new(ctx), pattern_ctx, local_name, resolution)
+ .build(),
+ );
}
pub(crate) fn add_module(
&mut self,
ctx: &CompletionContext,
+ path_ctx: &PathCompletionCtx,
module: hir::Module,
local_name: hir::Name,
) {
- self.add_resolution_simple(ctx, local_name, hir::ScopeDef::ModuleDef(module.into()));
+ self.add_path_resolution(
+ ctx,
+ path_ctx,
+ local_name,
+ hir::ScopeDef::ModuleDef(module.into()),
+ );
}
pub(crate) fn add_macro(
@@ -204,6 +219,29 @@ impl Completions {
);
}
+ pub(crate) fn add_macro_pat(
+ &mut self,
+ ctx: &CompletionContext,
+ pattern_ctx: &PatternContext,
+ mac: hir::Macro,
+ local_name: hir::Name,
+ ) {
+ let is_private_editable = match ctx.is_visible(&mac) {
+ Visible::Yes => false,
+ Visible::Editable => true,
+ Visible::No => return,
+ };
+ self.add(
+ render_macro_pat(
+ RenderContext::new(ctx).private_editable(is_private_editable),
+ pattern_ctx,
+ local_name,
+ mac,
+ )
+ .build(),
+ );
+ }
+
pub(crate) fn add_function(
&mut self,
ctx: &CompletionContext,