From 3174e941dbb7d91bad011ba51a9b55736996b36c Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Tue, 8 Dec 2020 13:57:54 +0100 Subject: Simplify ast::Comment api surface --- crates/syntax/src/ast/token_ext.rs | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) (limited to 'crates/syntax/src/ast') diff --git a/crates/syntax/src/ast/token_ext.rs b/crates/syntax/src/ast/token_ext.rs index 6167d50e2..a10b14778 100644 --- a/crates/syntax/src/ast/token_ext.rs +++ b/crates/syntax/src/ast/token_ext.rs @@ -18,20 +18,21 @@ impl ast::Comment { } pub fn prefix(&self) -> &'static str { - let &(prefix, _kind) = CommentKind::with_prefix_from_text(self.text()); + let &(prefix, _kind) = CommentKind::BY_PREFIX + .iter() + .find(|&(prefix, kind)| self.kind() == *kind && self.text().starts_with(prefix)) + .unwrap(); prefix } - pub fn kind_and_prefix(&self) -> &(&'static str, CommentKind) { - CommentKind::with_prefix_from_text(self.text()) - } - /// Returns the textual content of a doc comment block as a single string. /// That is, strips leading `///` (+ optional 1 character of whitespace), /// trailing `*/`, trailing whitespace and then joins the lines. pub fn doc_comment(&self) -> Option<&str> { - match self.kind_and_prefix() { - (prefix, CommentKind { shape, doc: Some(_) }) => { + let kind = self.kind(); + match kind { + CommentKind { shape, doc: Some(_) } => { + let prefix = kind.prefix(); let text = &self.text().as_str()[prefix.len()..]; let ws = text.chars().next().filter(|c| c.is_whitespace()); let text = ws.map_or(text, |ws| &text[ws.len_utf8()..]); @@ -88,12 +89,16 @@ impl CommentKind { ]; pub(crate) fn from_text(text: &str) -> CommentKind { - let &(_prefix, kind) = Self::with_prefix_from_text(text); + let &(_prefix, kind) = CommentKind::BY_PREFIX + .iter() + .find(|&(prefix, _kind)| text.starts_with(prefix)) + .unwrap(); kind } - fn with_prefix_from_text(text: &str) -> &(&'static str, CommentKind) { - CommentKind::BY_PREFIX.iter().find(|&(prefix, _kind)| text.starts_with(prefix)).unwrap() + fn prefix(&self) -> &'static str { + let &(prefix, _) = CommentKind::BY_PREFIX.iter().find(|(_, kind)| kind == self).unwrap(); + prefix } } -- cgit v1.2.3