From c6b2e5c6eb38c9f2948e6cb33377471819fadb27 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Sun, 18 Sep 2022 15:31:33 -0700 Subject: [PATCH] Parse dyn* syntax --- src/ty.rs | 12 +++++++++--- tests/repo/mod.rs | 7 ------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/ty.rs b/src/ty.rs index 0f1341fddd..09ed8a91ca 100644 --- a/src/ty.rs +++ b/src/ty.rs @@ -537,9 +537,15 @@ pub mod parsing { || lookahead.peek(Token![::]) || lookahead.peek(Token![<]) { - if input.peek(Token![dyn]) { - let trait_object = TypeTraitObject::parse(input, allow_plus)?; - return Ok(Type::TraitObject(trait_object)); + let dyn_token: Option = input.parse()?; + if dyn_token.is_some() { + let star_token: Option = input.parse()?; + let bounds = TypeTraitObject::parse_bounds(input, allow_plus)?; + return Ok(if star_token.is_some() { + Type::Verbatim(verbatim::between(begin, input)) + } else { + Type::TraitObject(TypeTraitObject { dyn_token, bounds }) + }); } let ty: TypePath = input.parse()?; diff --git a/tests/repo/mod.rs b/tests/repo/mod.rs index a584f6b867..9d45f32711 100644 --- a/tests/repo/mod.rs +++ b/tests/repo/mod.rs @@ -14,13 +14,6 @@ const REVISION: &str = "98ad6a5519651af36e246c0335c964dd52c554ba"; #[rustfmt::skip] static EXCLUDE_FILES: &[&str] = &[ - // TODO: dyn* - "src/test/ui/dyn-star/const.rs", - "src/test/ui/dyn-star/drop.rs", - "src/test/ui/dyn-star/make-dyn-star.rs", - "src/test/ui/dyn-star/method.rs", - "src/test/ui/dyn-star/syntax.rs", - // TODO: Struct { #[attr] .. } in pattern position "src/tools/rust-analyzer/crates/parser/test_data/parser/inline/ok/0102_record_pat_field_list.rs",