convenience api
This commit is contained in:
parent
a6df224f7d
commit
191a6ba330
8 changed files with 63 additions and 50 deletions
|
@ -299,7 +299,7 @@ mod tokens {
|
|||
.tree()
|
||||
.syntax()
|
||||
.descendants_with_tokens()
|
||||
.filter_map(|it| it.as_token().cloned())
|
||||
.filter_map(|it| it.into_token())
|
||||
.find(|it| it.kind() == T![,])
|
||||
.unwrap()
|
||||
}
|
||||
|
@ -309,7 +309,7 @@ mod tokens {
|
|||
.tree()
|
||||
.syntax()
|
||||
.descendants_with_tokens()
|
||||
.filter_map(|it| it.as_token().cloned())
|
||||
.filter_map(|it| it.into_token())
|
||||
.find(|it| it.kind() == WHITESPACE && it.text().as_str() == " ")
|
||||
.unwrap()
|
||||
}
|
||||
|
@ -320,7 +320,7 @@ mod tokens {
|
|||
.tree()
|
||||
.syntax()
|
||||
.descendants_with_tokens()
|
||||
.filter_map(|it| it.as_token().cloned())
|
||||
.filter_map(|it| it.into_token())
|
||||
.find(|it| it.kind() == WHITESPACE && it.text().as_str() == "\n")
|
||||
.unwrap()
|
||||
}
|
||||
|
@ -332,7 +332,7 @@ mod tokens {
|
|||
WsBuilder(SourceFile::parse(text).ok().unwrap())
|
||||
}
|
||||
pub(crate) fn ws(&self) -> SyntaxToken {
|
||||
self.0.syntax().first_child_or_token().unwrap().as_token().cloned().unwrap()
|
||||
self.0.syntax().first_child_or_token().unwrap().into_token().unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -156,7 +156,7 @@ fn extend_list_item(node: &SyntaxNode) -> Option<TextRange> {
|
|||
SyntaxElement::Token(it) => is_single_line_ws(it),
|
||||
})
|
||||
.next()
|
||||
.and_then(|it| it.as_token().cloned())
|
||||
.and_then(|it| it.into_token())
|
||||
.filter(|node| node.kind() == T![,])
|
||||
}
|
||||
|
||||
|
@ -167,7 +167,7 @@ fn extend_list_item(node: &SyntaxNode) -> Option<TextRange> {
|
|||
// Include any following whitespace when comma if after list item.
|
||||
let final_node = comma_node
|
||||
.next_sibling_or_token()
|
||||
.and_then(|it| it.as_token().cloned())
|
||||
.and_then(|it| it.into_token())
|
||||
.filter(|node| is_single_line_ws(node))
|
||||
.unwrap_or(comma_node);
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@ pub fn join_lines(file: &SourceFile, range: TextRange) -> TextEdit {
|
|||
SyntaxElement::Token(token) => token.parent(),
|
||||
};
|
||||
let mut edit = TextEditBuilder::default();
|
||||
for token in node.descendants_with_tokens().filter_map(|it| it.as_token().cloned()) {
|
||||
for token in node.descendants_with_tokens().filter_map(|it| it.into_token()) {
|
||||
let range = match range.intersection(&token.range()) {
|
||||
Some(range) => range,
|
||||
None => continue,
|
||||
|
|
|
@ -237,8 +237,7 @@ pub(crate) fn highlight_as_html(db: &RootDatabase, file_id: FileId, rainbow: boo
|
|||
let mut buf = String::new();
|
||||
buf.push_str(&STYLE);
|
||||
buf.push_str("<pre><code>");
|
||||
let tokens =
|
||||
parse.tree().syntax().descendants_with_tokens().filter_map(|it| it.as_token().cloned());
|
||||
let tokens = parse.tree().syntax().descendants_with_tokens().filter_map(|it| it.into_token());
|
||||
for token in tokens {
|
||||
could_intersect.retain(|it| token.range().start() <= it.range.end());
|
||||
while let Some(r) = ranges.get(frontier) {
|
||||
|
|
|
@ -60,7 +60,7 @@ impl ast::PrefixExpr {
|
|||
}
|
||||
|
||||
pub fn op_token(&self) -> Option<SyntaxToken> {
|
||||
self.syntax().first_child_or_token()?.as_token().cloned()
|
||||
self.syntax().first_child_or_token()?.into_token()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -132,8 +132,9 @@ pub enum BinOp {
|
|||
|
||||
impl ast::BinExpr {
|
||||
fn op_details(&self) -> Option<(SyntaxToken, BinOp)> {
|
||||
self.syntax().children_with_tokens().filter_map(|it| it.as_token().cloned()).find_map(|c| {
|
||||
match c.kind() {
|
||||
self.syntax().children_with_tokens().filter_map(|it| it.into_token()).find_map(|c| match c
|
||||
.kind()
|
||||
{
|
||||
T![||] => Some((c, BinOp::BooleanOr)),
|
||||
T![&&] => Some((c, BinOp::BooleanAnd)),
|
||||
T![==] => Some((c, BinOp::EqualityTest)),
|
||||
|
@ -166,7 +167,6 @@ impl ast::BinExpr {
|
|||
T![&=] => Some((c, BinOp::BitAndAssign)),
|
||||
T![^=] => Some((c, BinOp::BitXorAssign)),
|
||||
_ => None,
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
@ -239,7 +239,7 @@ impl ast::FnDef {
|
|||
pub fn semicolon_token(&self) -> Option<SyntaxToken> {
|
||||
self.syntax()
|
||||
.last_child_or_token()
|
||||
.and_then(|it| it.as_token().cloned())
|
||||
.and_then(|it| it.into_token())
|
||||
.filter(|it| it.kind() == T![;])
|
||||
}
|
||||
}
|
||||
|
@ -332,7 +332,7 @@ impl ast::SelfParam {
|
|||
pub fn self_kw_token(&self) -> SyntaxToken {
|
||||
self.syntax()
|
||||
.children_with_tokens()
|
||||
.filter_map(|it| it.as_token().cloned())
|
||||
.filter_map(|it| it.into_token())
|
||||
.find(|it| it.kind() == T![self])
|
||||
.expect("invalid tree: self param must have self")
|
||||
}
|
||||
|
@ -361,7 +361,7 @@ impl ast::LifetimeParam {
|
|||
pub fn lifetime_token(&self) -> Option<SyntaxToken> {
|
||||
self.syntax()
|
||||
.children_with_tokens()
|
||||
.filter_map(|it| it.as_token().cloned())
|
||||
.filter_map(|it| it.into_token())
|
||||
.find(|it| it.kind() == LIFETIME)
|
||||
}
|
||||
}
|
||||
|
@ -370,7 +370,7 @@ impl ast::WherePred {
|
|||
pub fn lifetime_token(&self) -> Option<SyntaxToken> {
|
||||
self.syntax()
|
||||
.children_with_tokens()
|
||||
.filter_map(|it| it.as_token().cloned())
|
||||
.filter_map(|it| it.into_token())
|
||||
.find(|it| it.kind() == LIFETIME)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -155,7 +155,7 @@ pub struct CommentIter {
|
|||
impl Iterator for CommentIter {
|
||||
type Item = ast::Comment;
|
||||
fn next(&mut self) -> Option<ast::Comment> {
|
||||
self.iter.by_ref().find_map(|el| el.as_token().cloned().and_then(ast::Comment::cast))
|
||||
self.iter.by_ref().find_map(|el| el.into_token().and_then(ast::Comment::cast))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -423,6 +423,13 @@ impl SyntaxElement {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn into_node(self) -> Option<SyntaxNode> {
|
||||
match self {
|
||||
SyntaxElement::Node(node) => Some(node),
|
||||
SyntaxElement::Token(_) => None,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn as_token(&self) -> Option<&SyntaxToken> {
|
||||
match self {
|
||||
SyntaxElement::Node(_) => None,
|
||||
|
@ -430,6 +437,13 @@ impl SyntaxElement {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn into_token(self) -> Option<SyntaxToken> {
|
||||
match self {
|
||||
SyntaxElement::Node(_) => None,
|
||||
SyntaxElement::Token(token) => Some(token),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn next_sibling_or_token(&self) -> Option<SyntaxElement> {
|
||||
match self {
|
||||
SyntaxElement::Node(it) => it.next_sibling_or_token(),
|
||||
|
|
Loading…
Add table
Reference in a new issue