mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-25 20:43:21 +00:00
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:
parent
8be2be8c79
commit
1c866573cb
2 changed files with 27 additions and 4 deletions
|
@ -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)
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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(
|
||||||
|
|
Loading…
Reference in a new issue