Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide_completion/src/completions/lifetime.rs')
-rw-r--r--crates/ide_completion/src/completions/lifetime.rs28
1 files changed, 17 insertions, 11 deletions
diff --git a/crates/ide_completion/src/completions/lifetime.rs b/crates/ide_completion/src/completions/lifetime.rs
index 878d72ea0f..b8a50442bc 100644
--- a/crates/ide_completion/src/completions/lifetime.rs
+++ b/crates/ide_completion/src/completions/lifetime.rs
@@ -8,7 +8,7 @@
//! show up for normal completions, or they won't show completions other than lifetimes depending
//! on the fixture input.
use hir::{known, ScopeDef};
-use syntax::ast;
+use syntax::{ast, TokenText};
use crate::{
completions::Completions,
@@ -19,24 +19,24 @@ use crate::{
pub(crate) fn complete_lifetime(acc: &mut Completions, ctx: &CompletionContext) {
let lp = match &ctx.lifetime_ctx {
Some(LifetimeContext::Lifetime) => None,
- Some(LifetimeContext::LifetimeParam(param)) => param.as_ref(),
+ Some(LifetimeContext::LifetimeParam { is_decl: false, param }) => Some(param),
_ => return,
};
- let lp_string;
let param_lifetime = match (&ctx.name_syntax, lp.and_then(|lp| lp.lifetime())) {
(Some(ast::NameLike::Lifetime(lt)), Some(lp)) if lp == lt.clone() => return,
- (Some(_), Some(lp)) => {
- lp_string = lp.to_string();
- Some(&*lp_string)
- }
+ (Some(_), Some(lp)) => Some(lp),
_ => None,
};
+ let param_lifetime = param_lifetime.as_ref().map(ast::Lifetime::text);
+ let param_lifetime = param_lifetime.as_ref().map(TokenText::as_str);
ctx.scope.process_all_names(&mut |name, res| {
- if let ScopeDef::GenericParam(hir::GenericParam::LifetimeParam(_)) = res {
- if param_lifetime != Some(&*name.to_smol_str()) {
- acc.add_lifetime(ctx, name);
- }
+ if matches!(
+ res,
+ ScopeDef::GenericParam(hir::GenericParam::LifetimeParam(_))
+ if param_lifetime != Some(&*name.to_smol_str())
+ ) {
+ acc.add_lifetime(ctx, name);
}
});
if param_lifetime.is_none() {
@@ -195,6 +195,12 @@ fn foo2<'lifetime, T>() where T: Trait<Item = 'a$0> {}
fn complete_lifetime_in_param_list() {
check(
r#"
+fn foo<'$0>() {}
+"#,
+ expect![[r#""#]],
+ );
+ check(
+ r#"
fn foo<'a$0>() {}
"#,
expect![[r#""#]],