Skip to content

Commit cbbbd48

Browse files
committed
Omit default types in HirDisplay SourceCode mode
1 parent 225f353 commit cbbbd48

File tree

3 files changed

+64
-28
lines changed

3 files changed

+64
-28
lines changed

crates/ra_assists/src/handlers/add_explicit_type.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ struct Test<K, T = u8> {
209209
}
210210
211211
fn main() {
212-
let test<|>: Test<i32, u8> = Test { t: 23, k: 33 };
212+
let test<|>: Test<i32> = Test { t: 23, k: 33 };
213213
}"#,
214214
);
215215
}

crates/ra_hir_ty/src/display.rs

Lines changed: 36 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,12 @@ enum DisplayTarget {
136136
SourceCode { module_id: ModuleId },
137137
}
138138

139+
impl DisplayTarget {
140+
fn is_source_code(&self) -> bool {
141+
matches!(self, Self::SourceCode {..})
142+
}
143+
}
144+
139145
#[derive(Debug)]
140146
pub enum DisplaySourceCodeError {
141147
PathNotFound,
@@ -303,37 +309,40 @@ impl HirDisplay for ApplicationTy {
303309

304310
if self.parameters.len() > 0 {
305311
let mut non_default_parameters = Vec::with_capacity(self.parameters.len());
306-
let parameters_to_write = if f.omit_verbose_types() {
307-
match self
308-
.ctor
309-
.as_generic_def()
310-
.map(|generic_def_id| f.db.generic_defaults(generic_def_id))
311-
.filter(|defaults| !defaults.is_empty())
312-
{
313-
None => self.parameters.0.as_ref(),
314-
Some(default_parameters) => {
315-
for (i, parameter) in self.parameters.iter().enumerate() {
316-
match (parameter, default_parameters.get(i)) {
317-
(&Ty::Unknown, _) | (_, None) => {
318-
non_default_parameters.push(parameter.clone())
319-
}
320-
(_, Some(default_parameter))
321-
if parameter != default_parameter =>
322-
{
323-
non_default_parameters.push(parameter.clone())
312+
let parameters_to_write =
313+
if f.display_target.is_source_code() || f.omit_verbose_types() {
314+
match self
315+
.ctor
316+
.as_generic_def()
317+
.map(|generic_def_id| f.db.generic_defaults(generic_def_id))
318+
.filter(|defaults| !defaults.is_empty())
319+
{
320+
None => self.parameters.0.as_ref(),
321+
Some(default_parameters) => {
322+
for (i, parameter) in self.parameters.iter().enumerate() {
323+
match (parameter, default_parameters.get(i)) {
324+
(&Ty::Unknown, _) | (_, None) => {
325+
non_default_parameters.push(parameter.clone())
326+
}
327+
(_, Some(default_parameter))
328+
if parameter != default_parameter =>
329+
{
330+
non_default_parameters.push(parameter.clone())
331+
}
332+
_ => (),
324333
}
325-
_ => (),
326334
}
335+
&non_default_parameters
327336
}
328-
&non_default_parameters
329337
}
330-
}
331-
} else {
332-
self.parameters.0.as_ref()
333-
};
334-
write!(f, "<")?;
335-
f.write_joined(parameters_to_write, ", ")?;
336-
write!(f, ">")?;
338+
} else {
339+
self.parameters.0.as_ref()
340+
};
341+
if !parameters_to_write.is_empty() {
342+
write!(f, "<")?;
343+
f.write_joined(parameters_to_write, ", ")?;
344+
write!(f, ">")?;
345+
}
337346
}
338347
}
339348
TypeCtor::AssociatedType(type_alias) => {

crates/ra_hir_ty/src/tests/display_source_code.rs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,30 @@ fn bar() {
2121
);
2222
assert_eq!("foo::Foo", displayed_source_at_pos(&db, pos));
2323
}
24+
25+
#[test]
26+
fn omit_default_type_parameters() {
27+
let (db, pos) = TestDB::with_position(
28+
r"
29+
//- /main.rs
30+
struct Foo<T = u8> { t: T }
31+
fn main() {
32+
let foo = Foo { t: 5 };
33+
foo<|>;
34+
}
35+
",
36+
);
37+
assert_eq!("Foo", displayed_source_at_pos(&db, pos));
38+
39+
let (db, pos) = TestDB::with_position(
40+
r"
41+
//- /main.rs
42+
struct Foo<K, T = u8> { k: K, t: T }
43+
fn main() {
44+
let foo = Foo { k: 400, t: 5 };
45+
foo<|>;
46+
}
47+
",
48+
);
49+
assert_eq!("Foo<i32>", displayed_source_at_pos(&db, pos));
50+
}

0 commit comments

Comments
 (0)