itroduce trait for ast tokens
This commit is contained in:
@@ -23,6 +23,12 @@ pub trait AstNode: rowan::TransparentNewType<Repr = rowan::SyntaxNode<RaTypes>>
|
||||
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 @@ impl Attr {
|
||||
}
|
||||
}
|
||||
|
||||
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 @@ impl CommentFlavor {
|
||||
}
|
||||
|
||||
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 @@ impl Whitespace {
|
||||
}
|
||||
|
||||
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 @@ impl AstNode for Byte {
|
||||
}
|
||||
|
||||
|
||||
impl ast::AstToken for Byte {}
|
||||
impl Byte {}
|
||||
|
||||
// ByteString
|
||||
@@ -312,6 +313,7 @@ impl AstNode for ByteString {
|
||||
}
|
||||
|
||||
|
||||
impl ast::AstToken for ByteString {}
|
||||
impl ByteString {}
|
||||
|
||||
// CallExpr
|
||||
@@ -397,6 +399,7 @@ impl AstNode for Char {
|
||||
}
|
||||
|
||||
|
||||
impl ast::AstToken for Char {}
|
||||
impl Char {}
|
||||
|
||||
// Comment
|
||||
@@ -421,6 +424,7 @@ impl AstNode for Comment {
|
||||
}
|
||||
|
||||
|
||||
impl ast::AstToken for Comment {}
|
||||
impl Comment {}
|
||||
|
||||
// Condition
|
||||
@@ -1270,6 +1274,7 @@ impl AstNode for Lifetime {
|
||||
}
|
||||
|
||||
|
||||
impl ast::AstToken for Lifetime {}
|
||||
impl Lifetime {}
|
||||
|
||||
// LifetimeParam
|
||||
@@ -2766,6 +2771,7 @@ impl AstNode for String {
|
||||
}
|
||||
|
||||
|
||||
impl ast::AstToken for String {}
|
||||
impl String {}
|
||||
|
||||
// StructDef
|
||||
@@ -3391,5 +3397,6 @@ impl AstNode for Whitespace {
|
||||
}
|
||||
|
||||
|
||||
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 std::u32;
|
||||
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,
|
||||
|
||||
Reference in New Issue
Block a user