Skip to content

Commit c371f1e

Browse files
Make the preservation of formatting an optional experimental compiler flag.
1 parent f351916 commit c371f1e

File tree

1,891 files changed

+28572
-11182
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,891 files changed

+28572
-11182
lines changed

src/compiler/commandLineParser.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,12 @@ module ts {
140140
description: Diagnostics.Do_not_emit_declarations_for_code_that_has_an_internal_annotation,
141141
experimental: true
142142
},
143+
{
144+
name: "preserveFormatting",
145+
type: "boolean",
146+
description: Diagnostics.Preserve_new_lines_when_emitting_code,
147+
experimental: true
148+
},
143149
{
144150
name: "target",
145151
shortName: "t",

src/compiler/diagnosticInformationMap.generated.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -463,6 +463,7 @@ module ts {
463463
File_0_must_have_extension_ts_or_d_ts: { code: 6054, category: DiagnosticCategory.Error, key: "File '{0}' must have extension '.ts' or '.d.ts'." },
464464
Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures: { code: 6055, category: DiagnosticCategory.Message, key: "Suppress noImplicitAny errors for indexing objects lacking index signatures." },
465465
Do_not_emit_declarations_for_code_that_has_an_internal_annotation: { code: 6056, category: DiagnosticCategory.Message, key: "Do not emit declarations for code that has an '@internal' annotation." },
466+
Preserve_new_lines_when_emitting_code: { code: 6057, category: DiagnosticCategory.Message, key: "Preserve new-lines when emitting code." },
466467
Variable_0_implicitly_has_an_1_type: { code: 7005, category: DiagnosticCategory.Error, key: "Variable '{0}' implicitly has an '{1}' type." },
467468
Parameter_0_implicitly_has_an_1_type: { code: 7006, category: DiagnosticCategory.Error, key: "Parameter '{0}' implicitly has an '{1}' type." },
468469
Member_0_implicitly_has_an_1_type: { code: 7008, category: DiagnosticCategory.Error, key: "Member '{0}' implicitly has an '{1}' type." },

src/compiler/diagnosticMessages.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1844,6 +1844,10 @@
18441844
"category": "Message",
18451845
"code": 6056
18461846
},
1847+
"Preserve new-lines when emitting code.": {
1848+
"category": "Message",
1849+
"code": 6057
1850+
},
18471851

18481852
"Variable '{0}' implicitly has an '{1}' type.": {
18491853
"category": "Error",

src/compiler/emitter.ts

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1531,6 +1531,7 @@ module ts {
15311531
var sourceMapDataList: SourceMapData[] = compilerOptions.sourceMap ? [] : undefined;
15321532
var diagnostics: Diagnostic[] = [];
15331533
var newLine = host.getNewLine();
1534+
var preserveNewLines = compilerOptions.preserveNewLines || false;
15341535

15351536
if (targetSourceFile === undefined) {
15361537
forEach(host.getSourceFiles(), sourceFile => {
@@ -2172,7 +2173,7 @@ module ts {
21722173

21732174
increaseIndent();
21742175

2175-
if (nodeStartPositionsAreOnSameLine(parent, nodes[0])) {
2176+
if (preserveNewLines && nodeStartPositionsAreOnSameLine(parent, nodes[0])) {
21762177
if (spacesBetweenBraces) {
21772178
write(" ");
21782179
}
@@ -2183,7 +2184,7 @@ module ts {
21832184

21842185
for (var i = 0, n = nodes.length; i < n; i++) {
21852186
if (i) {
2186-
if (nodeEndIsOnSameLineAsNodeStart(nodes[i - 1], nodes[i])) {
2187+
if (preserveNewLines && nodeEndIsOnSameLineAsNodeStart(nodes[i - 1], nodes[i])) {
21872188
write(", ");
21882189
}
21892190
else {
@@ -2195,15 +2196,13 @@ module ts {
21952196
emit(nodes[i]);
21962197
}
21972198

2198-
var closeTokenIsOnSameLineAsLastElement = nodeEndPositionsAreOnSameLine(parent, lastOrUndefined(nodes));
2199-
22002199
if (nodes.hasTrailingComma && allowTrailingComma) {
22012200
write(",");
22022201
}
22032202

22042203
decreaseIndent();
22052204

2206-
if (closeTokenIsOnSameLineAsLastElement) {
2205+
if (preserveNewLines && nodeEndPositionsAreOnSameLine(parent, lastOrUndefined(nodes))) {
22072206
if (spacesBetweenBraces) {
22082207
write(" ");
22092208
}
@@ -3035,10 +3034,12 @@ module ts {
30353034
}
30363035

30373036
function indentIfOnDifferentLines(parent: Node, node1: Node, node2: Node) {
3038-
var isSynthesized = nodeIsSynthesized(parent);
3037+
// Use a newline for existin code if the original had one, and we're preserving formatting.
3038+
var realNodesAreOnDifferentLines = preserveNewLines && !nodeIsSynthesized(parent) && !nodeEndIsOnSameLineAsNodeStart(node1, node2);
30393039

3040-
var realNodesAreOnDifferentLines = !isSynthesized && !nodeEndIsOnSameLineAsNodeStart(node1, node2);
3040+
// Always use a newline for synthesized code if hte generator asked for it.
30413041
var synthesizedNodeIsOnDifferentLine = synthesizedNodeStartsOnNewLine(node2);
3042+
30423043
if (realNodesAreOnDifferentLines || synthesizedNodeIsOnDifferentLine) {
30433044
increaseIndent();
30443045
writeLine();
@@ -3383,7 +3384,7 @@ module ts {
33833384
}
33843385

33853386
function emitBlock(node: Block) {
3386-
if (isSingleLineEmptyBlock(node)) {
3387+
if (preserveNewLines && isSingleLineEmptyBlock(node)) {
33873388
emitToken(SyntaxKind.OpenBraceToken, node.pos);
33883389
write(" ");
33893390
emitToken(SyntaxKind.CloseBraceToken, node.statements.end);
@@ -3600,7 +3601,8 @@ module ts {
36003601
else {
36013602
write("default:");
36023603
}
3603-
if (node.statements.length === 1 && nodeStartPositionsAreOnSameLine(node, node.statements[0])) {
3604+
3605+
if (preserveNewLines && node.statements.length === 1 && nodeStartPositionsAreOnSameLine(node, node.statements[0])) {
36043606
write(" ");
36053607
emit(node.statements[0]);
36063608
}
@@ -4303,7 +4305,7 @@ module ts {
43034305

43044306
// If we didn't have to emit any preamble code, then attempt to keep the arrow
43054307
// function on one line.
4306-
if (!preambleEmitted && nodeStartPositionsAreOnSameLine(node, body)) {
4308+
if (preserveNewLines && !preambleEmitted && nodeStartPositionsAreOnSameLine(node, body)) {
43074309
write(" ");
43084310
emitStart(body);
43094311
write("return ");
@@ -4354,7 +4356,7 @@ module ts {
43544356

43554357
var preambleEmitted = writer.getTextPos() !== initialTextPos;
43564358

4357-
if (!preambleEmitted && nodeEndIsOnSameLineAsNodeStart(body, body)) {
4359+
if (preserveNewLines && !preambleEmitted && nodeEndIsOnSameLineAsNodeStart(body, body)) {
43584360
for (var i = 0, n = body.statements.length; i < n; i++) {
43594361
write(" ");
43604362
emit(body.statements[i]);

src/compiler/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1554,6 +1554,7 @@ module ts {
15541554
version?: boolean;
15551555
watch?: boolean;
15561556
stripInternal?: boolean;
1557+
preserveNewLines?: boolean;
15571558
[option: string]: string | number | boolean;
15581559
}
15591560

src/harness/harness.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1007,6 +1007,10 @@ module Harness {
10071007
options.outDir = setting.value;
10081008
break;
10091009

1010+
case 'preservenewlines':
1011+
options.preserveNewLines = !!setting.value;
1012+
break;
1013+
10101014
case 'sourceroot':
10111015
options.sourceRoot = setting.value;
10121016
break;

tests/baselines/reference/2dArrays.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,9 @@ var Board = (function () {
3030
function Board() {
3131
}
3232
Board.prototype.allShipsSunk = function () {
33-
return this.ships.every(function (val) { return val.isSunk; });
33+
return this.ships.every(function (val) {
34+
return val.isSunk;
35+
});
3436
};
3537
return Board;
3638
})();

tests/baselines/reference/APISample_compile.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1234,6 +1234,7 @@ declare module "typescript" {
12341234
version?: boolean;
12351235
watch?: boolean;
12361236
stripInternal?: boolean;
1237+
preserveNewLines?: boolean;
12371238
[option: string]: string | number | boolean;
12381239
}
12391240
const enum ModuleKind {
@@ -2003,6 +2004,8 @@ function compile(fileNames, options) {
20032004
}
20042005
exports.compile = compile;
20052006
compile(process.argv.slice(2), {
2006-
noEmitOnError: true, noImplicitAny: true,
2007-
target: 1 /* ES5 */, module: 1 /* CommonJS */
2007+
noEmitOnError: true,
2008+
noImplicitAny: true,
2009+
target: 1 /* ES5 */,
2010+
module: 1 /* CommonJS */
20082011
});

tests/baselines/reference/APISample_compile.types

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3939,6 +3939,9 @@ declare module "typescript" {
39393939
stripInternal?: boolean;
39403940
>stripInternal : boolean
39413941

3942+
preserveNewLines?: boolean;
3943+
>preserveNewLines : boolean
3944+
39423945
[option: string]: string | number | boolean;
39433946
>option : string
39443947
}

tests/baselines/reference/APISample_linter.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1265,6 +1265,7 @@ declare module "typescript" {
12651265
version?: boolean;
12661266
watch?: boolean;
12671267
stripInternal?: boolean;
1268+
preserveNewLines?: boolean;
12681269
[option: string]: string | number | boolean;
12691270
}
12701271
const enum ModuleKind {
@@ -2037,8 +2038,7 @@ function delint(sourceFile) {
20372038
if (ifStatement.thenStatement.kind !== 174 /* Block */) {
20382039
report(ifStatement.thenStatement, "An if statement's contents should be wrapped in a block body.");
20392040
}
2040-
if (ifStatement.elseStatement &&
2041-
ifStatement.elseStatement.kind !== 174 /* Block */ && ifStatement.elseStatement.kind !== 178 /* IfStatement */) {
2041+
if (ifStatement.elseStatement && ifStatement.elseStatement.kind !== 174 /* Block */ && ifStatement.elseStatement.kind !== 178 /* IfStatement */) {
20422042
report(ifStatement.elseStatement, "An else statement's contents should be wrapped in a block body.");
20432043
}
20442044
break;

0 commit comments

Comments
 (0)