Skip to content

Commit 873e4e3

Browse files
Move formating over to zero based math.
1 parent dd90c22 commit 873e4e3

3 files changed

Lines changed: 31 additions & 32 deletions

File tree

src/services/formatting/formatting.ts

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -67,14 +67,14 @@ module ts.formatting {
6767
}
6868

6969
export function formatOnEnter(position: number, sourceFile: SourceFile, rulesProvider: RulesProvider, options: FormatCodeOptions): TextChange[] {
70-
var line = sourceFile.getOneBasedLineAndCharacterOfPosition(position).line;
71-
if (line === 1) {
70+
var line = sourceFile.getZeroBasedLineAndCharacterOfPosition(position).line;
71+
if (line === 0) {
7272
return [];
7373
}
7474
// get the span for the previous\current line
7575
var span = {
7676
// get start position for the previous line
77-
pos: getStartPositionOfOneBasedLine(line - 1, sourceFile),
77+
pos: getStartPositionOfZeroBasedLine(line - 1, sourceFile),
7878
// get end position for the current line (end value is exclusive so add 1 to the result)
7979
end: getEndLinePosition(line, sourceFile) + 1
8080
}
@@ -283,7 +283,7 @@ module ts.formatting {
283283
var previousLine = Constants.Unknown;
284284
var childKind = SyntaxKind.Unknown;
285285
while (n) {
286-
var line = sourceFile.getOneBasedLineAndCharacterOfPosition(n.getStart(sourceFile)).line;
286+
var line = sourceFile.getZeroBasedLineAndCharacterOfPosition(n.getStart(sourceFile)).line;
287287
if (previousLine !== Constants.Unknown && line !== previousLine) {
288288
break;
289289
}
@@ -327,7 +327,7 @@ module ts.formatting {
327327
formattingScanner.advance();
328328

329329
if (formattingScanner.isOnToken()) {
330-
var startLine = sourceFile.getOneBasedLineAndCharacterOfPosition(enclosingNode.getStart(sourceFile)).line;
330+
var startLine = sourceFile.getZeroBasedLineAndCharacterOfPosition(enclosingNode.getStart(sourceFile)).line;
331331
var delta = getOwnOrInheritedDelta(enclosingNode, options, sourceFile);
332332
processNode(enclosingNode, enclosingNode, startLine, initialIndentation, delta);
333333
}
@@ -357,7 +357,7 @@ module ts.formatting {
357357
}
358358
}
359359
else {
360-
var startLine = sourceFile.getOneBasedLineAndCharacterOfPosition(startPos).line;
360+
var startLine = sourceFile.getZeroBasedLineAndCharacterOfPosition(startPos).line;
361361
var startLinePosition = getLineStartPositionForPosition(startPos, sourceFile);
362362
var column = SmartIndenter.findFirstNonWhitespaceColumn(startLinePosition, startPos, sourceFile, options);
363363
if (startLine !== parentStartLine || startPos === column) {
@@ -521,7 +521,7 @@ module ts.formatting {
521521

522522
var childStartPos = child.getStart(sourceFile);
523523

524-
var childStart = sourceFile.getOneBasedLineAndCharacterOfPosition(childStartPos);
524+
var childStart = sourceFile.getZeroBasedLineAndCharacterOfPosition(childStartPos);
525525

526526
// if child is a list item - try to get its indentation
527527
var childIndentationAmount = Constants.Unknown;
@@ -594,7 +594,7 @@ module ts.formatting {
594594
}
595595
else if (tokenInfo.token.kind === listStartToken) {
596596
// consume list start token
597-
startLine = sourceFile.getOneBasedLineAndCharacterOfPosition(tokenInfo.token.pos).line;
597+
startLine = sourceFile.getZeroBasedLineAndCharacterOfPosition(tokenInfo.token.pos).line;
598598
var indentation =
599599
computeIndentation(tokenInfo.token, startLine, Constants.Unknown, parent, parentDynamicIndentation, startLine);
600600

@@ -641,7 +641,7 @@ module ts.formatting {
641641
var lineAdded: boolean;
642642
var isTokenInRange = rangeContainsRange(originalRange, currentTokenInfo.token);
643643

644-
var tokenStart = sourceFile.getOneBasedLineAndCharacterOfPosition(currentTokenInfo.token.pos);
644+
var tokenStart = sourceFile.getZeroBasedLineAndCharacterOfPosition(currentTokenInfo.token.pos);
645645
if (isTokenInRange) {
646646
var rangeHasError = rangeContainsError(currentTokenInfo.token);
647647
// save prevStartLine since processRange will overwrite this value with current ones
@@ -674,7 +674,7 @@ module ts.formatting {
674674
continue;
675675
}
676676

677-
var triviaStartLine = sourceFile.getOneBasedLineAndCharacterOfPosition(triviaItem.pos).line;
677+
var triviaStartLine = sourceFile.getZeroBasedLineAndCharacterOfPosition(triviaItem.pos).line;
678678
switch (triviaItem.kind) {
679679
case SyntaxKind.MultiLineCommentTrivia:
680680
var commentIndentation = dynamicIndentation.getIndentationForComment(currentTokenInfo.token.kind);
@@ -712,7 +712,7 @@ module ts.formatting {
712712
for (var i = 0, len = trivia.length; i < len; ++i) {
713713
var triviaItem = trivia[i];
714714
if (isComment(triviaItem.kind) && rangeContainsRange(originalRange, triviaItem)) {
715-
var triviaItemStart = sourceFile.getOneBasedLineAndCharacterOfPosition(triviaItem.pos);
715+
var triviaItemStart = sourceFile.getZeroBasedLineAndCharacterOfPosition(triviaItem.pos);
716716
processRange(triviaItem, triviaItemStart, parent, contextNode, dynamicIndentation);
717717
}
718718
}
@@ -729,7 +729,7 @@ module ts.formatting {
729729
if (!rangeHasError && !previousRangeHasError) {
730730
if (!previousRange) {
731731
// trim whitespaces starting from the beginning of the span up to the current line
732-
var originalStart = sourceFile.getOneBasedLineAndCharacterOfPosition(originalRange.pos);
732+
var originalStart = sourceFile.getZeroBasedLineAndCharacterOfPosition(originalRange.pos);
733733
trimTrailingWhitespacesForLines(originalStart.line, rangeStart.line);
734734
}
735735
else {
@@ -807,18 +807,18 @@ module ts.formatting {
807807
recordReplace(pos, 0, indentationString);
808808
}
809809
else {
810-
var tokenStart = sourceFile.getOneBasedLineAndCharacterOfPosition(pos);
811-
if (indentation !== tokenStart.character - 1) {
812-
var startLinePosition = getStartPositionOfOneBasedLine(tokenStart.line, sourceFile);
813-
recordReplace(startLinePosition, tokenStart.character - 1, indentationString);
810+
var tokenStart = sourceFile.getZeroBasedLineAndCharacterOfPosition(pos);
811+
if (indentation !== tokenStart.character) {
812+
var startLinePosition = getStartPositionOfZeroBasedLine(tokenStart.line, sourceFile);
813+
recordReplace(startLinePosition, tokenStart.character, indentationString);
814814
}
815815
}
816816
}
817817

818818
function indentMultilineComment(commentRange: TextRange, indentation: number, firstLineIsIndented: boolean) {
819819
// split comment in lines
820-
var startLine = sourceFile.getOneBasedLineAndCharacterOfPosition(commentRange.pos).line;
821-
var endLine = sourceFile.getOneBasedLineAndCharacterOfPosition(commentRange.end).line;
820+
var startLine = sourceFile.getZeroBasedLineAndCharacterOfPosition(commentRange.pos).line;
821+
var endLine = sourceFile.getZeroBasedLineAndCharacterOfPosition(commentRange.end).line;
822822

823823
if (startLine === endLine) {
824824
if (!firstLineIsIndented) {
@@ -833,13 +833,13 @@ module ts.formatting {
833833
for (var line = startLine; line < endLine; ++line) {
834834
var endOfLine = getEndLinePosition(line, sourceFile);
835835
parts.push({ pos: startPos, end: endOfLine });
836-
startPos = getStartPositionOfOneBasedLine(line + 1, sourceFile);
836+
startPos = getStartPositionOfZeroBasedLine(line + 1, sourceFile);
837837
}
838838

839839
parts.push({ pos: startPos, end: commentRange.end });
840840
}
841841

842-
var startLinePos = getStartPositionOfOneBasedLine(startLine, sourceFile);
842+
var startLinePos = getStartPositionOfZeroBasedLine(startLine, sourceFile);
843843

844844
var nonWhitespaceColumnInFirstPart =
845845
SmartIndenter.findFirstNonWhitespaceColumn(startLinePos, parts[0].pos, sourceFile, options);
@@ -857,7 +857,7 @@ module ts.formatting {
857857
// shift all parts on the delta size
858858
var delta = indentation - nonWhitespaceColumnInFirstPart;
859859
for (var i = startIndex, len = parts.length; i < len; ++i, ++startLine) {
860-
var startLinePos = getStartPositionOfOneBasedLine(startLine, sourceFile);
860+
var startLinePos = getStartPositionOfZeroBasedLine(startLine, sourceFile);
861861
var nonWhitespaceColumn =
862862
i === 0
863863
? nonWhitespaceColumnInFirstPart
@@ -876,7 +876,7 @@ module ts.formatting {
876876

877877
function trimTrailingWhitespacesForLines(line1: number, line2: number, range?: TextRangeWithKind) {
878878
for (var line = line1; line < line2; ++line) {
879-
var lineStartPosition = getStartPositionOfOneBasedLine(line, sourceFile);
879+
var lineStartPosition = getStartPositionOfZeroBasedLine(line, sourceFile);
880880
var lineEndPosition = getEndLinePosition(line, sourceFile);
881881

882882
// do not trim whitespaces in comments

src/services/formatting/formattingContext.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,8 @@ module ts.formatting {
7171

7272
public TokensAreOnSameLine(): boolean {
7373
if (this.tokensAreOnSameLine === undefined) {
74-
var startLine = this.sourceFile.getOneBasedLineAndCharacterOfPosition(this.currentTokenSpan.pos).line;
75-
var endLine = this.sourceFile.getOneBasedLineAndCharacterOfPosition(this.nextTokenSpan.pos).line;
74+
var startLine = this.sourceFile.getZeroBasedLineAndCharacterOfPosition(this.currentTokenSpan.pos).line;
75+
var endLine = this.sourceFile.getZeroBasedLineAndCharacterOfPosition(this.nextTokenSpan.pos).line;
7676
this.tokensAreOnSameLine = (startLine == endLine);
7777
}
7878

@@ -96,17 +96,17 @@ module ts.formatting {
9696
}
9797

9898
private NodeIsOnOneLine(node: Node): boolean {
99-
var startLine = this.sourceFile.getOneBasedLineAndCharacterOfPosition(node.getStart(this.sourceFile)).line;
100-
var endLine = this.sourceFile.getOneBasedLineAndCharacterOfPosition(node.getEnd()).line;
99+
var startLine = this.sourceFile.getZeroBasedLineAndCharacterOfPosition(node.getStart(this.sourceFile)).line;
100+
var endLine = this.sourceFile.getZeroBasedLineAndCharacterOfPosition(node.getEnd()).line;
101101
return startLine == endLine;
102102
}
103103

104104
private BlockIsOnOneLine(node: Node): boolean {
105105
var openBrace = findChildOfKind(node, SyntaxKind.OpenBraceToken, this.sourceFile);
106106
var closeBrace = findChildOfKind(node, SyntaxKind.CloseBraceToken, this.sourceFile);
107107
if (openBrace && closeBrace) {
108-
var startLine = this.sourceFile.getOneBasedLineAndCharacterOfPosition(openBrace.getEnd()).line;
109-
var endLine = this.sourceFile.getOneBasedLineAndCharacterOfPosition(closeBrace.getStart(this.sourceFile)).line;
108+
var startLine = this.sourceFile.getZeroBasedLineAndCharacterOfPosition(openBrace.getEnd()).line;
109+
var endLine = this.sourceFile.getZeroBasedLineAndCharacterOfPosition(closeBrace.getStart(this.sourceFile)).line;
110110
return startLine === endLine;
111111
}
112112
return false;

src/services/utilities.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,11 @@ module ts {
66
}
77

88
export function getEndLinePosition(line: number, sourceFile: SourceFile): number {
9-
Debug.assert(line >= 1);
9+
Debug.assert(line >= 0);
1010
var lineStarts = sourceFile.getLineStarts();
1111

12-
// lines returned by SourceFile.getLineAndCharacterForPosition are 1-based
13-
var lineIndex = line - 1;
14-
if (lineIndex === lineStarts.length - 1) {
12+
var lineIndex = line;
13+
if (lineIndex + 1 === lineStarts.length) {
1514
// last line - return EOF
1615
return sourceFile.text.length - 1;
1716
}

0 commit comments

Comments
 (0)