diff options
| author | Laurenz <laurmaedje@gmail.com> | 2020-09-03 19:16:19 +0200 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2020-09-03 19:16:19 +0200 |
| commit | 7f8f225cb3cb44367d731c544f7ce1eebdb97dd5 (patch) | |
| tree | eb0084ea898a6e2e7c9034778654b02944048cbb /src/syntax/tree.rs | |
| parent | 7f575dc09870848a1a4e5ba1f17a47cf83b60046 (diff) | |
Split up parser into multiple files 🧱
Splits up into:
- escaping: resolving of escape sequences
- parser: the parsing code
- tests: all integrated parsing tests
Also moves Ident from the root syntax module into the tree module.
Diffstat (limited to 'src/syntax/tree.rs')
| -rw-r--r-- | src/syntax/tree.rs | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/src/syntax/tree.rs b/src/syntax/tree.rs index 94dfc124..715db109 100644 --- a/src/syntax/tree.rs +++ b/src/syntax/tree.rs @@ -4,7 +4,7 @@ use std::fmt::{self, Debug, Formatter}; use super::decoration::Decoration; use super::span::{SpanVec, Spanned}; -use super::Ident; +use super::tokens::is_identifier; use crate::color::RgbaColor; use crate::compute::table::{SpannedEntry, Table}; use crate::compute::value::{TableValue, Value}; @@ -157,6 +157,32 @@ impl Debug for Expr { } } +/// An identifier as defined by unicode with a few extra permissible characters. +#[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Hash)] +pub struct Ident(pub String); + +impl Ident { + /// Create a new identifier from a string checking that it is a valid. + pub fn new(ident: impl AsRef<str> + Into<String>) -> Option<Self> { + if is_identifier(ident.as_ref()) { + Some(Self(ident.into())) + } else { + None + } + } + + /// Return a reference to the underlying string. + pub fn as_str(&self) -> &str { + self.0.as_str() + } +} + +impl Debug for Ident { + fn fmt(&self, f: &mut Formatter) -> fmt::Result { + write!(f, "`{}`", self.0) + } +} + /// A table of expressions. /// /// # Example |
