From ba2a33049c47fd400828cb09e8d182d21627cd29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franti=C5=A1ek=20=C5=BDia=C4=8Dik?= Date: Thu, 5 May 2016 21:29:56 +0200 Subject: [PATCH 1/3] Formatting space vs tabs tests added --- .../formattingReplaceSpacesWithTabs.ts | 35 +++++++++++++++++++ .../formattingReplaceTabsWithSpaces.ts | 27 ++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 tests/cases/fourslash/formattingReplaceSpacesWithTabs.ts create mode 100644 tests/cases/fourslash/formattingReplaceTabsWithSpaces.ts diff --git a/tests/cases/fourslash/formattingReplaceSpacesWithTabs.ts b/tests/cases/fourslash/formattingReplaceSpacesWithTabs.ts new file mode 100644 index 0000000000..37039c5a7a --- /dev/null +++ b/tests/cases/fourslash/formattingReplaceSpacesWithTabs.ts @@ -0,0 +1,35 @@ +/// + +////module Foo { +/////*1*/class Test { } +/////*2*/ class Test { } +/////*3*/ class Test { } +/////*4*/ class Test { } +/////*5*/ class Test { } +/////*6*/ class Test { } +/////*7*/ class Test { } +////} + +var options = format.copyFormatOptions(); +options.ConvertTabsToSpaces = false; +var oldOptions = format.setFormatOptions(options); +try { + format.document(); + goTo.marker("1"); + verify.currentLineContentIs("\tclass Test { }") + goTo.marker("2"); + verify.currentLineContentIs("\tclass Test { }") + goTo.marker("3"); + verify.currentLineContentIs("\tclass Test { }") + goTo.marker("4"); + verify.currentLineContentIs("\tclass Test { }") + goTo.marker("5"); + verify.currentLineContentIs("\tclass Test { }") + goTo.marker("6"); + verify.currentLineContentIs("\tclass Test { }") + goTo.marker("7"); + verify.currentLineContentIs("\tclass Test { }") +} +finally { + format.setFormatOptions(oldOptions); +} diff --git a/tests/cases/fourslash/formattingReplaceTabsWithSpaces.ts b/tests/cases/fourslash/formattingReplaceTabsWithSpaces.ts new file mode 100644 index 0000000000..ad5b5508c4 --- /dev/null +++ b/tests/cases/fourslash/formattingReplaceTabsWithSpaces.ts @@ -0,0 +1,27 @@ +/// + +////module Foo { +/////*1*/ class Test { } +/////*2*/ class Test { } +/////*3*/class Test { } +/////*4*/ class Test { } +/////*5*/ class Test { } +/////*6*/ class Test { } +/////*7*/ class Test { } +////} + +format.document(); +goTo.marker("1"); +verify.currentLineContentIs(" class Test { }") +goTo.marker("2"); +verify.currentLineContentIs(" class Test { }") +goTo.marker("3"); +verify.currentLineContentIs(" class Test { }") +goTo.marker("4"); +verify.currentLineContentIs(" class Test { }") +goTo.marker("5"); +verify.currentLineContentIs(" class Test { }") +goTo.marker("6"); +verify.currentLineContentIs(" class Test { }") +goTo.marker("7"); +verify.currentLineContentIs(" class Test { }") From 06d05b079ef84744f52033d0d7d0cdde61e56334 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franti=C5=A1ek=20=C5=BDia=C4=8Dik?= Date: Thu, 5 May 2016 23:23:25 +0200 Subject: [PATCH 2/3] Fixes space-tab indentation issues --- src/services/formatting/formatting.ts | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/services/formatting/formatting.ts b/src/services/formatting/formatting.ts index 58e3ed1b35..0388ba42b3 100644 --- a/src/services/formatting/formatting.ts +++ b/src/services/formatting/formatting.ts @@ -866,13 +866,23 @@ namespace ts.formatting { } else { let tokenStart = sourceFile.getLineAndCharacterOfPosition(pos); - if (indentation !== tokenStart.character) { - let startLinePosition = getStartPositionOfLine(tokenStart.line, sourceFile); + let startLinePosition = getStartPositionOfLine(tokenStart.line, sourceFile); + if (indentation !== tokenStart.character || indentationIsDifferent(indentationString, startLinePosition)) { recordReplace(startLinePosition, tokenStart.character, indentationString); } } } + function indentationIsDifferent(indentationString: string, startLinePosition: number): boolean { + let size = indentationString.length; + for (let i = 0; i < size; i++) { + if (indentationString.charCodeAt(i) !== sourceFile.text.charCodeAt(startLinePosition + i)) { + return true; + } + } + return false; + } + function indentMultilineComment(commentRange: TextRange, indentation: number, firstLineIsIndented: boolean) { // split comment in lines let startLine = sourceFile.getLineAndCharacterOfPosition(commentRange.pos).line; @@ -1152,4 +1162,4 @@ namespace ts.formatting { return s; } } -} \ No newline at end of file +} From e11b08fa91c3f1a18c56c531d350cc2058939a03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franti=C5=A1ek=20=C5=BDia=C4=8Dik?= Date: Fri, 6 May 2016 10:09:19 +0200 Subject: [PATCH 3/3] Simplified check for indentation difference --- src/services/formatting/formatting.ts | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/services/formatting/formatting.ts b/src/services/formatting/formatting.ts index 0388ba42b3..7931f1ea73 100644 --- a/src/services/formatting/formatting.ts +++ b/src/services/formatting/formatting.ts @@ -874,13 +874,7 @@ namespace ts.formatting { } function indentationIsDifferent(indentationString: string, startLinePosition: number): boolean { - let size = indentationString.length; - for (let i = 0; i < size; i++) { - if (indentationString.charCodeAt(i) !== sourceFile.text.charCodeAt(startLinePosition + i)) { - return true; - } - } - return false; + return indentationString !== sourceFile.text.substr(startLinePosition , indentationString.length); } function indentMultilineComment(commentRange: TextRange, indentation: number, firstLineIsIndented: boolean) {