From 7c9e5893234f4d7a5ce4f743cac6f1d58bbcfe7e Mon Sep 17 00:00:00 2001 From: Simon Lydell Date: Tue, 29 Aug 2017 08:16:04 +0200 Subject: [PATCH] Fix CLI option parsing (#2684) Fixes #2683 --- bin/prettier.js | 14 ++---- .../__snapshots__/arg-parsing.js.snap | 45 +++++++++++++++++++ tests_integration/__tests__/arg-parsing.js | 35 +++++++++++++++ tests_integration/cli/arg-parsing/file.js | 3 ++ 4 files changed, 87 insertions(+), 10 deletions(-) create mode 100644 tests_integration/__tests__/__snapshots__/arg-parsing.js.snap create mode 100644 tests_integration/__tests__/arg-parsing.js create mode 100644 tests_integration/cli/arg-parsing/file.js diff --git a/bin/prettier.js b/bin/prettier.js index 880030105..02828b83c 100755 --- a/bin/prettier.js +++ b/bin/prettier.js @@ -49,7 +49,7 @@ const argv = minimist(args, { "debug-print-doc", "debug-check", "with-node-modules" - ], + ].concat(booleanOptionNames), string: [ "cursor-offset", "range-start", @@ -58,7 +58,7 @@ const argv = minimist(args, { "config", "find-config-path", "ignore-path" - ], + ].concat(stringOptionNames), default: { color: true, "ignore-path": ".prettierignore" @@ -70,14 +70,8 @@ const argv = minimist(args, { }, unknown: param => { if (param.startsWith("-")) { - const paramName = param.replace(/--(no-)?/, ""); - if ( - booleanOptionNames.indexOf(paramName) === -1 && - stringOptionNames.indexOf(paramName) === -1 - ) { - console.warn("Ignored unknown option: " + param + "\n"); - return false; - } + console.warn("Ignored unknown option: " + param + "\n"); + return false; } } }); diff --git a/tests_integration/__tests__/__snapshots__/arg-parsing.js.snap b/tests_integration/__tests__/__snapshots__/arg-parsing.js.snap new file mode 100644 index 000000000..0d546b34c --- /dev/null +++ b/tests_integration/__tests__/__snapshots__/arg-parsing.js.snap @@ -0,0 +1,45 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`boolean flags do not swallow the next argument 1`] = ` +"/* eslint-disable */ + +console.log('could be single quote and without semi'); +" +`; + +exports[`boolean flags do not swallow the next argument 2`] = `""`; + +exports[`negated options work 1`] = ` +"/* eslint-disable */ + +console.log(\\"could be single quote and without semi\\") +" +`; + +exports[`negated options work 2`] = `""`; + +exports[`unknown negated options are warned 1`] = ` +"/* eslint-disable */ + +console.log(\\"could be single quote and without semi\\"); +" +`; + +exports[`unknown negated options are warned 2`] = ` +"Ignored unknown option: --no-unknown + +" +`; + +exports[`unknown options are warned 1`] = ` +"/* eslint-disable */ + +console.log(\\"could be single quote and without semi\\"); +" +`; + +exports[`unknown options are warned 2`] = ` +"Ignored unknown option: --unknown + +" +`; diff --git a/tests_integration/__tests__/arg-parsing.js b/tests_integration/__tests__/arg-parsing.js new file mode 100644 index 000000000..553a4ff24 --- /dev/null +++ b/tests_integration/__tests__/arg-parsing.js @@ -0,0 +1,35 @@ +"use strict"; + +const runPrettier = require("../runPrettier"); + +test("boolean flags do not swallow the next argument", () => { + const result = runPrettier("cli/arg-parsing", ["--single-quote", "file.js"]); + + expect(result.stdout).toMatchSnapshot(); + expect(result.stderr).toMatchSnapshot(); + expect(result.status).toEqual(0); +}); + +test("negated options work", () => { + const result = runPrettier("cli/arg-parsing", ["--no-semi", "file.js"]); + + expect(result.stdout).toMatchSnapshot(); + expect(result.stderr).toMatchSnapshot(); + expect(result.status).toEqual(0); +}); + +test("unknown options are warned", () => { + const result = runPrettier("cli/arg-parsing", ["file.js", "--unknown"]); + + expect(result.stdout).toMatchSnapshot(); + expect(result.stderr).toMatchSnapshot(); + expect(result.status).toEqual(0); +}); + +test("unknown negated options are warned", () => { + const result = runPrettier("cli/arg-parsing", ["file.js", "--no-unknown"]); + + expect(result.stdout).toMatchSnapshot(); + expect(result.stderr).toMatchSnapshot(); + expect(result.status).toEqual(0); +}); diff --git a/tests_integration/cli/arg-parsing/file.js b/tests_integration/cli/arg-parsing/file.js new file mode 100644 index 000000000..5a555e494 --- /dev/null +++ b/tests_integration/cli/arg-parsing/file.js @@ -0,0 +1,3 @@ +/* eslint-disable */ + +console.log("could be single quote and without semi")