let single = skip_trivia_token(node.value.first_token()?, Direction::Next)?
== skip_trivia_token(node.value.last_token()?, Direction::Prev)?;
- return Some(node.value.descendants().find_map(|it| {
+ Some(node.value.descendants().find_map(|it| {
let first = skip_trivia_token(it.first_token()?, Direction::Next)?;
let last = skip_trivia_token(it.last_token()?, Direction::Prev)?;
return None;
}
- // FIXME: Add union method in TextRange
Some((
- first.with_value(union_range(first.value.text_range(), last.value.text_range())),
+ first.with_value(first.value.text_range().extend_to(&last.value.text_range())),
first_origin,
))
- })?);
-
- fn union_range(a: TextRange, b: TextRange) -> TextRange {
- let start = a.start().min(b.start());
- let end = a.end().max(b.end());
- TextRange::from_to(start, end)
- }
+ })?)
}
.take_while(validate)
.last()?;
- let range = union_range(first.text_range(), last.text_range());
+ let range = first.text_range().extend_to(&last.text_range());
if original_range.is_subrange(&range) && original_range != range {
Some(range)
} else {
}
}
-fn union_range(range: TextRange, r: TextRange) -> TextRange {
- let start = range.start().min(r.start());
- let end = range.end().max(r.end());
- TextRange::from_to(start, end)
-}
-
/// Find the shallowest node with same range, which allows us to traverse siblings.
fn shallowest_node(node: &SyntaxNode) -> SyntaxNode {
node.ancestors().take_while(|n| n.text_range() == node.text_range()).last().unwrap()