@@ -166,11 +166,11 @@ function cutTree(lang: StreamLanguage<unknown>, tree: Tree, from: number, to: nu
166166}
167167
168168function 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