From dbbf05188691cf7fa63f7729c226eeaf6bd2213d Mon Sep 17 00:00:00 2001 From: Andy Date: Thu, 13 Jul 2017 06:49:28 -0700 Subject: [PATCH] Add assertion to computePositionOfLineAndCharacter (#17121) --- src/compiler/scanner.ts | 13 ++++++++++--- src/server/scriptInfo.ts | 2 +- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/compiler/scanner.ts b/src/compiler/scanner.ts index dd43b3c8263..16555ff7937 100644 --- a/src/compiler/scanner.ts +++ b/src/compiler/scanner.ts @@ -326,13 +326,20 @@ namespace ts { } export function getPositionOfLineAndCharacter(sourceFile: SourceFile, line: number, character: number): number { - return computePositionOfLineAndCharacter(getLineStarts(sourceFile), line, character); + return computePositionOfLineAndCharacter(getLineStarts(sourceFile), line, character, sourceFile.text); } /* @internal */ - export function computePositionOfLineAndCharacter(lineStarts: number[], line: number, character: number): number { + export function computePositionOfLineAndCharacter(lineStarts: number[], line: number, character: number, debugText?: string): number { Debug.assert(line >= 0 && line < lineStarts.length); - return lineStarts[line] + character; + const res = lineStarts[line] + character; + if (line < lineStarts.length - 1) { + Debug.assert(res < lineStarts[line + 1]); + } + else if (debugText !== undefined) { + Debug.assert(res < debugText.length); + } + return res; } /* @internal */ diff --git a/src/server/scriptInfo.ts b/src/server/scriptInfo.ts index 5250a8ea66c..1f2c1068eda 100644 --- a/src/server/scriptInfo.ts +++ b/src/server/scriptInfo.ts @@ -86,7 +86,7 @@ namespace ts.server { */ lineOffsetToPosition(line: number, offset: number): number { if (!this.svc) { - return computePositionOfLineAndCharacter(this.getLineMap(), line - 1, offset - 1); + return computePositionOfLineAndCharacter(this.getLineMap(), line - 1, offset - 1, this.text); } // TODO: assert this offset is actually on the line