From 27cadcd531c017aa7c78c6f7a36f2b7f2ce8a196 Mon Sep 17 00:00:00 2001 From: Nick Spain Date: Fri, 1 Jan 2021 13:05:28 +1100 Subject: HasSource::source -> HasSource::source_old To start migrating HasSource::source to return an Option. --- crates/assists/src/handlers/fill_match_arms.rs | 2 +- crates/assists/src/handlers/fix_visibility.rs | 4 ++-- crates/assists/src/utils.rs | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) (limited to 'crates/assists') diff --git a/crates/assists/src/handlers/fill_match_arms.rs b/crates/assists/src/handlers/fill_match_arms.rs index cb60a3128..a8efad6d6 100644 --- a/crates/assists/src/handlers/fill_match_arms.rs +++ b/crates/assists/src/handlers/fill_match_arms.rs @@ -196,7 +196,7 @@ fn build_pat(db: &RootDatabase, module: hir::Module, var: hir::Variant) -> Optio let path = mod_path_to_ast(&module.find_use_path(db, ModuleDef::from(var))?); // FIXME: use HIR for this; it doesn't currently expose struct vs. tuple vs. unit variants though - let pat: ast::Pat = match var.source(db).value.kind() { + let pat: ast::Pat = match var.source_old(db).value.kind() { ast::StructKind::Tuple(field_list) => { let pats = iter::repeat(make::wildcard_pat().into()).take(field_list.fields().count()); make::tuple_struct_pat(path, pats).into() diff --git a/crates/assists/src/handlers/fix_visibility.rs b/crates/assists/src/handlers/fix_visibility.rs index 8558a8ff0..d8150abd9 100644 --- a/crates/assists/src/handlers/fix_visibility.rs +++ b/crates/assists/src/handlers/fix_visibility.rs @@ -97,7 +97,7 @@ fn add_vis_to_referenced_record_field(acc: &mut Assists, ctx: &AssistContext) -> let parent_name = parent.name(ctx.db()); let target_module = parent.module(ctx.db()); - let in_file_source = record_field_def.source(ctx.db()); + let in_file_source = record_field_def.source_old(ctx.db()); let (offset, current_visibility, target) = match in_file_source.value { hir::FieldSource::Named(it) => { let s = it.syntax(); @@ -150,7 +150,7 @@ fn target_data_for_def( S: HasSource, Ast: AstNode + ast::VisibilityOwner, { - let source = x.source(db); + let source = x.source_old(db); let in_file_syntax = source.syntax(); let file_id = in_file_syntax.file_id; let syntax = in_file_syntax.value; diff --git a/crates/assists/src/utils.rs b/crates/assists/src/utils.rs index d41084b59..7ee7111ae 100644 --- a/crates/assists/src/utils.rs +++ b/crates/assists/src/utils.rs @@ -99,9 +99,9 @@ pub fn filter_assoc_items( items .iter() .map(|i| match i { - hir::AssocItem::Function(i) => ast::AssocItem::Fn(i.source(db).value), - hir::AssocItem::TypeAlias(i) => ast::AssocItem::TypeAlias(i.source(db).value), - hir::AssocItem::Const(i) => ast::AssocItem::Const(i.source(db).value), + hir::AssocItem::Function(i) => ast::AssocItem::Fn(i.source_old(db).value), + hir::AssocItem::TypeAlias(i) => ast::AssocItem::TypeAlias(i.source_old(db).value), + hir::AssocItem::Const(i) => ast::AssocItem::Const(i.source_old(db).value), }) .filter(has_def_name) .filter(|it| match it { -- cgit v1.2.3 From ea4708c444509449b86c50b7b1b23f9ff5af4e97 Mon Sep 17 00:00:00 2001 From: Nick Spain Date: Fri, 1 Jan 2021 13:50:50 +1100 Subject: Mark HasSource::source_old as deprecated but allow at all call sites --- crates/assists/src/handlers/fill_match_arms.rs | 1 + crates/assists/src/handlers/fix_visibility.rs | 2 ++ crates/assists/src/utils.rs | 11 +++++++---- 3 files changed, 10 insertions(+), 4 deletions(-) (limited to 'crates/assists') diff --git a/crates/assists/src/handlers/fill_match_arms.rs b/crates/assists/src/handlers/fill_match_arms.rs index a8efad6d6..d17c82e18 100644 --- a/crates/assists/src/handlers/fill_match_arms.rs +++ b/crates/assists/src/handlers/fill_match_arms.rs @@ -196,6 +196,7 @@ fn build_pat(db: &RootDatabase, module: hir::Module, var: hir::Variant) -> Optio let path = mod_path_to_ast(&module.find_use_path(db, ModuleDef::from(var))?); // FIXME: use HIR for this; it doesn't currently expose struct vs. tuple vs. unit variants though + #[allow(deprecated)] let pat: ast::Pat = match var.source_old(db).value.kind() { ast::StructKind::Tuple(field_list) => { let pats = iter::repeat(make::wildcard_pat().into()).take(field_list.fields().count()); diff --git a/crates/assists/src/handlers/fix_visibility.rs b/crates/assists/src/handlers/fix_visibility.rs index d8150abd9..7d440d420 100644 --- a/crates/assists/src/handlers/fix_visibility.rs +++ b/crates/assists/src/handlers/fix_visibility.rs @@ -97,6 +97,7 @@ fn add_vis_to_referenced_record_field(acc: &mut Assists, ctx: &AssistContext) -> let parent_name = parent.name(ctx.db()); let target_module = parent.module(ctx.db()); + #[allow(deprecated)] let in_file_source = record_field_def.source_old(ctx.db()); let (offset, current_visibility, target) = match in_file_source.value { hir::FieldSource::Named(it) => { @@ -150,6 +151,7 @@ fn target_data_for_def( S: HasSource, Ast: AstNode + ast::VisibilityOwner, { + #[allow(deprecated)] let source = x.source_old(db); let in_file_syntax = source.syntax(); let file_id = in_file_syntax.file_id; diff --git a/crates/assists/src/utils.rs b/crates/assists/src/utils.rs index 7ee7111ae..d15e5a24b 100644 --- a/crates/assists/src/utils.rs +++ b/crates/assists/src/utils.rs @@ -98,10 +98,13 @@ pub fn filter_assoc_items( items .iter() - .map(|i| match i { - hir::AssocItem::Function(i) => ast::AssocItem::Fn(i.source_old(db).value), - hir::AssocItem::TypeAlias(i) => ast::AssocItem::TypeAlias(i.source_old(db).value), - hir::AssocItem::Const(i) => ast::AssocItem::Const(i.source_old(db).value), + .map(|i| { + #[allow(deprecated)] + match i { + hir::AssocItem::Function(i) => ast::AssocItem::Fn(i.source_old(db).value), + hir::AssocItem::TypeAlias(i) => ast::AssocItem::TypeAlias(i.source_old(db).value), + hir::AssocItem::Const(i) => ast::AssocItem::Const(i.source_old(db).value), + } }) .filter(has_def_name) .filter(|it| match it { -- cgit v1.2.3 From c936e4b86fd5de8e9709cd01547a69054cdec91b Mon Sep 17 00:00:00 2001 From: Nick Spain Date: Fri, 1 Jan 2021 15:02:39 +1100 Subject: source_old -> source for cases that can be handled by simple bubbling --- crates/assists/src/handlers/fill_match_arms.rs | 3 +-- crates/assists/src/handlers/fix_visibility.rs | 5 ++--- 2 files changed, 3 insertions(+), 5 deletions(-) (limited to 'crates/assists') diff --git a/crates/assists/src/handlers/fill_match_arms.rs b/crates/assists/src/handlers/fill_match_arms.rs index d17c82e18..f9a62b9fa 100644 --- a/crates/assists/src/handlers/fill_match_arms.rs +++ b/crates/assists/src/handlers/fill_match_arms.rs @@ -196,8 +196,7 @@ fn build_pat(db: &RootDatabase, module: hir::Module, var: hir::Variant) -> Optio let path = mod_path_to_ast(&module.find_use_path(db, ModuleDef::from(var))?); // FIXME: use HIR for this; it doesn't currently expose struct vs. tuple vs. unit variants though - #[allow(deprecated)] - let pat: ast::Pat = match var.source_old(db).value.kind() { + let pat: ast::Pat = match var.source(db)?.value.kind() { ast::StructKind::Tuple(field_list) => { let pats = iter::repeat(make::wildcard_pat().into()).take(field_list.fields().count()); make::tuple_struct_pat(path, pats).into() diff --git a/crates/assists/src/handlers/fix_visibility.rs b/crates/assists/src/handlers/fix_visibility.rs index 7d440d420..aa6aed9c2 100644 --- a/crates/assists/src/handlers/fix_visibility.rs +++ b/crates/assists/src/handlers/fix_visibility.rs @@ -98,7 +98,7 @@ fn add_vis_to_referenced_record_field(acc: &mut Assists, ctx: &AssistContext) -> let target_module = parent.module(ctx.db()); #[allow(deprecated)] - let in_file_source = record_field_def.source_old(ctx.db()); + let in_file_source = record_field_def.source(ctx.db())?; let (offset, current_visibility, target) = match in_file_source.value { hir::FieldSource::Named(it) => { let s = it.syntax(); @@ -151,8 +151,7 @@ fn target_data_for_def( S: HasSource, Ast: AstNode + ast::VisibilityOwner, { - #[allow(deprecated)] - let source = x.source_old(db); + let source = x.source(db)?; let in_file_syntax = source.syntax(); let file_id = in_file_syntax.file_id; let syntax = in_file_syntax.value; -- cgit v1.2.3 From 1c009c9f1243d81c5caee082ce638d60c955a1bb Mon Sep 17 00:00:00 2001 From: Nick Spain Date: Fri, 1 Jan 2021 15:41:41 +1100 Subject: Go back to use of source_old() in offset_target_and_file_id as it's not as simple as I thought --- crates/assists/src/handlers/fix_visibility.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'crates/assists') diff --git a/crates/assists/src/handlers/fix_visibility.rs b/crates/assists/src/handlers/fix_visibility.rs index aa6aed9c2..f5cd5f9da 100644 --- a/crates/assists/src/handlers/fix_visibility.rs +++ b/crates/assists/src/handlers/fix_visibility.rs @@ -151,7 +151,8 @@ fn target_data_for_def( S: HasSource, Ast: AstNode + ast::VisibilityOwner, { - let source = x.source(db)?; + #[allow(deprecated)] + let source = x.source_old(db); let in_file_syntax = source.syntax(); let file_id = in_file_syntax.file_id; let syntax = in_file_syntax.value; -- cgit v1.2.3 From 0a9b73524059cf29a19f9333c7753c11e268ef51 Mon Sep 17 00:00:00 2001 From: Nick Spain Date: Fri, 1 Jan 2021 16:49:44 +1100 Subject: Handle missing source in filter_assoc_items --- crates/assists/src/utils.rs | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'crates/assists') diff --git a/crates/assists/src/utils.rs b/crates/assists/src/utils.rs index d15e5a24b..7c159b5ba 100644 --- a/crates/assists/src/utils.rs +++ b/crates/assists/src/utils.rs @@ -98,13 +98,14 @@ pub fn filter_assoc_items( items .iter() - .map(|i| { - #[allow(deprecated)] - match i { - hir::AssocItem::Function(i) => ast::AssocItem::Fn(i.source_old(db).value), - hir::AssocItem::TypeAlias(i) => ast::AssocItem::TypeAlias(i.source_old(db).value), - hir::AssocItem::Const(i) => ast::AssocItem::Const(i.source_old(db).value), - } + // Note: This throws away items with no source. + .filter_map(|i| { + let item = match i { + hir::AssocItem::Function(i) => ast::AssocItem::Fn(i.source(db)?.value), + hir::AssocItem::TypeAlias(i) => ast::AssocItem::TypeAlias(i.source(db)?.value), + hir::AssocItem::Const(i) => ast::AssocItem::Const(i.source(db)?.value), + }; + Some(item) }) .filter(has_def_name) .filter(|it| match it { -- cgit v1.2.3 From 6800c606ec7be5f19c1728a246eb2e2ffa4110f6 Mon Sep 17 00:00:00 2001 From: Nick Spain Date: Fri, 1 Jan 2021 16:52:59 +1100 Subject: Handle missing source in target_data_for_def --- crates/assists/src/handlers/fix_visibility.rs | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) (limited to 'crates/assists') diff --git a/crates/assists/src/handlers/fix_visibility.rs b/crates/assists/src/handlers/fix_visibility.rs index f5cd5f9da..de1e8f0bf 100644 --- a/crates/assists/src/handlers/fix_visibility.rs +++ b/crates/assists/src/handlers/fix_visibility.rs @@ -146,54 +146,53 @@ fn target_data_for_def( fn offset_target_and_file_id( db: &dyn HirDatabase, x: S, - ) -> (TextSize, Option, TextRange, FileId) + ) -> Option<(TextSize, Option, TextRange, FileId)> where S: HasSource, Ast: AstNode + ast::VisibilityOwner, { - #[allow(deprecated)] - let source = x.source_old(db); + let source = x.source(db)?; let in_file_syntax = source.syntax(); let file_id = in_file_syntax.file_id; let syntax = in_file_syntax.value; let current_visibility = source.value.visibility(); - ( + Some(( vis_offset(syntax), current_visibility, syntax.text_range(), file_id.original_file(db.upcast()), - ) + )) } let target_name; let (offset, current_visibility, target, target_file) = match def { hir::ModuleDef::Function(f) => { target_name = Some(f.name(db)); - offset_target_and_file_id(db, f) + offset_target_and_file_id(db, f)? } hir::ModuleDef::Adt(adt) => { target_name = Some(adt.name(db)); match adt { - hir::Adt::Struct(s) => offset_target_and_file_id(db, s), - hir::Adt::Union(u) => offset_target_and_file_id(db, u), - hir::Adt::Enum(e) => offset_target_and_file_id(db, e), + hir::Adt::Struct(s) => offset_target_and_file_id(db, s)?, + hir::Adt::Union(u) => offset_target_and_file_id(db, u)?, + hir::Adt::Enum(e) => offset_target_and_file_id(db, e)?, } } hir::ModuleDef::Const(c) => { target_name = c.name(db); - offset_target_and_file_id(db, c) + offset_target_and_file_id(db, c)? } hir::ModuleDef::Static(s) => { target_name = s.name(db); - offset_target_and_file_id(db, s) + offset_target_and_file_id(db, s)? } hir::ModuleDef::Trait(t) => { target_name = Some(t.name(db)); - offset_target_and_file_id(db, t) + offset_target_and_file_id(db, t)? } hir::ModuleDef::TypeAlias(t) => { target_name = Some(t.name(db)); - offset_target_and_file_id(db, t) + offset_target_and_file_id(db, t)? } hir::ModuleDef::Module(m) => { target_name = m.name(db); -- cgit v1.2.3