Skip to content

Commit e470f4f

Browse files
Fix out-of-bounds error when applying incremental file changes (#113)
--------- Signed-off-by: Ben Sherman <bentshermann@gmail.com> Co-authored-by: Ben Sherman <bentshermann@gmail.com>
1 parent 94079b7 commit e470f4f

File tree

2 files changed

+8
-13
lines changed

2 files changed

+8
-13
lines changed

src/main/java/nextflow/lsp/file/FileCache.java

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -92,22 +92,17 @@ public void didChange(DidChangeTextDocumentParams params) {
9292
}
9393
else {
9494
// update file contents with incremental changes
95-
var sortedChanges = new ArrayList<>(params.getContentChanges());
96-
sortedChanges.sort((a, b) -> {
97-
return Positions.COMPARATOR.compare( a.getRange().getStart(), b.getRange().getStart() );
98-
});
99-
var builder = new StringBuilder();
100-
int previousEnd = 0;
101-
for( var change : sortedChanges ) {
95+
for( var change : params.getContentChanges() ) {
10296
var range = change.getRange();
10397
var offsetStart = Positions.getOffset(oldText, range.getStart());
10498
var offsetEnd = Positions.getOffset(oldText, range.getEnd());
105-
builder.append(oldText.substring(previousEnd, offsetStart));
106-
builder.append(change.getText());
107-
previousEnd = offsetEnd;
99+
oldText = new StringBuilder()
100+
.append(oldText.substring(0, offsetStart))
101+
.append(change.getText())
102+
.append(oldText.substring(offsetEnd))
103+
.toString();
108104
}
109-
builder.append(oldText.substring(previousEnd));
110-
openFiles.put(uri, builder.toString());
105+
openFiles.put(uri, oldText);
111106
}
112107
changedFiles.add(uri);
113108
}

src/test/groovy/nextflow/lsp/file/FileCacheTest.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ class FileCacheTest extends Specification {
6161
'hello'
6262
),
6363
new TextDocumentContentChangeEvent(
64-
new Range(new Position(0, 8), new Position(0, 8)),
64+
new Range(new Position(0, 11), new Position(0, 11)),
6565
', friend'
6666
)
6767
)

0 commit comments

Comments
 (0)