From 43a7e207ca8c0b816d4fba2b4b290f761c33adb4 Mon Sep 17 00:00:00 2001 From: Toru Nagashima Date: Fri, 5 Jun 2020 18:51:51 +0900 Subject: [PATCH] Update: pass cwd to formatters (refs eslint/rfcs#57) --- lib/eslint/eslint.js | 5 ++++- tests/_utils/in-memory-fs.js | 5 +++++ tests/lib/cli.js | 11 +++++++---- tests/lib/eslint/eslint.js | 17 +++++++++++++++++ 4 files changed, 33 insertions(+), 5 deletions(-) diff --git a/lib/eslint/eslint.js b/lib/eslint/eslint.js index d195aab09f1..02ce1ba51d1 100644 --- a/lib/eslint/eslint.js +++ b/lib/eslint/eslint.js @@ -575,7 +575,7 @@ class ESLint { throw new Error("'name' must be a string"); } - const { cliEngine } = privateMembersMap.get(this); + const { cliEngine, options } = privateMembersMap.get(this); const formatter = cliEngine.getFormatter(name); if (typeof formatter !== "function") { @@ -595,6 +595,9 @@ class ESLint { results.sort(compareResultsByFilePath); return formatter(results, { + get cwd() { + return options.cwd; + }, get rulesMeta() { if (!rulesMeta) { rulesMeta = createRulesMeta(cliEngine.getRules()); diff --git a/tests/_utils/in-memory-fs.js b/tests/_utils/in-memory-fs.js index a45820917f2..cb3e95f663f 100644 --- a/tests/_utils/in-memory-fs.js +++ b/tests/_utils/in-memory-fs.js @@ -392,6 +392,7 @@ function defineCascadingConfigArrayFactoryWithInMemoryFileSystem({ // Override the default cwd. return { fs, + stubs, RelativeModuleResolver, ConfigArrayFactory, CascadingConfigArrayFactory: cwd === process.cwd @@ -417,6 +418,7 @@ function defineFileEnumeratorWithInMemoryFileSystem({ } = {}) { const { fs, + stubs, RelativeModuleResolver, ConfigArrayFactory, CascadingConfigArrayFactory @@ -430,6 +432,7 @@ function defineFileEnumeratorWithInMemoryFileSystem({ // Override the default cwd. return { fs, + stubs, RelativeModuleResolver, ConfigArrayFactory, CascadingConfigArrayFactory, @@ -456,6 +459,7 @@ function defineCLIEngineWithInMemoryFileSystem({ } = {}) { const { fs, + stubs, RelativeModuleResolver, ConfigArrayFactory, CascadingConfigArrayFactory, @@ -463,6 +467,7 @@ function defineCLIEngineWithInMemoryFileSystem({ } = defineFileEnumeratorWithInMemoryFileSystem({ cwd, files }); const { CLIEngine, getCLIEngineInternalSlots } = proxyquire(CLIEnginePath, { + ...stubs, fs, "./cascading-config-array-factory": { CascadingConfigArrayFactory }, "./file-enumerator": { FileEnumerator }, diff --git a/tests/lib/cli.js b/tests/lib/cli.js index a1d9a23e491..359ee6d6fc5 100644 --- a/tests/lib/cli.js +++ b/tests/lib/cli.js @@ -241,10 +241,13 @@ describe("cli", () => { // Check metadata. const { metadata } = JSON.parse(log.info.args[0][0]); - const expectedMetadata = Array.from(BuiltinRules).reduce((obj, [ruleId, rule]) => { - obj.rulesMeta[ruleId] = rule.meta; - return obj; - }, { rulesMeta: {} }); + const expectedMetadata = { + cwd: process.cwd(), + rulesMeta: Array.from(BuiltinRules).reduce((obj, [ruleId, rule]) => { + obj[ruleId] = rule.meta; + return obj; + }, {}) + }; assert.deepStrictEqual(metadata, expectedMetadata); }); diff --git a/tests/lib/eslint/eslint.js b/tests/lib/eslint/eslint.js index 6807a57aa8a..5b54769848c 100644 --- a/tests/lib/eslint/eslint.js +++ b/tests/lib/eslint/eslint.js @@ -4318,6 +4318,23 @@ describe("ESLint", () => { await engine.loadFormatter(5); }, /'name' must be a string/u); }); + + it("should pass cwd to the `cwd` property of the second argument.", async () => { + const ESLintWithInMemoryFs = defineESLintWithInMemoryFileSystem({ + cwd: () => __dirname, + files: { + "node_modules/eslint-formatter-return-cwd/index.js": "module.exports = (results, context) => context.cwd;", + "test.js": "", + ".eslintrc.json": "{}" + } + }).ESLint; + const cwd = path.join(__dirname, "foo/bar"); + const eslint = new ESLintWithInMemoryFs({ cwd }); + const formatter = await eslint.loadFormatter("return-cwd"); + + // This formatter just returns cwd. + assert.strictEqual(formatter.format([]), cwd); + }); }); describe("getErrorResults()", () => {