@@ -1063,7 +1063,7 @@ module ts.server {
10631063 }
10641064 }
10651065
1066- class ScriptVersionCache {
1066+ export class ScriptVersionCache {
10671067 changes : TextChange [ ] = [ ] ;
10681068 versions : LineIndexSnapshot [ ] = [ ] ;
10691069 minVersion = 0 ; // no versions earlier than min version will maintain change history
@@ -1216,7 +1216,7 @@ module ts.server {
12161216 }
12171217 }
12181218
1219- class LineIndex {
1219+ export class LineIndex {
12201220 root : LineNode ;
12211221 // set this to true to check each edit for accuracy
12221222 checkEdits = false ;
@@ -1304,7 +1304,20 @@ module ts.server {
13041304 var checkText = editFlat ( this . getText ( 0 , this . root . charCount ( ) ) , pos , deleteLength , newText ) ;
13051305 }
13061306 var walker = new EditWalker ( ) ;
1307- if ( deleteLength > 0 ) {
1307+ if ( pos >= this . root . charCount ( ) ) {
1308+ // insert at end
1309+ pos = this . root . charCount ( ) - 1 ;
1310+ var endString = this . getText ( pos , 1 ) ;
1311+ if ( newText ) {
1312+ newText = endString + newText ;
1313+ }
1314+ else {
1315+ newText = endString ;
1316+ }
1317+ deleteLength = 0 ;
1318+ walker . suppressTrailingText = true ;
1319+ }
1320+ else if ( deleteLength > 0 ) {
13081321 // check whether last characters deleted are line break
13091322 var e = pos + deleteLength ;
13101323 var lineInfo = this . charOffsetToLineNumberAndPos ( e ) ;
@@ -1320,21 +1333,10 @@ module ts.server {
13201333 }
13211334 }
13221335 }
1323- else if ( pos >= this . root . charCount ( ) ) {
1324- // insert at end
1325- pos = this . root . charCount ( ) - 1 ;
1326- var endString = this . getText ( pos , 1 ) ;
1327- if ( newText ) {
1328- newText = endString + newText ;
1329- }
1330- else {
1331- newText = endString ;
1332- }
1333- deleteLength = 0 ;
1334- walker . suppressTrailingText = true ;
1336+ if ( pos < this . root . charCount ( ) ) {
1337+ this . root . walk ( pos , deleteLength , walker ) ;
1338+ walker . insertLines ( newText ) ;
13351339 }
1336- this . root . walk ( pos , deleteLength , walker ) ;
1337- walker . insertLines ( newText ) ;
13381340 if ( this . checkEdits ) {
13391341 var updatedText = this . getText ( 0 , this . root . charCount ( ) ) ;
13401342 Debug . assert ( checkText == updatedText , "buffer edit mismatch" ) ;
0 commit comments