aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--crates/assists/src/handlers/add_missing_impl_members.rs25
-rw-r--r--crates/hir_ty/src/display.rs10
2 files changed, 34 insertions, 1 deletions
diff --git a/crates/assists/src/handlers/add_missing_impl_members.rs b/crates/assists/src/handlers/add_missing_impl_members.rs
index bbb71e261..e413505d3 100644
--- a/crates/assists/src/handlers/add_missing_impl_members.rs
+++ b/crates/assists/src/handlers/add_missing_impl_members.rs
@@ -784,4 +784,29 @@ impl Test for () {
784"#, 784"#,
785 ) 785 )
786 } 786 }
787
788 #[test]
789 fn missing_generic_type() {
790 check_assist(
791 add_missing_impl_members,
792 r#"
793trait Foo<BAR> {
794 fn foo(&self, bar: BAR);
795}
796impl Foo for () {
797 <|>
798}
799"#,
800 r#"
801trait Foo<BAR> {
802 fn foo(&self, bar: BAR);
803}
804impl Foo for () {
805 fn foo(&self, bar: BAR) {
806 ${0:todo!()}
807 }
808}
809"#,
810 )
811 }
787} 812}
diff --git a/crates/hir_ty/src/display.rs b/crates/hir_ty/src/display.rs
index e77481906..aa286c8c2 100644
--- a/crates/hir_ty/src/display.rs
+++ b/crates/hir_ty/src/display.rs
@@ -178,6 +178,7 @@ impl DisplayTarget {
178#[derive(Debug)] 178#[derive(Debug)]
179pub enum DisplaySourceCodeError { 179pub enum DisplaySourceCodeError {
180 PathNotFound, 180 PathNotFound,
181 UnknownType,
181} 182}
182 183
183pub enum HirDisplayError { 184pub enum HirDisplayError {
@@ -558,7 +559,14 @@ impl HirDisplay for Ty {
558 } 559 }
559 }; 560 };
560 } 561 }
561 Ty::Unknown => write!(f, "{{unknown}}")?, 562 Ty::Unknown => {
563 if f.display_target.is_source_code() {
564 return Err(HirDisplayError::DisplaySourceCodeError(
565 DisplaySourceCodeError::UnknownType,
566 ));
567 }
568 write!(f, "{{unknown}}")?;
569 }
562 Ty::Infer(..) => write!(f, "_")?, 570 Ty::Infer(..) => write!(f, "_")?,
563 } 571 }
564 Ok(()) 572 Ok(())