diff options
| author | Sebastian Ziebell <sebastian.ziebell@ferrous-systems.com> | 2023-05-26 13:43:12 +0200 |
|---|---|---|
| committer | Sebastian Ziebell <sebastian.ziebell@ferrous-systems.com> | 2023-05-26 13:43:12 +0200 |
| commit | e78df83e2fb89b475187f7d4b631a68619b590b5 (patch) | |
| tree | a90e8d997ecd89e3c312cbadc31988518c80abfa | |
| parent | ce1c85317f80b96b5fdc65fa2e76d4150f26abfa (diff) | |
| download | rust-e78df83e2fb89b475187f7d4b631a68619b590b5.tar.gz rust-e78df83e2fb89b475187f7d4b631a68619b590b5.zip | |
Integrate feedback
* pass in existing `Semantics` object to function * pass in `Definition` for param type * refactor iterator to use `flatten`
| -rw-r--r-- | crates/ide-assists/src/handlers/replace_named_generic_with_impl.rs | 21 |
1 files changed, 8 insertions, 13 deletions
diff --git a/crates/ide-assists/src/handlers/replace_named_generic_with_impl.rs b/crates/ide-assists/src/handlers/replace_named_generic_with_impl.rs index 4e7011b5ca3..f32ceb42654 100644 --- a/crates/ide-assists/src/handlers/replace_named_generic_with_impl.rs +++ b/crates/ide-assists/src/handlers/replace_named_generic_with_impl.rs @@ -1,4 +1,4 @@ -use hir::{Semantics, TypeParam}; +use hir::Semantics; use ide_db::{ base_db::{FileId, FileRange}, defs::Definition, @@ -60,7 +60,9 @@ pub(crate) fn replace_named_generic_with_impl( } let type_param_hir_def = ctx.sema.to_def(&type_param)?; - if is_referenced_outside(ctx.db(), type_param_hir_def, &fn_, ctx.file_id()) { + let type_param_def = Definition::GenericParam(hir::GenericParam::TypeParam(type_param_hir_def)); + + if is_referenced_outside(&ctx.sema, type_param_def, &fn_, ctx.file_id()) { return None; } @@ -100,27 +102,20 @@ pub(crate) fn replace_named_generic_with_impl( } fn is_referenced_outside( - db: &RootDatabase, - type_param: TypeParam, + sema: &Semantics<'_, RootDatabase>, + type_param_def: Definition, fn_: &ast::Fn, file_id: FileId, ) -> bool { - let semantics = Semantics::new(db); - let type_param_def = Definition::GenericParam(hir::GenericParam::TypeParam(type_param)); - // limit search scope to function body & return type let search_ranges = vec![ fn_.body().map(|body| body.syntax().text_range()), fn_.ret_type().map(|ret_type| ret_type.syntax().text_range()), ]; - search_ranges.into_iter().filter_map(|search_range| search_range).any(|search_range| { + search_ranges.into_iter().flatten().any(|search_range| { let file_range = FileRange { file_id, range: search_range }; - !type_param_def - .usages(&semantics) - .in_scope(SearchScope::file_range(file_range)) - .all() - .is_empty() + !type_param_def.usages(sema).in_scope(SearchScope::file_range(file_range)).all().is_empty() }) } |
