@@ -279,9 +279,9 @@ namespace ts.server {
279279 // REVIEW: can optimize by coalescing simple edits
280280 edit ( pos : number , deleteLen : number , insertedText ?: string ) {
281281 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 ) {
285285 this . getSnapshot ( ) ;
286286 }
287287 }
@@ -471,12 +471,9 @@ namespace ts.server {
471471 return ! walkFns . done ;
472472 }
473473
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 {
478475 if ( this . root . charCount ( ) === 0 ) {
479- // TODO: assert deleteLength === 0
476+ Debug . assert ( deleteLength === 0 ) ; // Can't delete from empty document
480477 if ( newText !== undefined ) {
481478 this . load ( LineIndex . linesFromText ( newText ) . lines ) ;
482479 return this ;
@@ -485,7 +482,8 @@ namespace ts.server {
485482 else {
486483 let checkText : string ;
487484 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 ) ;
489487 }
490488 const walker = new EditWalker ( ) ;
491489 let suppressTrailingText = false ;
@@ -513,14 +511,15 @@ namespace ts.server {
513511 newText = newText ? newText + lineText : lineText ;
514512 }
515513 }
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+
520518 if ( this . checkEdits ) {
521- const updatedText = this . getText ( 0 , this . root . charCount ( ) ) ;
519+ const updatedText = walker . lineIndex . getText ( 0 , walker . lineIndex . getLength ( ) ) ;
522520 Debug . assert ( checkText === updatedText , "buffer edit mismatch" ) ;
523521 }
522+
524523 return walker . lineIndex ;
525524 }
526525 }
0 commit comments