From 996a290afd7f8e37a93f23281276a7b5f4b8cd29 Mon Sep 17 00:00:00 2001 From: Wyatt Johnson Date: Mon, 10 Jun 2024 12:57:46 -0700 Subject: [PATCH] [lint] Allow lint warnings to pass in CI (#66140) To allow us to incrementally adopt more comprehensive linting rules, this pull request disables the previous behaviour of failing CI when any warnings were discovered. Instead, this modifies the previous warnings to be errors which will preserve the previous linting behaviour. As we enable new lint rules, they can be added as warnings which will gently nudge us towards fixing in related pull requests. --- .eslintrc.json | 182 ++++++++++++++++---------------- lint-staged.config.js | 2 +- package.json | 4 +- packages/next-env/package.json | 2 +- packages/next-env/tsconfig.json | 4 +- 5 files changed, 98 insertions(+), 96 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 0081edc950..4151575356 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -93,7 +93,7 @@ ], "no-unused-vars": "off", "@typescript-eslint/no-unused-vars": [ - "warn", + "error", { "args": "none", "ignoreRestSiblings": true @@ -102,7 +102,7 @@ "no-use-before-define": "off", "no-useless-constructor": "off", "@typescript-eslint/no-use-before-define": "off", - "@typescript-eslint/no-useless-constructor": "warn", + "@typescript-eslint/no-useless-constructor": "error", "@typescript-eslint/prefer-literal-enum-member": "error" } }, @@ -150,7 +150,7 @@ "packages/next/webpack.config.js" ], "rules": { - "no-shadow": ["warn", { "builtinGlobals": false }], + "no-shadow": ["error", { "builtinGlobals": false }], "import/no-extraneous-dependencies": [ "error", { "devDependencies": false } @@ -162,9 +162,9 @@ "rules": { // Note: you must disable the base rule as it can report incorrect errors "no-shadow": "off", - "@typescript-eslint/no-shadow": ["warn", { "builtinGlobals": false }], + "@typescript-eslint/no-shadow": ["error", { "builtinGlobals": false }], "@typescript-eslint/no-unused-vars": [ - "warn", + "error", { "args": "all", "argsIgnorePattern": "^_", @@ -211,39 +211,39 @@ } ], "rules": { - "array-callback-return": "warn", - "default-case": ["warn", { "commentPattern": "^no default$" }], - "dot-location": ["warn", "property"], - "eqeqeq": ["warn", "smart"], - "new-parens": "warn", - "no-array-constructor": "warn", - "no-caller": "warn", - "no-cond-assign": ["warn", "except-parens"], - "no-const-assign": "warn", - "no-control-regex": "warn", - "no-delete-var": "warn", - "no-dupe-args": "warn", - "no-dupe-class-members": "warn", - "no-dupe-keys": "warn", - "no-duplicate-case": "warn", - "no-empty-character-class": "warn", - "no-empty-pattern": "warn", - "no-eval": "warn", - "no-ex-assign": "warn", - "no-extend-native": "warn", - "no-extra-bind": "warn", - "no-extra-label": "warn", - "no-fallthrough": "warn", - "no-func-assign": "warn", - "no-implied-eval": "warn", - "no-invalid-regexp": "warn", - "no-iterator": "warn", - "no-label-var": "warn", - "no-labels": ["warn", { "allowLoop": true, "allowSwitch": false }], - "no-lone-blocks": "warn", - "no-loop-func": "warn", + "array-callback-return": "error", + "default-case": ["error", { "commentPattern": "^no default$" }], + "dot-location": ["error", "property"], + "eqeqeq": ["error", "smart"], + "new-parens": "error", + "no-array-constructor": "error", + "no-caller": "error", + "no-cond-assign": ["error", "except-parens"], + "no-const-assign": "error", + "no-control-regex": "error", + "no-delete-var": "error", + "no-dupe-args": "error", + "no-dupe-class-members": "error", + "no-dupe-keys": "error", + "no-duplicate-case": "error", + "no-empty-character-class": "error", + "no-empty-pattern": "error", + "no-eval": "error", + "no-ex-assign": "error", + "no-extend-native": "error", + "no-extra-bind": "error", + "no-extra-label": "error", + "no-fallthrough": "error", + "no-func-assign": "error", + "no-implied-eval": "error", + "no-invalid-regexp": "error", + "no-iterator": "error", + "no-label-var": "error", + "no-labels": ["error", { "allowLoop": true, "allowSwitch": false }], + "no-lone-blocks": "error", + "no-loop-func": "error", "no-mixed-operators": [ - "warn", + "error", { "groups": [ ["&", "|", "^", "~", "<<", ">>", ">>>"], @@ -254,37 +254,37 @@ "allowSamePrecedence": false } ], - "no-multi-str": "warn", - "no-native-reassign": "warn", - "no-negated-in-lhs": "warn", - "no-new-func": "warn", - "no-new-object": "warn", - "no-new-symbol": "warn", - "no-new-wrappers": "warn", - "no-obj-calls": "warn", - "no-octal": "warn", - "no-octal-escape": "warn", - "no-regex-spaces": "warn", + "no-multi-str": "error", + "no-native-reassign": "error", + "no-negated-in-lhs": "error", + "no-new-func": "error", + "no-new-object": "error", + "no-new-symbol": "error", + "no-new-wrappers": "error", + "no-obj-calls": "error", + "no-octal": "error", + "no-octal-escape": "error", + "no-regex-spaces": "error", "no-restricted-syntax": [ - "warn", + "error", "WithStatement", { "message": "substr() is deprecated, use slice() or substring() instead", "selector": "MemberExpression > Identifier[name='substr']" } ], - "no-script-url": "warn", - "no-self-assign": "warn", - "no-self-compare": "warn", - "no-sequences": "warn", - "no-shadow-restricted-names": "warn", - "no-sparse-arrays": "warn", + "no-script-url": "error", + "no-self-assign": "error", + "no-self-compare": "error", + "no-sequences": "error", + "no-shadow-restricted-names": "error", + "no-sparse-arrays": "error", "no-template-curly-in-string": "error", - "no-this-before-super": "warn", - "no-throw-literal": "warn", + "no-this-before-super": "error", + "no-throw-literal": "error", "no-undef": "error", - "no-unexpected-multiline": "warn", - "no-unreachable": "warn", + "no-unexpected-multiline": "error", + "no-unreachable": "error", "no-unused-expressions": [ "error", { @@ -293,64 +293,64 @@ "allowTaggedTemplates": true } ], - "no-unused-labels": "warn", + "no-unused-labels": "error", "no-unused-vars": [ - "warn", + "error", { "args": "none", "ignoreRestSiblings": true } ], "no-use-before-define": "off", - "no-useless-computed-key": "warn", - "no-useless-concat": "warn", - "no-useless-constructor": "warn", - "no-useless-escape": "warn", + "no-useless-computed-key": "error", + "no-useless-concat": "error", + "no-useless-constructor": "error", + "no-useless-escape": "error", "no-useless-rename": [ - "warn", + "error", { "ignoreDestructuring": false, "ignoreImport": false, "ignoreExport": false } ], - "no-with": "warn", - "no-whitespace-before-property": "warn", - "react-hooks/exhaustive-deps": "warn", - "require-yield": "warn", - "rest-spread-spacing": ["warn", "never"], - "strict": ["warn", "never"], - "unicode-bom": ["warn", "never"], - "use-isnan": "warn", - "valid-typeof": "warn", - "getter-return": "warn", - "react/forbid-foreign-prop-types": ["warn", { "allowInPropTypes": true }], - "react/jsx-no-comment-textnodes": "warn", - "react/jsx-no-duplicate-props": "warn", - "react/jsx-no-target-blank": "warn", + "no-with": "error", + "no-whitespace-before-property": "error", + "react-hooks/exhaustive-deps": "error", + "require-yield": "error", + "rest-spread-spacing": ["error", "never"], + "strict": ["error", "never"], + "unicode-bom": ["error", "never"], + "use-isnan": "error", + "valid-typeof": "error", + "getter-return": "error", + "react/forbid-foreign-prop-types": ["error", { "allowInPropTypes": true }], + "react/jsx-no-comment-textnodes": "error", + "react/jsx-no-duplicate-props": "error", + "react/jsx-no-target-blank": "error", "react/jsx-no-undef": "error", "react/jsx-pascal-case": [ - "warn", + "error", { "allowAllCaps": true, "ignore": [] } ], - "react/jsx-uses-react": "warn", - "react/jsx-uses-vars": "warn", - "react/no-danger-with-children": "warn", - "react/no-deprecated": "warn", - "react/no-direct-mutation-state": "warn", - "react/no-is-mounted": "warn", + "react/jsx-uses-react": "error", + "react/jsx-uses-vars": "error", + "react/no-danger-with-children": "error", + "react/no-deprecated": "error", + "react/no-direct-mutation-state": "error", + "react/no-is-mounted": "error", "react/no-typos": "error", "react/react-in-jsx-scope": "off", "react/require-render-return": "error", - "react/style-prop-object": "warn", + "react/style-prop-object": "error", "react-hooks/rules-of-hooks": "error", - // "@typescript-eslint/non-nullable-type-assertion-style": "warn", - "@typescript-eslint/prefer-as-const": "warn", + // "@typescript-eslint/non-nullable-type-assertion-style": "error", + "@typescript-eslint/prefer-as-const": "error", "@typescript-eslint/no-redeclare": [ - "warn", + "error", { "builtinGlobals": false, "ignoreDeclarationMerge": true } ] } diff --git a/lint-staged.config.js b/lint-staged.config.js index 9397860c6c..9cdc3d318c 100644 --- a/lint-staged.config.js +++ b/lint-staged.config.js @@ -30,7 +30,7 @@ module.exports = { return [ `prettier --with-node-modules --ignore-path .prettierignore --write ${escapedFileNames}`, - `eslint --no-ignore --max-warnings=0 --fix ${eslintFileNames + `eslint --no-ignore --fix ${eslintFileNames .filter((filename) => filename !== null) .map((filename) => { return `"${filename}"` diff --git a/package.json b/package.json index d7add869c8..4ebdbf04f7 100644 --- a/package.json +++ b/package.json @@ -33,12 +33,12 @@ "git-clean": "git clean -d -x -e node_modules -e packages -f", "typescript": "tsc --noEmit", "lint-typescript": "turbo run typescript", - "lint-eslint": "eslint . --ext js,jsx,ts,tsx --max-warnings=0 --config .eslintrc.json --no-eslintrc", + "lint-eslint": "eslint . --ext js,jsx,ts,tsx --config .eslintrc.json --no-eslintrc", "lint-no-typescript": "run-p prettier-check lint-eslint lint-language", "types-and-precompiled": "run-p lint-typescript check-precompiled validate-externals-doc", "validate-externals-doc": "node ./scripts/validate-externals-doc.js", "lint": "run-p test-types lint-typescript prettier-check lint-eslint lint-language", - "lint-fix": "pnpm prettier-fix && eslint . --ext js,jsx,ts,tsx --fix --max-warnings=0 --config .eslintrc.json --no-eslintrc", + "lint-fix": "pnpm prettier-fix && eslint . --ext js,jsx,ts,tsx --fix --config .eslintrc.json --no-eslintrc", "lint-language": "alex .", "prettier-check": "prettier --check .", "check-examples": "./scripts/check-examples.sh", diff --git a/packages/next-env/package.json b/packages/next-env/package.json index fa1cc5d6b0..689c309784 100644 --- a/packages/next-env/package.json +++ b/packages/next-env/package.json @@ -23,7 +23,7 @@ "scripts": { "dev": "ncc build ./index.ts -w -o dist/", "prerelease": "node ../../scripts/rm.mjs dist", - "types": "tsc index.ts --declaration --emitDeclarationOnly --declarationDir dist --esModuleInterop", + "types": "tsc --declaration --emitDeclarationOnly --declarationDir dist", "release": "ncc build ./index.ts -o ./dist/ --minify --no-cache --no-source-map-register", "build": "pnpm release && pnpm types", "prepublishOnly": "cd ../../ && turbo run build" diff --git a/packages/next-env/tsconfig.json b/packages/next-env/tsconfig.json index d0e9e223e6..bf4c959b79 100644 --- a/packages/next-env/tsconfig.json +++ b/packages/next-env/tsconfig.json @@ -6,5 +6,7 @@ "resolveJsonModule": true, "esModuleInterop": true, "skipLibCheck": false - } + }, + "include": ["**/*.ts"], + "exclude": ["node_modules", "dist"] }