From 095a31c8fb4575dd1b02d4c10a188368398e0749 Mon Sep 17 00:00:00 2001 From: Valentin Popov Date: Thu, 18 Jun 2020 11:01:17 +0400 Subject: Added jsx-a11y plugin Signed-off-by: Valentin Popov --- ROADMAP.md | 39 +++++++++++++++++++++ package-lock.json | 78 +++++++++++++++++++++++++++++++++++++++++ package.json | 2 ++ src/react-javascript.ts | 15 ++++++++ src/rules/jsx-a11y/default.json | 1 + src/rules/react/default.json | 1 + 6 files changed, 136 insertions(+) create mode 100644 src/react-javascript.ts create mode 100644 src/rules/jsx-a11y/default.json create mode 100644 src/rules/react/default.json diff --git a/ROADMAP.md b/ROADMAP.md index e7e9612..1ef7307 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -328,6 +328,45 @@ - [ ] "prefer-default-export" - [ ] "unambiguous" +## jsx-a11y + +- [ ] "accessible-emoji" +- [ ] "alt-text" +- [ ] "anchor-has-content" +- [ ] "anchor-is-valid" +- [ ] "aria-activedescendant-has-tabindex" +- [ ] "aria-props" +- [ ] "aria-proptypes" +- [ ] "aria-role" +- [ ] "aria-unsupported-elements" +- [ ] "autocomplete-valid" +- [ ] "click-events-have-key-events" +- [ ] "control-has-associated-label" +- [ ] "heading-has-content" +- [ ] "html-has-lang" +- [ ] "iframe-has-title" +- [ ] "img-redundant-alt" +- [ ] "interactive-supports-focus" +- [ ] "label-has-associated-control" +- [ ] "label-has-for" +- [ ] "lang" +- [ ] "media-has-caption" +- [ ] "mouse-events-have-key-events" +- [ ] "no-access-key" +- [ ] "no-autofocus" +- [ ] "no-distracting-elements" +- [ ] "no-interactive-element-to-noninteractive-role" +- [ ] "no-noninteractive-element-interactions" +- [ ] "no-noninteractive-element-to-interactive-role" +- [ ] "no-noninteractive-tabindex" +- [ ] "no-onchange" +- [ ] "no-redundant-roles" +- [ ] "no-static-element-interactions" +- [ ] "role-has-required-aria-props" +- [ ] "role-supports-aria-props" +- [ ] "scope" +- [ ] "tabindex-no-positive" + ## Security - [ ] "detect-buffer-noassert" diff --git a/package-lock.json b/package-lock.json index e083b9b..d3edb9a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,6 +30,15 @@ "js-tokens": "^4.0.0" } }, + "@babel/runtime": { + "version": "7.10.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.2.tgz", + "integrity": "sha512-6sF3uQw2ivImfVIl62RZ7MXhO2tap69WeWK57vAaimT6AZbE4FbqjdEJIN1UqoD6wI6B+1n9UiagafH1sxjOtg==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, "@rollup/plugin-json": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.1.0.tgz", @@ -219,6 +228,16 @@ "sprintf-js": "~1.0.2" } }, + "aria-query": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz", + "integrity": "sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=", + "dev": true, + "requires": { + "ast-types-flow": "0.0.7", + "commander": "^2.11.0" + } + }, "array-includes": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", @@ -240,12 +259,24 @@ "es-abstract": "^1.17.0-next.1" } }, + "ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", + "dev": true + }, "astral-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", "dev": true }, + "axobject-query": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.1.2.tgz", + "integrity": "sha512-ICt34ZmrVt8UQnvPl6TVyDTkmhXmAyAT4Jh5ugfGUX4MOrZ+U/ZY6/sdylRw3qGNr9Ub5AJsaHeDMzNLehRdOQ==", + "dev": true + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -365,6 +396,12 @@ "which": "^2.0.1" } }, + "damerau-levenshtein": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz", + "integrity": "sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug==", + "dev": true + }, "debug": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", @@ -675,6 +712,31 @@ } } }, + "eslint-plugin-jsx-a11y": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz", + "integrity": "sha512-CawzfGt9w83tyuVekn0GDPU9ytYtxyxyFZ3aSWROmnRRFQFT2BiPJd7jvRdzNDi6oLWaS2asMeYSNMjWTV4eNg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.4.5", + "aria-query": "^3.0.0", + "array-includes": "^3.0.3", + "ast-types-flow": "^0.0.7", + "axobject-query": "^2.0.2", + "damerau-levenshtein": "^1.0.4", + "emoji-regex": "^7.0.2", + "has": "^1.0.3", + "jsx-ast-utils": "^2.2.1" + }, + "dependencies": { + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + } + } + }, "eslint-plugin-security": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-1.4.0.tgz", @@ -1357,6 +1419,16 @@ "minimist": "^1.2.0" } }, + "jsx-ast-utils": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz", + "integrity": "sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w==", + "dev": true, + "requires": { + "array-includes": "^3.1.1", + "object.assign": "^4.1.0" + } + }, "levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -1717,6 +1789,12 @@ "read-pkg": "^2.0.0" } }, + "regenerator-runtime": { + "version": "0.13.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", + "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==", + "dev": true + }, "regexp-tree": { "version": "0.1.21", "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.21.tgz", diff --git a/package.json b/package.json index 14c5419..75e09f9 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ "eslint": "^7.2.0", "eslint-plugin-eslint-comments": "^3.2.0", "eslint-plugin-import": "^2.21.2", + "eslint-plugin-jsx-a11y": "^6.2.3", "eslint-plugin-security": "^1.4.0", "eslint-plugin-sonarjs": "^0.5.0", "eslint-plugin-unicorn": "^20.1.0", @@ -34,6 +35,7 @@ "eslint": "^7.2.0", "eslint-plugin-eslint-comments": "^3.2.0", "eslint-plugin-import": "^2.21.2", + "eslint-plugin-jsx-a11y": "^6.2.3", "eslint-plugin-security": "^1.4.0", "eslint-plugin-sonarjs": "^0.5.0", "eslint-plugin-unicorn": "^20.1.0", diff --git a/src/react-javascript.ts b/src/react-javascript.ts new file mode 100644 index 0000000..813e859 --- /dev/null +++ b/src/react-javascript.ts @@ -0,0 +1,15 @@ +import rJsxA11y from "./rules/jsx-a11y/default.json"; +import rDefault from "./rules/react/default.json"; + +module.exports = { + "extends": [ + "./javascript", + ], + "plugins": [ + "jsx-a11y", + ], + "rules": { + ...rDefault, + ...rJsxA11y, + }, +}; diff --git a/src/rules/jsx-a11y/default.json b/src/rules/jsx-a11y/default.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/src/rules/jsx-a11y/default.json @@ -0,0 +1 @@ +{} diff --git a/src/rules/react/default.json b/src/rules/react/default.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/src/rules/react/default.json @@ -0,0 +1 @@ +{} -- cgit v1.2.3 From e66c5dd2335131c0a96d66bbb401b541ff29672e Mon Sep 17 00:00:00 2001 From: Valentin Popov Date: Thu, 18 Jun 2020 11:11:34 +0400 Subject: Added react and react-hooks plugins Signed-off-by: Valentin Popov --- docs/roadmap/react-hooks.md | 4 + docs/roadmap/react.md | 89 ++++++++++++++++++++ package-lock.json | 161 +++++++++++++++++++++++++++++++++++++ package.json | 4 + src/react-javascript.ts | 12 +++ src/rules/react-hooks/default.json | 1 + 6 files changed, 271 insertions(+) create mode 100644 docs/roadmap/react-hooks.md create mode 100644 docs/roadmap/react.md create mode 100644 src/rules/react-hooks/default.json diff --git a/docs/roadmap/react-hooks.md b/docs/roadmap/react-hooks.md new file mode 100644 index 0000000..2e651d4 --- /dev/null +++ b/docs/roadmap/react-hooks.md @@ -0,0 +1,4 @@ +# React Hooks + +- [ ] "exhaustive-deps" +- [ ] "rules-of-hooks" diff --git a/docs/roadmap/react.md b/docs/roadmap/react.md new file mode 100644 index 0000000..20a9b26 --- /dev/null +++ b/docs/roadmap/react.md @@ -0,0 +1,89 @@ +# React + +- [ ] "boolean-prop-naming" +- [ ] "button-has-type" +- [ ] "default-props-match-prop-types" +- [ ] "destructuring-assignment" +- [ ] "display-name" +- [ ] "forbid-component-props" +- [ ] "forbid-dom-props" +- [ ] "forbid-elements" +- [ ] "forbid-foreign-prop-types" +- [ ] "forbid-prop-types" +- [ ] "function-component-definition" +- [ ] "jsx-boolean-value" +- [ ] "jsx-child-element-spacing" +- [ ] "jsx-closing-bracket-location" +- [ ] "jsx-closing-tag-location" +- [ ] "jsx-curly-brace-presence" +- [ ] "jsx-curly-newline" +- [ ] "jsx-curly-spacing" +- [ ] "jsx-equals-spacing" +- [ ] "jsx-filename-extension" +- [ ] "jsx-first-prop-new-line" +- [ ] "jsx-fragments" +- [ ] "jsx-handler-names" +- [ ] "jsx-indent" +- [ ] "jsx-indent-props" +- [ ] "jsx-key" +- [ ] "jsx-max-depth" +- [ ] "jsx-max-props-per-line" +- [ ] "jsx-no-bind" +- [ ] "jsx-no-comment-textnodes" +- [ ] "jsx-no-duplicate-props" +- [ ] "jsx-no-literals" +- [ ] "jsx-no-script-url" +- [ ] "jsx-no-target-blank" +- [ ] "jsx-no-undef" +- [ ] "jsx-no-useless-fragment" +- [ ] "jsx-one-expression-per-line" +- [ ] "jsx-pascal-case" +- [ ] "jsx-props-no-multi-spaces" +- [ ] "jsx-props-no-spreading" +- [ ] "jsx-sort-default-props" +- [ ] "jsx-sort-props" +- [ ] "jsx-space-before-closing" +- [ ] "jsx-tag-spacing" +- [ ] "jsx-uses-react" +- [ ] "jsx-uses-vars" +- [ ] "jsx-wrap-multilines" +- [ ] "no-access-state-in-setstate" +- [ ] "no-adjacent-inline-elements" +- [ ] "no-array-index-key" +- [ ] "no-children-prop" +- [ ] "no-danger" +- [ ] "no-danger-with-children" +- [ ] "no-deprecated" +- [ ] "no-did-mount-set-state" +- [ ] "no-did-update-set-state" +- [ ] "no-direct-mutation-state" +- [ ] "no-find-dom-node" +- [ ] "no-is-mounted" +- [ ] "no-multi-comp" +- [ ] "no-redundant-should-component-update" +- [ ] "no-render-return-value" +- [ ] "no-set-state" +- [ ] "no-string-refs" +- [ ] "no-this-in-sfc" +- [ ] "no-typos" +- [ ] "no-unescaped-entities" +- [ ] "no-unknown-property" +- [ ] "no-unsafe" +- [ ] "no-unused-prop-types" +- [ ] "no-unused-state" +- [ ] "no-will-update-set-state" +- [ ] "prefer-es6-class" +- [ ] "prefer-read-only-props" +- [ ] "prefer-stateless-function" +- [ ] "prop-types" +- [ ] "react-in-jsx-scope" +- [ ] "require-default-props" +- [ ] "require-optimization" +- [ ] "require-render-return" +- [ ] "self-closing-comp" +- [ ] "sort-comp" +- [ ] "sort-prop-types" +- [ ] "state-in-constructor" +- [ ] "static-property-placement" +- [ ] "style-prop-object" +- [ ] "void-dom-elements-no-children" diff --git a/package-lock.json b/package-lock.json index d3edb9a..500c4d2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -39,6 +39,16 @@ "regenerator-runtime": "^0.13.4" } }, + "@babel/runtime-corejs3": { + "version": "7.10.2", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.10.2.tgz", + "integrity": "sha512-+a2M/u7r15o3dV1NEizr9bRi+KUVnrs/qYxF0Z06DAPx/4VCWaz1WA7EcbE+uqGgt39lp5akWGmHsTseIkHkHg==", + "dev": true, + "requires": { + "core-js-pure": "^3.0.0", + "regenerator-runtime": "^0.13.4" + } + }, "@rollup/plugin-json": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.1.0.tgz", @@ -385,6 +395,12 @@ "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", "dev": true }, + "core-js-pure": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.6.5.tgz", + "integrity": "sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA==", + "dev": true + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -737,6 +753,42 @@ } } }, + "eslint-plugin-react": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.20.0.tgz", + "integrity": "sha512-rqe1abd0vxMjmbPngo4NaYxTcR3Y4Hrmc/jg4T+sYz63yqlmJRknpEQfmWY+eDWPuMmix6iUIK+mv0zExjeLgA==", + "dev": true, + "requires": { + "array-includes": "^3.1.1", + "doctrine": "^2.1.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.2.3", + "object.entries": "^1.1.1", + "object.fromentries": "^2.0.2", + "object.values": "^1.1.1", + "prop-types": "^15.7.2", + "resolve": "^1.15.1", + "string.prototype.matchall": "^4.0.2", + "xregexp": "^4.3.0" + }, + "dependencies": { + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + } + } + }, + "eslint-plugin-react-hooks": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.0.4.tgz", + "integrity": "sha512-equAdEIsUETLFNCmmCkiCGq6rkSK5MoJhXFPFYeUebcjKgBmWWcgVOqZyQC8Bv1BwVCnTq9tBxgJFgAJTWoJtA==", + "dev": true + }, "eslint-plugin-security": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-1.4.0.tgz", @@ -1274,6 +1326,17 @@ } } }, + "internal-slot": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.2.tgz", + "integrity": "sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g==", + "dev": true, + "requires": { + "es-abstract": "^1.17.0-next.1", + "has": "^1.0.3", + "side-channel": "^1.0.2" + } + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -1485,6 +1548,15 @@ "integrity": "sha1-7GZi5IlkCO1KtsVCo5kLcswIACA=", "dev": true }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -1565,6 +1637,12 @@ } } }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, "object-inspect": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", @@ -1589,6 +1667,29 @@ "object-keys": "^1.0.11" } }, + "object.entries": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.2.tgz", + "integrity": "sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5", + "has": "^1.0.3" + } + }, + "object.fromentries": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.2.tgz", + "integrity": "sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, "object.values": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", @@ -1753,6 +1854,17 @@ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "dev": true, + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -1768,6 +1880,12 @@ "safe-buffer": "^5.1.0" } }, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, "read-pkg": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", @@ -1801,6 +1919,16 @@ "integrity": "sha512-kUUXjX4AnqnR8KRTCrayAo9PzYMRKmVoGgaz2tBuz0MF3g1ZbGebmtW0yFHfFK9CmBjQKeYIgoL22pFLBJY7sw==", "dev": true }, + "regexp.prototype.flags": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", + "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } + }, "regexpp": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", @@ -1945,6 +2073,16 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, + "side-channel": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.2.tgz", + "integrity": "sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA==", + "dev": true, + "requires": { + "es-abstract": "^1.17.0-next.1", + "object-inspect": "^1.7.0" + } + }, "signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", @@ -2035,6 +2173,20 @@ "strip-ansi": "^6.0.0" } }, + "string.prototype.matchall": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz", + "integrity": "sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0", + "has-symbols": "^1.0.1", + "internal-slot": "^1.0.2", + "regexp.prototype.flags": "^1.3.0", + "side-channel": "^1.0.2" + } + }, "string.prototype.trimend": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", @@ -2306,6 +2458,15 @@ "requires": { "mkdirp": "^0.5.1" } + }, + "xregexp": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.3.0.tgz", + "integrity": "sha512-7jXDIFXh5yJ/orPn4SXjuVrWWoi4Cr8jfV1eHv9CixKSbU+jY4mxfrBwAuDvupPNKpMUY+FeIqsVw/JLT9+B8g==", + "dev": true, + "requires": { + "@babel/runtime-corejs3": "^7.8.3" + } } } } diff --git a/package.json b/package.json index 75e09f9..c826c88 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,8 @@ "eslint-plugin-eslint-comments": "^3.2.0", "eslint-plugin-import": "^2.21.2", "eslint-plugin-jsx-a11y": "^6.2.3", + "eslint-plugin-react": "^7.20.0", + "eslint-plugin-react-hooks": "^4.0.4", "eslint-plugin-security": "^1.4.0", "eslint-plugin-sonarjs": "^0.5.0", "eslint-plugin-unicorn": "^20.1.0", @@ -36,6 +38,8 @@ "eslint-plugin-eslint-comments": "^3.2.0", "eslint-plugin-import": "^2.21.2", "eslint-plugin-jsx-a11y": "^6.2.3", + "eslint-plugin-react": "^7.20.0", + "eslint-plugin-react-hooks": "^4.0.4", "eslint-plugin-security": "^1.4.0", "eslint-plugin-sonarjs": "^0.5.0", "eslint-plugin-unicorn": "^20.1.0", diff --git a/src/react-javascript.ts b/src/react-javascript.ts index 813e859..e3bea86 100644 --- a/src/react-javascript.ts +++ b/src/react-javascript.ts @@ -1,15 +1,27 @@ import rJsxA11y from "./rules/jsx-a11y/default.json"; +import rReactHooks from "./rules/react-hooks/default.json"; import rDefault from "./rules/react/default.json"; module.exports = { "extends": [ "./javascript", + "plugin:jsx-a11y/recommended", + "plugin:react-hooks/recommended", + "plugin:react/recommended", ], + "parserOptions": { + ecmaFeatures: { + jsx: true, + }, + }, "plugins": [ "jsx-a11y", + "react", + "react-hooks", ], "rules": { ...rDefault, ...rJsxA11y, + ...rReactHooks, }, }; diff --git a/src/rules/react-hooks/default.json b/src/rules/react-hooks/default.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/src/rules/react-hooks/default.json @@ -0,0 +1 @@ +{} -- cgit v1.2.3 From 75ab45106f569f58038c5241d1aee6717c720ba1 Mon Sep 17 00:00:00 2001 From: Valentin Popov Date: Thu, 18 Jun 2020 11:21:47 +0400 Subject: Added react configs Signed-off-by: Valentin Popov --- README.md | 36 ++++++++++++++++++++++++++++-------- rollup.config.js | 2 ++ src/react-typescript.ts | 27 +++++++++++++++++++++++++++ 3 files changed, 57 insertions(+), 8 deletions(-) create mode 100644 src/react-typescript.ts diff --git a/README.md b/README.md index 2eec63c..84bb792 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,8 @@ * `javascript` * `typescript` +* `react-javascript` +* `react-typescript` * `vue-javascript` * `vue-typescript` @@ -27,16 +29,34 @@ * Install dependencies: ```shell script -npm install --save-dev @typescript-eslint/eslint-plugin @typescript-eslint/parser \ - @valentineus/eslint-config eslint eslint-plugin-eslint-comments \ - eslint-plugin-import eslint-plugin-security eslint-plugin-sonarjs \ - eslint-plugin-unicorn eslint-plugin-vue +npm install --save-dev @typescript-eslint/eslint-plugin \ + @typescript-eslint/parser \ + @valentineus/eslint-config \ + eslint \ + eslint-plugin-eslint-comments \ + eslint-plugin-import \ + eslint-plugin-jsx-a11y \ + eslint-plugin-react \ + eslint-plugin-react-hooks \ + eslint-plugin-security \ + eslint-plugin-sonarjs \ + eslint-plugin-unicorn \ + eslint-plugin-vue # or -yarn add --dev @typescript-eslint/eslint-plugin @typescript-eslint/parser \ - @valentineus/eslint-config eslint eslint-plugin-eslint-comments \ - eslint-plugin-import eslint-plugin-security eslint-plugin-sonarjs \ - eslint-plugin-unicorn eslint-plugin-vue +yarn add --dev @typescript-eslint/eslint-plugin \ + @typescript-eslint/parser \ + @valentineus/eslint-config \ + eslint \ + eslint-plugin-eslint-comments \ + eslint-plugin-import \ + eslint-plugin-jsx-a11y \ + eslint-plugin-react \ + eslint-plugin-react-hooks \ + eslint-plugin-security \ + eslint-plugin-sonarjs \ + eslint-plugin-unicorn \ + eslint-plugin-vue ``` * Create config file: diff --git a/rollup.config.js b/rollup.config.js index 4f5794e..bcdea49 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -5,6 +5,8 @@ import { terser } from "rollup-plugin-terser"; module.exports = { input: { "javascript": "src/javascript.ts", + "react-javascript": "src/react-javascript.ts", + "react-typescript": "src/react-typescript.ts", "typescript": "src/typescript.ts", "vue-javascript": "src/vue-javascript.ts", "vue-typescript": "src/vue-typescript.ts", diff --git a/src/react-typescript.ts b/src/react-typescript.ts new file mode 100644 index 0000000..a63614e --- /dev/null +++ b/src/react-typescript.ts @@ -0,0 +1,27 @@ +import rJsxA11y from "./rules/jsx-a11y/default.json"; +import rReactHooks from "./rules/react-hooks/default.json"; +import rDefault from "./rules/react/default.json"; + +module.exports = { + "extends": [ + "./typescript", + "plugin:jsx-a11y/recommended", + "plugin:react-hooks/recommended", + "plugin:react/recommended", + ], + "parserOptions": { + ecmaFeatures: { + jsx: true, + }, + }, + "plugins": [ + "jsx-a11y", + "react", + "react-hooks", + ], + "rules": { + ...rDefault, + ...rJsxA11y, + ...rReactHooks, + }, +}; -- cgit v1.2.3 From 429404c8e2552c0bb882365556ca3285162c6a31 Mon Sep 17 00:00:00 2001 From: Valentin Popov Date: Thu, 18 Jun 2020 11:26:49 +0400 Subject: Restructured ROADMAP.md Signed-off-by: Valentin Popov --- .npmignore | 4 + ROADMAP.md | 673 ---------------------------------------- docs/roadmap/eslint-comments.md | 11 + docs/roadmap/eslint.md | 271 ++++++++++++++++ docs/roadmap/import.md | 43 +++ docs/roadmap/jsx-a11y.md | 38 +++ docs/roadmap/security.md | 15 + docs/roadmap/sonarjs.md | 27 ++ docs/roadmap/typescript.md | 101 ++++++ docs/roadmap/unicorn.md | 57 ++++ docs/roadmap/vue.md | 100 ++++++ 11 files changed, 667 insertions(+), 673 deletions(-) delete mode 100644 ROADMAP.md create mode 100644 docs/roadmap/eslint-comments.md create mode 100644 docs/roadmap/eslint.md create mode 100644 docs/roadmap/import.md create mode 100644 docs/roadmap/jsx-a11y.md create mode 100644 docs/roadmap/security.md create mode 100644 docs/roadmap/sonarjs.md create mode 100644 docs/roadmap/typescript.md create mode 100644 docs/roadmap/unicorn.md create mode 100644 docs/roadmap/vue.md diff --git a/.npmignore b/.npmignore index 62066aa..f19e006 100644 --- a/.npmignore +++ b/.npmignore @@ -197,6 +197,10 @@ $RECYCLE.BIN/ ### Project ### +# Documentation + +docs/ + # Source code src/ diff --git a/ROADMAP.md b/ROADMAP.md deleted file mode 100644 index 1ef7307..0000000 --- a/ROADMAP.md +++ /dev/null @@ -1,673 +0,0 @@ -# Road Map - -## ESLint - -- [ ] "accessor-pairs" -- [ ] "array-bracket-newline" -- [ ] "array-bracket-spacing" -- [X] "array-callback-return" -- [ ] "array-element-newline" -- [ ] "arrow-body-style" -- [X] "arrow-parens" -- [X] "arrow-spacing" -- [ ] "block-scoped-var" -- [ ] "block-spacing" -- [X] "brace-style" -- [X] "camelcase" -- [ ] "capitalized-comments" -- [X] "class-methods-use-this" -- [X] "comma-dangle" -- [X] "comma-spacing" -- [X] "comma-style" -- [ ] "complexity" -- [ ] "computed-property-spacing" -- [ ] "consistent-return" -- [ ] "consistent-this" -- [ ] "constructor-super" -- [X] "curly" -- [ ] "default-case" -- [ ] "default-case-last" -- [ ] "default-param-last" -- [ ] "dot-location" -- [X] "dot-notation" -- [X] "eol-last" -- [X] "eqeqeq" -- [ ] "for-direction" -- [ ] "func-call-spacing" -- [ ] "func-name-matching" -- [ ] "func-names" -- [ ] "func-style" -- [X] "function-call-argument-newline" -- [ ] "function-paren-newline" -- [ ] "generator-star-spacing" -- [ ] "getter-return" -- [ ] "grouped-accessor-pairs" -- [ ] "guard-for-in" -- [ ] "id-blacklist" -- [X] "id-length" -- [ ] "id-match" -- [ ] "implicit-arrow-linebreak" -- [X] "indent" -- [X] "indent-legacy" -- [ ] "init-declarations" -- [X] "jsx-quotes" -- [X] "key-spacing" -- [X] "keyword-spacing" -- [ ] "line-comment-position" -- [X] "linebreak-style" -- [X] "lines-around-comment" -- [X] "lines-around-directive" -- [X] "lines-between-class-members" -- [ ] "max-classes-per-file" -- [ ] "max-depth" -- [X] "max-len" -- [X] "max-lines" -- [X] "max-lines-per-function" -- [ ] "max-nested-callbacks" -- [ ] "max-params" -- [X] "max-statements" -- [X] "max-statements-per-line" -- [X] "multiline-comment-style" -- [ ] "multiline-ternary" -- [X] "new-cap" -- [ ] "new-parens" -- [X] "newline-after-var" -- [X] "newline-before-return" -- [ ] "newline-per-chained-call" -- [X] "no-alert" -- [ ] "no-array-constructor" -- [ ] "no-async-promise-executor" -- [ ] "no-await-in-loop" -- [ ] "no-bitwise" -- [X] "no-buffer-constructor" -- [X] "no-caller" -- [ ] "no-case-declarations" -- [X] "no-catch-shadow" -- [ ] "no-class-assign" -- [ ] "no-compare-neg-zero" -- [ ] "no-cond-assign" -- [ ] "no-confusing-arrow" -- [X] "no-console" -- [ ] "no-const-assign" -- [X] "no-constant-condition" -- [ ] "no-constructor-return" -- [ ] "no-continue" -- [ ] "no-control-regex" -- [X] "no-debugger" -- [ ] "no-delete-var" -- [ ] "no-div-regex" -- [ ] "no-dupe-args" -- [ ] "no-dupe-class-members" -- [ ] "no-dupe-else-if" -- [ ] "no-dupe-keys" -- [ ] "no-duplicate-case" -- [X] "no-duplicate-imports" -- [X] "no-else-return" -- [X] "no-empty" -- [ ] "no-empty-character-class" -- [ ] "no-empty-function" -- [ ] "no-empty-pattern" -- [ ] "no-eq-null" -- [X] "no-eval" -- [ ] "no-ex-assign" -- [X] "no-extend-native" -- [X] "no-extra-bind" -- [ ] "no-extra-boolean-cast" -- [ ] "no-extra-label" -- [ ] "no-extra-parens" -- [X] "no-extra-semi" -- [ ] "no-fallthrough" -- [ ] "no-floating-decimal" -- [ ] "no-func-assign" -- [ ] "no-global-assign" -- [ ] "no-implicit-coercion" -- [ ] "no-implicit-globals" -- [X] "no-implied-eval" -- [ ] "no-import-assign" -- [ ] "no-inline-comments" -- [ ] "no-inner-declarations" -- [ ] "no-invalid-regexp" -- [ ] "no-invalid-this" -- [ ] "no-irregular-whitespace" -- [X] "no-iterator" -- [ ] "no-label-var" -- [X] "no-labels" -- [X] "no-lone-blocks" -- [ ] "no-lonely-if" -- [ ] "no-loop-func" -- [ ] "no-loss-of-precision" -- [X] "no-magic-numbers" -- [ ] "no-misleading-character-class" -- [ ] "no-mixed-operators" -- [X] "no-mixed-spaces-and-tabs" -- [ ] "no-multi-assign" -- [X] "no-multi-spaces" -- [X] "no-multi-str" -- [X] "no-multiple-empty-lines" -- [X] "no-native-reassign" -- [ ] "no-negated-condition" -- [X] "no-negated-in-lhs" -- [X] "no-nested-ternary" -- [ ] "no-new" -- [X] "no-new-func" -- [ ] "no-new-object" -- [ ] "no-new-symbol" -- [X] "no-new-wrappers" -- [ ] "no-obj-calls" -- [ ] "no-octal" -- [X] "no-octal-escape" -- [ ] "no-param-reassign" -- [ ] "no-plusplus" -- [X] "no-proto" -- [ ] "no-prototype-builtins" -- [ ] "no-redeclare" -- [ ] "no-regex-spaces" -- [ ] "no-restricted-exports" -- [ ] "no-restricted-globals" -- [ ] "no-restricted-imports" -- [X] "no-restricted-properties" -- [ ] "no-restricted-syntax" -- [ ] "no-return-assign" -- [X] "no-return-await" -- [X] "no-script-url" -- [ ] "no-self-assign" -- [X] "no-self-compare" -- [X] "no-sequences" -- [ ] "no-setter-return" -- [ ] "no-shadow" -- [ ] "no-shadow-restricted-names" -- [X] "no-spaced-func" -- [ ] "no-sparse-arrays" -- [X] "no-tabs" -- [ ] "no-template-curly-in-string" -- [X] "no-ternary" -- [ ] "no-this-before-super" -- [ ] "no-throw-literal" -- [X] "no-trailing-spaces" -- [ ] "no-undef" -- [X] "no-undef-init" -- [X] "no-undefined" -- [X] "no-underscore-dangle" -- [ ] "no-unexpected-multiline" -- [X] "no-unmodified-loop-condition" -- [X] "no-unneeded-ternary" -- [ ] "no-unreachable" -- [ ] "no-unsafe-finally" -- [ ] "no-unsafe-negation" -- [ ] "no-unused-expressions" -- [ ] "no-unused-labels" -- [X] "no-unused-vars" -- [X] "no-use-before-define" -- [ ] "no-useless-backreference" -- [X] "no-useless-call" -- [ ] "no-useless-catch" -- [X] "no-useless-computed-key" -- [ ] "no-useless-concat" -- [X] "no-useless-constructor" -- [ ] "no-useless-escape" -- [X] "no-useless-rename" -- [X] "no-useless-return" -- [X] "no-var" -- [ ] "no-void" -- [ ] "no-warning-comments" -- [X] "no-whitespace-before-property" -- [X] "no-with" -- [ ] "nonblock-statement-body-position" -- [X] "object-curly-newline" -- [X] "object-curly-spacing" -- [X] "object-property-newline" -- [X] "object-shorthand" -- [X] "one-var" -- [ ] "one-var-declaration-per-line" -- [ ] "operator-assignment" -- [ ] "operator-linebreak" -- [ ] "padded-blocks" -- [ ] "padding-line-between-statements" -- [X] "prefer-arrow-callback" -- [X] "prefer-const" -- [ ] "prefer-destructuring" -- [ ] "prefer-exponentiation-operator" -- [ ] "prefer-named-capture-group" -- [X] "prefer-numeric-literals" -- [X] "prefer-object-spread" -- [ ] "prefer-promise-reject-errors" -- [X] "prefer-reflect" -- [ ] "prefer-regex-literals" -- [X] "prefer-rest-params" -- [X] "prefer-spread" -- [X] "prefer-template" -- [X] "quote-props" -- [X] "quotes" -- [ ] "radix" -- [ ] "require-atomic-updates" -- [X] "require-await" -- [X] "require-jsdoc" -- [ ] "require-unicode-regexp" -- [ ] "require-yield" -- [ ] "rest-spread-spacing" -- [X] "semi" -- [X] "semi-spacing" -- [X] "semi-style" -- [X] "sort-imports" -- [X] "sort-keys" -- [X] "sort-vars" -- [X] "space-before-blocks" -- [X] "space-before-function-paren" -- [ ] "space-in-parens" -- [X] "space-infix-ops" -- [ ] "space-unary-ops" -- [ ] "spaced-comment" -- [X] "strict" -- [ ] "switch-colon-spacing" -- [ ] "symbol-description" -- [ ] "template-curly-spacing" -- [ ] "template-tag-spacing" -- [ ] "unicode-bom" -- [ ] "use-isnan" -- [X] "valid-jsdoc" -- [X] "valid-typeof" -- [ ] "vars-on-top" -- [ ] "wrap-iife" -- [ ] "wrap-regex" -- [ ] "yield-star-spacing" -- [X] "yoda" - -## ESLint Comments - -- [X] "disable-enable-pair" -- [X] "no-aggregating-enable" -- [X] "no-duplicate-disable" -- [X] "no-restricted-disable" -- [X] "no-unlimited-disable" -- [X] "no-unused-disable" -- [X] "no-unused-enable" -- [X] "no-use" -- [ ] "require-description" - -## Import - -- [ ] "default" -- [ ] "dynamic-import-chunkname" -- [ ] "export" -- [X] "exports-last" -- [ ] "extensions" -- [X] "first" -- [ ] "group-exports" -- [ ] "max-dependencies" -- [ ] "named" -- [ ] "namespace" -- [X] "newline-after-import" -- [ ] "no-absolute-path" -- [ ] "no-amd" -- [ ] "no-anonymous-default-export" -- [ ] "no-commonjs" -- [ ] "no-cycle" -- [ ] "no-default-export" -- [ ] "no-deprecated" -- [ ] "no-duplicates" -- [ ] "no-dynamic-require" -- [ ] "no-extraneous-dependencies" -- [ ] "no-internal-modules" -- [ ] "no-loss-of-precision" -- [ ] "no-mutable-exports" -- [ ] "no-named-as-default" -- [ ] "no-named-as-default-member" -- [ ] "no-named-default" -- [ ] "no-named-export" -- [ ] "no-namespace" -- [ ] "no-nodejs-modules" -- [ ] "no-relative-parent-imports" -- [ ] "no-restricted-paths" -- [ ] "no-self-import" -- [ ] "no-unassigned-import" -- [ ] "no-unresolved" -- [ ] "no-unused-modules" -- [ ] "no-useless-path-segments" -- [X] "no-webpack-loader-syntax" -- [X] "order" -- [ ] "prefer-default-export" -- [ ] "unambiguous" - -## jsx-a11y - -- [ ] "accessible-emoji" -- [ ] "alt-text" -- [ ] "anchor-has-content" -- [ ] "anchor-is-valid" -- [ ] "aria-activedescendant-has-tabindex" -- [ ] "aria-props" -- [ ] "aria-proptypes" -- [ ] "aria-role" -- [ ] "aria-unsupported-elements" -- [ ] "autocomplete-valid" -- [ ] "click-events-have-key-events" -- [ ] "control-has-associated-label" -- [ ] "heading-has-content" -- [ ] "html-has-lang" -- [ ] "iframe-has-title" -- [ ] "img-redundant-alt" -- [ ] "interactive-supports-focus" -- [ ] "label-has-associated-control" -- [ ] "label-has-for" -- [ ] "lang" -- [ ] "media-has-caption" -- [ ] "mouse-events-have-key-events" -- [ ] "no-access-key" -- [ ] "no-autofocus" -- [ ] "no-distracting-elements" -- [ ] "no-interactive-element-to-noninteractive-role" -- [ ] "no-noninteractive-element-interactions" -- [ ] "no-noninteractive-element-to-interactive-role" -- [ ] "no-noninteractive-tabindex" -- [ ] "no-onchange" -- [ ] "no-redundant-roles" -- [ ] "no-static-element-interactions" -- [ ] "role-has-required-aria-props" -- [ ] "role-supports-aria-props" -- [ ] "scope" -- [ ] "tabindex-no-positive" - -## Security - -- [ ] "detect-buffer-noassert" -- [ ] "detect-child-process" -- [ ] "detect-disable-mustache-escape" -- [ ] "detect-eval-with-expression" -- [ ] "detect-new-buffer" -- [ ] "detect-no-csrf-before-method-override" -- [ ] "detect-non-literal-fs-filename" -- [ ] "detect-non-literal-regexp" -- [ ] "detect-non-literal-require" -- [ ] "detect-object-injection" -- [ ] "detect-possible-timing-attacks" -- [ ] "detect-pseudoRandomBytes" -- [ ] "detect-unsafe-regex" - -## SonarJS - -- [X] "cognitive-complexity" -- [X] "max-switch-cases" -- [X] "no-all-duplicated-branches" -- [X] "no-collapsible-if" -- [X] "no-collection-size-mischeck" -- [X] "no-duplicate-string" -- [X] "no-duplicated-branches" -- [X] "no-element-overwrite" -- [X] "no-extra-arguments" -- [X] "no-identical-conditions" -- [X] "no-identical-expressions" -- [X] "no-identical-functions" -- [X] "no-inverted-boolean-check" -- [X] "no-one-iteration-loop" -- [X] "no-redundant-boolean" -- [X] "no-redundant-jump" -- [X] "no-same-line-conditional" -- [X] "no-small-switch" -- [X] "no-unused-collection" -- [X] "no-use-of-empty-return-value" -- [X] "no-useless-catch" -- [X] "prefer-immediate-return" -- [X] "prefer-object-literal" -- [X] "prefer-single-boolean-return" -- [X] "prefer-while" - -## TypeScript - -- [ ] "adjacent-overload-signatures" -- [ ] "array-type" -- [X] "await-thenable" -- [ ] "ban-ts-comment" -- [ ] "ban-tslint-comment" -- [ ] "ban-types" -- [ ] "brace-style" -- [ ] "camelcase" -- [X] "class-literal-property-style" -- [X] "comma-spacing" -- [ ] "consistent-type-assertions" -- [ ] "consistent-type-definitions" -- [ ] "default-param-last" -- [ ] "dot-notation" -- [X] "explicit-function-return-type" -- [X] "explicit-member-accessibility" -- [ ] "explicit-module-boundary-types" -- [ ] "func-call-spacing" -- [X] "indent" -- [ ] "init-declarations" -- [ ] "keyword-spacing" -- [ ] "lines-between-class-members" -- [ ] "member-delimiter-style" -- [ ] "member-ordering" -- [X] "method-signature-style" -- [ ] "naming-convention" -- [ ] "no-array-constructor" -- [X] "no-base-to-string" -- [ ] "no-confusing-non-null-assertion" -- [ ] "no-dupe-class-members" -- [ ] "no-dynamic-delete" -- [ ] "no-empty-function" -- [X] "no-empty-interface" -- [X] "no-explicit-any" -- [ ] "no-extra-non-null-assertion" -- [ ] "no-extra-parens" -- [X] "no-extra-semi" -- [ ] "no-extraneous-class" -- [ ] "no-floating-promises" -- [ ] "no-for-in-array" -- [X] "no-implied-eval" -- [X] "no-inferrable-types" -- [ ] "no-invalid-this" -- [ ] "no-invalid-void-type" -- [X] "no-magic-numbers" -- [ ] "no-misused-new" -- [X] "no-misused-promises" -- [X] "no-namespace" -- [ ] "no-non-null-asserted-optional-chain" -- [ ] "no-non-null-assertion" -- [ ] "no-parameter-properties" -- [ ] "no-require-imports" -- [ ] "no-this-alias" -- [ ] "no-throw-literal" -- [X] "no-type-alias" -- [ ] "no-unnecessary-boolean-literal-compare" -- [X] "no-unnecessary-condition" -- [ ] "no-unnecessary-qualifier" -- [ ] "no-unnecessary-type-arguments" -- [X] "no-unnecessary-type-assertion" -- [ ] "no-unsafe-assignment" -- [X] "no-unsafe-call" -- [X] "no-unsafe-member-access" -- [X] "no-unsafe-return" -- [ ] "no-unused-expressions" -- [X] "no-unused-vars" -- [X] "no-unused-vars-experimental" -- [X] "no-use-before-define" -- [X] "no-useless-constructor" -- [X] "no-var-requires" -- [ ] "prefer-as-const" -- [ ] "prefer-for-of" -- [ ] "prefer-function-type" -- [ ] "prefer-includes" -- [ ] "prefer-namespace-keyword" -- [ ] "prefer-nullish-coalescing" -- [ ] "prefer-optional-chain" -- [ ] "prefer-readonly" -- [X] "prefer-readonly-parameter-types" -- [ ] "prefer-reduce-type-parameter" -- [ ] "prefer-regexp-exec" -- [ ] "prefer-string-starts-ends-with" -- [ ] "prefer-ts-expect-error" -- [ ] "promise-function-async" -- [X] "quotes" -- [ ] "require-array-sort-compare" -- [X] "require-await" -- [ ] "restrict-plus-operands" -- [ ] "restrict-template-expressions" -- [ ] "return-await" -- [X] "semi" -- [X] "space-before-function-paren" -- [X] "strict-boolean-expressions" -- [ ] "switch-exhaustiveness-check" -- [ ] "triple-slash-reference" -- [X] "type-annotation-spacing" -- [X] "typedef" -- [ ] "unbound-method" -- [ ] "unified-signatures" - -## Unicorn - -- [ ] "better-regex" -- [ ] "catch-error-name" -- [ ] "consistent-function-scoping" -- [ ] "custom-error-definition" -- [ ] "error-message" -- [ ] "escape-case" -- [ ] "expiring-todo-comments" -- [ ] "explicit-length-check" -- [X] "filename-case" -- [X] "import-index" -- [ ] "new-for-builtins" -- [ ] "no-abusive-eslint-disable" -- [ ] "no-array-instanceof" -- [X] "no-console-spaces" -- [ ] "no-fn-reference-in-iterator" -- [ ] "no-for-loop" -- [ ] "no-hex-escape" -- [ ] "no-keyword-prefix" -- [ ] "no-nested-ternary" -- [ ] "no-new-buffer" -- [ ] "no-null" -- [ ] "no-process-exit" -- [ ] "no-reduce" -- [ ] "no-unreadable-array-destructuring" -- [ ] "no-unsafe-regex" -- [ ] "no-unused-properties" -- [ ] "no-useless-undefined" -- [ ] "no-zero-fractions" -- [ ] "number-literal-case" -- [ ] "prefer-add-event-listener" -- [ ] "prefer-array-find" -- [ ] "prefer-dataset" -- [ ] "prefer-event-key" -- [ ] "prefer-exponentiation-operator" -- [ ] "prefer-flat-map" -- [ ] "prefer-includes" -- [ ] "prefer-modern-dom-apis" -- [ ] "prefer-negative-index" -- [ ] "prefer-node-append" -- [ ] "prefer-node-remove" -- [X] "prefer-number-properties" -- [ ] "prefer-optional-catch-binding" -- [ ] "prefer-query-selector" -- [ ] "prefer-reflect-apply" -- [ ] "prefer-replace-all" -- [X] "prefer-set-has" -- [ ] "prefer-spread" -- [ ] "prefer-starts-ends-with" -- [ ] "prefer-string-slice" -- [ ] "prefer-text-content" -- [ ] "prefer-trim-start-end" -- [ ] "prefer-type-error" -- [X] "prevent-abbreviations" -- [ ] "string-content" -- [ ] "throw-new-error" - -## Vue - -- [ ] "array-bracket-spacing" -- [ ] "arrow-spacing" -- [ ] "attribute-hyphenation" -- [X] "attributes-order" -- [ ] "block-spacing" -- [ ] "brace-style" -- [ ] "camelcase" -- [X] "comma-dangle" -- [ ] "comment-directive" -- [ ] "component-definition-name-casing" -- [ ] "component-name-in-template-casing" -- [ ] "component-tags-order" -- [ ] "dot-location" -- [ ] "eqeqeq" -- [X] "html-closing-bracket-newline" -- [X] "html-closing-bracket-spacing" -- [ ] "html-end-tags" -- [X] "html-indent" -- [X] "html-quotes" -- [X] "html-self-closing" -- [ ] "jsx-uses-vars" -- [ ] "key-spacing" -- [ ] "keyword-spacing" -- [ ] "match-component-file-name" -- [X] "max-attributes-per-line" -- [ ] "max-len" -- [ ] "multiline-html-element-content-newline" -- [ ] "mustache-interpolation-spacing" -- [ ] "name-property-casing" -- [ ] "no-async-in-computed-properties" -- [ ] "no-boolean-default" -- [ ] "no-confusing-v-for-v-if" -- [ ] "no-deprecated-scope-attribute" -- [ ] "no-deprecated-slot-attribute" -- [ ] "no-deprecated-slot-scope-attribute" -- [ ] "no-dupe-keys" -- [ ] "no-duplicate-attributes" -- [ ] "no-empty-pattern" -- [ ] "no-irregular-whitespace" -- [X] "no-multi-spaces" -- [ ] "no-parsing-error" -- [ ] "no-reserved-component-names" -- [ ] "no-reserved-keys" -- [ ] "no-restricted-syntax" -- [ ] "no-shared-component-data" -- [ ] "no-side-effects-in-computed-properties" -- [ ] "no-spaces-around-equal-signs-in-attribute" -- [ ] "no-static-inline-styles" -- [ ] "no-template-key" -- [ ] "no-template-shadow" -- [ ] "no-textarea-mustache" -- [ ] "no-unsupported-features" -- [ ] "no-unused-components" -- [X] "no-unused-vars" -- [ ] "no-use-v-if-with-v-for" -- [ ] "no-v-html" -- [X] "object-curly-spacing" -- [ ] "order-in-components" -- [X] "padding-line-between-blocks" -- [ ] "prop-name-casing" -- [ ] "require-component-is" -- [ ] "require-default-prop" -- [ ] "require-direct-export" -- [ ] "require-name-property" -- [ ] "require-prop-type-constructor" -- [ ] "require-prop-types" -- [ ] "require-render-return" -- [ ] "require-v-for-key" -- [ ] "require-valid-default-prop" -- [ ] "return-in-computed-property" -- [X] "script-indent" -- [ ] "singleline-html-element-content-newline" -- [X] "sort-keys" -- [X] "space-infix-ops" -- [ ] "space-unary-ops" -- [ ] "static-class-names-order" -- [ ] "this-in-template" -- [ ] "use-v-on-exact" -- [ ] "v-bind-style" -- [ ] "v-on-function-call" -- [ ] "v-on-style" -- [ ] "v-slot-style" -- [ ] "valid-template-root" -- [ ] "valid-v-bind" -- [ ] "valid-v-bind-sync" -- [ ] "valid-v-cloak" -- [ ] "valid-v-else" -- [ ] "valid-v-else-if" -- [ ] "valid-v-for" -- [ ] "valid-v-html" -- [ ] "valid-v-if" -- [ ] "valid-v-model" -- [ ] "valid-v-on" -- [ ] "valid-v-once" -- [ ] "valid-v-pre" -- [ ] "valid-v-show" -- [ ] "valid-v-slot" -- [ ] "valid-v-text" diff --git a/docs/roadmap/eslint-comments.md b/docs/roadmap/eslint-comments.md new file mode 100644 index 0000000..ce02024 --- /dev/null +++ b/docs/roadmap/eslint-comments.md @@ -0,0 +1,11 @@ +# ESLint Comments + +- [X] "disable-enable-pair" +- [X] "no-aggregating-enable" +- [X] "no-duplicate-disable" +- [X] "no-restricted-disable" +- [X] "no-unlimited-disable" +- [X] "no-unused-disable" +- [X] "no-unused-enable" +- [X] "no-use" +- [ ] "require-description" diff --git a/docs/roadmap/eslint.md b/docs/roadmap/eslint.md new file mode 100644 index 0000000..7c1dfcc --- /dev/null +++ b/docs/roadmap/eslint.md @@ -0,0 +1,271 @@ +# ESLint + +- [ ] "accessor-pairs" +- [ ] "array-bracket-newline" +- [ ] "array-bracket-spacing" +- [X] "array-callback-return" +- [ ] "array-element-newline" +- [ ] "arrow-body-style" +- [X] "arrow-parens" +- [X] "arrow-spacing" +- [ ] "block-scoped-var" +- [ ] "block-spacing" +- [X] "brace-style" +- [X] "camelcase" +- [ ] "capitalized-comments" +- [X] "class-methods-use-this" +- [X] "comma-dangle" +- [X] "comma-spacing" +- [X] "comma-style" +- [ ] "complexity" +- [ ] "computed-property-spacing" +- [ ] "consistent-return" +- [ ] "consistent-this" +- [ ] "constructor-super" +- [X] "curly" +- [ ] "default-case" +- [ ] "default-case-last" +- [ ] "default-param-last" +- [ ] "dot-location" +- [X] "dot-notation" +- [X] "eol-last" +- [X] "eqeqeq" +- [ ] "for-direction" +- [ ] "func-call-spacing" +- [ ] "func-name-matching" +- [ ] "func-names" +- [ ] "func-style" +- [X] "function-call-argument-newline" +- [ ] "function-paren-newline" +- [ ] "generator-star-spacing" +- [ ] "getter-return" +- [ ] "grouped-accessor-pairs" +- [ ] "guard-for-in" +- [ ] "id-blacklist" +- [X] "id-length" +- [ ] "id-match" +- [ ] "implicit-arrow-linebreak" +- [X] "indent" +- [X] "indent-legacy" +- [ ] "init-declarations" +- [X] "jsx-quotes" +- [X] "key-spacing" +- [X] "keyword-spacing" +- [ ] "line-comment-position" +- [X] "linebreak-style" +- [X] "lines-around-comment" +- [X] "lines-around-directive" +- [X] "lines-between-class-members" +- [ ] "max-classes-per-file" +- [ ] "max-depth" +- [X] "max-len" +- [X] "max-lines" +- [X] "max-lines-per-function" +- [ ] "max-nested-callbacks" +- [ ] "max-params" +- [X] "max-statements" +- [X] "max-statements-per-line" +- [X] "multiline-comment-style" +- [ ] "multiline-ternary" +- [X] "new-cap" +- [ ] "new-parens" +- [X] "newline-after-var" +- [X] "newline-before-return" +- [ ] "newline-per-chained-call" +- [X] "no-alert" +- [ ] "no-array-constructor" +- [ ] "no-async-promise-executor" +- [ ] "no-await-in-loop" +- [ ] "no-bitwise" +- [X] "no-buffer-constructor" +- [X] "no-caller" +- [ ] "no-case-declarations" +- [X] "no-catch-shadow" +- [ ] "no-class-assign" +- [ ] "no-compare-neg-zero" +- [ ] "no-cond-assign" +- [ ] "no-confusing-arrow" +- [X] "no-console" +- [ ] "no-const-assign" +- [X] "no-constant-condition" +- [ ] "no-constructor-return" +- [ ] "no-continue" +- [ ] "no-control-regex" +- [X] "no-debugger" +- [ ] "no-delete-var" +- [ ] "no-div-regex" +- [ ] "no-dupe-args" +- [ ] "no-dupe-class-members" +- [ ] "no-dupe-else-if" +- [ ] "no-dupe-keys" +- [ ] "no-duplicate-case" +- [X] "no-duplicate-imports" +- [X] "no-else-return" +- [X] "no-empty" +- [ ] "no-empty-character-class" +- [ ] "no-empty-function" +- [ ] "no-empty-pattern" +- [ ] "no-eq-null" +- [X] "no-eval" +- [ ] "no-ex-assign" +- [X] "no-extend-native" +- [X] "no-extra-bind" +- [ ] "no-extra-boolean-cast" +- [ ] "no-extra-label" +- [ ] "no-extra-parens" +- [X] "no-extra-semi" +- [ ] "no-fallthrough" +- [ ] "no-floating-decimal" +- [ ] "no-func-assign" +- [ ] "no-global-assign" +- [ ] "no-implicit-coercion" +- [ ] "no-implicit-globals" +- [X] "no-implied-eval" +- [ ] "no-import-assign" +- [ ] "no-inline-comments" +- [ ] "no-inner-declarations" +- [ ] "no-invalid-regexp" +- [ ] "no-invalid-this" +- [ ] "no-irregular-whitespace" +- [X] "no-iterator" +- [ ] "no-label-var" +- [X] "no-labels" +- [X] "no-lone-blocks" +- [ ] "no-lonely-if" +- [ ] "no-loop-func" +- [ ] "no-loss-of-precision" +- [X] "no-magic-numbers" +- [ ] "no-misleading-character-class" +- [ ] "no-mixed-operators" +- [X] "no-mixed-spaces-and-tabs" +- [ ] "no-multi-assign" +- [X] "no-multi-spaces" +- [X] "no-multi-str" +- [X] "no-multiple-empty-lines" +- [X] "no-native-reassign" +- [ ] "no-negated-condition" +- [X] "no-negated-in-lhs" +- [X] "no-nested-ternary" +- [ ] "no-new" +- [X] "no-new-func" +- [ ] "no-new-object" +- [ ] "no-new-symbol" +- [X] "no-new-wrappers" +- [ ] "no-obj-calls" +- [ ] "no-octal" +- [X] "no-octal-escape" +- [ ] "no-param-reassign" +- [ ] "no-plusplus" +- [X] "no-proto" +- [ ] "no-prototype-builtins" +- [ ] "no-redeclare" +- [ ] "no-regex-spaces" +- [ ] "no-restricted-exports" +- [ ] "no-restricted-globals" +- [ ] "no-restricted-imports" +- [X] "no-restricted-properties" +- [ ] "no-restricted-syntax" +- [ ] "no-return-assign" +- [X] "no-return-await" +- [X] "no-script-url" +- [ ] "no-self-assign" +- [X] "no-self-compare" +- [X] "no-sequences" +- [ ] "no-setter-return" +- [ ] "no-shadow" +- [ ] "no-shadow-restricted-names" +- [X] "no-spaced-func" +- [ ] "no-sparse-arrays" +- [X] "no-tabs" +- [ ] "no-template-curly-in-string" +- [X] "no-ternary" +- [ ] "no-this-before-super" +- [ ] "no-throw-literal" +- [X] "no-trailing-spaces" +- [ ] "no-undef" +- [X] "no-undef-init" +- [X] "no-undefined" +- [X] "no-underscore-dangle" +- [ ] "no-unexpected-multiline" +- [X] "no-unmodified-loop-condition" +- [X] "no-unneeded-ternary" +- [ ] "no-unreachable" +- [ ] "no-unsafe-finally" +- [ ] "no-unsafe-negation" +- [ ] "no-unused-expressions" +- [ ] "no-unused-labels" +- [X] "no-unused-vars" +- [X] "no-use-before-define" +- [ ] "no-useless-backreference" +- [X] "no-useless-call" +- [ ] "no-useless-catch" +- [X] "no-useless-computed-key" +- [ ] "no-useless-concat" +- [X] "no-useless-constructor" +- [ ] "no-useless-escape" +- [X] "no-useless-rename" +- [X] "no-useless-return" +- [X] "no-var" +- [ ] "no-void" +- [ ] "no-warning-comments" +- [X] "no-whitespace-before-property" +- [X] "no-with" +- [ ] "nonblock-statement-body-position" +- [X] "object-curly-newline" +- [X] "object-curly-spacing" +- [X] "object-property-newline" +- [X] "object-shorthand" +- [X] "one-var" +- [ ] "one-var-declaration-per-line" +- [ ] "operator-assignment" +- [ ] "operator-linebreak" +- [ ] "padded-blocks" +- [ ] "padding-line-between-statements" +- [X] "prefer-arrow-callback" +- [X] "prefer-const" +- [ ] "prefer-destructuring" +- [ ] "prefer-exponentiation-operator" +- [ ] "prefer-named-capture-group" +- [X] "prefer-numeric-literals" +- [X] "prefer-object-spread" +- [ ] "prefer-promise-reject-errors" +- [X] "prefer-reflect" +- [ ] "prefer-regex-literals" +- [X] "prefer-rest-params" +- [X] "prefer-spread" +- [X] "prefer-template" +- [X] "quote-props" +- [X] "quotes" +- [ ] "radix" +- [ ] "require-atomic-updates" +- [X] "require-await" +- [X] "require-jsdoc" +- [ ] "require-unicode-regexp" +- [ ] "require-yield" +- [ ] "rest-spread-spacing" +- [X] "semi" +- [X] "semi-spacing" +- [X] "semi-style" +- [X] "sort-imports" +- [X] "sort-keys" +- [X] "sort-vars" +- [X] "space-before-blocks" +- [X] "space-before-function-paren" +- [ ] "space-in-parens" +- [X] "space-infix-ops" +- [ ] "space-unary-ops" +- [ ] "spaced-comment" +- [X] "strict" +- [ ] "switch-colon-spacing" +- [ ] "symbol-description" +- [ ] "template-curly-spacing" +- [ ] "template-tag-spacing" +- [ ] "unicode-bom" +- [ ] "use-isnan" +- [X] "valid-jsdoc" +- [X] "valid-typeof" +- [ ] "vars-on-top" +- [ ] "wrap-iife" +- [ ] "wrap-regex" +- [ ] "yield-star-spacing" +- [X] "yoda" diff --git a/docs/roadmap/import.md b/docs/roadmap/import.md new file mode 100644 index 0000000..4220da6 --- /dev/null +++ b/docs/roadmap/import.md @@ -0,0 +1,43 @@ +# Import + +- [ ] "default" +- [ ] "dynamic-import-chunkname" +- [ ] "export" +- [X] "exports-last" +- [ ] "extensions" +- [X] "first" +- [ ] "group-exports" +- [ ] "max-dependencies" +- [ ] "named" +- [ ] "namespace" +- [X] "newline-after-import" +- [ ] "no-absolute-path" +- [ ] "no-amd" +- [ ] "no-anonymous-default-export" +- [ ] "no-commonjs" +- [ ] "no-cycle" +- [ ] "no-default-export" +- [ ] "no-deprecated" +- [ ] "no-duplicates" +- [ ] "no-dynamic-require" +- [ ] "no-extraneous-dependencies" +- [ ] "no-internal-modules" +- [ ] "no-loss-of-precision" +- [ ] "no-mutable-exports" +- [ ] "no-named-as-default" +- [ ] "no-named-as-default-member" +- [ ] "no-named-default" +- [ ] "no-named-export" +- [ ] "no-namespace" +- [ ] "no-nodejs-modules" +- [ ] "no-relative-parent-imports" +- [ ] "no-restricted-paths" +- [ ] "no-self-import" +- [ ] "no-unassigned-import" +- [ ] "no-unresolved" +- [ ] "no-unused-modules" +- [ ] "no-useless-path-segments" +- [X] "no-webpack-loader-syntax" +- [X] "order" +- [ ] "prefer-default-export" +- [ ] "unambiguous" diff --git a/docs/roadmap/jsx-a11y.md b/docs/roadmap/jsx-a11y.md new file mode 100644 index 0000000..6c745e9 --- /dev/null +++ b/docs/roadmap/jsx-a11y.md @@ -0,0 +1,38 @@ +# jsx-a11y + +- [ ] "accessible-emoji" +- [ ] "alt-text" +- [ ] "anchor-has-content" +- [ ] "anchor-is-valid" +- [ ] "aria-activedescendant-has-tabindex" +- [ ] "aria-props" +- [ ] "aria-proptypes" +- [ ] "aria-role" +- [ ] "aria-unsupported-elements" +- [ ] "autocomplete-valid" +- [ ] "click-events-have-key-events" +- [ ] "control-has-associated-label" +- [ ] "heading-has-content" +- [ ] "html-has-lang" +- [ ] "iframe-has-title" +- [ ] "img-redundant-alt" +- [ ] "interactive-supports-focus" +- [ ] "label-has-associated-control" +- [ ] "label-has-for" +- [ ] "lang" +- [ ] "media-has-caption" +- [ ] "mouse-events-have-key-events" +- [ ] "no-access-key" +- [ ] "no-autofocus" +- [ ] "no-distracting-elements" +- [ ] "no-interactive-element-to-noninteractive-role" +- [ ] "no-noninteractive-element-interactions" +- [ ] "no-noninteractive-element-to-interactive-role" +- [ ] "no-noninteractive-tabindex" +- [ ] "no-onchange" +- [ ] "no-redundant-roles" +- [ ] "no-static-element-interactions" +- [ ] "role-has-required-aria-props" +- [ ] "role-supports-aria-props" +- [ ] "scope" +- [ ] "tabindex-no-positive" diff --git a/docs/roadmap/security.md b/docs/roadmap/security.md new file mode 100644 index 0000000..ce7dcf0 --- /dev/null +++ b/docs/roadmap/security.md @@ -0,0 +1,15 @@ +# Security + +- [ ] "detect-buffer-noassert" +- [ ] "detect-child-process" +- [ ] "detect-disable-mustache-escape" +- [ ] "detect-eval-with-expression" +- [ ] "detect-new-buffer" +- [ ] "detect-no-csrf-before-method-override" +- [ ] "detect-non-literal-fs-filename" +- [ ] "detect-non-literal-regexp" +- [ ] "detect-non-literal-require" +- [ ] "detect-object-injection" +- [ ] "detect-possible-timing-attacks" +- [ ] "detect-pseudoRandomBytes" +- [ ] "detect-unsafe-regex" diff --git a/docs/roadmap/sonarjs.md b/docs/roadmap/sonarjs.md new file mode 100644 index 0000000..fe2ebe5 --- /dev/null +++ b/docs/roadmap/sonarjs.md @@ -0,0 +1,27 @@ +# SonarJS + +- [X] "cognitive-complexity" +- [X] "max-switch-cases" +- [X] "no-all-duplicated-branches" +- [X] "no-collapsible-if" +- [X] "no-collection-size-mischeck" +- [X] "no-duplicate-string" +- [X] "no-duplicated-branches" +- [X] "no-element-overwrite" +- [X] "no-extra-arguments" +- [X] "no-identical-conditions" +- [X] "no-identical-expressions" +- [X] "no-identical-functions" +- [X] "no-inverted-boolean-check" +- [X] "no-one-iteration-loop" +- [X] "no-redundant-boolean" +- [X] "no-redundant-jump" +- [X] "no-same-line-conditional" +- [X] "no-small-switch" +- [X] "no-unused-collection" +- [X] "no-use-of-empty-return-value" +- [X] "no-useless-catch" +- [X] "prefer-immediate-return" +- [X] "prefer-object-literal" +- [X] "prefer-single-boolean-return" +- [X] "prefer-while" diff --git a/docs/roadmap/typescript.md b/docs/roadmap/typescript.md new file mode 100644 index 0000000..412083a --- /dev/null +++ b/docs/roadmap/typescript.md @@ -0,0 +1,101 @@ +# TypeScript + +- [ ] "adjacent-overload-signatures" +- [ ] "array-type" +- [X] "await-thenable" +- [ ] "ban-ts-comment" +- [ ] "ban-tslint-comment" +- [ ] "ban-types" +- [ ] "brace-style" +- [ ] "camelcase" +- [X] "class-literal-property-style" +- [X] "comma-spacing" +- [ ] "consistent-type-assertions" +- [ ] "consistent-type-definitions" +- [ ] "default-param-last" +- [ ] "dot-notation" +- [X] "explicit-function-return-type" +- [X] "explicit-member-accessibility" +- [ ] "explicit-module-boundary-types" +- [ ] "func-call-spacing" +- [X] "indent" +- [ ] "init-declarations" +- [ ] "keyword-spacing" +- [ ] "lines-between-class-members" +- [ ] "member-delimiter-style" +- [ ] "member-ordering" +- [X] "method-signature-style" +- [ ] "naming-convention" +- [ ] "no-array-constructor" +- [X] "no-base-to-string" +- [ ] "no-confusing-non-null-assertion" +- [ ] "no-dupe-class-members" +- [ ] "no-dynamic-delete" +- [ ] "no-empty-function" +- [X] "no-empty-interface" +- [X] "no-explicit-any" +- [ ] "no-extra-non-null-assertion" +- [ ] "no-extra-parens" +- [X] "no-extra-semi" +- [ ] "no-extraneous-class" +- [ ] "no-floating-promises" +- [ ] "no-for-in-array" +- [X] "no-implied-eval" +- [X] "no-inferrable-types" +- [ ] "no-invalid-this" +- [ ] "no-invalid-void-type" +- [X] "no-magic-numbers" +- [ ] "no-misused-new" +- [X] "no-misused-promises" +- [X] "no-namespace" +- [ ] "no-non-null-asserted-optional-chain" +- [ ] "no-non-null-assertion" +- [ ] "no-parameter-properties" +- [ ] "no-require-imports" +- [ ] "no-this-alias" +- [ ] "no-throw-literal" +- [X] "no-type-alias" +- [ ] "no-unnecessary-boolean-literal-compare" +- [X] "no-unnecessary-condition" +- [ ] "no-unnecessary-qualifier" +- [ ] "no-unnecessary-type-arguments" +- [X] "no-unnecessary-type-assertion" +- [ ] "no-unsafe-assignment" +- [X] "no-unsafe-call" +- [X] "no-unsafe-member-access" +- [X] "no-unsafe-return" +- [ ] "no-unused-expressions" +- [X] "no-unused-vars" +- [X] "no-unused-vars-experimental" +- [X] "no-use-before-define" +- [X] "no-useless-constructor" +- [X] "no-var-requires" +- [ ] "prefer-as-const" +- [ ] "prefer-for-of" +- [ ] "prefer-function-type" +- [ ] "prefer-includes" +- [ ] "prefer-namespace-keyword" +- [ ] "prefer-nullish-coalescing" +- [ ] "prefer-optional-chain" +- [ ] "prefer-readonly" +- [X] "prefer-readonly-parameter-types" +- [ ] "prefer-reduce-type-parameter" +- [ ] "prefer-regexp-exec" +- [ ] "prefer-string-starts-ends-with" +- [ ] "prefer-ts-expect-error" +- [ ] "promise-function-async" +- [X] "quotes" +- [ ] "require-array-sort-compare" +- [X] "require-await" +- [ ] "restrict-plus-operands" +- [ ] "restrict-template-expressions" +- [ ] "return-await" +- [X] "semi" +- [X] "space-before-function-paren" +- [X] "strict-boolean-expressions" +- [ ] "switch-exhaustiveness-check" +- [ ] "triple-slash-reference" +- [X] "type-annotation-spacing" +- [X] "typedef" +- [ ] "unbound-method" +- [ ] "unified-signatures" diff --git a/docs/roadmap/unicorn.md b/docs/roadmap/unicorn.md new file mode 100644 index 0000000..df1d983 --- /dev/null +++ b/docs/roadmap/unicorn.md @@ -0,0 +1,57 @@ +# Unicorn + +- [ ] "better-regex" +- [ ] "catch-error-name" +- [ ] "consistent-function-scoping" +- [ ] "custom-error-definition" +- [ ] "error-message" +- [ ] "escape-case" +- [ ] "expiring-todo-comments" +- [ ] "explicit-length-check" +- [X] "filename-case" +- [X] "import-index" +- [ ] "new-for-builtins" +- [ ] "no-abusive-eslint-disable" +- [ ] "no-array-instanceof" +- [X] "no-console-spaces" +- [ ] "no-fn-reference-in-iterator" +- [ ] "no-for-loop" +- [ ] "no-hex-escape" +- [ ] "no-keyword-prefix" +- [ ] "no-nested-ternary" +- [ ] "no-new-buffer" +- [ ] "no-null" +- [ ] "no-process-exit" +- [ ] "no-reduce" +- [ ] "no-unreadable-array-destructuring" +- [ ] "no-unsafe-regex" +- [ ] "no-unused-properties" +- [ ] "no-useless-undefined" +- [ ] "no-zero-fractions" +- [ ] "number-literal-case" +- [ ] "prefer-add-event-listener" +- [ ] "prefer-array-find" +- [ ] "prefer-dataset" +- [ ] "prefer-event-key" +- [ ] "prefer-exponentiation-operator" +- [ ] "prefer-flat-map" +- [ ] "prefer-includes" +- [ ] "prefer-modern-dom-apis" +- [ ] "prefer-negative-index" +- [ ] "prefer-node-append" +- [ ] "prefer-node-remove" +- [X] "prefer-number-properties" +- [ ] "prefer-optional-catch-binding" +- [ ] "prefer-query-selector" +- [ ] "prefer-reflect-apply" +- [ ] "prefer-replace-all" +- [X] "prefer-set-has" +- [ ] "prefer-spread" +- [ ] "prefer-starts-ends-with" +- [ ] "prefer-string-slice" +- [ ] "prefer-text-content" +- [ ] "prefer-trim-start-end" +- [ ] "prefer-type-error" +- [X] "prevent-abbreviations" +- [ ] "string-content" +- [ ] "throw-new-error" diff --git a/docs/roadmap/vue.md b/docs/roadmap/vue.md new file mode 100644 index 0000000..08496a1 --- /dev/null +++ b/docs/roadmap/vue.md @@ -0,0 +1,100 @@ +# Vue + +- [ ] "array-bracket-spacing" +- [ ] "arrow-spacing" +- [ ] "attribute-hyphenation" +- [X] "attributes-order" +- [ ] "block-spacing" +- [ ] "brace-style" +- [ ] "camelcase" +- [X] "comma-dangle" +- [ ] "comment-directive" +- [ ] "component-definition-name-casing" +- [ ] "component-name-in-template-casing" +- [ ] "component-tags-order" +- [ ] "dot-location" +- [ ] "eqeqeq" +- [X] "html-closing-bracket-newline" +- [X] "html-closing-bracket-spacing" +- [ ] "html-end-tags" +- [X] "html-indent" +- [X] "html-quotes" +- [X] "html-self-closing" +- [ ] "jsx-uses-vars" +- [ ] "key-spacing" +- [ ] "keyword-spacing" +- [ ] "match-component-file-name" +- [X] "max-attributes-per-line" +- [ ] "max-len" +- [ ] "multiline-html-element-content-newline" +- [ ] "mustache-interpolation-spacing" +- [ ] "name-property-casing" +- [ ] "no-async-in-computed-properties" +- [ ] "no-boolean-default" +- [ ] "no-confusing-v-for-v-if" +- [ ] "no-deprecated-scope-attribute" +- [ ] "no-deprecated-slot-attribute" +- [ ] "no-deprecated-slot-scope-attribute" +- [ ] "no-dupe-keys" +- [ ] "no-duplicate-attributes" +- [ ] "no-empty-pattern" +- [ ] "no-irregular-whitespace" +- [X] "no-multi-spaces" +- [ ] "no-parsing-error" +- [ ] "no-reserved-component-names" +- [ ] "no-reserved-keys" +- [ ] "no-restricted-syntax" +- [ ] "no-shared-component-data" +- [ ] "no-side-effects-in-computed-properties" +- [ ] "no-spaces-around-equal-signs-in-attribute" +- [ ] "no-static-inline-styles" +- [ ] "no-template-key" +- [ ] "no-template-shadow" +- [ ] "no-textarea-mustache" +- [ ] "no-unsupported-features" +- [ ] "no-unused-components" +- [X] "no-unused-vars" +- [ ] "no-use-v-if-with-v-for" +- [ ] "no-v-html" +- [X] "object-curly-spacing" +- [ ] "order-in-components" +- [X] "padding-line-between-blocks" +- [ ] "prop-name-casing" +- [ ] "require-component-is" +- [ ] "require-default-prop" +- [ ] "require-direct-export" +- [ ] "require-name-property" +- [ ] "require-prop-type-constructor" +- [ ] "require-prop-types" +- [ ] "require-render-return" +- [ ] "require-v-for-key" +- [ ] "require-valid-default-prop" +- [ ] "return-in-computed-property" +- [X] "script-indent" +- [ ] "singleline-html-element-content-newline" +- [X] "sort-keys" +- [X] "space-infix-ops" +- [ ] "space-unary-ops" +- [ ] "static-class-names-order" +- [ ] "this-in-template" +- [ ] "use-v-on-exact" +- [ ] "v-bind-style" +- [ ] "v-on-function-call" +- [ ] "v-on-style" +- [ ] "v-slot-style" +- [ ] "valid-template-root" +- [ ] "valid-v-bind" +- [ ] "valid-v-bind-sync" +- [ ] "valid-v-cloak" +- [ ] "valid-v-else" +- [ ] "valid-v-else-if" +- [ ] "valid-v-for" +- [ ] "valid-v-html" +- [ ] "valid-v-if" +- [ ] "valid-v-model" +- [ ] "valid-v-on" +- [ ] "valid-v-once" +- [ ] "valid-v-pre" +- [ ] "valid-v-show" +- [ ] "valid-v-slot" +- [ ] "valid-v-text" -- cgit v1.2.3 From a5019ebc60f877c36f16b4a87c0cbd9b48d38873 Mon Sep 17 00:00:00 2001 From: Valentin Popov Date: Thu, 18 Jun 2020 11:28:09 +0400 Subject: Bump version Signed-off-by: Valentin Popov --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 500c4d2..f1f44be 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@valentineus/eslint-config", - "version": "0.0.16", + "version": "0.0.17", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index c826c88..144acc5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@valentineus/eslint-config", - "version": "0.0.16", + "version": "0.0.17", "description": "Personal ESLint configuration", "main": "index.js", "repository": "git@code.valentineus.link:eslint-config.git", -- cgit v1.2.3 From 58e080f2e77b405ad12765f62b3945fa0f776ef6 Mon Sep 17 00:00:00 2001 From: Valentin Popov Date: Thu, 18 Jun 2020 11:37:31 +0400 Subject: Fixed "object-curly-newline" Signed-off-by: Valentin Popov --- src/rules/javascript/default.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/rules/javascript/default.json b/src/rules/javascript/default.json index 34e1d8f..0ec323c 100644 --- a/src/rules/javascript/default.json +++ b/src/rules/javascript/default.json @@ -454,18 +454,18 @@ { "ExportDeclaration": { "consistent": true, - "minProperties": 1, + "minProperties": 5, "multiline": true }, "ImportDeclaration": "never", "ObjectExpression": { "consistent": true, - "minProperties": 1, + "minProperties": 5, "multiline": true }, "ObjectPattern": { "consistent": true, - "minProperties": 1, + "minProperties": 5, "multiline": true } } @@ -638,4 +638,4 @@ "onlyEquality": false } ] -} \ No newline at end of file +} -- cgit v1.2.3 From f6868cf9b6ffb583313a7c62526688064ee64d05 Mon Sep 17 00:00:00 2001 From: Valentin Popov Date: Thu, 18 Jun 2020 11:47:07 +0400 Subject: Added react-hooks rules Signed-off-by: Valentin Popov --- docs/roadmap/react-hooks.md | 4 ++-- src/rules/react-hooks/default.json | 9 ++++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/docs/roadmap/react-hooks.md b/docs/roadmap/react-hooks.md index 2e651d4..49d99cc 100644 --- a/docs/roadmap/react-hooks.md +++ b/docs/roadmap/react-hooks.md @@ -1,4 +1,4 @@ # React Hooks -- [ ] "exhaustive-deps" -- [ ] "rules-of-hooks" +- [X] "exhaustive-deps" +- [X] "rules-of-hooks" diff --git a/src/rules/react-hooks/default.json b/src/rules/react-hooks/default.json index 0967ef4..4276d63 100644 --- a/src/rules/react-hooks/default.json +++ b/src/rules/react-hooks/default.json @@ -1 +1,8 @@ -{} +{ + "react-hooks/exhaustive-deps": [ + "warn" + ], + "react-hooks/rules-of-hooks": [ + "error" + ] +} \ No newline at end of file -- cgit v1.2.3 From 6cef3fc8443d497f473e78e5452af9e6840d9975 Mon Sep 17 00:00:00 2001 From: Valentin Popov Date: Thu, 18 Jun 2020 11:53:24 +0400 Subject: Added some react rules Signed-off-by: Valentin Popov --- docs/roadmap/react.md | 6 +++--- src/rules/react/default.json | 17 ++++++++++++++++- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/docs/roadmap/react.md b/docs/roadmap/react.md index 20a9b26..9b4631d 100644 --- a/docs/roadmap/react.md +++ b/docs/roadmap/react.md @@ -11,7 +11,7 @@ - [ ] "forbid-foreign-prop-types" - [ ] "forbid-prop-types" - [ ] "function-component-definition" -- [ ] "jsx-boolean-value" +- [X] "jsx-boolean-value" - [ ] "jsx-child-element-spacing" - [ ] "jsx-closing-bracket-location" - [ ] "jsx-closing-tag-location" @@ -21,7 +21,7 @@ - [ ] "jsx-equals-spacing" - [ ] "jsx-filename-extension" - [ ] "jsx-first-prop-new-line" -- [ ] "jsx-fragments" +- [X] "jsx-fragments" - [ ] "jsx-handler-names" - [ ] "jsx-indent" - [ ] "jsx-indent-props" @@ -69,7 +69,7 @@ - [ ] "no-unescaped-entities" - [ ] "no-unknown-property" - [ ] "no-unsafe" -- [ ] "no-unused-prop-types" +- [X] "no-unused-prop-types" - [ ] "no-unused-state" - [ ] "no-will-update-set-state" - [ ] "prefer-es6-class" diff --git a/src/rules/react/default.json b/src/rules/react/default.json index 0967ef4..66a8727 100644 --- a/src/rules/react/default.json +++ b/src/rules/react/default.json @@ -1 +1,16 @@ -{} +{ + "react/jsx-boolean-value": [ + "error", + "always" + ], + "react/jsx-fragments": [ + "error", + "element" + ], + "react/no-unused-prop-types": [ + "warn", + { + "skipShapeProps": false + } + ] +} \ No newline at end of file -- cgit v1.2.3 From 0aef29fcbe723cdb79d9a4a381d294aaa62c74be Mon Sep 17 00:00:00 2001 From: Valentin Popov Date: Thu, 18 Jun 2020 11:54:20 +0400 Subject: Bump version Signed-off-by: Valentin Popov --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index f1f44be..50e778a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@valentineus/eslint-config", - "version": "0.0.17", + "version": "0.0.18", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 144acc5..e203c27 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@valentineus/eslint-config", - "version": "0.0.17", + "version": "0.0.18", "description": "Personal ESLint configuration", "main": "index.js", "repository": "git@code.valentineus.link:eslint-config.git", -- cgit v1.2.3 From 65d843d5c2fb9ad9939a7cc94897d389ef492670 Mon Sep 17 00:00:00 2001 From: Valentin Popov Date: Thu, 18 Jun 2020 12:07:33 +0400 Subject: Corrected TypeScript rules Signed-off-by: Valentin Popov --- src/rules/typescript/default.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/rules/typescript/default.json b/src/rules/typescript/default.json index f65f761..52da311 100644 --- a/src/rules/typescript/default.json +++ b/src/rules/typescript/default.json @@ -133,7 +133,7 @@ "error" ], "@typescript-eslint/no-unsafe-member-access": [ - "error" + "warn" ], "@typescript-eslint/no-unsafe-return": [ "error" @@ -167,7 +167,7 @@ "error" ], "@typescript-eslint/prefer-readonly-parameter-types": [ - "error", + "warn", { "checkParameterProperties": true } -- cgit v1.2.3 From 5a6483ec98e48dbe00a839c188a22029b25385f5 Mon Sep 17 00:00:00 2001 From: Valentin Popov Date: Thu, 18 Jun 2020 12:09:05 +0400 Subject: Bump version Signed-off-by: Valentin Popov --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 50e778a..df90288 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@valentineus/eslint-config", - "version": "0.0.18", + "version": "0.0.19", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index e203c27..723305a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@valentineus/eslint-config", - "version": "0.0.18", + "version": "0.0.19", "description": "Personal ESLint configuration", "main": "index.js", "repository": "git@code.valentineus.link:eslint-config.git", -- cgit v1.2.3 From 700b1ff70454d4fdc0b4d8bb0d1c1d867cf4db01 Mon Sep 17 00:00:00 2001 From: Valentin Popov Date: Tue, 23 Jun 2020 00:59:40 +0400 Subject: Fixed "@typescript-eslint/typedef" Signed-off-by: Valentin Popov --- src/rules/typescript/default.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/rules/typescript/default.json b/src/rules/typescript/default.json index 52da311..93a83aa 100644 --- a/src/rules/typescript/default.json +++ b/src/rules/typescript/default.json @@ -252,7 +252,7 @@ "objectDestructuring": true, "parameter": true, "propertyDeclaration": true, - "variableDeclaration": true, + "variableDeclaration": false, "variableDeclarationIgnoreFunction": false } ], @@ -289,4 +289,4 @@ "space-before-function-paren": [ "off" ] -} \ No newline at end of file +} -- cgit v1.2.3 From 507c2927a452a593f340aeac0a220e84c0d97faa Mon Sep 17 00:00:00 2001 From: Valentin Popov Date: Tue, 23 Jun 2020 01:00:49 +0400 Subject: Bump version Signed-off-by: Valentin Popov --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index df90288..1db871d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@valentineus/eslint-config", - "version": "0.0.19", + "version": "0.0.20", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 723305a..6cbc847 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@valentineus/eslint-config", - "version": "0.0.19", + "version": "0.0.20", "description": "Personal ESLint configuration", "main": "index.js", "repository": "git@code.valentineus.link:eslint-config.git", -- cgit v1.2.3 From 0112b8616e3d103e943d32ea30675a51d400e96e Mon Sep 17 00:00:00 2001 From: Valentin Popov Date: Tue, 23 Jun 2020 01:05:55 +0400 Subject: Fixed "@typescript-eslint/typedef" Signed-off-by: Valentin Popov --- src/rules/typescript/default.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rules/typescript/default.json b/src/rules/typescript/default.json index 93a83aa..b4fcc7a 100644 --- a/src/rules/typescript/default.json +++ b/src/rules/typescript/default.json @@ -249,7 +249,7 @@ "arrayDestructuring": true, "arrowParameter": true, "memberVariableDeclaration": true, - "objectDestructuring": true, + "objectDestructuring": false, "parameter": true, "propertyDeclaration": true, "variableDeclaration": false, -- cgit v1.2.3 From 8a1a4a502c1045e3f74bfe74addad130edb99f48 Mon Sep 17 00:00:00 2001 From: Valentin Popov Date: Tue, 23 Jun 2020 01:06:23 +0400 Subject: Bump version Signed-off-by: Valentin Popov --- package-lock.json | 14 ++++++++++++-- package.json | 2 +- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1db871d..74ec443 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@valentineus/eslint-config", - "version": "0.0.20", + "version": "0.0.21", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -1123,6 +1123,13 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true + }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -1985,7 +1992,10 @@ "version": "2.17.0", "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.17.0.tgz", "integrity": "sha512-4Um68vKyyTLzT+EWClgc+nyxSlunlmx8wgCO16RDicwxvccnyBHguoNqxPaJL/YPAdvuAJkqaFPf/BfDojzEZA==", - "dev": true + "dev": true, + "requires": { + "fsevents": "~2.1.2" + } }, "rollup-plugin-terser": { "version": "6.1.0", diff --git a/package.json b/package.json index 6cbc847..52885e8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@valentineus/eslint-config", - "version": "0.0.20", + "version": "0.0.21", "description": "Personal ESLint configuration", "main": "index.js", "repository": "git@code.valentineus.link:eslint-config.git", -- cgit v1.2.3