Skip to content

Commit 96ca637

Browse files
committed
Avoid starting the parse at a bogus position when the input ranges change in StreamParser
FIX: Fix a crash in `StreamParser` when a parse was resumed with different input ranges. Closes codemirror/dev#1476
1 parent 017bb93 commit 96ca637

File tree

1 file changed

+3
-3
lines changed

1 file changed

+3
-3
lines changed

src/stream-parser.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -166,11 +166,11 @@ function cutTree(lang: StreamLanguage<unknown>, tree: Tree, from: number, to: nu
166166
}
167167

168168
function findStartInFragments<State>(lang: StreamLanguage<State>, fragments: readonly TreeFragment[],
169-
startPos: number, editorState?: EditorState) {
169+
startPos: number, endPos: number, editorState?: EditorState) {
170170
for (let f of fragments) {
171171
let from = f.from + (f.openStart ? 25 : 0), to = f.to - (f.openEnd ? 25 : 0)
172172
let found = from <= startPos && to > startPos && findState(lang, f.tree, 0 - f.offset, startPos, to), tree
173-
if (found && (tree = cutTree(lang, f.tree, startPos + f.offset, found.pos + f.offset, false)))
173+
if (found && found.pos <= endPos && (tree = cutTree(lang, f.tree, startPos + f.offset, found.pos + f.offset, false)))
174174
return {state: found.state, tree}
175175
}
176176
return {state: lang.streamParser.startState(editorState ? getIndentUnit(editorState) : 4), tree: Tree.empty}
@@ -201,7 +201,7 @@ class Parse<State> implements PartialParse {
201201
readonly ranges: readonly {from: number, to: number}[]) {
202202
this.to = ranges[ranges.length - 1].to
203203
let context = ParseContext.get(), from = ranges[0].from
204-
let {state, tree} = findStartInFragments(lang, fragments, from, context?.state)
204+
let {state, tree} = findStartInFragments(lang, fragments, from, ranges[ranges.length - 1].to, context?.state)
205205
this.state = state
206206
this.parsedPos = this.chunkStart = from + tree.length
207207
for (let i = 0; i < tree.children.length; i++) {

0 commit comments

Comments
 (0)