Skip to content

Commit 07e633e

Browse files
Remove the fixme
1 parent 3481ea9 commit 07e633e

File tree

1 file changed

+15
-36
lines changed

1 file changed

+15
-36
lines changed

crates/assists/src/utils/insert_use.rs

Lines changed: 15 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -63,47 +63,26 @@ impl ImportScope {
6363
}
6464
}
6565

66-
fn insert_pos_after_inner_elements(&self) -> (InsertPosition<SyntaxElement>, AddBlankLine) {
67-
let mut last_inner_element = None;
68-
69-
for maybe_inner_element in self.as_syntax_node().children_with_tokens() {
70-
match maybe_inner_element {
71-
NodeOrToken::Node(maybe_inner_node) => {
72-
if is_inner_node(maybe_inner_node.clone()) {
73-
last_inner_element = Some(NodeOrToken::Node(maybe_inner_node))
74-
} else {
75-
// FIXME: https://doc.rust-lang.org/reference/comments.html#doc-comments
76-
// states that inner comments (`//!` and `/*!`) are equal to inner attribute `#![doc="..."]`
77-
// yet RA treats them differently now: inner attributes never belong to child nodes,
78-
// but inner comments can, ergo this check.
79-
// We need to align this and treat both cases the same way.
80-
if let Some(maybe_inner_token) = maybe_inner_node.first_token() {
81-
if is_inner_token(maybe_inner_token.clone()) {
82-
last_inner_element = Some(NodeOrToken::Token(maybe_inner_token))
83-
}
84-
}
85-
};
86-
}
87-
NodeOrToken::Token(maybe_inner_token) => {
88-
if is_inner_token(maybe_inner_token.clone()) {
89-
last_inner_element = Some(NodeOrToken::Token(maybe_inner_token))
90-
}
91-
}
92-
}
93-
}
94-
95-
match last_inner_element {
96-
Some(element) => (InsertPosition::After(element.into()), AddBlankLine::BeforeTwice),
97-
None => self.first_insert_pos(),
98-
}
66+
fn insert_pos_after_last_inner_element(&self) -> (InsertPosition<SyntaxElement>, AddBlankLine) {
67+
self.as_syntax_node()
68+
.children_with_tokens()
69+
.filter(|child| match child {
70+
NodeOrToken::Node(node) => is_inner_attribute(node.clone()),
71+
NodeOrToken::Token(token) => is_inner_comment(token.clone()),
72+
})
73+
.last()
74+
.map(|last_inner_element| {
75+
(InsertPosition::After(last_inner_element.into()), AddBlankLine::BeforeTwice)
76+
})
77+
.unwrap_or_else(|| self.first_insert_pos())
9978
}
10079
}
10180

102-
fn is_inner_node(node: SyntaxNode) -> bool {
81+
fn is_inner_attribute(node: SyntaxNode) -> bool {
10382
ast::Attr::cast(node).map(|attr| attr.kind()) == Some(ast::AttrKind::Inner)
10483
}
10584

106-
fn is_inner_token(token: SyntaxToken) -> bool {
85+
fn is_inner_comment(token: SyntaxToken) -> bool {
10786
ast::Comment::cast(token).and_then(|comment| comment.kind().doc)
10887
== Some(ast::CommentPlacement::Inner)
10988
}
@@ -582,7 +561,7 @@ fn find_insert_position(
582561
(InsertPosition::After(node.into()), AddBlankLine::BeforeTwice)
583562
}
584563
// there are no imports in this file at all
585-
None => scope.insert_pos_after_inner_elements(),
564+
None => scope.insert_pos_after_last_inner_element(),
586565
},
587566
}
588567
}

0 commit comments

Comments
 (0)