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.rs | 42 |
1 files changed, 24 insertions, 18 deletions
diff --git a/crates/ide_completion/src/completions.rs b/crates/ide_completion/src/completions.rs index 515200ef88..92074b3e10 100644 --- a/crates/ide_completion/src/completions.rs +++ b/crates/ide_completion/src/completions.rs @@ -18,7 +18,7 @@ pub(crate) mod format_string; use std::iter; -use hir::known; +use hir::{known, ScopeDef}; use ide_db::SymbolKind; use crate::{ @@ -28,7 +28,6 @@ use crate::{ const_::render_const, enum_variant::render_variant, function::{render_fn, render_method}, - macro_::render_macro, pattern::{render_struct_pat, render_variant_pat}, render_field, render_resolution, render_tuple_field, struct_literal::render_struct_literal, @@ -38,6 +37,22 @@ use crate::{ CompletionContext, CompletionItem, CompletionItemKind, }; +fn module_or_attr(def: ScopeDef) -> Option<ScopeDef> { + match def { + ScopeDef::MacroDef(mac) if mac.is_attr() => Some(def), + ScopeDef::ModuleDef(hir::ModuleDef::Module(_)) => Some(def), + _ => None, + } +} + +fn module_or_fn_macro(def: ScopeDef) -> Option<ScopeDef> { + match def { + ScopeDef::MacroDef(mac) if mac.is_fn_like() => Some(def), + ScopeDef::ModuleDef(hir::ModuleDef::Module(_)) => Some(def), + _ => None, + } +} + /// Represents an in-progress set of completions being built. #[derive(Debug, Default)] pub struct Completions { @@ -95,19 +110,6 @@ impl Completions { self.add(render_resolution(RenderContext::new(ctx, false), local_name, resolution)); } - pub(crate) fn add_macro( - &mut self, - ctx: &CompletionContext, - name: Option<hir::Name>, - macro_: hir::MacroDef, - ) { - let name = match name { - Some(it) => it, - None => return, - }; - self.add(render_macro(RenderContext::new(ctx, false), None, name, macro_)); - } - pub(crate) fn add_function( &mut self, ctx: &CompletionContext, @@ -227,9 +229,13 @@ impl Completions { self.add(item); } - pub(crate) fn add_static_lifetime(&mut self, ctx: &CompletionContext) { - let item = CompletionItem::new(SymbolKind::LifetimeParam, ctx.source_range(), "'static"); - self.add(item.build()); + pub(crate) fn add_lifetime(&mut self, ctx: &CompletionContext, name: hir::Name) { + CompletionItem::new(SymbolKind::LifetimeParam, ctx.source_range(), name.to_smol_str()) + .add_to(self) + } + + pub(crate) fn add_label(&mut self, ctx: &CompletionContext, name: hir::Name) { + CompletionItem::new(SymbolKind::Label, ctx.source_range(), name.to_smol_str()).add_to(self) } pub(crate) fn add_variant_pat( |