From a3622eb629bf7acea933d956f8cee902ae357fca Mon Sep 17 00:00:00 2001 From: robojumper Date: Fri, 8 Feb 2019 22:43:13 +0100 Subject: Add some assist ranges --- crates/ra_assists/src/change_visibility.rs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'crates/ra_assists/src/change_visibility.rs') diff --git a/crates/ra_assists/src/change_visibility.rs b/crates/ra_assists/src/change_visibility.rs index fa5f231c8..73dd8319f 100644 --- a/crates/ra_assists/src/change_visibility.rs +++ b/crates/ra_assists/src/change_visibility.rs @@ -20,7 +20,7 @@ fn add_vis(ctx: AssistCtx) -> Option { _ => false, }); - let offset = if let Some(keyword) = item_keyword { + let (offset, target) = if let Some(keyword) = item_keyword { let parent = keyword.parent()?; let def_kws = vec![FN_DEF, MODULE, STRUCT_DEF, ENUM_DEF, TRAIT_DEF]; // Parent is not a definition, can't add visibility @@ -31,17 +31,18 @@ fn add_vis(ctx: AssistCtx) -> Option { if parent.children().any(|child| child.kind() == VISIBILITY) { return None; } - vis_offset(parent) + (vis_offset(parent), parent.range()) } else { let ident = ctx.leaf_at_offset().find(|leaf| leaf.kind() == IDENT)?; let field = ident.ancestors().find_map(ast::NamedFieldDef::cast)?; if field.name()?.syntax().range() != ident.range() && field.visibility().is_some() { return None; } - vis_offset(field.syntax()) + (vis_offset(field.syntax()), field.syntax().range()) }; ctx.build("make pub(crate)", |edit| { + edit.target(target); edit.insert(offset, "pub(crate) "); edit.set_cursor(offset); }) @@ -60,13 +61,15 @@ fn vis_offset(node: &SyntaxNode) -> TextUnit { fn change_vis(ctx: AssistCtx, vis: &ast::Visibility) -> Option { if vis.syntax().text() == "pub" { - return ctx.build("chage to pub(crate)", |edit| { + return ctx.build("change to pub(crate)", |edit| { + edit.target(vis.syntax().range()); edit.replace(vis.syntax().range(), "pub(crate)"); edit.set_cursor(vis.syntax().range().start()); }); } if vis.syntax().text() == "pub(crate)" { - return ctx.build("chage to pub", |edit| { + return ctx.build("change to pub", |edit| { + edit.target(vis.syntax().range()); edit.replace(vis.syntax().range(), "pub"); edit.set_cursor(vis.syntax().range().start()); }); -- cgit v1.2.3