From 1c622e9fed97de7711da7b5bffec0fa4b19d7500 Mon Sep 17 00:00:00 2001 From: Florian Diebold Date: Sat, 30 Nov 2019 12:48:51 +0100 Subject: Add cycle recovery for type aliases --- crates/ra_hir_ty/src/db.rs | 1 + crates/ra_hir_ty/src/lower.rs | 5 +++++ crates/ra_hir_ty/src/tests.rs | 6 ++++-- 3 files changed, 10 insertions(+), 2 deletions(-) (limited to 'crates') diff --git a/crates/ra_hir_ty/src/db.rs b/crates/ra_hir_ty/src/db.rs index 8e461e359..222a36a9f 100644 --- a/crates/ra_hir_ty/src/db.rs +++ b/crates/ra_hir_ty/src/db.rs @@ -22,6 +22,7 @@ pub trait HirDatabase: DefDatabase { fn infer(&self, def: DefWithBodyId) -> Arc; #[salsa::invoke(crate::lower::ty_query)] + #[salsa::cycle(crate::lower::ty_recover)] fn ty(&self, def: TyDefId) -> Ty; #[salsa::invoke(crate::lower::value_ty_query)] diff --git a/crates/ra_hir_ty/src/lower.rs b/crates/ra_hir_ty/src/lower.rs index c6ee75c7a..32569ac66 100644 --- a/crates/ra_hir_ty/src/lower.rs +++ b/crates/ra_hir_ty/src/lower.rs @@ -742,6 +742,11 @@ pub(crate) fn ty_query(db: &impl HirDatabase, def: TyDefId) -> Ty { TyDefId::TypeAliasId(it) => type_for_type_alias(db, it), } } + +pub(crate) fn ty_recover(_db: &impl HirDatabase, _cycle: &[String], _def: &TyDefId) -> Ty { + Ty::Unknown +} + pub(crate) fn value_ty_query(db: &impl HirDatabase, def: ValueTyDefId) -> Ty { match def { ValueTyDefId::FunctionId(it) => type_for_fn(db, it), diff --git a/crates/ra_hir_ty/src/tests.rs b/crates/ra_hir_ty/src/tests.rs index 552eb8f75..c856d6afd 100644 --- a/crates/ra_hir_ty/src/tests.rs +++ b/crates/ra_hir_ty/src/tests.rs @@ -2154,7 +2154,6 @@ fn test(x: Foo, y: Bar<&str>, z: Baz) { } #[test] -#[should_panic] // we currently can't handle this fn recursive_type_alias() { assert_snapshot!( infer(r#" @@ -2163,7 +2162,10 @@ type Foo = Foo; type Bar = A; fn test(x: Foo) {} "#), - @"" + @r###" + [59; 60) 'x': {unknown} + [67; 69) '{}': () + "### ) } -- cgit v1.2.3