diff --git a/src/cli-util.js b/src/cli-util.js index b5e5e580..c6591807 100644 --- a/src/cli-util.js +++ b/src/cli-util.js @@ -274,7 +274,7 @@ function eachFilename(argv, patterns, callback) { function formatFiles(argv) { eachFilename(argv, argv.__filePatterns, (filename, options) => { - if (argv["write"]) { + if (argv["write"] && process.stdout.isTTY) { // Don't use `console.log` here since we need to replace this line. process.stdout.write(filename); } @@ -315,9 +315,11 @@ function formatFiles(argv) { } if (argv["write"]) { - // Remove previously printed filename to log it with duration. - readline.clearLine(process.stdout, 0); - readline.cursorTo(process.stdout, 0, null); + if (process.stdout.isTTY) { + // Remove previously printed filename to log it with duration. + readline.clearLine(process.stdout, 0); + readline.cursorTo(process.stdout, 0, null); + } // Don't write the file if it won't change in order not to invalidate // mtime based caches. diff --git a/tests_integration/__tests__/__snapshots__/piped-output.js.snap b/tests_integration/__tests__/__snapshots__/piped-output.js.snap new file mode 100644 index 00000000..ad1df38c --- /dev/null +++ b/tests_integration/__tests__/__snapshots__/piped-output.js.snap @@ -0,0 +1,15 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`no file diffs with --list-different + formatted file 1`] = `Array []`; + +exports[`no file diffs with --list-different + formatted file 2`] = `Array []`; + +exports[`output with --list-different + unformatted differs when piped 1`] = ` +"unformated.jsunformated.js +" +`; + +exports[`output with --list-different + unformatted differs when piped 2`] = ` +"unformated.js +" +`; diff --git a/tests_integration/__tests__/piped-output.js b/tests_integration/__tests__/piped-output.js new file mode 100644 index 00000000..46e4606f --- /dev/null +++ b/tests_integration/__tests__/piped-output.js @@ -0,0 +1,50 @@ +"use strict"; + +const runPrettier = require("../runPrettier"); + +test("output with --list-different + unformatted differs when piped", () => { + const result0 = runPrettier( + "cli/write", + ["--write", "--list-different", "--no-color", "unformated.js"], + { stdoutIsTTY: true } + ); + + const result1 = runPrettier( + "cli/write", + ["--write", "--list-different", "--no-color", "unformated.js"], + { stdoutIsTTY: false } + ); + + expect(result0.stdout).toMatchSnapshot(); + expect(result0.status).toEqual(1); + + expect(result1.stdout).toMatchSnapshot(); + expect(result1.status).toEqual(1); + + expect(result0.stdout).not.toEqual(result1.stdout); + expect(result0.stdout.length).toBeGreaterThan(result1.stdout.length); + expect(result0.write).toEqual(result1.write); +}); + +test("no file diffs with --list-different + formatted file", () => { + const result0 = runPrettier( + "cli/write", + ["--write", "--list-different", "--no-color", "formated.js"], + { stdoutIsTTY: true } + ); + const result1 = runPrettier( + "cli/write", + ["--write", "--list-different", "--no-color", "formated.js"], + { stdoutIsTTY: false } + ); + + expect(result0.write).toMatchSnapshot(); + expect(result0.status).toEqual(0); + + expect(result1.write).toMatchSnapshot(); + expect(result1.status).toEqual(0); + + expect(result0.stdout).not.toEqual(result1.stdout); + expect(result0.stdout.length).toBeGreaterThan(result1.stdout.length); + expect(result0.write).toEqual(result1.write); +}); diff --git a/tests_integration/runPrettier.js b/tests_integration/runPrettier.js index 82d450a9..b018234e 100644 --- a/tests_integration/runPrettier.js +++ b/tests_integration/runPrettier.js @@ -52,9 +52,11 @@ function runPrettier(dir, args, options) { const originalArgv = process.argv; const originalExitCode = process.exitCode; const originalStdinIsTTY = process.stdin.isTTY; + const originalStdoutIsTTY = process.stdout.isTTY; process.chdir(normalizeDir(dir)); process.stdin.isTTY = !!options.isTTY; + process.stdout.isTTY = !!options.stdoutIsTTY; process.argv = ["path/to/node", "path/to/prettier/bin"].concat(args); jest.resetModules(); @@ -79,6 +81,7 @@ function runPrettier(dir, args, options) { process.argv = originalArgv; process.exitCode = originalExitCode; process.stdin.isTTY = originalStdinIsTTY; + process.stdout.isTTY = originalStdoutIsTTY; jest.restoreAllMocks(); }