diff --git a/src/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeBase.ts b/src/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeBase.ts index 13c81a70acbbc467b35ccfc7c76cebf91f57a4ca..e5cc6a1b2912d3728bb27fca38d7351ff86e13ec 100644 --- a/src/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeBase.ts +++ b/src/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeBase.ts @@ -538,7 +538,7 @@ export class PieceTreeBase { let nodePos = this.nodeAt2(lineNumber, index + 1); let buffer = this._buffers[nodePos.node.piece.bufferIndex]; let startOffset = this.offsetInBuffer(nodePos.node.piece.bufferIndex, nodePos.node.piece.start); - let targetOffset = startOffset + index; + let targetOffset = startOffset + nodePos.remainder; return buffer.buffer.charCodeAt(targetOffset); } diff --git a/src/vs/editor/test/common/model/pieceTreeTextBuffer/pieceTreeTextBuffer.test.ts b/src/vs/editor/test/common/model/pieceTreeTextBuffer/pieceTreeTextBuffer.test.ts index e5b6970d888c06936aae645c9b57c0effd120f99..266e9de61ae4ed006d7a7ca25834bcc52f9b44d5 100644 --- a/src/vs/editor/test/common/model/pieceTreeTextBuffer/pieceTreeTextBuffer.test.ts +++ b/src/vs/editor/test/common/model/pieceTreeTextBuffer/pieceTreeTextBuffer.test.ts @@ -1571,6 +1571,15 @@ suite('buffer api', () => { assert(!a.equal(b)); }); + + test('getLineCharCode - issue #45735', () => { + let pieceTable = createTextBuffer(['LINE1\nline2']); + assert.equal(pieceTable.getLineCharCode(2, 0), 'l'.charCodeAt(0), 'l'); + assert.equal(pieceTable.getLineCharCode(2, 1), 'i'.charCodeAt(0), 'i'); + assert.equal(pieceTable.getLineCharCode(2, 2), 'n'.charCodeAt(0), 'n'); + assert.equal(pieceTable.getLineCharCode(2, 3), 'e'.charCodeAt(0), 'e'); + assert.equal(pieceTable.getLineCharCode(2, 4), '2'.charCodeAt(0), '2'); + }); }); suite('search offset cache', () => {