Auto merge of #16960 - dfireBird:fix-16958, r=lnicola

fix: lifetime length are not added in count of params in highlight

I found these two instances easily but I wonder how many such instances are there.

Fixes #16958
This commit is contained in:
bors 2024-03-27 18:05:45 +00:00
commit ad51a17c62
2 changed files with 21 additions and 2 deletions

View File

@ -644,7 +644,8 @@ pub fn is_dyn_method(
let ItemContainerId::TraitId(trait_id) = func.lookup(db.upcast()).container else { let ItemContainerId::TraitId(trait_id) = func.lookup(db.upcast()).container else {
return None; return None;
}; };
let trait_params = db.generic_params(trait_id.into()).type_or_consts.len(); let generic_params = db.generic_params(trait_id.into());
let trait_params = generic_params.type_or_consts.len() + generic_params.lifetimes.len();
let fn_params = fn_subst.len(Interner) - trait_params; let fn_params = fn_subst.len(Interner) - trait_params;
let trait_ref = TraitRef { let trait_ref = TraitRef {
trait_id: to_chalk_trait_id(trait_id), trait_id: to_chalk_trait_id(trait_id),
@ -686,7 +687,8 @@ pub(crate) fn lookup_impl_method_query(
let ItemContainerId::TraitId(trait_id) = func.lookup(db.upcast()).container else { let ItemContainerId::TraitId(trait_id) = func.lookup(db.upcast()).container else {
return (func, fn_subst); return (func, fn_subst);
}; };
let trait_params = db.generic_params(trait_id.into()).type_or_consts.len(); let generic_params = db.generic_params(trait_id.into());
let trait_params = generic_params.type_or_consts.len() + generic_params.lifetimes.len();
let fn_params = fn_subst.len(Interner) - trait_params; let fn_params = fn_subst.len(Interner) - trait_params;
let trait_ref = TraitRef { let trait_ref = TraitRef {
trait_id: to_chalk_trait_id(trait_id), trait_id: to_chalk_trait_id(trait_id),

View File

@ -1229,3 +1229,20 @@ fn benchmark_syntax_highlighting_parser() {
}; };
assert_eq!(hash, 1169); assert_eq!(hash, 1169);
} }
#[test]
fn highlight_trait_with_lifetimes_regression_16958() {
let (analysis, file_id) = fixture::file(
r#"
pub trait Deserialize<'de> {
fn deserialize();
}
fn f<'de, T: Deserialize<'de>>() {
T::deserialize();
}
"#
.trim(),
);
let _ = analysis.highlight(HL_CONFIG, file_id).unwrap();
}