{{ message }}
Repository navigation
Conversation
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Closes #1011
Summary
Replaces per-line full-history
reducescans and.slice().reverse().find(...)searches inparseCodeBlocks(packages/editor/packages/editor-core/packages/editor-state/src/features/code-blocks/features/blockHighlights/codeParser.ts) with incrementally maintained per-parse lookup state:openBlockCountdirectly (+1on block open,-1on closing match,0net change onelsetransition) instead of reducing over all previously discovered blocks on every source line.Map<string, CodeBlock[]>of open-block stacks keyed byendInstruction(openBlocksByEndInstruction) and a separateopenIfBlocksstack for openifblocks so closing instructions andelselocate their nearest open target inblocks.elseinstructions, innerif ... ifEndblocks nested inside an outerif ... else ... ifEnd, stray closers, and mismatched nesting (if ... loop ... ifEnd ... loopEnd).codeParser.test.tscovering innerifblocks closed before an outerelse, repeatedelseinstructions, and closing instructions matched behind differently typed open blocks.Benchmark Results
Measured$N$ sibling
parseCodeBlockson blocks containingmodule+if / else / loop / loopEnd / ifEndconstructs (median of 11 alternating samples after 4 warmups on Node v24.16.0):reduce+slice().reverse().find())Verification
biome checkoncodeParser.tsandcodeParser.test.tstsc --noEmiton@8f4e/editor-statevitest runoncodeParser.test.tsandupdateGraphicData.test.ts(15 passed)