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.
This commit is contained in:
Wesley Norris 2022-01-17 17:06:10 -05:00
parent 8be2be8c79
commit 1c866573cb
2 changed files with 27 additions and 4 deletions

View file

@ -401,7 +401,7 @@ fn insert_use_(
.children_with_tokens() .children_with_tokens()
.filter(|child| match child { .filter(|child| match child {
NodeOrToken::Node(node) => is_inner_attribute(node.clone()), NodeOrToken::Node(node) => is_inner_attribute(node.clone()),
NodeOrToken::Token(token) => is_inner_comment(token.clone()), NodeOrToken::Token(token) => is_comment(token.clone()),
}) })
.last() .last()
{ {
@ -440,7 +440,6 @@ fn is_inner_attribute(node: SyntaxNode) -> bool {
ast::Attr::cast(node).map(|attr| attr.kind()) == Some(ast::AttrKind::Inner) ast::Attr::cast(node).map(|attr| attr.kind()) == Some(ast::AttrKind::Inner)
} }
fn is_inner_comment(token: SyntaxToken) -> bool { fn is_comment(token: SyntaxToken) -> bool {
ast::Comment::cast(token).and_then(|comment| comment.kind().doc) ast::Comment::cast(token).is_some()
== Some(ast::CommentPlacement::Inner)
} }

View file

@ -390,6 +390,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] #[test]
fn inserts_after_multiline_inner_comments() { fn inserts_after_multiline_inner_comments() {
check_none( check_none(