From b1aaa79e9591cf53a7076b53d150da54b208559e Mon Sep 17 00:00:00 2001 From: Coby Sher <63015754+CobyPear@users.noreply.github.com> Date: Mon, 2 Aug 2021 13:28:41 -0500 Subject: [PATCH] [Focused Improvements] .eslintrc updates (#760) * Modularized package .eslintrc each package extends the base repo's .eslintrc. typescript and react configs have been pulled out into their own eslint-config files in a new eslint-config directory at the repo root. This should make linting easier to maintain when adding additional frameworks, and will necessitate less file changes in the future. * Updated disable-next-line comments to work with new structure * Line endings added * Readd mistakenly removed rules, remove redudent extends * Remove trailing comma * Fixed linebreak-style rule * Revert no-unused-vars change * Add newlines to package*.json in root, also trimlines dev: true * Revert ignorePattern * Remove parser options --- .eslintrc | 57 ++++++++++--------- .vscode/settings.json | 2 +- eslint-configs/react.js | 13 +++++ eslint-configs/typescript.js | 27 +++++++++ package-lock.json | 3 +- package.json | 2 +- packages/sitecore-jss-angular/.eslintrc | 8 +-- packages/sitecore-jss-cli/.eslintrc | 10 ++-- packages/sitecore-jss-dev-tools/.eslintrc | 10 ++-- packages/sitecore-jss-forms/.eslintrc | 8 +-- packages/sitecore-jss-manifest/.eslintrc | 9 ++- packages/sitecore-jss-nextjs/.eslintrc | 16 ++---- packages/sitecore-jss-proxy/.eslintrc | 8 +-- packages/sitecore-jss-react-forms/.eslintrc | 21 ++----- packages/sitecore-jss-react-native/.eslintrc | 26 ++++----- packages/sitecore-jss-react/.eslintrc | 19 ++----- .../sitecore-jss-rendering-host/.eslintrc | 8 +-- packages/sitecore-jss-tracking/.eslintrc | 6 ++ packages/sitecore-jss-vue/.eslintrc | 10 ++-- packages/sitecore-jss/.eslintrc | 8 +-- packages/sitecore-jss/src/layout/utils.ts | 2 + packages/sitecore-pipelines/.eslintrc | 9 ++- 22 files changed, 151 insertions(+), 131 deletions(-) create mode 100644 eslint-configs/react.js create mode 100644 eslint-configs/typescript.js create mode 100644 packages/sitecore-jss-tracking/.eslintrc diff --git a/.eslintrc b/.eslintrc index 596bbc45c0..58533d103a 100644 --- a/.eslintrc +++ b/.eslintrc @@ -2,7 +2,6 @@ "root": true, "extends": [ "eslint:recommended", - "plugin:@typescript-eslint/recommended", "plugin:jsdoc/recommended", "prettier", "prettier/@typescript-eslint" @@ -15,7 +14,11 @@ "ecmaVersion": 2020, "sourceType": "module" }, - "plugins": ["@typescript-eslint", "prettier", "jsdoc"], + "plugins": [ + "@typescript-eslint", + "prettier", + "jsdoc" + ], "env": { "browser": true, "node": true, @@ -29,31 +32,21 @@ "jsdoc/no-undefined-types": "off", "jsdoc/require-returns-type": "off", "prettier/prettier": "error", - "@typescript-eslint/naming-convention": [ + "no-use-before-define": "off", + "no-useless-escape": "off", + "spaced-comment": "error", + "curly": [ "error", - { - "format": ["PascalCase"], - "selector": "typeLike", - "custom": { - "regex": "^I[A-Z]", - "match": false - } - } + "multi-line" ], - "@typescript-eslint/member-ordering": "error", - "no-use-before-define": "off", - "@typescript-eslint/no-use-before-define": [ + "eol-last": [ "error", - { "functions": false, "variables": false } + "always" + ], + "linebreak-style": [ + "error", + "windows" ], - "@typescript-eslint/typedef": "error", - "@typescript-eslint/type-annotation-spacing": "error", - "@typescript-eslint/semi": "error", - "@typescript-eslint/no-var-requires": "off", - "no-useless-escape": "off", - "spaced-comment": "error", - "curly": ["error", "multi-line"], - "eol-last": ["error", "always"], "guard-for-in": "error", "no-unused-labels": "error", "no-caller": "error", @@ -63,12 +56,24 @@ "no-eval": "error", "dot-notation": "error", "no-trailing-spaces": "error", - "no-unused-expressions": ["error", { "allowShortCircuit": true, "allowTernary": true }], + "no-unused-expressions": [ + "error", + { + "allowShortCircuit": true, + "allowTernary": true + } + ], "brace-style": "error", - "quotes": ["error", "single"], + "quotes": [ + "error", + "single" + ], "radix": "error", "default-case": "error", "eqeqeq": "error", - "jsx-quotes": ["error", "prefer-double"] + "jsx-quotes": [ + "error", + "prefer-double" + ] } } diff --git a/.vscode/settings.json b/.vscode/settings.json index 96cb91f312..59540be9f1 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,3 @@ { "editor.fontSize": 13, -} \ No newline at end of file +} diff --git a/eslint-configs/react.js b/eslint-configs/react.js new file mode 100644 index 0000000000..65062901ae --- /dev/null +++ b/eslint-configs/react.js @@ -0,0 +1,13 @@ +module.exports = { + extends: ['plugin:react/recommended'], + plugins: ['react'], + settings: { + react: { + version: 'detect', + }, + }, + globals: { + React: 'writable', + JSX: 'true', + }, +}; diff --git a/eslint-configs/typescript.js b/eslint-configs/typescript.js new file mode 100644 index 0000000000..5c06f6b6b1 --- /dev/null +++ b/eslint-configs/typescript.js @@ -0,0 +1,27 @@ +module.exports = { + extends: ['plugin:@typescript-eslint/recommended'], + rules: { + '@typescript-eslint/naming-convention': [ + 'error', + { + format: ['PascalCase'], + selector: 'typeLike', + custom: { + regex: '^I[A-Z]', + match: false, + }, + }, + ], + '@typescript-eslint/member-ordering': 'error', + '@typescript-eslint/no-use-before-define': ['error', { functions: false, variables: false }], + '@typescript-eslint/typedef': 'error', + '@typescript-eslint/type-annotation-spacing': 'error', + '@typescript-eslint/semi': 'error', + '@typescript-eslint/no-var-requires': 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/explicit-module-boundary-types': 'off', + }, + globals: { + RequestInit: 'true', + }, +}; diff --git a/package-lock.json b/package-lock.json index d830257867..e61aa9f584 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8700,7 +8700,8 @@ "trim-newlines": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==" + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true }, "trim-off-newlines": { "version": "1.0.1", diff --git a/package.json b/package.json index 35f8038f14..7ac4c5b239 100644 --- a/package.json +++ b/package.json @@ -34,4 +34,4 @@ "prettier": "^1.14.3", "typescript": "^3.9.6" } -} \ No newline at end of file +} diff --git a/packages/sitecore-jss-angular/.eslintrc b/packages/sitecore-jss-angular/.eslintrc index ef49b98818..52b7699f65 100644 --- a/packages/sitecore-jss-angular/.eslintrc +++ b/packages/sitecore-jss-angular/.eslintrc @@ -1,9 +1,7 @@ { "extends": [ "plugin:@angular-eslint/recommended", - "../../.eslintrc" - ], - "rules": { - "@typescript-eslint/explicit-module-boundary-types": "off" - } + "../../.eslintrc", + "../../eslint-configs/typescript" + ] } diff --git a/packages/sitecore-jss-cli/.eslintrc b/packages/sitecore-jss-cli/.eslintrc index 5c9d573e39..705fa08f4c 100644 --- a/packages/sitecore-jss-cli/.eslintrc +++ b/packages/sitecore-jss-cli/.eslintrc @@ -1,6 +1,6 @@ { - "extends": "../../.eslintrc", - "rules": { - "@typescript-eslint/explicit-module-boundary-types": "off" - } -} \ No newline at end of file + "extends": [ + "../../.eslintrc", + "../../eslint-configs/typescript" + ] +} diff --git a/packages/sitecore-jss-dev-tools/.eslintrc b/packages/sitecore-jss-dev-tools/.eslintrc index 5c9d573e39..705fa08f4c 100644 --- a/packages/sitecore-jss-dev-tools/.eslintrc +++ b/packages/sitecore-jss-dev-tools/.eslintrc @@ -1,6 +1,6 @@ { - "extends": "../../.eslintrc", - "rules": { - "@typescript-eslint/explicit-module-boundary-types": "off" - } -} \ No newline at end of file + "extends": [ + "../../.eslintrc", + "../../eslint-configs/typescript" + ] +} diff --git a/packages/sitecore-jss-forms/.eslintrc b/packages/sitecore-jss-forms/.eslintrc index cf556dbaae..705fa08f4c 100644 --- a/packages/sitecore-jss-forms/.eslintrc +++ b/packages/sitecore-jss-forms/.eslintrc @@ -1,6 +1,6 @@ { - "extends": "../../.eslintrc", - "rules": { - "@typescript-eslint/explicit-module-boundary-types": "off" - } + "extends": [ + "../../.eslintrc", + "../../eslint-configs/typescript" + ] } diff --git a/packages/sitecore-jss-manifest/.eslintrc b/packages/sitecore-jss-manifest/.eslintrc index 116e46f25f..705fa08f4c 100644 --- a/packages/sitecore-jss-manifest/.eslintrc +++ b/packages/sitecore-jss-manifest/.eslintrc @@ -1,7 +1,6 @@ { - "extends": "../../.eslintrc", - "rules": { - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/explicit-module-boundary-types": "off" - } + "extends": [ + "../../.eslintrc", + "../../eslint-configs/typescript" + ] } diff --git a/packages/sitecore-jss-nextjs/.eslintrc b/packages/sitecore-jss-nextjs/.eslintrc index 3d8eb496f9..c8d10a3c52 100644 --- a/packages/sitecore-jss-nextjs/.eslintrc +++ b/packages/sitecore-jss-nextjs/.eslintrc @@ -1,15 +1,7 @@ { "extends": [ - "plugin:react/recommended", - "../../.eslintrc" - ], - "plugins": ["react"], - "settings": { - "react": { - "version": "detect" - } - }, - "globals": { - "React": "writable" - } + "../../.eslintrc", + "../../eslint-configs/react", + "../../eslint-configs/typescript" + ] } diff --git a/packages/sitecore-jss-proxy/.eslintrc b/packages/sitecore-jss-proxy/.eslintrc index cf556dbaae..705fa08f4c 100644 --- a/packages/sitecore-jss-proxy/.eslintrc +++ b/packages/sitecore-jss-proxy/.eslintrc @@ -1,6 +1,6 @@ { - "extends": "../../.eslintrc", - "rules": { - "@typescript-eslint/explicit-module-boundary-types": "off" - } + "extends": [ + "../../.eslintrc", + "../../eslint-configs/typescript" + ] } diff --git a/packages/sitecore-jss-react-forms/.eslintrc b/packages/sitecore-jss-react-forms/.eslintrc index a63ba52d77..d795284ec0 100644 --- a/packages/sitecore-jss-react-forms/.eslintrc +++ b/packages/sitecore-jss-react-forms/.eslintrc @@ -1,19 +1,10 @@ { "extends": [ - "plugin:react/recommended", - "../../.eslintrc" + "../../.eslintrc", + "../../eslint-configs/react", + "../../eslint-configs/typescript" ], - "plugins": ["react"], - "settings": { - "react": { - "version": "detect" - } - }, - "globals": { - "React": "writable" - }, - "rules": { - "react/prop-types": "off", - "@typescript-eslint/explicit-module-boundary-types": "off" - } + "rules": { + "react/prop-types": "off" + } } diff --git a/packages/sitecore-jss-react-native/.eslintrc b/packages/sitecore-jss-react-native/.eslintrc index 43263a11ad..2bc1e623a4 100644 --- a/packages/sitecore-jss-react-native/.eslintrc +++ b/packages/sitecore-jss-react-native/.eslintrc @@ -1,19 +1,17 @@ { - "extends": ["../../.eslintrc"], - "parser": "@typescript-eslint/parser", - "plugins": ["react-native", "@typescript-eslint"], - "parserOptions": { - "ecmaFeatures": { - "jsx": true - } - }, + "extends": [ + "../../.eslintrc", + "../../eslint-configs/typescript" + ], + "plugins": [ + "react-native" + ], "env": { "jest": true }, - "ignorePatterns": ["src/**/*.test.*", "src/tests/*", "src/testData/*"], - "rules": { - "@typescript-eslint/explicit-module-boundary-types": "off", - "@typescript-eslint/no-empty-function": "off", - "@typescript-eslint/indent": ["error", 2] - } + "ignorePatterns": [ + "src/**/*.test.*", + "src/tests/*", + "src/testData/*" + ] } diff --git a/packages/sitecore-jss-react/.eslintrc b/packages/sitecore-jss-react/.eslintrc index 72886daf5c..c8d10a3c52 100644 --- a/packages/sitecore-jss-react/.eslintrc +++ b/packages/sitecore-jss-react/.eslintrc @@ -1,18 +1,7 @@ { "extends": [ - "plugin:react/recommended", - "../../.eslintrc" - ], - "plugins": ["react"], - "settings": { - "react": { - "version": "detect" - } - }, - "globals": { - "React": "writable" - }, - "rules": { - "@typescript-eslint/explicit-module-boundary-types": "off" - } + "../../.eslintrc", + "../../eslint-configs/react", + "../../eslint-configs/typescript" + ] } diff --git a/packages/sitecore-jss-rendering-host/.eslintrc b/packages/sitecore-jss-rendering-host/.eslintrc index cf556dbaae..705fa08f4c 100644 --- a/packages/sitecore-jss-rendering-host/.eslintrc +++ b/packages/sitecore-jss-rendering-host/.eslintrc @@ -1,6 +1,6 @@ { - "extends": "../../.eslintrc", - "rules": { - "@typescript-eslint/explicit-module-boundary-types": "off" - } + "extends": [ + "../../.eslintrc", + "../../eslint-configs/typescript" + ] } diff --git a/packages/sitecore-jss-tracking/.eslintrc b/packages/sitecore-jss-tracking/.eslintrc new file mode 100644 index 0000000000..705fa08f4c --- /dev/null +++ b/packages/sitecore-jss-tracking/.eslintrc @@ -0,0 +1,6 @@ +{ + "extends": [ + "../../.eslintrc", + "../../eslint-configs/typescript" + ] +} diff --git a/packages/sitecore-jss-vue/.eslintrc b/packages/sitecore-jss-vue/.eslintrc index 6828bab3fb..e63da2fa89 100644 --- a/packages/sitecore-jss-vue/.eslintrc +++ b/packages/sitecore-jss-vue/.eslintrc @@ -1,7 +1,7 @@ { - "extends": ["plugin:vue/recommended", "../../.eslintrc"], - "rules": { - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/explicit-module-boundary-types": "off" - } + "extends": [ + "plugin:vue/recommended", + "../../.eslintrc", + "../../eslint-configs/typescript" + ] } diff --git a/packages/sitecore-jss/.eslintrc b/packages/sitecore-jss/.eslintrc index cf556dbaae..705fa08f4c 100644 --- a/packages/sitecore-jss/.eslintrc +++ b/packages/sitecore-jss/.eslintrc @@ -1,6 +1,6 @@ { - "extends": "../../.eslintrc", - "rules": { - "@typescript-eslint/explicit-module-boundary-types": "off" - } + "extends": [ + "../../.eslintrc", + "../../eslint-configs/typescript" + ] } diff --git a/packages/sitecore-jss/src/layout/utils.ts b/packages/sitecore-jss/src/layout/utils.ts index fb06b8c494..0fd779fed6 100644 --- a/packages/sitecore-jss/src/layout/utils.ts +++ b/packages/sitecore-jss/src/layout/utils.ts @@ -10,6 +10,7 @@ export function getFieldValue( renderingOrFields: ComponentRendering | Fields, fieldName: string ): T | undefined; +// eslint-disable-next-line no-redeclare export function getFieldValue( renderingOrFields: ComponentRendering | Fields, fieldName: string, @@ -20,6 +21,7 @@ export function getFieldValue( * @param {string} fieldName * @param {T} [defaultValue] */ +// eslint-disable-next-line no-redeclare export function getFieldValue( renderingOrFields: ComponentRendering | Fields, fieldName: string, diff --git a/packages/sitecore-pipelines/.eslintrc b/packages/sitecore-pipelines/.eslintrc index 116e46f25f..705fa08f4c 100644 --- a/packages/sitecore-pipelines/.eslintrc +++ b/packages/sitecore-pipelines/.eslintrc @@ -1,7 +1,6 @@ { - "extends": "../../.eslintrc", - "rules": { - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/explicit-module-boundary-types": "off" - } + "extends": [ + "../../.eslintrc", + "../../eslint-configs/typescript" + ] }