Skip to content

Commit e10d64e

Browse files
authored
Merge pull request #20234 from Hmikihiro/migrate_ted_remove_default
Remove `ConstParam::remove_default` and `TypeParam::remove_default` to migrate from ted
2 parents 591e3b7 + 435b296 commit e10d64e

File tree

3 files changed

+19
-62
lines changed

3 files changed

+19
-62
lines changed

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

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use ide_db::famous_defs::FamousDefs;
22
use stdx::format_to;
33
use syntax::{
44
AstNode,
5-
ast::{self, HasGenericParams, HasName, Impl, make},
5+
ast::{self, HasGenericParams, HasName, HasTypeBounds, Impl, make},
66
};
77

88
use crate::{
@@ -88,20 +88,19 @@ fn generate_trait_impl_text_from_impl(
8888
let generic_params = impl_.generic_param_list().map(|generic_params| {
8989
let lifetime_params =
9090
generic_params.lifetime_params().map(ast::GenericParam::LifetimeParam);
91-
let ty_or_const_params = generic_params.type_or_const_params().map(|param| {
91+
let ty_or_const_params = generic_params.type_or_const_params().filter_map(|param| {
9292
// remove defaults since they can't be specified in impls
93-
match param {
93+
let param = match param {
9494
ast::TypeOrConstParam::Type(param) => {
95-
let param = param.clone_for_update();
96-
param.remove_default();
95+
let param = make::type_param(param.name()?, param.type_bound_list());
9796
ast::GenericParam::TypeParam(param)
9897
}
9998
ast::TypeOrConstParam::Const(param) => {
100-
let param = param.clone_for_update();
101-
param.remove_default();
99+
let param = make::const_param(param.name()?, param.ty()?);
102100
ast::GenericParam::ConstParam(param)
103101
}
104-
}
102+
};
103+
Some(param)
105104
});
106105

107106
make::generic_param_list(itertools::chain(lifetime_params, ty_or_const_params))

crates/ide-assists/src/utils.rs

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -594,12 +594,10 @@ fn generate_impl_text_inner(
594594
let generic_params = adt.generic_param_list().map(|generic_params| {
595595
let lifetime_params =
596596
generic_params.lifetime_params().map(ast::GenericParam::LifetimeParam);
597-
let ty_or_const_params = generic_params.type_or_const_params().map(|param| {
598-
match param {
597+
let ty_or_const_params = generic_params.type_or_const_params().filter_map(|param| {
598+
let param = match param {
599599
ast::TypeOrConstParam::Type(param) => {
600-
let param = param.clone_for_update();
601600
// remove defaults since they can't be specified in impls
602-
param.remove_default();
603601
let mut bounds =
604602
param.type_bound_list().map_or_else(Vec::new, |it| it.bounds().collect());
605603
if let Some(trait_) = trait_text {
@@ -610,17 +608,16 @@ fn generate_impl_text_inner(
610608
}
611609
};
612610
// `{ty_param}: {bounds}`
613-
let param =
614-
make::type_param(param.name().unwrap(), make::type_bound_list(bounds));
611+
let param = make::type_param(param.name()?, make::type_bound_list(bounds));
615612
ast::GenericParam::TypeParam(param)
616613
}
617614
ast::TypeOrConstParam::Const(param) => {
618-
let param = param.clone_for_update();
619615
// remove defaults since they can't be specified in impls
620-
param.remove_default();
616+
let param = make::const_param(param.name()?, param.ty()?);
621617
ast::GenericParam::ConstParam(param)
622618
}
623-
}
619+
};
620+
Some(param)
624621
});
625622

626623
make::generic_param_list(itertools::chain(lifetime_params, ty_or_const_params))
@@ -695,12 +692,10 @@ fn generate_impl_inner(
695692
let generic_params = adt.generic_param_list().map(|generic_params| {
696693
let lifetime_params =
697694
generic_params.lifetime_params().map(ast::GenericParam::LifetimeParam);
698-
let ty_or_const_params = generic_params.type_or_const_params().map(|param| {
699-
match param {
695+
let ty_or_const_params = generic_params.type_or_const_params().filter_map(|param| {
696+
let param = match param {
700697
ast::TypeOrConstParam::Type(param) => {
701-
let param = param.clone_for_update();
702698
// remove defaults since they can't be specified in impls
703-
param.remove_default();
704699
let mut bounds =
705700
param.type_bound_list().map_or_else(Vec::new, |it| it.bounds().collect());
706701
if let Some(trait_) = &trait_ {
@@ -711,17 +706,16 @@ fn generate_impl_inner(
711706
}
712707
};
713708
// `{ty_param}: {bounds}`
714-
let param =
715-
make::type_param(param.name().unwrap(), make::type_bound_list(bounds));
709+
let param = make::type_param(param.name()?, make::type_bound_list(bounds));
716710
ast::GenericParam::TypeParam(param)
717711
}
718712
ast::TypeOrConstParam::Const(param) => {
719-
let param = param.clone_for_update();
720713
// remove defaults since they can't be specified in impls
721-
param.remove_default();
714+
let param = make::const_param(param.name()?, param.ty()?);
722715
ast::GenericParam::ConstParam(param)
723716
}
724-
}
717+
};
718+
Some(param)
725719
});
726720

727721
make::generic_param_list(itertools::chain(lifetime_params, ty_or_const_params))

crates/syntax/src/ast/edit_in_place.rs

Lines changed: 0 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -406,42 +406,6 @@ impl ast::WhereClause {
406406
}
407407
}
408408

409-
impl ast::TypeParam {
410-
pub fn remove_default(&self) {
411-
if let Some((eq, last)) = self
412-
.syntax()
413-
.children_with_tokens()
414-
.find(|it| it.kind() == T![=])
415-
.zip(self.syntax().last_child_or_token())
416-
{
417-
ted::remove_all(eq..=last);
418-
419-
// remove any trailing ws
420-
if let Some(last) = self.syntax().last_token().filter(|it| it.kind() == WHITESPACE) {
421-
last.detach();
422-
}
423-
}
424-
}
425-
}
426-
427-
impl ast::ConstParam {
428-
pub fn remove_default(&self) {
429-
if let Some((eq, last)) = self
430-
.syntax()
431-
.children_with_tokens()
432-
.find(|it| it.kind() == T![=])
433-
.zip(self.syntax().last_child_or_token())
434-
{
435-
ted::remove_all(eq..=last);
436-
437-
// remove any trailing ws
438-
if let Some(last) = self.syntax().last_token().filter(|it| it.kind() == WHITESPACE) {
439-
last.detach();
440-
}
441-
}
442-
}
443-
}
444-
445409
pub trait Removable: AstNode {
446410
fn remove(&self);
447411
}

0 commit comments

Comments
 (0)