@@ -279,9 +279,9 @@ namespace ts.server {
279
279
// REVIEW: can optimize by coalescing simple edits
280
280
edit ( pos : number , deleteLen : number , insertedText ?: string ) {
281
281
this . changes . push ( new TextChange ( pos , deleteLen , insertedText ) ) ;
282
- if ( ( this . changes . length > ScriptVersionCache . changeNumberThreshold ) ||
283
- ( deleteLen > ScriptVersionCache . changeLengthThreshold ) ||
284
- ( insertedText && ( insertedText . length > ScriptVersionCache . changeLengthThreshold ) ) ) {
282
+ if ( this . changes . length > ScriptVersionCache . changeNumberThreshold ||
283
+ deleteLen > ScriptVersionCache . changeLengthThreshold ||
284
+ insertedText && insertedText . length > ScriptVersionCache . changeLengthThreshold ) {
285
285
this . getSnapshot ( ) ;
286
286
}
287
287
}
@@ -471,12 +471,9 @@ namespace ts.server {
471
471
return ! walkFns . done ;
472
472
}
473
473
474
- edit ( pos : number , deleteLength : number , newText ?: string ) {
475
- function editFlat ( source : string , s : number , dl : number , nt = "" ) {
476
- return source . substring ( 0 , s ) + nt + source . substring ( s + dl , source . length ) ;
477
- }
474
+ edit ( pos : number , deleteLength : number , newText ?: string ) : LineIndex {
478
475
if ( this . root . charCount ( ) === 0 ) {
479
- // TODO: assert deleteLength === 0
476
+ Debug . assert ( deleteLength === 0 ) ; // Can't delete from empty document
480
477
if ( newText !== undefined ) {
481
478
this . load ( LineIndex . linesFromText ( newText ) . lines ) ;
482
479
return this ;
@@ -485,7 +482,8 @@ namespace ts.server {
485
482
else {
486
483
let checkText : string ;
487
484
if ( this . checkEdits ) {
488
- checkText = editFlat ( this . getText ( 0 , this . root . charCount ( ) ) , pos , deleteLength , newText ) ;
485
+ const source = this . getText ( 0 , this . root . charCount ( ) ) ;
486
+ checkText = source . slice ( 0 , pos ) + newText + source . slice ( pos + deleteLength ) ;
489
487
}
490
488
const walker = new EditWalker ( ) ;
491
489
let suppressTrailingText = false ;
@@ -513,14 +511,15 @@ namespace ts.server {
513
511
newText = newText ? newText + lineText : lineText ;
514
512
}
515
513
}
516
- if ( pos < this . root . charCount ( ) ) {
517
- this . root . walk ( pos , deleteLength , walker ) ;
518
- walker . insertLines ( newText , suppressTrailingText ) ;
519
- }
514
+
515
+ this . root . walk ( pos , deleteLength , walker ) ;
516
+ walker . insertLines ( newText , suppressTrailingText ) ;
517
+
520
518
if ( this . checkEdits ) {
521
- const updatedText = this . getText ( 0 , this . root . charCount ( ) ) ;
519
+ const updatedText = walker . lineIndex . getText ( 0 , walker . lineIndex . getLength ( ) ) ;
522
520
Debug . assert ( checkText === updatedText , "buffer edit mismatch" ) ;
523
521
}
522
+
524
523
return walker . lineIndex ;
525
524
}
526
525
}
0 commit comments