summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.npmignore4
-rw-r--r--README.md36
-rw-r--r--ROADMAP.md634
-rw-r--r--docs/roadmap/eslint-comments.md11
-rw-r--r--docs/roadmap/eslint.md271
-rw-r--r--docs/roadmap/import.md43
-rw-r--r--docs/roadmap/jsx-a11y.md38
-rw-r--r--docs/roadmap/react-hooks.md4
-rw-r--r--docs/roadmap/react.md89
-rw-r--r--docs/roadmap/security.md15
-rw-r--r--docs/roadmap/sonarjs.md27
-rw-r--r--docs/roadmap/typescript.md101
-rw-r--r--docs/roadmap/unicorn.md57
-rw-r--r--docs/roadmap/vue.md100
-rw-r--r--package-lock.json253
-rw-r--r--package.json8
-rw-r--r--rollup.config.js2
-rw-r--r--src/react-javascript.ts27
-rw-r--r--src/react-typescript.ts27
-rw-r--r--src/rules/javascript/default.json8
-rw-r--r--src/rules/jsx-a11y/default.json1
-rw-r--r--src/rules/react-hooks/default.json8
-rw-r--r--src/rules/react/default.json16
-rw-r--r--src/rules/typescript/default.json10
24 files changed, 1136 insertions, 654 deletions
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/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/ROADMAP.md b/ROADMAP.md
deleted file mode 100644
index e7e9612..0000000
--- a/ROADMAP.md
+++ /dev/null
@@ -1,634 +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"
-
-## 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/react-hooks.md b/docs/roadmap/react-hooks.md
new file mode 100644
index 0000000..49d99cc
--- /dev/null
+++ b/docs/roadmap/react-hooks.md
@@ -0,0 +1,4 @@
+# React Hooks
+
+- [X] "exhaustive-deps"
+- [X] "rules-of-hooks"
diff --git a/docs/roadmap/react.md b/docs/roadmap/react.md
new file mode 100644
index 0000000..9b4631d
--- /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"
+- [X] "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"
+- [X] "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"
+- [X] "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/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"
diff --git a/package-lock.json b/package-lock.json
index e083b9b..74ec443 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "@valentineus/eslint-config",
- "version": "0.0.16",
+ "version": "0.0.21",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -30,6 +30,25 @@
"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"
+ }
+ },
+ "@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",
@@ -219,6 +238,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 +269,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",
@@ -354,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",
@@ -365,6 +412,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 +728,67 @@
}
}
},
+ "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-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",
@@ -1009,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",
@@ -1212,6 +1333,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",
@@ -1357,6 +1489,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",
@@ -1413,6 +1555,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",
@@ -1493,6 +1644,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",
@@ -1517,6 +1674,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",
@@ -1681,6 +1861,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",
@@ -1696,6 +1887,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",
@@ -1717,12 +1914,28 @@
"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",
"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",
@@ -1779,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",
@@ -1867,6 +2083,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",
@@ -1957,6 +2183,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",
@@ -2228,6 +2468,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 14c5419..52885e8 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@valentineus/eslint-config",
- "version": "0.0.16",
+ "version": "0.0.21",
"description": "Personal ESLint configuration",
"main": "index.js",
"repository": "git@code.valentineus.link:eslint-config.git",
@@ -19,6 +19,9 @@
"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-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",
@@ -34,6 +37,9 @@
"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-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/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-javascript.ts b/src/react-javascript.ts
new file mode 100644
index 0000000..e3bea86
--- /dev/null
+++ b/src/react-javascript.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": [
+ "./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/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,
+ },
+};
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
+}
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-hooks/default.json b/src/rules/react-hooks/default.json
new file mode 100644
index 0000000..4276d63
--- /dev/null
+++ b/src/rules/react-hooks/default.json
@@ -0,0 +1,8 @@
+{
+ "react-hooks/exhaustive-deps": [
+ "warn"
+ ],
+ "react-hooks/rules-of-hooks": [
+ "error"
+ ]
+} \ No newline at end of file
diff --git a/src/rules/react/default.json b/src/rules/react/default.json
new file mode 100644
index 0000000..66a8727
--- /dev/null
+++ b/src/rules/react/default.json
@@ -0,0 +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
diff --git a/src/rules/typescript/default.json b/src/rules/typescript/default.json
index f65f761..b4fcc7a 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
}
@@ -249,10 +249,10 @@
"arrayDestructuring": true,
"arrowParameter": true,
"memberVariableDeclaration": true,
- "objectDestructuring": true,
+ "objectDestructuring": false,
"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
+}