]> git.lizzy.rs Git - rust.git/commitdiff
Hide implementation details of TokenText
authorDawer <7803845+iDawer@users.noreply.github.com>
Thu, 6 May 2021 05:07:06 +0000 (10:07 +0500)
committerDawer <7803845+iDawer@users.noreply.github.com>
Thu, 6 May 2021 05:07:06 +0000 (10:07 +0500)
crates/syntax/src/ast/node_ext.rs
crates/syntax/src/token_text.rs

index 88f9a0e978fe4f9f3cb91808de832bea5c0d0cb6..bef49238f578374cafcc43e5a3150858ce60c64c 100644 (file)
@@ -40,8 +40,8 @@ fn first_token(green_ref: &GreenNodeData) -> &GreenTokenData {
     }
 
     match node.green() {
-        Cow::Borrowed(green_ref) => TokenText::Borrowed(first_token(green_ref).text()),
-        Cow::Owned(green) => TokenText::Owned(first_token(&green).to_owned()),
+        Cow::Borrowed(green_ref) => TokenText::borrowed(first_token(green_ref).text()),
+        Cow::Owned(green) => TokenText::owned(first_token(&green).to_owned()),
     }
 }
 
index e29f4eea40253b221463575af86615a4d6b36416..f3e8b321a7ee8d57dce92bfe8e4dabdd569b261f 100644 (file)
@@ -2,16 +2,28 @@
 
 use std::{cmp::Ordering, fmt, ops};
 
-pub enum TokenText<'a> {
+use rowan::GreenToken;
+
+pub struct TokenText<'a>(pub(crate) Repr<'a>);
+
+pub(crate) enum Repr<'a> {
     Borrowed(&'a str),
-    Owned(rowan::GreenToken),
+    Owned(GreenToken),
 }
 
-impl TokenText<'_> {
+impl<'a> TokenText<'a> {
+    pub(crate) fn borrowed(text: &'a str) -> Self {
+        TokenText(Repr::Borrowed(text))
+    }
+
+    pub(crate) fn owned(green: GreenToken) -> Self {
+        TokenText(Repr::Owned(green))
+    }
+
     pub fn as_str(&self) -> &str {
-        match self {
-            TokenText::Borrowed(it) => *it,
-            TokenText::Owned(green) => green.text(),
+        match self.0 {
+            Repr::Borrowed(it) => it,
+            Repr::Owned(ref green) => green.text(),
         }
     }
 }