Skip to content

Commit bc2dee7

Browse files
committed
feat: auto remove unnecessary braces after remove unused imports
1 parent 6557151 commit bc2dee7

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

crates/syntax/src/ast/edit_in_place.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -414,6 +414,7 @@ impl ast::UseTree {
414414
u.remove_recursive();
415415
}
416416
}
417+
u.remove_unnecessary_braces();
417418
}
418419
}
419420

crates/syntax/src/ast/node_ext.rs

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use rowan::{GreenNodeData, GreenTokenData};
1111

1212
use crate::{
1313
ast::{self, support, AstNode, AstToken, HasAttrs, HasGenericParams, HasName, SyntaxNode},
14-
NodeOrToken, SmolStr, SyntaxElement, SyntaxToken, TokenText, T,
14+
ted, NodeOrToken, SmolStr, SyntaxElement, SyntaxToken, TokenText, T,
1515
};
1616

1717
impl ast::Lifetime {
@@ -310,6 +310,10 @@ impl ast::UseTree {
310310
pub fn is_simple_path(&self) -> bool {
311311
self.use_tree_list().is_none() && self.star_token().is_none()
312312
}
313+
314+
pub fn parent_use_tree_list(&self) -> Option<ast::UseTreeList> {
315+
self.syntax().parent().and_then(ast::UseTreeList::cast)
316+
}
313317
}
314318

315319
impl ast::UseTreeList {
@@ -327,6 +331,27 @@ impl ast::UseTreeList {
327331
.find_map(ast::Comment::cast)
328332
.is_some()
329333
}
334+
335+
/// Remove the unnecessary braces in current `UseTreeList`
336+
pub fn remove_unnecessary_braces(mut self) {
337+
let remove_brace_in_use_tree_list = |u: &ast::UseTreeList| {
338+
let use_tree_count = u.use_trees().count();
339+
if use_tree_count == 1 {
340+
u.l_curly_token().map(ted::remove);
341+
u.r_curly_token().map(ted::remove);
342+
}
343+
};
344+
345+
// take `use crate::{{{{A}}}}` for example
346+
// the below remove the innermost {}, got `use crate::{{{A}}}`
347+
remove_brace_in_use_tree_list(&self);
348+
349+
// the below remove othe unnecessary {}, got `use crate::A`
350+
while let Some(parent_use_tree_list) = self.parent_use_tree().parent_use_tree_list() {
351+
remove_brace_in_use_tree_list(&parent_use_tree_list);
352+
self = parent_use_tree_list;
353+
}
354+
}
330355
}
331356

332357
impl ast::Impl {

0 commit comments

Comments
 (0)