itroduce trait for ast tokens
This commit is contained in:
parent
3f4be81912
commit
fa6e0b0d38
@ -115,7 +115,7 @@ pub(crate) fn parent_module(
|
||||
let name = ast_module.name().unwrap();
|
||||
Ok(vec![NavigationTarget {
|
||||
file_id,
|
||||
name: name.text(),
|
||||
name: name.text().clone(),
|
||||
range: name.syntax().range(),
|
||||
kind: MODULE,
|
||||
ptr: None,
|
||||
|
@ -205,7 +205,7 @@ pub(crate) struct FileSymbol {
|
||||
|
||||
fn to_symbol(node: &SyntaxNode) -> Option<(SmolStr, LocalSyntaxPtr)> {
|
||||
fn decl<N: NameOwner>(node: &N) -> Option<(SmolStr, LocalSyntaxPtr)> {
|
||||
let name = node.name()?.text();
|
||||
let name = node.name()?.text().clone();
|
||||
let ptr = LocalSyntaxPtr::new(node.syntax());
|
||||
Some((name, ptr))
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
use join_to_string::join;
|
||||
use ra_syntax::{
|
||||
ast::{self, AstNode, NameOwner, TypeParamsOwner},
|
||||
ast::{self, AstNode, AstToken, NameOwner, TypeParamsOwner},
|
||||
TextUnit,
|
||||
};
|
||||
|
||||
|
@ -76,13 +76,13 @@ pub(crate) trait AsName {
|
||||
|
||||
impl AsName for ast::NameRef {
|
||||
fn as_name(&self) -> Name {
|
||||
Name::new(self.text())
|
||||
Name::new(self.text().clone())
|
||||
}
|
||||
}
|
||||
|
||||
impl AsName for ast::Name {
|
||||
fn as_name(&self) -> Name {
|
||||
Name::new(self.text())
|
||||
Name::new(self.text().clone())
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -177,7 +177,7 @@ pub fn macro_symbols(
|
||||
if let Some(name) = trait_def.name() {
|
||||
let dst_range = name.syntax().range();
|
||||
if let Some(src_range) = exp.map_range_back(dst_range) {
|
||||
res.push((name.text(), src_range + off))
|
||||
res.push((name.text().clone(), src_range + off))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -23,6 +23,12 @@ fn cast(syntax: &SyntaxNode) -> Option<&Self>
|
||||
fn to_owned(&self) -> TreePtr<Self>;
|
||||
}
|
||||
|
||||
pub trait AstToken: AstNode {
|
||||
fn text(&self) -> &SmolStr {
|
||||
self.syntax().leaf_text().unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
pub trait NameOwner: AstNode {
|
||||
fn name(&self) -> Option<&Name> {
|
||||
child_opt(self)
|
||||
@ -155,41 +161,7 @@ pub fn as_call(&self) -> Option<(SmolStr, &TokenTree)> {
|
||||
}
|
||||
}
|
||||
|
||||
impl Lifetime {
|
||||
pub fn text(&self) -> SmolStr {
|
||||
self.syntax().leaf_text().unwrap().clone()
|
||||
}
|
||||
}
|
||||
|
||||
impl Char {
|
||||
pub fn text(&self) -> &SmolStr {
|
||||
&self.syntax().leaf_text().unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
impl Byte {
|
||||
pub fn text(&self) -> &SmolStr {
|
||||
&self.syntax().leaf_text().unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
impl ByteString {
|
||||
pub fn text(&self) -> &SmolStr {
|
||||
&self.syntax().leaf_text().unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
impl String {
|
||||
pub fn text(&self) -> &SmolStr {
|
||||
&self.syntax().leaf_text().unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
impl Comment {
|
||||
pub fn text(&self) -> &SmolStr {
|
||||
self.syntax().leaf_text().unwrap()
|
||||
}
|
||||
|
||||
pub fn flavor(&self) -> CommentFlavor {
|
||||
let text = self.text();
|
||||
if text.starts_with("///") {
|
||||
@ -248,10 +220,6 @@ pub fn is_doc_comment(&self) -> bool {
|
||||
}
|
||||
|
||||
impl Whitespace {
|
||||
pub fn text(&self) -> &SmolStr {
|
||||
&self.syntax().leaf_text().unwrap()
|
||||
}
|
||||
|
||||
pub fn count_newlines_lazy(&self) -> impl Iterator<Item = &()> {
|
||||
self.text().chars().filter(|&c| c == '\n').map(|_| &())
|
||||
}
|
||||
@ -262,16 +230,16 @@ pub fn has_newlines(&self) -> bool {
|
||||
}
|
||||
|
||||
impl Name {
|
||||
pub fn text(&self) -> SmolStr {
|
||||
pub fn text(&self) -> &SmolStr {
|
||||
let ident = self.syntax().first_child().unwrap();
|
||||
ident.leaf_text().unwrap().clone()
|
||||
ident.leaf_text().unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
impl NameRef {
|
||||
pub fn text(&self) -> SmolStr {
|
||||
pub fn text(&self) -> &SmolStr {
|
||||
let ident = self.syntax().first_child().unwrap();
|
||||
ident.leaf_text().unwrap().clone()
|
||||
ident.leaf_text().unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -288,6 +288,7 @@ fn to_owned(&self) -> TreePtr<Byte> { TreePtr::cast(self.syntax.to_owned()) }
|
||||
}
|
||||
|
||||
|
||||
impl ast::AstToken for Byte {}
|
||||
impl Byte {}
|
||||
|
||||
// ByteString
|
||||
@ -312,6 +313,7 @@ fn to_owned(&self) -> TreePtr<ByteString> { TreePtr::cast(self.syntax.to_owned()
|
||||
}
|
||||
|
||||
|
||||
impl ast::AstToken for ByteString {}
|
||||
impl ByteString {}
|
||||
|
||||
// CallExpr
|
||||
@ -397,6 +399,7 @@ fn to_owned(&self) -> TreePtr<Char> { TreePtr::cast(self.syntax.to_owned()) }
|
||||
}
|
||||
|
||||
|
||||
impl ast::AstToken for Char {}
|
||||
impl Char {}
|
||||
|
||||
// Comment
|
||||
@ -421,6 +424,7 @@ fn to_owned(&self) -> TreePtr<Comment> { TreePtr::cast(self.syntax.to_owned()) }
|
||||
}
|
||||
|
||||
|
||||
impl ast::AstToken for Comment {}
|
||||
impl Comment {}
|
||||
|
||||
// Condition
|
||||
@ -1270,6 +1274,7 @@ fn to_owned(&self) -> TreePtr<Lifetime> { TreePtr::cast(self.syntax.to_owned())
|
||||
}
|
||||
|
||||
|
||||
impl ast::AstToken for Lifetime {}
|
||||
impl Lifetime {}
|
||||
|
||||
// LifetimeParam
|
||||
@ -2766,6 +2771,7 @@ fn to_owned(&self) -> TreePtr<String> { TreePtr::cast(self.syntax.to_owned()) }
|
||||
}
|
||||
|
||||
|
||||
impl ast::AstToken for String {}
|
||||
impl String {}
|
||||
|
||||
// StructDef
|
||||
@ -3391,5 +3397,6 @@ fn to_owned(&self) -> TreePtr<Whitespace> { TreePtr::cast(self.syntax.to_owned()
|
||||
}
|
||||
|
||||
|
||||
impl ast::AstToken for Whitespace {}
|
||||
impl Whitespace {}
|
||||
|
||||
|
@ -424,10 +424,10 @@ Grammar(
|
||||
"PrefixExpr": (options: ["Expr"]),
|
||||
"RangeExpr": (),
|
||||
"BinExpr": (),
|
||||
"String": (),
|
||||
"Byte": (),
|
||||
"ByteString": (),
|
||||
"Char": (),
|
||||
"String": ( traits: ["AstToken"] ),
|
||||
"Byte": ( traits: ["AstToken"] ),
|
||||
"ByteString": ( traits: ["AstToken"] ),
|
||||
"Char": ( traits: ["AstToken"] ),
|
||||
"Literal": (),
|
||||
|
||||
"Expr": (
|
||||
@ -505,7 +505,7 @@ Grammar(
|
||||
),
|
||||
"TypeParam": ( traits: ["NameOwner"] ),
|
||||
"LifetimeParam": ( options: [ "Lifetime" ] ),
|
||||
"Lifetime": (),
|
||||
"Lifetime": ( traits: ["AstToken"] ),
|
||||
"WhereClause": (),
|
||||
"ExprStmt": (
|
||||
options: [ ["expr", "Expr"] ]
|
||||
@ -562,7 +562,7 @@ Grammar(
|
||||
"PathSegment": (
|
||||
options: [ "NameRef" ]
|
||||
),
|
||||
"Comment": (),
|
||||
"Whitespace": (),
|
||||
"Comment": ( traits: ["AstToken"] ),
|
||||
"Whitespace": ( traits: ["AstToken"] ),
|
||||
},
|
||||
)
|
||||
|
@ -1,7 +1,7 @@
|
||||
//! Validation of byte literals
|
||||
|
||||
use crate::{
|
||||
ast::{self, AstNode},
|
||||
ast::{self, AstNode, AstToken},
|
||||
string_lexing::{self, StringComponentKind},
|
||||
TextRange,
|
||||
validation::char,
|
||||
|
@ -1,5 +1,5 @@
|
||||
use crate::{
|
||||
ast::{self, AstNode},
|
||||
ast::{self, AstNode, AstToken},
|
||||
string_lexing::{self, StringComponentKind},
|
||||
yellow::{
|
||||
SyntaxError,
|
||||
|
@ -5,7 +5,7 @@
|
||||
use arrayvec::ArrayString;
|
||||
|
||||
use crate::{
|
||||
ast::{self, AstNode},
|
||||
ast::{self, AstNode, AstToken},
|
||||
string_lexing::{self, StringComponentKind},
|
||||
TextRange,
|
||||
yellow::{
|
||||
|
@ -1,5 +1,5 @@
|
||||
use crate::{
|
||||
ast::{self, AstNode},
|
||||
ast::{self, AstNode, AstToken},
|
||||
string_lexing,
|
||||
yellow::{
|
||||
SyntaxError,
|
||||
|
Loading…
Reference in New Issue
Block a user