From 12b05d241698fb3ecb18eaebc75cdce85abb1013 Mon Sep 17 00:00:00 2001 From: rami3l Date: Tue, 13 Dec 2022 12:25:44 +0800 Subject: fix: add generic `TypeBoundList` in generated derivable impl --- crates/syntax/src/ast/make.rs | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) (limited to 'crates/syntax/src') diff --git a/crates/syntax/src/ast/make.rs b/crates/syntax/src/ast/make.rs index 8c26009add2..11822361f40 100644 --- a/crates/syntax/src/ast/make.rs +++ b/crates/syntax/src/ast/make.rs @@ -719,11 +719,22 @@ pub fn param_list( ast_from_text(&list) } -pub fn type_param(name: ast::Name, ty: Option) -> ast::TypeParam { - let bound = match ty { - Some(it) => format!(": {it}"), - None => String::new(), - }; +pub fn type_bound(bound: &str) -> ast::TypeBound { + ast_from_text(&format!("fn f() {{ }}")) +} + +pub fn type_bound_list( + bounds: impl IntoIterator, +) -> Option { + let bounds = bounds.into_iter().map(|it| it.to_string()).unique().join(" + "); + if bounds.is_empty() { + return None; + } + Some(ast_from_text(&format!("fn f() {{ }}"))) +} + +pub fn type_param(name: ast::Name, bounds: Option) -> ast::TypeParam { + let bound = bounds.map_or_else(String::new, |it| format!(": {it}")); ast_from_text(&format!("fn f<{name}{bound}>() {{ }}")) } -- cgit 1.4.1-3-g733a5