Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide_db/src/rename.rs')
| -rw-r--r-- | crates/ide_db/src/rename.rs | 52 |
1 files changed, 20 insertions, 32 deletions
diff --git a/crates/ide_db/src/rename.rs b/crates/ide_db/src/rename.rs index ef8b31ba5f..a6f7c09af8 100644 --- a/crates/ide_db/src/rename.rs +++ b/crates/ide_db/src/rename.rs @@ -81,14 +81,6 @@ impl Definition { /// `Definition`. Note that some definitions, like buitin types, can't be /// renamed. pub fn range_for_rename(self, sema: &Semantics<RootDatabase>) -> Option<FileRange> { - // FIXME: the `original_file_range` calls here are wrong -- they never fail, - // and _fall back_ to the entirety of the macro call. Such fall back is - // incorrect for renames. The safe behavior would be to return an error for - // such cases. The correct behavior would be to return an auxiliary list of - // "can't rename these occurrences in macros" items, and then show some kind - // of a dialog to the user. See: - cov_mark::hit!(macros_are_broken_lol); - let res = match self { Definition::Macro(mac) => { let src = mac.source(sema.db)?; @@ -96,38 +88,35 @@ impl Definition { Either::Left(it) => it.name()?, Either::Right(it) => it.name()?, }; - src.with_value(name.syntax()).original_file_range(sema.db) + src.with_value(name.syntax()).original_file_range_opt(sema.db) } Definition::Field(field) => { let src = field.source(sema.db)?; - match &src.value { FieldSource::Named(record_field) => { let name = record_field.name()?; - src.with_value(name.syntax()).original_file_range(sema.db) - } - FieldSource::Pos(_) => { - return None; + src.with_value(name.syntax()).original_file_range_opt(sema.db) } + FieldSource::Pos(_) => None, } } Definition::ModuleDef(module_def) => match module_def { hir::ModuleDef::Module(module) => { let src = module.declaration_source(sema.db)?; let name = src.value.name()?; - src.with_value(name.syntax()).original_file_range(sema.db) + src.with_value(name.syntax()).original_file_range_opt(sema.db) } - hir::ModuleDef::Function(it) => name_range(it, sema)?, + hir::ModuleDef::Function(it) => name_range(it, sema), hir::ModuleDef::Adt(adt) => match adt { - hir::Adt::Struct(it) => name_range(it, sema)?, - hir::Adt::Union(it) => name_range(it, sema)?, - hir::Adt::Enum(it) => name_range(it, sema)?, + hir::Adt::Struct(it) => name_range(it, sema), + hir::Adt::Union(it) => name_range(it, sema), + hir::Adt::Enum(it) => name_range(it, sema), }, - hir::ModuleDef::Variant(it) => name_range(it, sema)?, - hir::ModuleDef::Const(it) => name_range(it, sema)?, - hir::ModuleDef::Static(it) => name_range(it, sema)?, - hir::ModuleDef::Trait(it) => name_range(it, sema)?, - hir::ModuleDef::TypeAlias(it) => name_range(it, sema)?, + hir::ModuleDef::Variant(it) => name_range(it, sema), + hir::ModuleDef::Const(it) => name_range(it, sema), + hir::ModuleDef::Static(it) => name_range(it, sema), + hir::ModuleDef::Trait(it) => name_range(it, sema), + hir::ModuleDef::TypeAlias(it) => name_range(it, sema), hir::ModuleDef::BuiltinType(_) => return None, }, Definition::SelfType(_) => return None, @@ -137,7 +126,7 @@ impl Definition { Either::Left(bind_pat) => bind_pat.name()?, Either::Right(_) => return None, }; - src.with_value(name.syntax()).original_file_range(sema.db) + src.with_value(name.syntax()).original_file_range_opt(sema.db) } Definition::GenericParam(generic_param) => match generic_param { hir::GenericParam::TypeParam(type_param) => { @@ -146,22 +135,22 @@ impl Definition { Either::Left(type_param) => type_param.name()?, Either::Right(_trait) => return None, }; - src.with_value(name.syntax()).original_file_range(sema.db) + src.with_value(name.syntax()).original_file_range_opt(sema.db) } hir::GenericParam::LifetimeParam(lifetime_param) => { let src = lifetime_param.source(sema.db)?; let lifetime = src.value.lifetime()?; - src.with_value(lifetime.syntax()).original_file_range(sema.db) + src.with_value(lifetime.syntax()).original_file_range_opt(sema.db) } - hir::GenericParam::ConstParam(it) => name_range(it, sema)?, + hir::GenericParam::ConstParam(it) => name_range(it, sema), }, Definition::Label(label) => { let src = label.source(sema.db); let lifetime = src.value.lifetime()?; - src.with_value(lifetime.syntax()).original_file_range(sema.db) + src.with_value(lifetime.syntax()).original_file_range_opt(sema.db) } }; - return Some(res); + return res; fn name_range<D>(def: D, sema: &Semantics<RootDatabase>) -> Option<FileRange> where @@ -170,8 +159,7 @@ impl Definition { { let src = def.source(sema.db)?; let name = src.value.name()?; - let res = src.with_value(name.syntax()).original_file_range(sema.db); - Some(res) + src.with_value(name.syntax()).original_file_range_opt(sema.db) } } } |