diff --git a/.eslintrc-base.json b/.eslintrc-base.json new file mode 100644 index 0000000000..f2270bdcd5 --- /dev/null +++ b/.eslintrc-base.json @@ -0,0 +1,210 @@ +{ +"rules": { + "max-len": [ + "error", + { "code": 80, "ignoreUrls": true, "ignoreTemplateLiterals": true } + ], + "block-scoped-var": 0, + "brace-style": [2, "1tbs", { "allowSingleLine": true }], + "camelcase": 2, + "comma-dangle": 2, + "comma-spacing": [2, { "before": false, "after": true }], + "comma-style": [2, "last"], + "complexity": 0, + "consistent-return": 2, + "consistent-this": 0, + "curly": 2, + "default-case": 2, + "dot-notation": 0, + "eol-last": 2, + "eqeqeq": 2, + "func-call-spacing": 2, + "func-names": 0, + "func-style": 0, + "guard-for-in": 2, + "handle-callback-err": 2, + "import/default": 2, + "import/export": 2, + "import/extensions": [0, "always"], + "import/first": 2, + "import/named": 2, + "import/namespace": 2, + "import/newline-after-import": 2, + "import/no-duplicates": 2, + "import/no-unresolved": 2, + "import/unambiguous": 2, + "jsx-quotes": [2, "prefer-single"], + "jsx-a11y/accessible-emoji": "error", + "jsx-a11y/alt-text": "error", + "jsx-a11y/anchor-has-content": "error", + "jsx-a11y/anchor-is-valid": "error", + "jsx-a11y/aria-activedescendant-has-tabindex": "error", + "jsx-a11y/aria-props": "error", + "jsx-a11y/aria-proptypes": "error", + "jsx-a11y/aria-role": "error", + "jsx-a11y/aria-unsupported-elements": "error", + "jsx-a11y/control-has-associated-label": "error", + "jsx-a11y/click-events-have-key-events": "error", + "jsx-a11y/heading-has-content": "error", + "jsx-a11y/html-has-lang": "error", + "jsx-a11y/iframe-has-title": "error", + "jsx-a11y/img-redundant-alt": "error", + "jsx-a11y/interactive-supports-focus": "error", + "jsx-a11y/label-has-associated-control": "error", + "jsx-a11y/lang": "error", + "jsx-a11y/media-has-caption": "error", + "jsx-a11y/mouse-events-have-key-events": "error", + "jsx-a11y/no-access-key": "error", + "jsx-a11y/no-autofocus": "error", + "jsx-a11y/no-distracting-elements": "error", + "jsx-a11y/no-interactive-element-to-noninteractive-role": "error", + "jsx-a11y/no-noninteractive-element-interactions": "error", + "jsx-a11y/no-noninteractive-element-to-interactive-role": "error", + "jsx-a11y/no-noninteractive-tabindex": "error", + "jsx-a11y/no-onchange": "error", + "jsx-a11y/no-redundant-roles": "error", + "jsx-a11y/no-static-element-interactions": "error", + "jsx-a11y/role-has-required-aria-props": "error", + "jsx-a11y/role-supports-aria-props": "error", + "jsx-a11y/scope": "error", + "jsx-a11y/tabindex-no-positive": "error", + "key-spacing": [2, { "beforeColon": false, "afterColon": true }], + "keyword-spacing": [2], + "max-depth": 0, + "max-nested-callbacks": 0, + "max-params": 0, + "max-statements": 0, + "new-cap": 0, + "new-parens": 2, + "no-alert": 2, + "no-array-constructor": 2, + "no-bitwise": 2, + "no-caller": 2, + "no-cond-assign": 2, + "no-console": 0, + "no-constant-condition": 2, + "no-control-regex": 2, + "no-debugger": 2, + "no-delete-var": 2, + "no-div-regex": 2, + "no-dupe-keys": 2, + "no-else-return": 0, + "no-empty": 2, + "no-empty-character-class": 2, + "no-eq-null": 2, + "no-eval": 2, + "no-ex-assign": 2, + "no-extend-native": 2, + "no-extra-bind": 2, + "no-extra-boolean-cast": 2, + "no-extra-parens": 0, + "no-extra-semi": 2, + "no-fallthrough": 2, + "no-floating-decimal": 2, + "no-func-assign": 2, + "no-global-assign": 2, + "no-implied-eval": 2, + "no-inline-comments": 2, + "no-inner-declarations": 2, + "no-invalid-regexp": 2, + "no-irregular-whitespace": 2, + "no-iterator": 2, + "no-label-var": 2, + "no-labels": 2, + "no-lone-blocks": 2, + "no-lonely-if": 2, + "no-loop-func": 2, + "no-mixed-requires": 0, + "no-mixed-spaces-and-tabs": 2, + "no-multi-spaces": 2, + "no-multi-str": 2, + "no-multiple-empty-lines": [2, { "max": 2 }], + "no-nested-ternary": 2, + "no-new": 2, + "no-new-func": 2, + "no-new-object": 2, + "no-new-require": 2, + "no-new-wrappers": 2, + "no-obj-calls": 2, + "no-octal": 2, + "no-octal-escape": 2, + "no-path-concat": 2, + "no-plusplus": 0, + "no-process-env": 0, + "no-process-exit": 2, + "no-proto": 2, + "no-regex-spaces": 2, + "no-reserved-keys": 0, + "no-restricted-modules": 0, + "no-return-assign": 2, + "no-script-url": 2, + "no-self-compare": 2, + "no-sequences": 2, + "no-shadow": 0, + "no-shadow-restricted-names": 2, + "no-sparse-arrays": 2, + "no-sync": 0, + "no-ternary": 0, + "no-trailing-spaces": 2, + "no-undef": 2, + "no-undef-init": 2, + "no-undefined": 2, + "no-underscore-dangle": 0, + "no-unreachable": 2, + "no-unsafe-negation": 2, + "no-unused-expressions": 2, + "no-unused-vars": 2, + "no-use-before-define": 0, + "no-void": 0, + "no-warning-comments": [2, { "terms": ["fixme"], "location": "start" }], + "no-with": 2, + "one-var": 0, + "operator-assignment": 0, + "padded-blocks": 0, + "prefer-object-spread/prefer-object-spread": 2, + "prettier/prettier": "error", + "quote-props": [2, "as-needed"], + "quotes": [2, "single", "avoid-escape"], + "radix": 2, + "react/display-name": 2, + "react/jsx-boolean-value": [2, "always"], + "react/jsx-closing-bracket-location": [ + 2, + { "selfClosing": "line-aligned", "nonEmpty": "props-aligned" } + ], + "react/jsx-no-undef": 2, + "react/jsx-sort-props": [2, { "ignoreCase": true }], + "react/jsx-uses-react": 2, + "react/jsx-uses-vars": 2, + "react/jsx-wrap-multilines": 2, + "react/no-did-mount-set-state": 2, + "react/no-did-update-set-state": 2, + "react/no-multi-comp": [2, { "ignoreStateless": true }], + "react/no-unescaped-entities": 0, + "react/no-unknown-property": 2, + "react/prop-types": 2, + "react/react-in-jsx-scope": 2, + "react/self-closing-comp": 2, + "react/sort-prop-types": 2, + "react-hooks/rules-of-hooks": "error", + "react-hooks/exhaustive-deps": "error", + "semi": [2, "always"], + "semi-spacing": [2, { "before": false, "after": true }], + "sort-vars": 0, + "space-before-blocks": [2, "always"], + "space-before-function-paren": [2, "never"], + "space-in-brackets": 0, + "space-in-parens": 0, + "space-infix-ops": 2, + "space-unary-ops": [2, { "words": true, "nonwords": false }], + "spaced-comment": [2, "always", { "exceptions": ["-"] }], + "strict": 0, + "use-isnan": 2, + "valid-jsdoc": 0, + "valid-typeof": 2, + "vars-on-top": 0, + "wrap-iife": [2, "any"], + "wrap-regex": 2, + "yoda": 0 +} +} diff --git a/.eslintrc.json b/.eslintrc.json index 7b0c7f9188..ffc63dee3c 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,53 +1,27 @@ { - "root": true, - "extends": ["@freecodecamp/eslint-config", "prettier", "prettier/react"], - "plugins": ["prettier", "react-hooks", "jsx-a11y"], - "rules": { - "max-len": [ - "error", - { "code": 80, "ignoreUrls": true, "ignoreTemplateLiterals": true } - ], - "prettier/prettier": "error", - "react-hooks/rules-of-hooks": "error", - "react-hooks/exhaustive-deps": "error", - "jsx-a11y/accessible-emoji": "error", - "jsx-a11y/alt-text": "error", - "jsx-a11y/anchor-has-content": "error", - "jsx-a11y/anchor-is-valid": "error", - "jsx-a11y/aria-activedescendant-has-tabindex": "error", - "jsx-a11y/aria-props": "error", - "jsx-a11y/aria-proptypes": "error", - "jsx-a11y/aria-role": "error", - "jsx-a11y/aria-unsupported-elements": "error", - "jsx-a11y/control-has-associated-label": "error", - "jsx-a11y/click-events-have-key-events": "error", - "jsx-a11y/heading-has-content": "error", - "jsx-a11y/html-has-lang": "error", - "jsx-a11y/iframe-has-title": "error", - "jsx-a11y/img-redundant-alt": "error", - "jsx-a11y/interactive-supports-focus": "error", - "jsx-a11y/label-has-associated-control": "error", - "jsx-a11y/lang": "error", - "jsx-a11y/media-has-caption": "error", - "jsx-a11y/mouse-events-have-key-events": "error", - "jsx-a11y/no-access-key": "error", - "jsx-a11y/no-autofocus": "error", - "jsx-a11y/no-distracting-elements": "error", - "jsx-a11y/no-interactive-element-to-noninteractive-role": "error", - "jsx-a11y/no-noninteractive-element-interactions": "error", - "jsx-a11y/no-noninteractive-element-to-interactive-role": "error", - "jsx-a11y/no-noninteractive-tabindex": "error", - "jsx-a11y/no-onchange": "error", - "jsx-a11y/no-redundant-roles": "error", - "jsx-a11y/no-static-element-interactions": "error", - "jsx-a11y/role-has-required-aria-props": "error", - "jsx-a11y/role-supports-aria-props": "error", - "jsx-a11y/scope": "error", - "jsx-a11y/tabindex-no-positive": "error" + "env": { + "es6": true, + "browser": true, + "mocha": true, + "node": true }, + "parser": "babel-eslint", + "root": true, + "extends": ["./.eslintrc-base.json", "prettier", "prettier/react"], + "plugins": ["react", "import", "prefer-object-spread", "prettier", "react-hooks", "jsx-a11y"], + "globals": { + "Promise": true, + "window": true, + "$": true, + "ga": true, + "jQuery": true, + "router": true + }, "settings": { "react": { - "version": "16.4.2" + "version": "16.4.2", + "import/ignore": ["node_modules", "\\.json$"], + "import/extensions": [".js", ".jsx"] } } } diff --git a/package.json b/package.json index d9ad0122af..9430a1a51c 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,6 @@ "test:utils": "jest --rootDir ./utils" }, "devDependencies": { - "@freecodecamp/eslint-config": "^2.0.2", "babel-eslint": "^10.1.0", "cross-env": "^7.0.2", "cypress": "^5.3.0",