Auto merge of #12203 - Veykril:completions, r=Veykril

internal: Simplify
This commit is contained in:
bors 2022-05-10 12:36:46 +00:00
commit 4a4e9c0ae0
4 changed files with 22 additions and 17 deletions

View file

@ -17,13 +17,12 @@ use crate::{
/// Complete mod declaration, i.e. `mod $0;`
pub(crate) fn complete_mod(acc: &mut Completions, ctx: &CompletionContext) -> Option<()> {
let mod_under_caret = match ctx.name_ctx() {
Some(NameContext { kind: NameKind::Module(mod_under_caret), .. })
if mod_under_caret.item_list().is_none() =>
{
mod_under_caret
}
Some(NameContext { kind: NameKind::Module(mod_under_caret), .. }) => mod_under_caret,
_ => return None,
};
if mod_under_caret.item_list().is_some() {
return None;
}
let _p = profile::span("completion::complete_mod");
@ -32,8 +31,8 @@ pub(crate) fn complete_mod(acc: &mut Completions, ctx: &CompletionContext) -> Op
// interested in its parent.
if ctx.original_token.kind() == SyntaxKind::IDENT {
if let Some(module) = ctx.original_token.ancestors().nth(1).and_then(ast::Module::cast) {
match current_module.definition_source(ctx.db).value {
ModuleSource::Module(src) if src == module => {
match ctx.sema.to_def(&module) {
Some(module) if module == current_module => {
if let Some(parent) = current_module.parent(ctx.db) {
current_module = parent;
}

View file

@ -326,6 +326,7 @@ impl<'a> CompletionContext<'a> {
matches!(self.completion_location, Some(ImmediateLocation::ItemList))
}
// FIXME: This shouldn't exist
pub(crate) fn expects_generic_arg(&self) -> bool {
matches!(self.completion_location, Some(ImmediateLocation::GenericArgList(_)))
}
@ -395,10 +396,6 @@ impl<'a> CompletionContext<'a> {
matches!(self.path_context(), Some(PathCompletionCtx { kind: PathKind::Type, .. }))
}
pub(crate) fn path_is_call(&self) -> bool {
self.path_context().map_or(false, |it| it.has_call_parens)
}
pub(crate) fn is_non_trivial_path(&self) -> bool {
matches!(
self.path_context(),
@ -417,10 +414,6 @@ impl<'a> CompletionContext<'a> {
self.path_context().map(|it| it.kind)
}
pub(crate) fn is_immediately_after_macro_bang(&self) -> bool {
self.token.kind() == BANG && self.token.parent().map_or(false, |it| it.kind() == MACRO_CALL)
}
/// Checks if an item is visible and not `doc(hidden)` at the completion site.
pub(crate) fn is_visible<I>(&self, item: &I) -> Visible
where

View file

@ -65,6 +65,19 @@ impl<'a> RenderContext<'a> {
}
}
fn is_immediately_after_macro_bang(&self) -> bool {
self.completion.token.kind() == SyntaxKind::BANG
&& self
.completion
.token
.parent()
.map_or(false, |it| it.kind() == SyntaxKind::MACRO_CALL)
}
pub(crate) fn path_is_call(&self) -> bool {
self.completion.path_context().map_or(false, |it| it.has_call_parens)
}
fn is_deprecated(&self, def: impl HasAttrs) -> bool {
let attrs = def.attrs(self.db());
attrs.by_key("deprecated").exists()

View file

@ -20,7 +20,7 @@ fn render(
name: hir::Name,
macro_: hir::Macro,
) -> Builder {
let source_range = if completion.is_immediately_after_macro_bang() {
let source_range = if ctx.is_immediately_after_macro_bang() {
cov_mark::hit!(completes_macro_call_if_cursor_at_bang_token);
completion.token.parent().map_or_else(|| ctx.source_range(), |it| it.text_range())
} else {
@ -52,7 +52,7 @@ fn render(
let name = &*name;
match ctx.snippet_cap() {
Some(cap) if needs_bang && !completion.path_is_call() => {
Some(cap) if needs_bang && !ctx.path_is_call() => {
let snippet = format!("{}!{}$0{}", name, bra, ket);
let lookup = banged_name(name);
item.insert_snippet(cap, snippet).lookup_by(lookup);