From fcce3df093d0141c677608a74c25ea0d413c5050 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Thu, 19 May 2022 13:56:14 +0200 Subject: [PATCH] Simplify `only_in_mode` to `only_in_markup` --- src/parse/incremental.rs | 11 +++---- src/syntax/mod.rs | 64 ++++++++++++++-------------------------- 2 files changed, 26 insertions(+), 49 deletions(-) diff --git a/src/parse/incremental.rs b/src/parse/incremental.rs index 38938c4b9..26f97c521 100644 --- a/src/parse/incremental.rs +++ b/src/parse/incremental.rs @@ -4,8 +4,7 @@ use std::sync::Arc; use crate::syntax::{Green, GreenNode, NodeKind}; use super::{ - is_newline, parse, reparse_code_block, reparse_content_block, - reparse_markup_elements, TokenMode, + is_newline, parse, reparse_code_block, reparse_content_block, reparse_markup_elements, }; /// Refresh the given green node with as little parsing as possible. @@ -49,7 +48,7 @@ impl Reparser<'_> { mut offset: usize, outermost: bool, ) -> Option> { - let child_mode = green.kind().only_in_mode().unwrap_or(TokenMode::Code); + let is_markup = matches!(green.kind(), NodeKind::Markup(_)); let original_count = green.children().len(); let original_offset = offset; @@ -75,9 +74,7 @@ impl Reparser<'_> { { // In Markup mode, we want to consider a non-whitespace // neighbor if the edit is on the node boundary. - search = if child_span.end == self.replaced.end - && child_mode == TokenMode::Markup - { + search = if is_markup && child_span.end == self.replaced.end { SearchState::RequireNonTrivia(pos) } else { SearchState::Contained(pos) @@ -180,7 +177,7 @@ impl Reparser<'_> { if start.offset == self.replaced.start || ahead_kind.only_at_start() - || ahead_kind.only_in_mode() != Some(TokenMode::Markup) + || !ahead_kind.only_in_markup() { start = ahead; at_start = ahead_at_start; diff --git a/src/syntax/mod.rs b/src/syntax/mod.rs index 29e2718b4..69bcb0a0d 100644 --- a/src/syntax/mod.rs +++ b/src/syntax/mod.rs @@ -14,7 +14,6 @@ pub use span::*; use self::ast::{MathNode, RawNode, TypedNode, Unit}; use crate::diag::Error; -use crate::parse::TokenMode; use crate::source::SourceId; use crate::util::EcoString; @@ -809,47 +808,28 @@ impl NodeKind { } } - /// Which mode this node can appear in, in both if `None`. - pub fn only_in_mode(&self) -> Option { - match self { - Self::Markup(_) - | Self::Linebreak { .. } - | Self::Text(_) - | Self::NonBreakingSpace - | Self::EnDash - | Self::EmDash - | Self::Ellipsis - | Self::Quote { .. } - | Self::Escape(_) - | Self::Strong - | Self::Emph - | Self::Heading - | Self::Enum - | Self::EnumNumbering(_) - | Self::List - | Self::Raw(_) - | Self::Math(_) => Some(TokenMode::Markup), - Self::ContentBlock - | Self::Space(_) - | Self::Ident(_) - | Self::CodeBlock - | Self::LetExpr - | Self::SetExpr - | Self::ShowExpr - | Self::WrapExpr - | Self::IfExpr - | Self::WhileExpr - | Self::ForExpr - | Self::ImportExpr - | Self::FuncCall - | Self::IncludeExpr - | Self::LineComment - | Self::BlockComment - | Self::Error(_, _) - | Self::Minus - | Self::Eq => None, - _ => Some(TokenMode::Code), - } + /// Whether this is a node that only appears in markup. + pub fn only_in_markup(&self) -> bool { + matches!( + self, + Self::Text(_) + | Self::Linebreak { .. } + | Self::NonBreakingSpace + | Self::Shy + | Self::EnDash + | Self::EmDash + | Self::Ellipsis + | Self::Quote { .. } + | Self::Escape(_) + | Self::Strong + | Self::Emph + | Self::Raw(_) + | Self::Math(_) + | Self::Heading + | Self::List + | Self::Enum + | Self::EnumNumbering(_) + ) } /// A human-readable name for the kind.