diff --git a/src/compiler/program.ts b/src/compiler/program.ts index 64a2ce2e57a..96e1773172b 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -9,6 +9,9 @@ module ts { /** The version of the TypeScript compiler release */ export const version = "1.5.0"; + + const NEWLINE_CRLF = "\r\n"; + const NEWLINE_LF = "\n"; export function findConfigFile(searchPath: string): string { var fileName = "tsconfig.json"; @@ -91,9 +94,9 @@ module ts { } } - let newLine = - options.newLine === NewLineKind.CarriageReturnLineFeed ? "\r\n" : - options.newLine === NewLineKind.LineFeed ? "\n" : + let newLine = + options.newLine === NewLineKind.CarriageReturnLineFeed ? NEWLINE_CRLF : + options.newLine === NewLineKind.LineFeed ? NEWLINE_LF : sys.newLine; return { diff --git a/src/harness/harness.ts b/src/harness/harness.ts index 30ae22a9e4a..75e8d1e4590 100644 --- a/src/harness/harness.ts +++ b/src/harness/harness.ts @@ -805,6 +805,9 @@ module Harness { return result; } + const NEWLINE_CRLF = "\r\n"; + const NEWLINE_LF = "\n"; + export var defaultLibFileName = 'lib.d.ts'; export var defaultLibSourceFile = createSourceFileAndAssertInvariants(defaultLibFileName, IO.readFile(libFolder + 'lib.core.d.ts'), /*languageVersion*/ ts.ScriptTarget.Latest); export var defaultES6LibSourceFile = createSourceFileAndAssertInvariants(defaultLibFileName, IO.readFile(libFolder + 'lib.core.es6.d.ts'), /*languageVersion*/ ts.ScriptTarget.Latest); @@ -822,7 +825,8 @@ module Harness { scriptTarget: ts.ScriptTarget, useCaseSensitiveFileNames: boolean, // the currentDirectory is needed for rwcRunner to passed in specified current directory to compiler host - currentDirectory?: string): ts.CompilerHost { + currentDirectory?: string, + newLineKind?: ts.NewLineKind): ts.CompilerHost { // Local get canonical file name function, that depends on passed in parameter for useCaseSensitiveFileNames function getCanonicalFileName(fileName: string): string { @@ -841,6 +845,11 @@ module Harness { }; inputFiles.forEach(register); + let newLine = + newLineKind === ts.NewLineKind.CarriageReturnLineFeed ? NEWLINE_CRLF : + newLineKind === ts.NewLineKind.LineFeed ? NEWLINE_LF : + ts.sys.newLine; + return { getCurrentDirectory, getSourceFile: (fn, languageVersion) => { @@ -869,7 +878,7 @@ module Harness { writeFile, getCanonicalFileName, useCaseSensitiveFileNames: () => useCaseSensitiveFileNames, - getNewLine: () => ts.sys.newLine + getNewLine: () => newLine }; } @@ -1042,7 +1051,16 @@ module Harness { case 'newline': case 'newlines': - newLine = setting.value; + if (setting.value.toLowerCase() === 'crlf') { + options.newLine = ts.NewLineKind.CarriageReturnLineFeed; + } else if (setting.value.toLowerCase() === 'lf') { + options.newLine = ts.NewLineKind.LineFeed; + } else if (setting.value === '\\n') { + // Handle old usage, e.g. contextualTyping.ts:// @newline: \n + newLine = setting.value; + } else { + throw new Error('Unknown option for newLine: ' + setting.value); + } break; case 'comments': @@ -1103,7 +1121,7 @@ module Harness { var programFiles = inputFiles.concat(includeBuiltFiles).map(file => file.unitName); var program = ts.createProgram(programFiles, options, createCompilerHost(inputFiles.concat(includeBuiltFiles).concat(otherFiles), (fn, contents, writeByteOrderMark) => fileOutputs.push({ fileName: fn, code: contents, writeByteOrderMark: writeByteOrderMark }), - options.target, useCaseSensitiveFileNames, currentDirectory)); + options.target, useCaseSensitiveFileNames, currentDirectory, options.newLine)); var emitResult = program.emit(); diff --git a/tests/baselines/reference/newLineFlagWithCRLF.js b/tests/baselines/reference/newLineFlagWithCRLF.js new file mode 100644 index 00000000000..ebf095e5fc7 --- /dev/null +++ b/tests/baselines/reference/newLineFlagWithCRLF.js @@ -0,0 +1,9 @@ +//// [newLineFlagWithCRLF.ts] +var x=1; +x=2; + + + +//// [newLineFlagWithCRLF.js] +var x = 1; +x = 2; diff --git a/tests/baselines/reference/newLineFlagWithCRLF.symbols b/tests/baselines/reference/newLineFlagWithCRLF.symbols new file mode 100644 index 00000000000..07825959fbe --- /dev/null +++ b/tests/baselines/reference/newLineFlagWithCRLF.symbols @@ -0,0 +1,8 @@ +=== tests/cases/compiler/newLineFlagWithCRLF.ts === +var x=1; +>x : Symbol(x, Decl(newLineFlagWithCRLF.ts, 0, 3)) + +x=2; +>x : Symbol(x, Decl(newLineFlagWithCRLF.ts, 0, 3)) + + diff --git a/tests/baselines/reference/newLineFlagWithCRLF.types b/tests/baselines/reference/newLineFlagWithCRLF.types new file mode 100644 index 00000000000..2663f4bbc7b --- /dev/null +++ b/tests/baselines/reference/newLineFlagWithCRLF.types @@ -0,0 +1,11 @@ +=== tests/cases/compiler/newLineFlagWithCRLF.ts === +var x=1; +>x : number +>1 : number + +x=2; +>x=2 : number +>x : number +>2 : number + + diff --git a/tests/baselines/reference/newLineFlagWithLF.js b/tests/baselines/reference/newLineFlagWithLF.js new file mode 100644 index 00000000000..be1b9ed644e --- /dev/null +++ b/tests/baselines/reference/newLineFlagWithLF.js @@ -0,0 +1,9 @@ +//// [newLineFlagWithLF.ts] +var x=1; +x=2; + + + +//// [newLineFlagWithLF.js] +var x = 1; +x = 2; diff --git a/tests/baselines/reference/newLineFlagWithLF.symbols b/tests/baselines/reference/newLineFlagWithLF.symbols new file mode 100644 index 00000000000..f4edf68dcb0 --- /dev/null +++ b/tests/baselines/reference/newLineFlagWithLF.symbols @@ -0,0 +1,8 @@ +=== tests/cases/compiler/newLineFlagWithLF.ts === +var x=1; +>x : Symbol(x, Decl(newLineFlagWithLF.ts, 0, 3)) + +x=2; +>x : Symbol(x, Decl(newLineFlagWithLF.ts, 0, 3)) + + diff --git a/tests/baselines/reference/newLineFlagWithLF.types b/tests/baselines/reference/newLineFlagWithLF.types new file mode 100644 index 00000000000..735f31d6c52 --- /dev/null +++ b/tests/baselines/reference/newLineFlagWithLF.types @@ -0,0 +1,11 @@ +=== tests/cases/compiler/newLineFlagWithLF.ts === +var x=1; +>x : number +>1 : number + +x=2; +>x=2 : number +>x : number +>2 : number + + diff --git a/tests/cases/compiler/newLineFlagWithCR.ts b/tests/cases/compiler/newLineFlagWithCR.ts new file mode 100644 index 00000000000..4a1fbbfe3d3 --- /dev/null +++ b/tests/cases/compiler/newLineFlagWithCR.ts @@ -0,0 +1,4 @@ +// @newline: CR +var x=1; +x=2; + diff --git a/tests/cases/compiler/newLineFlagWithCRLF.ts b/tests/cases/compiler/newLineFlagWithCRLF.ts new file mode 100644 index 00000000000..2a25ebc50d1 --- /dev/null +++ b/tests/cases/compiler/newLineFlagWithCRLF.ts @@ -0,0 +1,4 @@ +// @newline: CRLF +var x=1; +x=2; + diff --git a/tests/cases/compiler/newLineFlagWithLF.ts b/tests/cases/compiler/newLineFlagWithLF.ts new file mode 100644 index 00000000000..2f85a3a1e7f --- /dev/null +++ b/tests/cases/compiler/newLineFlagWithLF.ts @@ -0,0 +1,4 @@ +// @newline: LF +var x=1; +x=2; +