about summary refs log tree commit diff
diff options
context:
space:
mode:
authorWesley Norris <repnop@outlook.com>2022-01-17 17:06:10 -0500
committerWesley Norris <repnop@outlook.com>2022-01-17 17:06:10 -0500
commit1c866573cb4f8ec4801cf58da86f298cad2906e6 (patch)
treea52465887f72a1e53adb6463e1ed633fe6a307aa
parent8be2be8c794192c32b1814d6a0be04c68af13855 (diff)
downloadrust-1c866573cb4f8ec4801cf58da86f298cad2906e6.tar.gz
rust-1c866573cb4f8ec4801cf58da86f298cad2906e6.zip
fix: insert auto-imports after header comments
Fixes #8607.

This commit changes the auto-import functionality and causes it to add
imports after any leading comments, which are commonly license headers.
This does not affect comments on items as they're considered part of the
item itself and not separate.
-rw-r--r--crates/ide_db/src/helpers/insert_use.rs7
-rw-r--r--crates/ide_db/src/helpers/insert_use/tests.rs24
2 files changed, 27 insertions, 4 deletions
diff --git a/crates/ide_db/src/helpers/insert_use.rs b/crates/ide_db/src/helpers/insert_use.rs
index 1f3e3c55bf3..d6f8cd0f4b7 100644
--- a/crates/ide_db/src/helpers/insert_use.rs
+++ b/crates/ide_db/src/helpers/insert_use.rs
@@ -401,7 +401,7 @@ fn insert_use_(
         .children_with_tokens()
         .filter(|child| match child {
             NodeOrToken::Node(node) => is_inner_attribute(node.clone()),
-            NodeOrToken::Token(token) => is_inner_comment(token.clone()),
+            NodeOrToken::Token(token) => is_comment(token.clone()),
         })
         .last()
     {
@@ -440,7 +440,6 @@ fn is_inner_attribute(node: SyntaxNode) -> bool {
     ast::Attr::cast(node).map(|attr| attr.kind()) == Some(ast::AttrKind::Inner)
 }
 
-fn is_inner_comment(token: SyntaxToken) -> bool {
-    ast::Comment::cast(token).and_then(|comment| comment.kind().doc)
-        == Some(ast::CommentPlacement::Inner)
+fn is_comment(token: SyntaxToken) -> bool {
+    ast::Comment::cast(token).is_some()
 }
diff --git a/crates/ide_db/src/helpers/insert_use/tests.rs b/crates/ide_db/src/helpers/insert_use/tests.rs
index a5763eb41cc..abd5e64c54f 100644
--- a/crates/ide_db/src/helpers/insert_use/tests.rs
+++ b/crates/ide_db/src/helpers/insert_use/tests.rs
@@ -391,6 +391,30 @@ use foo::bar::Baz;"#,
 }
 
 #[test]
+fn inserts_after_single_line_comments() {
+    check_none(
+        "foo::bar::Baz",
+        "// Represents a possible license header and/or general module comments",
+        r#"// Represents a possible license header and/or general module comments
+
+use foo::bar::Baz;"#,
+    );
+}
+
+#[test]
+fn inserts_before_single_line_item_comments() {
+    check_none(
+        "foo::bar::Baz",
+        r#"// Represents a comment about a function
+fn foo() {}"#,
+        r#"use foo::bar::Baz;
+
+// Represents a comment about a function
+fn foo() {}"#,
+    );
+}
+
+#[test]
 fn inserts_after_multiline_inner_comments() {
     check_none(
         "foo::bar::Baz",