From 679752b7ef9b98a7a4171589e6b66312e2c2ff96 Mon Sep 17 00:00:00 2001 From: Toru Nagashima Date: Sat, 5 Jan 2019 00:28:54 +0900 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20fix=20no-unpublished-(require|im?= =?UTF-8?q?port)=20false=20positive=20(fixes=20#126)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/util/get-npmignore.js | 17 +++++++++++++---- .../no-unpublished/issue126/package.json | 12 ++++++++++++ tests/lib/rules/no-unpublished-require.js | 7 ++++++- 3 files changed, 31 insertions(+), 5 deletions(-) create mode 100644 tests/fixtures/no-unpublished/issue126/package.json diff --git a/lib/util/get-npmignore.js b/lib/util/get-npmignore.js index d19a8f4e..fd06f07a 100644 --- a/lib/util/get-npmignore.js +++ b/lib/util/get-npmignore.js @@ -84,17 +84,26 @@ function parseWhiteList(files) { } const ig = ignore() + const igN = ignore() + let hasN = false for (const file of files) { if (typeof file === "string" && file) { - const prefix = file.startsWith("!") ? "!" : "" const body = file.replace(SLASH_AT_BEGIN_AND_END, "") - ig.add(`${prefix}/${body}`) - ig.add(`${prefix}/${body}/**`) + if (file.startsWith("!")) { + igN.add(`${body}`) + igN.add(`${body}/**`) + hasN = true + } else { + ig.add(`/${body}`) + ig.add(`/${body}/**`) + } } } - return ig.createFilter() + return hasN + ? or(ig.createFilter(), not(igN.createFilter())) + : ig.createFilter() } /** diff --git a/tests/fixtures/no-unpublished/issue126/package.json b/tests/fixtures/no-unpublished/issue126/package.json new file mode 100644 index 00000000..85a25a9d --- /dev/null +++ b/tests/fixtures/no-unpublished/issue126/package.json @@ -0,0 +1,12 @@ +{ + "private": true, + "name": "test", + "version": "0.0.0", + "files": [ + "lib", + "!test.js" + ], + "devDependencies": { + "bbb": "0.0.0" + } +} diff --git a/tests/lib/rules/no-unpublished-require.js b/tests/lib/rules/no-unpublished-require.js index 854bc39f..c3a86134 100644 --- a/tests/lib/rules/no-unpublished-require.js +++ b/tests/lib/rules/no-unpublished-require.js @@ -240,10 +240,15 @@ ruleTester.run("no-unpublished-require", rule, { // Negative patterns in files field. { - code: "require('bbb');", + code: "require('bbb'); //XXX", filename: fixture("negative-in-files/lib/__test__/index.js"), env: { node: true }, }, + { + code: "require('bbb'); //XXX", + filename: fixture("issue126/lib/test.js"), + env: { node: true }, + }, ], invalid: [ {