File tree Expand file tree Collapse file tree 2 files changed +53
-2
lines changed
src/tools/rust-analyzer/crates Expand file tree Collapse file tree 2 files changed +53
-2
lines changed Original file line number Diff line number Diff line change @@ -776,6 +776,40 @@ mod z {
776776 ) ;
777777 }
778778
779+ #[ test]
780+ fn remove_unused_fixes_nested_self ( ) {
781+ check_assist (
782+ remove_unused_imports,
783+ r#"
784+ mod inner {
785+ pub struct X();
786+ pub struct Y();
787+ }
788+
789+ mod z {
790+ use super::inner::{self, X}$0;
791+
792+ fn f() {
793+ let y = inner::Y();
794+ }
795+ }
796+ "# ,
797+ r#"mod inner {
798+ pub struct X();
799+ pub struct Y();
800+ }
801+
802+ mod z {
803+ use super::inner::{self};
804+
805+ fn f() {
806+ let y = inner::Y();
807+ }
808+ }
809+ "# ,
810+ ) ;
811+ }
812+
779813 #[ test]
780814 fn dont_remove_used_glob ( ) {
781815 check_assist_not_applicable (
Original file line number Diff line number Diff line change @@ -378,9 +378,26 @@ impl ast::UseTreeList {
378378
379379 /// Remove the unnecessary braces in current `UseTreeList`
380380 pub fn remove_unnecessary_braces ( mut self ) {
381+ // Returns true iff there is a single subtree and it is not the self keyword. The braces in
382+ // `use x::{self};` are necessary and so we should not remove them.
383+ let has_single_subtree_that_is_not_self = |u : & ast:: UseTreeList | {
384+ if let Some ( ( single_subtree, ) ) = u. use_trees ( ) . collect_tuple ( ) {
385+ // We have a single subtree, check whether it is self.
386+
387+ let is_self = single_subtree. path ( ) . as_ref ( ) . map_or ( false , |path| {
388+ path. segment ( ) . and_then ( |seg| seg. self_token ( ) ) . is_some ( )
389+ && path. qualifier ( ) . is_none ( )
390+ } ) ;
391+
392+ !is_self
393+ } else {
394+ // Not a single subtree
395+ false
396+ }
397+ } ;
398+
381399 let remove_brace_in_use_tree_list = |u : & ast:: UseTreeList | {
382- let use_tree_count = u. use_trees ( ) . count ( ) ;
383- if use_tree_count == 1 {
400+ if has_single_subtree_that_is_not_self ( u) {
384401 if let Some ( a) = u. l_curly_token ( ) {
385402 ted:: remove ( a)
386403 }
You can’t perform that action at this time.
0 commit comments