diff --git a/crates/ide/src/diagnostics.rs b/crates/ide/src/diagnostics.rs index 03827375033e..79d126ff2a5b 100644 --- a/crates/ide/src/diagnostics.rs +++ b/crates/ide/src/diagnostics.rs @@ -199,6 +199,12 @@ fn check_unnecessary_braces_in_use_statement( ) -> Option<()> { let use_tree_list = ast::UseTreeList::cast(node.clone())?; if let Some((single_use_tree,)) = use_tree_list.use_trees().collect_tuple() { + // If there is a comment inside the bracketed `use`, + // assume it is a commented out module path and don't show diagnostic. + if use_tree_list.has_inner_comment() { + return Some(()); + } + let use_range = use_tree_list.syntax().text_range(); let edit = text_edit_for_remove_unnecessary_braces_with_self_in_use_statement(&single_use_tree) @@ -630,6 +636,22 @@ pub struct Foo { pub a: i32, pub b: i32 } use a; use a::{c, d::e}; +mod a { + mod c {} + mod d { + mod e {} + } +} +"#, + ); + check_no_diagnostics( + r#" +use a; +use a::{ + c, + // d::e +}; + mod a { mod c {} mod d { diff --git a/crates/syntax/src/ast/node_ext.rs b/crates/syntax/src/ast/node_ext.rs index c45cb514a0f5..2aa472fb494a 100644 --- a/crates/syntax/src/ast/node_ext.rs +++ b/crates/syntax/src/ast/node_ext.rs @@ -193,6 +193,14 @@ impl ast::UseTreeList { .and_then(ast::UseTree::cast) .expect("UseTreeLists are always nested in UseTrees") } + + pub fn has_inner_comment(&self) -> bool { + self.syntax() + .children_with_tokens() + .filter_map(|it| it.into_token()) + .find_map(ast::Comment::cast) + .is_some() + } } impl ast::Impl {