diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2020-12-12 18:06:36 +0000 |
---|---|---|
committer | GitHub <[email protected]> | 2020-12-12 18:06:36 +0000 |
commit | a15d19619e097b14b670064a4edc054a4251f479 (patch) | |
tree | 87f60edd15e470fbc342cef28b0674ba1cf71df9 | |
parent | 10f633283180d513138d0d969eceba96e3ce9f96 (diff) | |
parent | 69b78edb5e2a40d8665db713d363bd16c835d6cf (diff) |
Merge #6845
6845: Don't HirDisplay unknown types when displaying for source r=Veykril a=Veykril
Was wondering why the add missing impl assist didn't do anything here:
![Code_JCA1Qo0V9P](https://user-images.githubusercontent.com/3757771/101990300-7af44a80-3ca6-11eb-8431-e5eb4de4e78c.png)
Turns out me forgetting to set the Index::Idx type in the trait causes RA to panic due to it trying to to create an unparsable type in the `make` module.
Now we get this instead which imo is definitely better to have.
![Code_MUFPJUCULY](https://user-images.githubusercontent.com/3757771/101990347-c9094e00-3ca6-11eb-9c6a-146bddf64b7c.png)
Co-authored-by: Lukas Wirth <[email protected]>
-rw-r--r-- | crates/assists/src/handlers/add_missing_impl_members.rs | 25 | ||||
-rw-r--r-- | crates/hir_ty/src/display.rs | 10 |
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#" | ||
793 | trait Foo<BAR> { | ||
794 | fn foo(&self, bar: BAR); | ||
795 | } | ||
796 | impl Foo for () { | ||
797 | <|> | ||
798 | } | ||
799 | "#, | ||
800 | r#" | ||
801 | trait Foo<BAR> { | ||
802 | fn foo(&self, bar: BAR); | ||
803 | } | ||
804 | impl 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 0d968cc68..0e827a29e 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)] |
179 | pub enum DisplaySourceCodeError { | 179 | pub enum DisplaySourceCodeError { |
180 | PathNotFound, | 180 | PathNotFound, |
181 | UnknownType, | ||
181 | } | 182 | } |
182 | 183 | ||
183 | pub enum HirDisplayError { | 184 | pub 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(()) |