From 9230df06548ebda5d0239477194d1417fc39ea80 Mon Sep 17 00:00:00 2001 From: Milos Djermanovic Date: Wed, 30 Aug 2023 15:43:22 +0200 Subject: [PATCH 1/3] chore: switch to eslint flat config --- .eslintrc.cjs | 24 ------------------------ eslint.config.js | 30 ++++++++++++++++++++++++++++++ lib/init/config-file.js | 2 -- lib/init/config-initializer.js | 4 +++- lib/init/npm-utils.js | 3 +-- package.json | 9 ++++----- tests/init/config-file.js | 6 +++--- tests/init/config-initializer.js | 2 +- 8 files changed, 42 insertions(+), 38 deletions(-) delete mode 100644 .eslintrc.cjs create mode 100644 eslint.config.js diff --git a/.eslintrc.cjs b/.eslintrc.cjs deleted file mode 100644 index 461c720c..00000000 --- a/.eslintrc.cjs +++ /dev/null @@ -1,24 +0,0 @@ -"use strict"; - -module.exports = { - root: true, - extends: [ - "eslint" - ], - parserOptions: { - ecmaVersion: "latest" - }, - overrides: [ - { - files: [ - "tests/**/*.js" - ], - env: { - mocha: true - } - } - ], - ignorePatterns: [ - "fixtures/" - ] -}; diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 00000000..ed85529a --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,30 @@ +import eslintConfigESLint from "eslint-config-eslint"; +import globals from "globals"; + +export default [ + { + ignores: [ + "coverage/", + "tests/fixtures/" + ] + }, + ...eslintConfigESLint, + { + settings: { + jsdoc: { + preferredTypes: { + Object: "object", + "object<>": "Object" + } + } + } + }, + { + files: ["tests/**"], + languageOptions: { + globals: { + ...globals.mocha + } + } + } +]; diff --git a/lib/init/config-file.js b/lib/init/config-file.js index 7823fa37..8bff8401 100644 --- a/lib/init/config-file.js +++ b/lib/init/config-file.js @@ -63,8 +63,6 @@ function writeJSONConfigFile(config, filePath) { async function writeYAMLConfigFile(config, filePath) { debug(`Writing YAML config file: ${filePath}`); - // lazy load YAML to improve performance when not used - // eslint-disable-next-line node/no-unsupported-features/es-syntax const yaml = await import("js-yaml"); const content = yaml.dump(config, { sortKeys: true }); diff --git a/lib/init/config-initializer.js b/lib/init/config-initializer.js index ad456f00..62da06b1 100644 --- a/lib/init/config-initializer.js +++ b/lib/init/config-initializer.js @@ -392,6 +392,7 @@ function askInstallModules(modules) { /** * Ask use a few questions on command prompt * @returns {Promise} The promise with the result of the prompt + * @throws {Error} If `package.json` file doesn't exist. */ function promptUser() { const packageJsonExists = npmUtils.checkPackageJson(); @@ -598,7 +599,8 @@ function promptUser() { } /* istanbul ignore next */ -/** an wrapper for promptUser +/** + * an wrapper for promptUser * @returns {void} */ function initializeConfig() { diff --git a/lib/init/npm-utils.js b/lib/init/npm-utils.js index 3de34180..cfce2172 100644 --- a/lib/init/npm-utils.js +++ b/lib/init/npm-utils.js @@ -52,8 +52,7 @@ function findPackageJson(startDir) { function installSyncSaveDev(packages, packageManager = "npm") { const packageList = Array.isArray(packages) ? packages : [packages]; const installCmd = packageManager === "yarn" ? "add" : "install"; - const installProcess = spawn.sync(packageManager, [installCmd, "-D"].concat(packageList), - { stdio: "inherit" }); + const installProcess = spawn.sync(packageManager, [installCmd, "-D"].concat(packageList), { stdio: "inherit" }); const error = installProcess.error; if (error && error.code === "ENOENT") { diff --git a/package.json b/package.json index eb584643..295be027 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "access": "public" }, "scripts": { - "lint": "eslint .", + "lint": "eslint . --report-unused-disable-directives", "release:generate:latest": "eslint-generate-release", "release:generate:alpha": "eslint-generate-prerelease alpha", "release:generate:beta": "eslint-generate-prerelease beta", @@ -55,13 +55,12 @@ "devDependencies": { "c8": "^7.10.0", "chai": "^4.3.4", - "eslint": "^8.2.0", - "eslint-config-eslint": "^7.0.0", - "eslint-plugin-jsdoc": "^37.0.3", - "eslint-plugin-node": "^11.1.0", + "eslint": "^8.48.0", + "eslint-config-eslint": "^9.0.0", "eslint-release": "^3.2.0", "esmock": "^2.2.3", "espree": "^9.0.0", + "globals": "^13.21.0", "lint-staged": "^12.1.2", "memfs": "^3.4.0", "mocha": "^9.1.3", diff --git a/tests/init/config-file.js b/tests/init/config-file.js index cfcf752d..64947291 100644 --- a/tests/init/config-file.js +++ b/tests/init/config-file.js @@ -66,7 +66,7 @@ describe("ConfigFile", () => { it(`should write a file through fs when a ${fileType} path is passed`, async () => { const fakeFS = { - writeFileSync: () => {} + writeFileSync() {} }; sinon.mock(fakeFS).expects("writeFileSync").withExactArgs( @@ -84,7 +84,7 @@ describe("ConfigFile", () => { it("should include a newline character at EOF", async () => { const fakeFS = { - writeFileSync: () => {} + writeFileSync() {} }; sinon.mock(fakeFS).expects("writeFileSync").withExactArgs( @@ -103,7 +103,7 @@ describe("ConfigFile", () => { it("should run 'eslint --fix' to make sure js config files match linting rules", async () => { const fakeFS = { - writeFileSync: () => {} + writeFileSync() {} }; const singleQuoteConfig = { diff --git a/tests/init/config-initializer.js b/tests/init/config-initializer.js index 91794661..18261b2d 100644 --- a/tests/init/config-initializer.js +++ b/tests/init/config-initializer.js @@ -66,7 +66,7 @@ describe("configInitializer", () => { // copy into clean area so as not to get "infected" by this project's .eslintrc files before(() => { - const __filename = fileURLToPath(import.meta.url); // eslint-disable-line no-underscore-dangle + const __filename = fileURLToPath(import.meta.url); // eslint-disable-line no-underscore-dangle -- Conventional fixtureDir = path.join(__filename, "../../../tmp/eslint/fixtures/config-initializer"); localInstalledEslintDir = path.join(fixtureDir, "./node_modules/eslint"); From 188db8a5d7146b72c56d22fd2ff3f0335b56d2ad Mon Sep 17 00:00:00 2001 From: Milos Djermanovic Date: Wed, 30 Aug 2023 15:46:50 +0200 Subject: [PATCH 2/3] remove settings --- eslint.config.js | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/eslint.config.js b/eslint.config.js index ed85529a..a8293635 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -9,16 +9,6 @@ export default [ ] }, ...eslintConfigESLint, - { - settings: { - jsdoc: { - preferredTypes: { - Object: "object", - "object<>": "Object" - } - } - } - }, { files: ["tests/**"], languageOptions: { From 89f9c428b084e623783f4049431b17ed63aabf13 Mon Sep 17 00:00:00 2001 From: Milos Djermanovic Date: Wed, 30 Aug 2023 15:49:26 +0200 Subject: [PATCH 3/3] restore comment --- lib/init/config-file.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/init/config-file.js b/lib/init/config-file.js index 8bff8401..e8ca0399 100644 --- a/lib/init/config-file.js +++ b/lib/init/config-file.js @@ -63,6 +63,7 @@ function writeJSONConfigFile(config, filePath) { async function writeYAMLConfigFile(config, filePath) { debug(`Writing YAML config file: ${filePath}`); + // lazy load YAML to improve performance when not used const yaml = await import("js-yaml"); const content = yaml.dump(config, { sortKeys: true });