From 816f8cf66692eb75ff45bb10939660d580f085fa Mon Sep 17 00:00:00 2001 From: Amin Yahyaabadi Date: Wed, 3 Feb 2021 18:19:48 -0600 Subject: [PATCH] feat: add eslint-plugin-node --- index.js | 23 ++++++++++++++++++++--- package.json | 1 + pnpm-lock.yaml | 31 ++++++++++++++++++++++++++++++- spec/test.js | 17 ++++++++--------- 4 files changed, 59 insertions(+), 13 deletions(-) diff --git a/index.js b/index.js index 3425a9f..96c6b2f 100644 --- a/index.js +++ b/index.js @@ -1,3 +1,13 @@ +const pluginNodeRules = { + "node/no-exports-assign": "error", + "node/process-exit-as-throw": "error", + "node/shebang": "error", + "node/no-deprecated-api": "error", + // "node/file-extension-in-import": ["warn", "always"], + "node/prefer-promises/dns": "error", + "node/prefer-promises/fs": "error", +} + module.exports = { // JS Files root: true, @@ -20,16 +30,19 @@ module.exports = { ecmaVersion: 2021, sourceType: "module", }, - plugins: ["only-warn"], + plugins: ["node", "only-warn"], extends: ["eslint:recommended", "plugin:optimize-regex/all", "prettier"], ignorePatterns: ["node_modules/"], + rules: { + ...pluginNodeRules, + }, overrides: [ { // Bundled node version with atom has an old ESLint // TypeScript files files: ["**/*.ts", "**/*.tsx"], parser: "@typescript-eslint/parser", - plugins: ["@typescript-eslint", "only-warn"], + plugins: ["@typescript-eslint", "node", "only-warn"], extends: [ "eslint:recommended", "plugin:@typescript-eslint/eslint-recommended", @@ -46,6 +59,7 @@ module.exports = { "@typescript-eslint/member-delimiter-style": "off", "@typescript-eslint/no-inferrable-types": "off", "@typescript-eslint/no-non-null-assertion": "off", + ...pluginNodeRules, }, }, { @@ -66,8 +80,11 @@ module.exports = { // CoffeeScript and CSON files files: ["**/*.coffee", "**/*.cson"], parser: "eslint-plugin-coffee", - plugins: ["coffee", "only-warn"], + plugins: ["coffee", "node", "only-warn"], extends: ["plugin:coffee/eslint-recommended", "plugin:optimize-regex/all", "plugin:coffee/prettier"], + rules: { + ...pluginNodeRules, + }, }, { // YAML files diff --git a/package.json b/package.json index 4083799..31fc862 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,7 @@ "babel-eslint": "^10.1.0", "eslint-plugin-coffee": "^0.1.13", "eslint-plugin-json": "^2.1.2", + "eslint-plugin-node": "^11.1.0", "eslint-plugin-only-warn": "^1.0.2", "eslint-plugin-optimize-regex": "^1.2.0", "eslint-config-prettier": "^7.2.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e3bdbe4..816f271 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,6 +9,7 @@ importers: eslint-config-prettier: 7.2.0_eslint@7.5.0 eslint-plugin-coffee: 0.1.13_eslint@7.5.0 eslint-plugin-json: 2.1.2 + eslint-plugin-node: 11.1.0_eslint@7.5.0 eslint-plugin-only-warn: 1.0.2 eslint-plugin-optimize-regex: 1.2.0 eslint-plugin-react: 7.22.0_eslint@7.5.0 @@ -31,6 +32,7 @@ importers: eslint-config-prettier: ^7.2.0 eslint-plugin-coffee: ^0.1.13 eslint-plugin-json: ^2.1.2 + eslint-plugin-node: ^11.1.0 eslint-plugin-only-warn: ^1.0.2 eslint-plugin-optimize-regex: ^1.2.0 eslint-plugin-react: ^7.22.0 @@ -6622,6 +6624,18 @@ packages: eslint: '>=6.0.0' resolution: integrity: sha512-6z2T0e5UR+A346TTIoFj3f7pFVsiqYnXNaRYYi/gI9nlcAH8F/0Ym/1k3CNwZj0axBlLDla/VxAgU2L2ZDeJ5Q== + /eslint-plugin-es/3.0.1_eslint@7.5.0: + dependencies: + eslint: 7.5.0 + eslint-utils: 2.1.0 + regexpp: 3.1.0 + dev: false + engines: + node: '>=8.10.0' + peerDependencies: + eslint: '>=4.19.1' + resolution: + integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ== /eslint-plugin-import/2.22.0_eslint@7.19.0: dependencies: array-includes: 3.1.1 @@ -6718,6 +6732,22 @@ packages: eslint: ^3 || ^4 || ^5 || ^6 || ^7 resolution: integrity: sha512-i1S+P+c3HOlBJzMFORRbC58tHa65Kbo8b52/TwCwSKLohwvpfT5rm2GjGWzOHTEuq4xxf2aRlHHTtmExDQOP+g== + /eslint-plugin-node/11.1.0_eslint@7.5.0: + dependencies: + eslint: 7.5.0 + eslint-plugin-es: 3.0.1_eslint@7.5.0 + eslint-utils: 2.1.0 + ignore: 5.1.8 + minimatch: 3.0.4 + resolve: 1.19.0 + semver: 6.3.0 + dev: false + engines: + node: '>=8.10.0' + peerDependencies: + eslint: '>=5.16.0' + resolution: + integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g== /eslint-plugin-only-warn/1.0.2: engines: node: '>=6' @@ -11669,7 +11699,6 @@ packages: resolution: integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== /semver/6.3.0: - dev: true hasBin: true resolution: integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== diff --git a/spec/test.js b/spec/test.js index 69abafe..6c7ec1c 100644 --- a/spec/test.js +++ b/spec/test.js @@ -1,9 +1,9 @@ -const { mkdir, rm } = require("shelljs") -const execa = require('execa'); +const { mkdir, rm } = require("shelljs") +const execa = require("execa") const { resolve, dirname, join } = require("path") const pkg = require("../package.json") -const { download, extract } = require("gitly"); -const { existsSync } = require("fs"); +const { download, extract } = require("gitly") +const { existsSync } = require("fs") const testRepos = [ "atom-community/atom-ide-hyperclick", @@ -17,10 +17,10 @@ const testRepos = [ const root = resolve(dirname(__dirname)) const packedPkg = join(root, `${pkg.name}-${pkg.version}.tgz`) rm("-rf", packedPkg) - await execa.command("pnpm pack", {cwd: root}) + await execa.command("pnpm pack", { cwd: root }) for (const testRepo of testRepos) { - console.log(`Testing ${testRepo}`) + console.log(`Testing ${testRepo}`) const distFolder = resolve(join(__dirname, "fixtures", testRepo)) @@ -30,9 +30,8 @@ const testRepos = [ await extract(source, distFolder) } - await execa.command(`pnpm add "${packedPkg}" --ignore-scripts`, {cwd: distFolder, shell: true}) - await execa.command("eslint .", {cwd: distFolder, stdout: 'inherit'}) + await execa.command(`pnpm add "${packedPkg}" --ignore-scripts`, { cwd: distFolder, shell: true }) + await execa.command("eslint .", { cwd: distFolder, stdout: "inherit" }) } rm("-rf", packedPkg) - })()