From 7de2a30f4080d0e6d8790882238bed1cb6ccbc21 Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Thu, 3 Sep 2020 16:23:33 +0200 Subject: Fix import insertion breaking nested modules --- .../src/handlers/replace_qualified_name_with_use.rs | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'crates/assists/src/handlers/replace_qualified_name_with_use.rs') diff --git a/crates/assists/src/handlers/replace_qualified_name_with_use.rs b/crates/assists/src/handlers/replace_qualified_name_with_use.rs index 597bc268c..85c70d16b 100644 --- a/crates/assists/src/handlers/replace_qualified_name_with_use.rs +++ b/crates/assists/src/handlers/replace_qualified_name_with_use.rs @@ -2,7 +2,7 @@ use syntax::{algo::SyntaxRewriter, ast, match_ast, AstNode, SyntaxNode, TextRang use test_utils::mark; use crate::{ - utils::{find_insert_use_container, insert_use, MergeBehaviour}, + utils::{insert_use, ImportScope, MergeBehaviour}, AssistContext, AssistId, AssistKind, Assists, }; use ast::make; @@ -44,8 +44,8 @@ pub(crate) fn replace_qualified_name_with_use( }; let target = path.syntax().text_range(); - let container = find_insert_use_container(path.syntax(), ctx)?; - let syntax = container.either(|l| l.syntax().clone(), |r| r.syntax().clone()); + let scope = ImportScope::find_insert_use_container(path.syntax(), ctx)?; + let syntax = scope.as_syntax_node(); acc.add( AssistId("replace_qualified_name_with_use", AssistKind::RefactorRewrite), "Replace qualified path with use", @@ -56,12 +56,14 @@ pub(crate) fn replace_qualified_name_with_use( let mut rewriter = SyntaxRewriter::default(); shorten_paths(&mut rewriter, syntax.clone(), path); let rewritten_syntax = rewriter.rewrite(&syntax); - let new_syntax = insert_use( - &rewritten_syntax, - make::path_from_text(path_to_import), - Some(MergeBehaviour::Full), - ); - builder.replace(syntax.text_range(), new_syntax.to_string()) + if let Some(ref import_scope) = ImportScope::from(rewritten_syntax) { + let new_syntax = insert_use( + import_scope, + make::path_from_text(path_to_import), + Some(MergeBehaviour::Full), + ); + builder.replace(syntax.text_range(), new_syntax.to_string()) + } }, ) } -- cgit v1.2.3