From 1430d48910d9bba1e785f5dc4947c312ccc33d70 Mon Sep 17 00:00:00 2001 From: nikhil Date: Wed, 21 Sep 2022 09:28:59 -0400 Subject: [PATCH] chore(eslint): More work on the root `.eslintrc` * Remove the site-specific and `packages/new-design`-specific `.eslintrc` files * Use `eslint-config-next` where appropriate (this fixes linting for sites/shared, bringing it in line with the other sites) * Be more strict about which envs/globals are allowed in any given JavaScript file; assume none by default. --- .eslintrc.cjs | 65 ++++++++++++++++++++++++++----- package.json | 1 + packages/new-design/.eslintrc.yml | 18 --------- sites/dev/.eslintrc.json | 3 -- sites/lab/.eslintrc.json | 3 -- sites/org/.eslintrc.json | 3 -- sites/shared/.eslintrc.yml | 18 --------- yarn.lock | 2 +- 8 files changed, 58 insertions(+), 55 deletions(-) delete mode 100644 packages/new-design/.eslintrc.yml delete mode 100644 sites/dev/.eslintrc.json delete mode 100644 sites/lab/.eslintrc.json delete mode 100644 sites/org/.eslintrc.json delete mode 100644 sites/shared/.eslintrc.yml diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 213d746cc70..74e8b47dab2 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -1,7 +1,25 @@ +const nodeFiles = [ + '**/build.dflt.{js,mjs,cjs}', + '**/build.{js,mjs,cjs}', + '**/config/**', + '**/prebuild.{js,mjs,cjs}', + '**/prebuild/**', + '**/scripts/**', + 'packages/new-design/lib/**', + 'sites/backend/**', + 'sites/*/mdx/**', + 'sites/*/themes/**', +] +const frontendFiles = [ + '**/components/**', + '**/hooks/**', + '**/pages/**', + '**/page-templates/**', +] + module.exports = { extends: 'eslint:recommended', env: { - browser: true, es2021: true, }, // Required when using experimental EcmaScript features @@ -17,13 +35,48 @@ module.exports = { }, rules: {}, overrides: [ - // JavaScript source files + // Partitioned JavaScript files + { + files: nodeFiles, + env: { + node: true, + }, + rules: { + 'no-console': 'off', + }, + }, + { + files: frontendFiles, + excludedFiles: nodeFiles, + extends: ['next/core-web-vitals'], + env: { + // We can be stricter than 'next/core-web-vitals' is + node: false, + }, + }, + { + files: '**', + excludedFiles: [].concat(nodeFiles, frontendFiles), + env: { + 'shared-node-browser': true, + }, + }, + // Additional globals for JavaScript files that happen to be CommonJS. + // Only allowed in *.cjs files, not *.js files, because we probably want to move towards + // a `"type": "module"` future where any CommonJS files would have to have .cjs extensions. { files: ['**/*.cjs'], env: { commonjs: true, }, }, + // Additional globals for JavaScript files that happen to contain Mocha tests + { + files: ['**/tests/**', '**/*.test.mjs'], + env: { + mocha: true, + }, + }, // JSON files { @@ -41,7 +94,7 @@ module.exports = { // Markdown files { - files: ['**/*.md'], + files: ['**/markdown/**', '**/*.md'], plugins: ['markdown'], processor: 'markdown/markdown', }, @@ -56,10 +109,4 @@ module.exports = { }, }, ], - globals: { - it: 'readonly', - describe: 'readonly', - process: 'readonly', - __dirname: 'readonly', - }, } diff --git a/package.json b/package.json index 90fb747748a..e58266a8740 100644 --- a/package.json +++ b/package.json @@ -75,6 +75,7 @@ "esbuild": "^0.15.3", "esbuild-plugin-yaml": "^0.0.1", "eslint": "^8.23.1", + "eslint-config-next": "^12.3.1", "eslint-plugin-jsonc": "^2.4.0", "eslint-plugin-markdown": "^3.0.0", "eslint-plugin-yaml": "^0.5.0", diff --git a/packages/new-design/.eslintrc.yml b/packages/new-design/.eslintrc.yml deleted file mode 100644 index b39fd0463e8..00000000000 --- a/packages/new-design/.eslintrc.yml +++ /dev/null @@ -1,18 +0,0 @@ -env: - browser: true - es2021: true -extends: eslint:recommended -overrides: - - files: ["*.yaml", "*.yml"] - plugins: ["yaml"] - extends: ["plugin:yaml/recommended"] -parserOptions: - ecmaVersion: latest - sourceType: module -rules: {} -globals: - it: readonly - describe: readonly - process: readonly - __dirname: readonly - diff --git a/sites/dev/.eslintrc.json b/sites/dev/.eslintrc.json deleted file mode 100644 index bffb357a712..00000000000 --- a/sites/dev/.eslintrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "next/core-web-vitals" -} diff --git a/sites/lab/.eslintrc.json b/sites/lab/.eslintrc.json deleted file mode 100644 index bffb357a712..00000000000 --- a/sites/lab/.eslintrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "next/core-web-vitals" -} diff --git a/sites/org/.eslintrc.json b/sites/org/.eslintrc.json deleted file mode 100644 index bffb357a712..00000000000 --- a/sites/org/.eslintrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "next/core-web-vitals" -} diff --git a/sites/shared/.eslintrc.yml b/sites/shared/.eslintrc.yml deleted file mode 100644 index 592252726ca..00000000000 --- a/sites/shared/.eslintrc.yml +++ /dev/null @@ -1,18 +0,0 @@ -env: - browser: true - es2021: true -extends: - - eslint:recommended - - plugin:react/recommended -overrides: [] -parserOptions: - ecmaVersion: latest - sourceType: module -plugins: - - react -rules: - react/prop-types: off - react/react-in-jsx-scope: off -globals: - module: readonly - diff --git a/yarn.lock b/yarn.lock index fd068404ee3..33cb48ec98f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7823,7 +7823,7 @@ escodegen@^2.0.0: optionalDependencies: source-map "~0.6.1" -eslint-config-next@12.3.1: +eslint-config-next@12.3.1, eslint-config-next@^12.3.1: version "12.3.1" resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-12.3.1.tgz#5d4eb0b7903cea81fd0d5106601d3afb0a453ff4" integrity sha512-EN/xwKPU6jz1G0Qi6Bd/BqMnHLyRAL0VsaQaWA7F3KkjAgZHi4f1uL1JKGWNxdQpHTW/sdGONBd0bzxUka/DJg==