Skip to content
This repository was archived by the owner on May 28, 2025. It is now read-only.

Commit a555e95

Browse files
committed
fix make HirDisplay format lifetimes first
1 parent 8d08b33 commit a555e95

File tree

6 files changed

+32
-13
lines changed

6 files changed

+32
-13
lines changed

crates/hir-ty/src/display.rs

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
//! purposes.
44
55
use std::{
6+
cmp::Ordering,
67
fmt::{self, Debug},
78
mem::size_of,
89
};
@@ -953,11 +954,17 @@ impl HirDisplay for Ty {
953954
// `parameters` are in the order of fn's params (including impl traits),
954955
// parent's params (those from enclosing impl or trait, if any).
955956
let parameters = parameters.as_slice(Interner);
956-
let fn_params_len =
957-
self_param + type_params + const_params + lifetime_params;
957+
let fn_params_len = self_param + type_params + const_params;
958+
// This will give slice till last type or const
958959
let fn_params = parameters.get(..fn_params_len);
960+
let fn_lt_params =
961+
parameters.get(fn_params_len..(fn_params_len + lifetime_params));
959962
let parent_params = parameters.get(parameters.len() - parent_params..);
960-
let params = parent_params.into_iter().chain(fn_params).flatten();
963+
let params = parent_params
964+
.into_iter()
965+
.chain(fn_lt_params)
966+
.chain(fn_params)
967+
.flatten();
961968
write!(f, "<")?;
962969
f.write_joined(params, ", ")?;
963970
write!(f, ">")?;
@@ -1317,6 +1324,15 @@ fn hir_fmt_generics(
13171324
) -> Result<(), HirDisplayError> {
13181325
let db = f.db;
13191326
if parameters.len(Interner) > 0 {
1327+
let param_compare =
1328+
|a: &GenericArg, b: &GenericArg| match (a.data(Interner), b.data(Interner)) {
1329+
(crate::GenericArgData::Lifetime(_), crate::GenericArgData::Lifetime(_)) => {
1330+
Ordering::Equal
1331+
}
1332+
(crate::GenericArgData::Lifetime(_), _) => Ordering::Less,
1333+
(_, crate::GenericArgData::Lifetime(_)) => Ordering::Less,
1334+
(_, _) => Ordering::Equal,
1335+
};
13201336
let parameters_to_write = if f.display_target.is_source_code() || f.omit_verbose_types() {
13211337
match generic_def
13221338
.map(|generic_def_id| db.generic_defaults(generic_def_id))
@@ -1367,6 +1383,9 @@ fn hir_fmt_generics(
13671383
} else {
13681384
parameters.as_slice(Interner)
13691385
};
1386+
//FIXME: Should handle when creating substitutions
1387+
let mut parameters_to_write = parameters_to_write.to_vec();
1388+
parameters_to_write.sort_by(param_compare);
13701389
if !parameters_to_write.is_empty() {
13711390
write!(f, "<")?;
13721391
let mut first = true;

crates/hir-ty/src/tests/regression.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -896,13 +896,13 @@ fn flush(&self) {
896896
"#,
897897
expect![[r#"
898898
123..127 'self': &Mutex<T>
899-
150..152 '{}': MutexGuard<T, 'static>
899+
150..152 '{}': MutexGuard<'static, T>
900900
234..238 'self': &{unknown}
901901
240..290 '{ ...()); }': ()
902902
250..251 'w': &Mutex<BufWriter>
903903
276..287 '*(w.lock())': BufWriter
904904
278..279 'w': &Mutex<BufWriter>
905-
278..286 'w.lock()': MutexGuard<BufWriter, 'static>
905+
278..286 'w.lock()': MutexGuard<'static, BufWriter>
906906
"#]],
907907
);
908908
}

crates/ide-assists/src/handlers/extract_function.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5617,7 +5617,7 @@ fn func<T: Debug>(i: Struct<'_, T>) {
56175617
fun_name(i);
56185618
}
56195619
5620-
fn $0fun_name(i: Struct<T, 'static>) {
5620+
fn $0fun_name(i: Struct<'static, T>) {
56215621
foo(i);
56225622
}
56235623
"#,

crates/ide-assists/src/handlers/generate_delegate_methods.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -614,7 +614,7 @@ struct Foo<'a, T> {
614614
}
615615
616616
impl<'a, T> Foo<'a, T> {
617-
$0fn bar(self, mut b: Vec<&'a Bar<T, 'a>>) -> &'a Bar<T, 'a> {
617+
$0fn bar(self, mut b: Vec<&'a Bar<'a, T>>) -> &'a Bar<'a, T> {
618618
self.field.bar(b)
619619
}
620620
}

crates/ide-completion/src/tests/predicate.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ struct Foo<'lt, T, const C: usize> where $0 {}
1919
en Enum Enum
2020
ma makro!(…) macro_rules! makro
2121
md module
22-
st Foo<…> Foo<{unknown}, _, 'static>
22+
st Foo<…> Foo<'static, {unknown}, _>
2323
st Record Record
2424
st Tuple Tuple
2525
st Unit Unit
@@ -92,7 +92,7 @@ struct Foo<'lt, T, const C: usize> where for<'a> $0 {}
9292
en Enum Enum
9393
ma makro!(…) macro_rules! makro
9494
md module
95-
st Foo<…> Foo<{unknown}, _, 'static>
95+
st Foo<…> Foo<'static, {unknown}, _>
9696
st Record Record
9797
st Tuple Tuple
9898
st Unit Unit

crates/ide-completion/src/tests/type_pos.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ struct Foo<'lt, T, const C: usize> {
2020
en Enum Enum
2121
ma makro!(…) macro_rules! makro
2222
md module
23-
sp Self Foo<{unknown}, _, 'static>
24-
st Foo<…> Foo<{unknown}, _, 'static>
23+
sp Self Foo<'static, {unknown}, _>
24+
st Foo<…> Foo<'static, {unknown}, _>
2525
st Record Record
2626
st Tuple Tuple
2727
st Unit Unit
@@ -45,8 +45,8 @@ struct Foo<'lt, T, const C: usize>(f$0);
4545
en Enum Enum
4646
ma makro!(…) macro_rules! makro
4747
md module
48-
sp Self Foo<{unknown}, _, 'static>
49-
st Foo<…> Foo<{unknown}, _, 'static>
48+
sp Self Foo<'static, {unknown}, _>
49+
st Foo<…> Foo<'static, {unknown}, _>
5050
st Record Record
5151
st Tuple Tuple
5252
st Unit Unit

0 commit comments

Comments
 (0)