Skip to content

Commit 5234bf6

Browse files
committed
Merge pull request microsoft#5033 from Microsoft/dirkb/fix_5032
Fixed microsoft#5032: tsserver: Format on type broken
2 parents 1244477 + 2f8e4fa commit 5234bf6

File tree

1 file changed

+24
-11
lines changed

1 file changed

+24
-11
lines changed

src/server/session.ts

+24-11
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,21 @@ namespace ts.server {
2121
return spaceCache[n];
2222
}
2323

24+
export function generateIndentString(n: number, editorOptions: EditorOptions): string {
25+
if (editorOptions.ConvertTabsToSpaces) {
26+
return generateSpaces(n);
27+
} else {
28+
var result = "";
29+
for (var i = 0; i < Math.floor(n / editorOptions.TabSize); i++) {
30+
result += "\t";
31+
}
32+
for (var i = 0; i < n % editorOptions.TabSize; i++) {
33+
result += " ";
34+
}
35+
return result;
36+
}
37+
}
38+
2439
interface FileStart {
2540
file: string;
2641
start: ILineInfo;
@@ -608,27 +623,25 @@ namespace ts.server {
608623
ConvertTabsToSpaces: formatOptions.ConvertTabsToSpaces,
609624
IndentStyle: ts.IndentStyle.Smart,
610625
};
611-
var indentPosition =
612-
compilerService.languageService.getIndentationAtPosition(file, position, editorOptions);
626+
var preferredIndent = compilerService.languageService.getIndentationAtPosition(file, position, editorOptions);
627+
var hasIndent = 0;
613628
for (var i = 0, len = lineText.length; i < len; i++) {
614629
if (lineText.charAt(i) == " ") {
615-
indentPosition--;
630+
hasIndent++;
616631
}
617632
else if (lineText.charAt(i) == "\t") {
618-
indentPosition -= editorOptions.IndentSize;
633+
hasIndent += editorOptions.TabSize;
619634
}
620635
else {
621636
break;
622637
}
623638
}
624-
if (indentPosition > 0) {
625-
var spaces = generateSpaces(indentPosition);
626-
edits.push({ span: ts.createTextSpanFromBounds(position, position), newText: spaces });
627-
}
628-
else if (indentPosition < 0) {
639+
// i points to the first non whitespace character
640+
if (preferredIndent !== hasIndent) {
641+
var firstNoWhiteSpacePosition = lineInfo.offset + i;
629642
edits.push({
630-
span: ts.createTextSpanFromBounds(position, position - indentPosition),
631-
newText: ""
643+
span: ts.createTextSpanFromBounds(lineInfo.offset, firstNoWhiteSpacePosition),
644+
newText: generateIndentString(preferredIndent, editorOptions)
632645
});
633646
}
634647
}

0 commit comments

Comments
 (0)