Skip to content

Commit 7ffcd58

Browse files
committed
switch formatter to use 1-based lines
1 parent 4ba24fb commit 7ffcd58

2 files changed

Lines changed: 20 additions & 20 deletions

File tree

src/services/formatting/format.ts

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ module ts.formatting {
2323
}
2424

2525
export function formatOnEnter(position: number, sourceFile: SourceFile, rulesProvider: RulesProvider, options: FormatCodeOptions): TextChange[]{
26-
var line = getNonAdjustedLineAndCharacterFromPosition(position, sourceFile).line;
26+
var line = sourceFile.getLineAndCharacterFromPosition(position).line;
27+
Debug.assert(line >= 2);
2728
// get the span for the previous\current line
2829
var span = {
2930
// get start position for the previous line
@@ -140,7 +141,7 @@ module ts.formatting {
140141
formattingScanner.advance();
141142

142143
if (formattingScanner.isOnToken()) {
143-
var startLine = getNonAdjustedLineAndCharacterFromPosition(enclosingNode.getStart(sourceFile), sourceFile).line;
144+
var startLine = sourceFile.getLineAndCharacterFromPosition(enclosingNode.getStart(sourceFile)).line;
144145
processNode(enclosingNode, enclosingNode, startLine, initialIndentation);
145146
}
146147
return edits;
@@ -226,7 +227,7 @@ module ts.formatting {
226227
return;
227228
}
228229

229-
var childStartLine = getNonAdjustedLineAndCharacterFromPosition(start, sourceFile).line;
230+
var childStartLine = sourceFile.getLineAndCharacterFromPosition(start).line;
230231

231232
if (listElementIndex === -1) {
232233
// child is not list element
@@ -240,7 +241,7 @@ module ts.formatting {
240241
// NOTE: SI uses non-adjusted lines
241242
var increaseIndentation =
242243
childStartLine !== nodeStartLine &&
243-
!SmartIndenter.childStartsOnTheSameLineWithElseInIfStatement(node, child, childStartLine + 1, sourceFile) &&
244+
!SmartIndenter.childStartsOnTheSameLineWithElseInIfStatement(node, child, childStartLine, sourceFile) &&
244245
SmartIndenter.shouldIndentChildNode(node, child);
245246

246247
processNode(child, childContextNode, childStartLine, increaseIndentation ? indentation + options.IndentSize : indentation);
@@ -267,7 +268,7 @@ module ts.formatting {
267268
var indentToken: boolean = true;
268269
if (isTokenInRange) {
269270
var prevStartLine = previousRangeStartLine;
270-
var tokenStart = getNonAdjustedLineAndCharacterFromPosition(currentTokenInfo.token.pos, sourceFile);
271+
var tokenStart = sourceFile.getLineAndCharacterFromPosition(currentTokenInfo.token.pos);
271272
lineAdded = processRange(currentTokenInfo.token, tokenStart, parent, contextNode, indentation);
272273
if (lineAdded !== undefined) {
273274
indentToken = lineAdded;
@@ -321,7 +322,7 @@ module ts.formatting {
321322
for (var i = 0, len = trivia.length; i < len; ++i) {
322323
var triviaItem = trivia[i];
323324
if (isComment(triviaItem.kind) && rangeContainsRange(originalRange, triviaItem)) {
324-
var triviaItemStart = getNonAdjustedLineAndCharacterFromPosition(triviaItem.pos, sourceFile);
325+
var triviaItemStart = sourceFile.getLineAndCharacterFromPosition(triviaItem.pos);
325326
processRange(triviaItem, triviaItemStart, parent, contextNode, indentation);
326327
}
327328
}
@@ -332,7 +333,7 @@ module ts.formatting {
332333
var lineAdded: boolean;
333334
if (!previousRange) {
334335
// trim whitespaces starting from the beginning of the span up to the current line
335-
var originalStart = getNonAdjustedLineAndCharacterFromPosition(originalRange.pos, sourceFile);
336+
var originalStart = sourceFile.getLineAndCharacterFromPosition(originalRange.pos);
336337
trimTrailingWhitespacesForLines(originalStart.line, rangeStart.line);
337338
}
338339
else {
@@ -409,18 +410,18 @@ module ts.formatting {
409410
recordReplace(pos, 0, indentationString);
410411
}
411412
else {
412-
var tokenRange = getNonAdjustedLineAndCharacterFromPosition(pos, sourceFile);
413-
if (indentation !== tokenRange.character) {
413+
var tokenRange = sourceFile.getLineAndCharacterFromPosition(pos);
414+
if (indentation !== tokenRange.character - 1) {
414415
var startLinePosition = getStartPositionOfLine(tokenRange.line, sourceFile);
415-
recordReplace(startLinePosition, tokenRange.character, indentationString);
416+
recordReplace(startLinePosition, tokenRange.character - 1, indentationString);
416417
}
417418
}
418419
}
419420

420421
function indentMultilineComment(commentRange: TextRange, indentation: number, firstLineIsIndented: boolean) {
421422
// split comment in lines
422-
var startLine = getNonAdjustedLineAndCharacterFromPosition(commentRange.pos, sourceFile).line;
423-
var endLine = getNonAdjustedLineAndCharacterFromPosition(commentRange.end, sourceFile).line;
423+
var startLine = sourceFile.getLineAndCharacterFromPosition(commentRange.pos).line;
424+
var endLine = sourceFile.getLineAndCharacterFromPosition(commentRange.end).line;
424425

425426
if (startLine === endLine) {
426427
if (!firstLineIsIndented) {

src/services/formatting/lineMapUtilities.ts

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@
33
module ts.formatting {
44

55
export function getEndLinePosition(line: number, sourceFile: SourceFile): number {
6+
Debug.assert(line >= 1);
67
var lineStarts = sourceFile.getLineStarts();
8+
9+
line = line - 1;
710
if (line === lineStarts.length - 1) {
811
// last line - return EOF
912
return sourceFile.text.length - 1;
@@ -25,18 +28,14 @@ module ts.formatting {
2528
}
2629
}
2730

28-
export function getNonAdjustedLineAndCharacterFromPosition(position: number, sourceFile: SourceFile): LineAndCharacter {
29-
var lineAndChar = sourceFile.getLineAndCharacterFromPosition(position);
30-
return { line: lineAndChar.line - 1, character: lineAndChar.character - 1 };
31-
}
32-
3331
export function getStartPositionOfLine(line: number, sourceFile: SourceFile): number {
34-
return sourceFile.getLineStarts()[line];
32+
Debug.assert(line >= 1);
33+
return sourceFile.getLineStarts()[line - 1];
3534
}
3635

3736
export function getStartLinePositionForPosition(position: number, sourceFile: SourceFile): number {
3837
var lineStarts = sourceFile.getLineStarts();
39-
var line = getNonAdjustedLineAndCharacterFromPosition(position, sourceFile).line;
40-
return lineStarts[line];
38+
var line = sourceFile.getLineAndCharacterFromPosition(position).line;
39+
return lineStarts[line - 1];
4140
}
4241
}

0 commit comments

Comments
 (0)