Skip to content

Commit 8c0661b

Browse files
committed
Use GenericArgList for make::impl{_trait}
`make::impl_` no longer merges generic params and args in order to be in line with `make::impl_`, which doesn't do it either.
1 parent 1370784 commit 8c0661b

File tree

2 files changed

+11
-19
lines changed

2 files changed

+11
-19
lines changed

crates/ide-assists/src/handlers/generate_delegate_methods.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -161,13 +161,13 @@ pub(crate) fn generate_delegate_methods(acc: &mut Assists, ctx: &AssistContext<'
161161
Some(impl_def) => edit.make_mut(impl_def),
162162
None => {
163163
let name = &strukt_name.to_string();
164-
let params = strukt.generic_param_list();
165-
let ty_params = params;
164+
let ty_params = strukt.generic_param_list();
165+
let ty_args = ty_params.as_ref().map(|it| it.to_generic_args());
166166
let where_clause = strukt.where_clause();
167167

168168
let impl_def = make::impl_(
169169
ty_params,
170-
None,
170+
ty_args,
171171
make::ty_path(make::ext::ident_path(name)),
172172
where_clause,
173173
None,

crates/syntax/src/ast/make.rs

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -236,20 +236,14 @@ fn merge_where_clause(
236236

237237
pub fn impl_(
238238
generic_params: Option<ast::GenericParamList>,
239-
generic_args: Option<ast::GenericParamList>,
239+
generic_args: Option<ast::GenericArgList>,
240240
path_type: ast::Type,
241241
where_clause: Option<ast::WhereClause>,
242242
body: Option<Vec<either::Either<ast::Attr, ast::AssocItem>>>,
243243
) -> ast::Impl {
244-
let (gen_params, tr_gen_args) = match (generic_params, generic_args) {
245-
(None, None) => (String::new(), String::new()),
246-
(None, Some(args)) => (String::new(), args.to_generic_args().to_string()),
247-
(Some(params), None) => (params.to_string(), params.to_generic_args().to_string()),
248-
(Some(params), Some(args)) => match merge_gen_params(Some(params.clone()), Some(args)) {
249-
Some(merged) => (params.to_string(), merged.to_generic_args().to_string()),
250-
None => (params.to_string(), String::new()),
251-
},
252-
};
244+
let gen_args = generic_args.map_or_else(String::new, |it| it.to_string());
245+
246+
let gen_params = generic_params.map_or_else(String::new, |it| it.to_string());
253247

254248
let where_clause = match where_clause {
255249
Some(pr) => pr.to_string(),
@@ -261,7 +255,7 @@ pub fn impl_(
261255
None => String::new(),
262256
};
263257

264-
ast_from_text(&format!("impl{gen_params} {path_type}{tr_gen_args}{where_clause}{{{}}}", body))
258+
ast_from_text(&format!("impl{gen_params} {path_type}{gen_args}{where_clause}{{{body}}}"))
265259
}
266260

267261
pub fn impl_trait(
@@ -282,10 +276,8 @@ pub fn impl_trait(
282276
let trait_gen_args = trait_gen_args.map(|args| args.to_string()).unwrap_or_default();
283277
let type_gen_args = type_gen_args.map(|args| args.to_string()).unwrap_or_default();
284278

285-
let gen_params = match merge_gen_params(trait_gen_params, type_gen_params) {
286-
Some(pars) => pars.to_string(),
287-
None => String::new(),
288-
};
279+
let gen_params = merge_gen_params(trait_gen_params, type_gen_params)
280+
.map_or_else(String::new, |it| it.to_string());
289281

290282
let is_negative = if is_negative { "! " } else { "" };
291283

@@ -297,7 +289,7 @@ pub fn impl_trait(
297289
None => String::new(),
298290
};
299291

300-
ast_from_text(&format!("{is_unsafe}impl{gen_params} {is_negative}{path_type}{trait_gen_args} for {ty}{type_gen_args}{where_clause}{{{}}}" , body))
292+
ast_from_text(&format!("{is_unsafe}impl{gen_params} {is_negative}{path_type}{trait_gen_args} for {ty}{type_gen_args}{where_clause}{{{body}}}"))
301293
}
302294

303295
pub fn impl_trait_type(bounds: ast::TypeBoundList) -> ast::ImplTraitType {

0 commit comments

Comments
 (0)