Skip to content

Commit ad51a17

Browse files
committed
Auto merge of rust-lang#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 rust-lang#16958
2 parents 4b33850 + 20b12c2 commit ad51a17

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

crates/hir-ty/src/method_resolution.rs

+4-2
Original file line numberDiff line numberDiff line change
@@ -644,7 +644,8 @@ pub fn is_dyn_method(
644644
let ItemContainerId::TraitId(trait_id) = func.lookup(db.upcast()).container else {
645645
return None;
646646
};
647-
let trait_params = db.generic_params(trait_id.into()).type_or_consts.len();
647+
let generic_params = db.generic_params(trait_id.into());
648+
let trait_params = generic_params.type_or_consts.len() + generic_params.lifetimes.len();
648649
let fn_params = fn_subst.len(Interner) - trait_params;
649650
let trait_ref = TraitRef {
650651
trait_id: to_chalk_trait_id(trait_id),
@@ -686,7 +687,8 @@ pub(crate) fn lookup_impl_method_query(
686687
let ItemContainerId::TraitId(trait_id) = func.lookup(db.upcast()).container else {
687688
return (func, fn_subst);
688689
};
689-
let trait_params = db.generic_params(trait_id.into()).type_or_consts.len();
690+
let generic_params = db.generic_params(trait_id.into());
691+
let trait_params = generic_params.type_or_consts.len() + generic_params.lifetimes.len();
690692
let fn_params = fn_subst.len(Interner) - trait_params;
691693
let trait_ref = TraitRef {
692694
trait_id: to_chalk_trait_id(trait_id),

crates/ide/src/syntax_highlighting/tests.rs

+17
Original file line numberDiff line numberDiff line change
@@ -1229,3 +1229,20 @@ fn benchmark_syntax_highlighting_parser() {
12291229
};
12301230
assert_eq!(hash, 1169);
12311231
}
1232+
1233+
#[test]
1234+
fn highlight_trait_with_lifetimes_regression_16958() {
1235+
let (analysis, file_id) = fixture::file(
1236+
r#"
1237+
pub trait Deserialize<'de> {
1238+
fn deserialize();
1239+
}
1240+
1241+
fn f<'de, T: Deserialize<'de>>() {
1242+
T::deserialize();
1243+
}
1244+
"#
1245+
.trim(),
1246+
);
1247+
let _ = analysis.highlight(HL_CONFIG, file_id).unwrap();
1248+
}

0 commit comments

Comments
 (0)