Skip to content

Commit e78df83

Browse files
committed
Integrate feedback
* pass in existing `Semantics` object to function * pass in `Definition` for param type * refactor iterator to use `flatten`
1 parent ce1c853 commit e78df83

File tree

1 file changed

+8
-13
lines changed

1 file changed

+8
-13
lines changed

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

+8-13
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use hir::{Semantics, TypeParam};
1+
use hir::Semantics;
22
use ide_db::{
33
base_db::{FileId, FileRange},
44
defs::Definition,
@@ -60,7 +60,9 @@ pub(crate) fn replace_named_generic_with_impl(
6060
}
6161

6262
let type_param_hir_def = ctx.sema.to_def(&type_param)?;
63-
if is_referenced_outside(ctx.db(), type_param_hir_def, &fn_, ctx.file_id()) {
63+
let type_param_def = Definition::GenericParam(hir::GenericParam::TypeParam(type_param_hir_def));
64+
65+
if is_referenced_outside(&ctx.sema, type_param_def, &fn_, ctx.file_id()) {
6466
return None;
6567
}
6668

@@ -100,27 +102,20 @@ pub(crate) fn replace_named_generic_with_impl(
100102
}
101103

102104
fn is_referenced_outside(
103-
db: &RootDatabase,
104-
type_param: TypeParam,
105+
sema: &Semantics<'_, RootDatabase>,
106+
type_param_def: Definition,
105107
fn_: &ast::Fn,
106108
file_id: FileId,
107109
) -> bool {
108-
let semantics = Semantics::new(db);
109-
let type_param_def = Definition::GenericParam(hir::GenericParam::TypeParam(type_param));
110-
111110
// limit search scope to function body & return type
112111
let search_ranges = vec![
113112
fn_.body().map(|body| body.syntax().text_range()),
114113
fn_.ret_type().map(|ret_type| ret_type.syntax().text_range()),
115114
];
116115

117-
search_ranges.into_iter().filter_map(|search_range| search_range).any(|search_range| {
116+
search_ranges.into_iter().flatten().any(|search_range| {
118117
let file_range = FileRange { file_id, range: search_range };
119-
!type_param_def
120-
.usages(&semantics)
121-
.in_scope(SearchScope::file_range(file_range))
122-
.all()
123-
.is_empty()
118+
!type_param_def.usages(sema).in_scope(SearchScope::file_range(file_range)).all().is_empty()
124119
})
125120
}
126121

0 commit comments

Comments
 (0)