From 0a156c80af8df24543323bdf47d75c5a339cfe48 Mon Sep 17 00:00:00 2001 From: Dawer <7803845+iDawer@users.noreply.github.com> Date: Thu, 6 May 2021 10:07:06 +0500 Subject: Hide implementation details of TokenText --- crates/syntax/src/ast/node_ext.rs | 4 ++-- crates/syntax/src/token_text.rs | 24 ++++++++++++++++++------ 2 files changed, 20 insertions(+), 8 deletions(-) (limited to 'crates/syntax') diff --git a/crates/syntax/src/ast/node_ext.rs b/crates/syntax/src/ast/node_ext.rs index 88f9a0e97..bef49238f 100644 --- a/crates/syntax/src/ast/node_ext.rs +++ b/crates/syntax/src/ast/node_ext.rs @@ -40,8 +40,8 @@ fn text_of_first_token(node: &SyntaxNode) -> TokenText<'_> { } 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()), } } diff --git a/crates/syntax/src/token_text.rs b/crates/syntax/src/token_text.rs index e29f4eea4..f3e8b321a 100644 --- a/crates/syntax/src/token_text.rs +++ b/crates/syntax/src/token_text.rs @@ -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(), } } } -- cgit v1.2.3