Simplify only_in_mode to only_in_markup

This commit is contained in:
Laurenz 2022-05-19 13:56:14 +02:00
parent a5a6c2d83f
commit fcce3df093
2 changed files with 26 additions and 49 deletions

View File

@ -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<Range<usize>> {
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;

View File

@ -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<TokenMode> {
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.