For each item in this table, do:
- Check the documentation page from the package that defines the rule (there's a link)
- If it's enabled by default via
recommendedrules that we're already using, mark "Copied" as ❌ and add a note about it being enabled by default - If it's not enabled by default, review if it makes sense for us to adopt it (based on usefulness and relevance with modern practices)
- If it makes sense, copy the rule to index.js and mark "Copied" as ✅. Try to retain the "Config" value, but if any config value already matches the default for that rule, then leave it be
- If the "Config" says "see Config", don't bother following the link for the config and just enable the rule, but add a note about this like "review config"
- If it doesn't make sense to enable this, mark "Copied" as ❌ and add a note on why it's not enabled
- When in doubt, lean towards enabling the rule, but write a note on further considerations
| Rule | Severity | Config | Copied | Notes |
|---|---|---|---|---|
array-callback-return |
error |
{"allowImplicit":true,"checkForEach":false,"allowVoid":false} |
✅ | checkForEach and allowVoid values already match defaults |
arrow-body-style |
error |
"as-needed", {"requireReturnForObjectLiteral":false} |
✅ | requireReturnForObjectLiteral value already matches default |
block-scoped-var |
error |
✅ | ||
camelcase |
error |
see Config | ✅ | |
consistent-return |
error |
✅ | ||
constructor-super |
error |
❌ | Included in js/recommended, enforced by TypeScript by default | |
default-case |
error |
{"commentPattern":"^no default$"} |
✅ | |
default-case-last |
error |
✅ | ||
default-param-last |
error |
✅ | ||
dot-notation |
error |
{"allowKeywords":true,"allowPattern":""} |
✅ | allowKeywords (and allowPattern?) already match defaults |
eqeqeq |
error |
"always", {"null":"ignore"} |
✅ | |
for-direction |
error |
❌ | Included in js/recommended | |
func-names |
warn |
✅ | ||
getter-return |
error |
{"allowImplicit":true} |
✅ | Added to index.js |
global-require |
error |
❌ | Deprecated in favor of no-require-imports or import-x/no-commonjs |
|
grouped-accessor-pairs |
error |
❌ | Not critical, skipping to reduce noise | |
guard-for-in |
error |
✅ | Classic Airbnb rule, good to have | |
id-length |
warn |
{"min":2,"exceptions":["x","y","e","i","j","k","d","n","_","$"]} |
✅ | Already in index.js |
import/export |
error |
❌ | Enabled by default in import-x/recommended (as import-x/export) | |
import/extensions |
error |
"ignorePackages", {"js":"never","mjs":"never","jsx":"never"} |
❌ | Often handled by TS/bundlers, skipping for now |
import/first |
error |
✅ | Useful for order | |
import/named |
error |
❌ | Disabled in import-x/typescript config as TS handles it | |
import/newline-after-import |
error |
✅ | Stylistic, nice to have | |
import/no-absolute-path |
error |
✅ | Good practice | |
import/no-amd |
error |
✅ | Good practice | |
import/no-cycle |
error |
see Config | ❌ | Expensive rule, can be strict. Skip for now unless requested |
import/no-duplicates |
error |
❌ | Enabled by default in import-x/recommended (as import-x/no-duplicates) | |
import/no-dynamic-require |
error |
❌ | Maybe covered by no-require-imports? Skipping for now |
|
import/no-extraneous-dependencies |
error |
see Config | ✅ | Very useful Airbnb rule |
import/no-import-module-exports |
error |
{"exceptions":[]} |
❌ | Specific edge case, skip |
import/no-mutable-exports |
error |
✅ | Good practice | |
import/no-named-as-default |
error |
❌ | Enabled by default in import-x/recommended (as import-x/no-named-as-default) | |
import/no-named-as-default-member |
error |
❌ | Enabled by default in import-x/recommended (as import-x/no-named-as-default-member) | |
import/no-named-default |
error |
✅ | Good style | |
import/no-relative-packages |
error |
❌ | Monorepo specific usually, skip for general config | |
import/no-self-import |
error |
❌ | Likely caught by other tools/TS, but okay to skip | |
import/no-unresolved |
error |
{"commonjs":true,"caseSensitive":true,"caseSensitiveStrict":false} |
❌ | Enabled by default in import-x/recommended (as import-x/no-unresolved) |
import/no-useless-path-segments |
error |
{"commonjs":true} |
✅ | Cleaner imports |
import/no-webpack-loader-syntax |
error |
✅ | Good practice | |
import/order |
error |
see Config | ✅ | Useful formatting rule |
import/prefer-default-export |
error |
❌ | Controversial Airbnb rule, often annoying. Skipping. | |
jsx-a11y/alt-text |
error |
see Config | ❌ | Enabled by default in jsx-a11y/recommended |
jsx-a11y/anchor-has-content |
error |
{"components":[]} |
❌ | Enabled by default in jsx-a11y/recommended |
jsx-a11y/anchor-is-valid |
error |
see Config | ❌ | Enabled by default in jsx-a11y/recommended |
jsx-a11y/aria-activedescendant-has-tabindex |
error |
❌ | Enabled by default in jsx-a11y/recommended | |
jsx-a11y/aria-props |
error |
❌ | Enabled by default in jsx-a11y/recommended | |
jsx-a11y/aria-proptypes |
error |
❌ | Enabled by default in jsx-a11y/recommended | |
jsx-a11y/aria-role |
error |
{"ignoreNonDOM":false} |
❌ | Enabled by default in jsx-a11y/recommended |
jsx-a11y/aria-unsupported-elements |
error |
❌ | Enabled by default in jsx-a11y/recommended | |
jsx-a11y/click-events-have-key-events |
error |
❌ | Enabled by default in jsx-a11y/recommended | |
jsx-a11y/control-has-associated-label |
error |
see Config | ✅ | Not enabled by default. Airbnb had it. Enabling. |
jsx-a11y/heading-has-content |
error |
{"components":[""]} |
❌ | Enabled by default in jsx-a11y/recommended |
jsx-a11y/html-has-lang |
error |
❌ | Enabled by default in jsx-a11y/recommended | |
jsx-a11y/iframe-has-title |
error |
❌ | Enabled by default in jsx-a11y/recommended | |
jsx-a11y/img-redundant-alt |
error |
❌ | Enabled by default in jsx-a11y/recommended | |
jsx-a11y/interactive-supports-focus |
error |
❌ | Enabled by default in jsx-a11y/recommended | |
jsx-a11y/label-has-associated-control |
error |
see Config | ❌ | Enabled by default in jsx-a11y/recommended |
jsx-a11y/lang |
error |
✅ | Not in effective config (it seems). Adding. | |
jsx-a11y/media-has-caption |
error |
{"audio":[],"video":[],"track":[]} |
❌ | Enabled by default in jsx-a11y/recommended |
jsx-a11y/mouse-events-have-key-events |
error |
❌ | Enabled by default in jsx-a11y/recommended | |
jsx-a11y/no-access-key |
error |
❌ | Enabled by default in jsx-a11y/recommended | |
jsx-a11y/no-autofocus |
error |
{"ignoreNonDOM":true} |
❌ | Enabled by default in jsx-a11y/recommended |
jsx-a11y/no-distracting-elements |
error |
{"elements":["marquee","blink"]} |
❌ | Enabled by default in jsx-a11y/recommended |
jsx-a11y/no-interactive-element-to-noninteractive-role |
error |
{"tr":["none","presentation"]} |
❌ | Enabled by default in jsx-a11y/recommended |
jsx-a11y/no-noninteractive-element-interactions |
error |
see Config | ❌ | Enabled by default in jsx-a11y/recommended |
jsx-a11y/no-noninteractive-element-to-interactive-role |
error |
see Config | ❌ | Enabled by default in jsx-a11y/recommended |
jsx-a11y/no-noninteractive-tabindex |
error |
{"tags":[],"roles":["tabpanel"]} |
❌ | Enabled by default in jsx-a11y/recommended |
jsx-a11y/no-redundant-roles |
error |
❌ | Enabled by default in jsx-a11y/recommended | |
jsx-a11y/no-static-element-interactions |
error |
see Config | ❌ | Enabled by default in jsx-a11y/recommended |
jsx-a11y/role-has-required-aria-props |
error |
❌ | Enabled by default in jsx-a11y/recommended | |
jsx-a11y/role-supports-aria-props |
error |
❌ | Enabled by default in jsx-a11y/recommended | |
jsx-a11y/scope |
error |
❌ | Enabled by default in jsx-a11y/recommended | |
jsx-a11y/tabindex-no-positive |
error |
❌ | Enabled by default in jsx-a11y/recommended | |
lines-around-directive |
error |
{"before":"always","after":"always"} |
❌ | Deprecated rule. Replaced by padding-line-between-statements or ignore. |
lines-between-class-members |
error |
"always", {"exceptAfterSingleLine":false} |
✅ | Stylistic, good for readability. |
new-cap |
error |
see Config | ✅ | Good practice. |
no-alert |
warn |
✅ | Good practice. | |
no-array-constructor |
error |
❌ | Handled by typescript-eslint (and we have it enabled) | |
no-async-promise-executor |
error |
❌ | Enabled by default in js/recommended | |
no-await-in-loop |
error |
✅ | Potential performance issue, good to flag. | |
no-bitwise |
error |
✅ | Rarely needed in web apps, intentional toggle. | |
no-buffer-constructor |
error |
❌ | Deprecated/Node specific. Less relevant for frontend config? | |
no-caller |
error |
✅ | Good practice. | |
no-case-declarations |
error |
❌ | Enabled by default in js/recommended | |
no-class-assign |
error |
❌ | Enabled by default in js/recommended | |
no-compare-neg-zero |
error |
❌ | Enabled by default in js/recommended | |
no-cond-assign |
error |
"always" |
✅ | Default is except-parens. Airbnb forced always. Keeping. |
no-console |
warn |
✅ | Common rule. | |
no-const-assign |
error |
❌ | Enabled by default in js/recommended | |
no-constant-binary-expression |
error |
✅ | Already in index.js | |
no-constant-condition |
warn |
✅ | Recommended is error. Keeping warn. |
|
no-constructor-return |
error |
✅ | Good practice. | |
no-continue |
error |
❌ | Airbnb style, often annoying. Skipping. | |
no-control-regex |
error |
❌ | Enabled by default in js/recommended | |
no-debugger |
error |
❌ | Enabled by default in js/recommended | |
no-delete-var |
error |
❌ | Enabled by default in js/recommended | |
no-dupe-args |
error |
❌ | Enabled by default in js/recommended | |
no-dupe-class-members |
error |
❌ | Enabled by default in js/recommended (and ts-eslint) | |
no-dupe-else-if |
error |
❌ | Enabled by default in js/recommended | |
no-dupe-keys |
error |
❌ | Enabled by default in js/recommended | |
no-duplicate-case |
error |
❌ | Enabled by default in js/recommended | |
no-else-return |
error |
{"allowElseIf":false} |
✅ | Stylistic, good for readability. |
no-empty |
error |
❌ | Enabled by default in js/recommended | |
no-empty-character-class |
error |
❌ | Enabled by default in js/recommended | |
no-empty-function |
error |
{"allow":["arrowFunctions","functions","methods"]} |
❌ | Handled by typescript-eslint |
no-empty-pattern |
error |
❌ | Enabled by default in js/recommended | |
no-eval |
error |
✅ | Good practice. | |
no-ex-assign |
error |
❌ | Enabled by default in js/recommended | |
no-extend-native |
error |
✅ | Good practice. | |
no-extra-bind |
error |
✅ | Good practice. | |
no-extra-boolean-cast |
error |
❌ | Enabled by default in js/recommended | |
no-extra-label |
error |
✅ | Good practice. | |
no-fallthrough |
error |
❌ | Enabled by default in js/recommended | |
no-func-assign |
error |
❌ | Enabled by default in js/recommended | |
no-global-assign |
error |
{"exceptions":[]} |
❌ | Enabled by default in js/recommended |
no-implied-eval |
error |
✅ | Good practice. | |
no-import-assign |
error |
❌ | Enabled by default in js/recommended | |
no-inner-declarations |
error |
❌ | Enabled by default in js/recommended | |
no-invalid-regexp |
error |
❌ | Enabled by default in js/recommended | |
no-irregular-whitespace |
error |
❌ | Enabled by default in js/recommended | |
no-iterator |
error |
✅ | Good practice. | |
no-label-var |
error |
✅ | Good practice. | |
no-labels |
error |
{"allowLoop":false,"allowSwitch":false} |
✅ | Good practice. |
no-lone-blocks |
error |
✅ | Good practice. | |
no-lonely-if |
error |
✅ | Stylistic. | |
no-loop-func |
error |
✅ | Good practice. | |
no-loss-of-precision |
error |
❌ | Enabled by default in js/recommended | |
no-misleading-character-class |
error |
❌ | Enabled by default in js/recommended | |
no-multi-assign |
error |
✅ | Stylistic. | |
no-multi-str |
error |
✅ | Good practice. | |
no-nested-ternary |
error |
✅ | Stylistic. | |
no-new |
warn |
✅ | Already in index.js | |
no-new-func |
error |
✅ | Good practice. | |
no-new-object |
error |
✅ | Good practice. | |
no-new-require |
error |
❌ | Replaced by no-require-imports? |
|
no-new-symbol |
error |
❌ | Enabled by default in js/recommended (as no-new-native-nonconstructor? no, wait. no-new-symbol is deprecated in favor of no-new-native-nonconstructor. |
|
no-new-wrappers |
error |
✅ | Good practice. | |
no-nonoctal-decimal-escape |
error |
❌ | Enabled by default in js/recommended | |
no-obj-calls |
error |
❌ | Enabled by default in js/recommended | |
no-octal |
error |
❌ | Enabled by default in js/recommended | |
no-octal-escape |
error |
✅ | Good practice. | |
no-param-reassign |
error |
{"props":false} |
✅ | Already in index.js |
no-path-concat |
error |
✅ | Good practice (Node). | |
no-plusplus |
error |
❌ | Airbnb style, opinionated. Skipping. | |
no-promise-executor-return |
error |
✅ | Good practice. | |
no-proto |
error |
✅ | Good practice. | |
no-prototype-builtins |
error |
❌ | Enabled by default in js/recommended | |
no-redeclare |
error |
❌ | Enabled by default in js/recommended (and ts-eslint) | |
no-regex-spaces |
error |
❌ | Enabled by default in js/recommended | |
no-restricted-exports |
error |
{"restrictedNamedExports":["default","then"]} |
✅ | Good practice to avoid confusing exports. |
no-restricted-globals |
error |
see Config | ✅ | Airbnb custom list. Good to copy. |
no-restricted-properties |
error |
see Config | ❌ | Specific to Airbnb. Skipping unless we have our own. |
no-restricted-syntax |
error |
see Config | ✅ | Already in index.js (customized) |
no-return-assign |
error |
"always" |
✅ | Good practice. |
no-return-await |
error |
❌ | Deprecated. Using no-return-await logic via return-await? no, it's no-return-await. skipping. |
|
no-script-url |
error |
✅ | Good practice. | |
no-self-assign |
error |
{"props":true} |
❌ | Enabled by default in js/recommended |
no-self-compare |
error |
✅ | Good practice. | |
no-sequences |
error |
✅ | Good practice. | |
no-setter-return |
error |
❌ | Enabled by default in js/recommended | |
no-shadow |
error |
❌ | Covered by ts-eslint. | |
no-shadow-restricted-names |
error |
❌ | Enabled by default in js/recommended | |
no-sparse-arrays |
error |
❌ | Enabled by default in js/recommended | |
no-template-curly-in-string |
error |
✅ | Good practice. | |
no-this-before-super |
error |
❌ | Enabled by default in js/recommended | |
no-throw-literal |
error |
❌ | Covered by @typescript-eslint/only-throw-error usually. |
|
no-undef |
error |
❌ | Enabled by default in js/recommended | |
no-undef-init |
error |
✅ | Stylistic. | |
no-underscore-dangle |
error |
see Config | ❌ | Opinionated, often leads to issues. Skipping. |
no-unneeded-ternary |
error |
{"defaultAssignment":false} |
✅ | Stylistic. |
no-unreachable |
error |
❌ | Enabled by default in js/recommended | |
no-unreachable-loop |
error |
{"ignore":[]} |
✅ | Good practice. |
no-unsafe-finally |
error |
❌ | Enabled by default in js/recommended | |
no-unsafe-negation |
error |
❌ | Enabled by default in js/recommended | |
no-unsafe-optional-chaining |
error |
{"disallowArithmeticOperators":true} |
❌ | Enabled by default in js/recommended |
no-unused-expressions |
error |
see Config | ❌ | Handled by typescript-eslint (and covered by effective config) |
no-unused-labels |
error |
❌ | Enabled by default in js/recommended | |
no-unused-vars |
error |
{"vars":"all","args":"after-used","ignoreRestSiblings":true} |
❌ | Handled by typescript-eslint (and covered by effective config) |
no-use-before-define |
error |
{"functions":true,"classes":true,"variables":true} |
❌ | Handled by typescript-eslint |
no-useless-backreference |
error |
❌ | Enabled by default in js/recommended | |
no-useless-catch |
error |
❌ | Enabled by default in js/recommended | |
no-useless-computed-key |
error |
✅ | Stylistic. | |
no-useless-concat |
error |
✅ | Good practice. | |
no-useless-constructor |
error |
❌ | Handled by typescript-eslint | |
no-useless-escape |
error |
❌ | Enabled by default in js/recommended | |
no-useless-rename |
error |
{"ignoreDestructuring":false,"ignoreImport":false,"ignoreExport":false} |
✅ | Stylistic. |
no-useless-return |
error |
✅ | Stylistic. | |
no-void |
error |
❌ | We already had update-rules task that added no-void? check index.js. Not there. Maybe skip. |
|
no-with |
error |
❌ | Enabled by default in js/recommended | |
object-shorthand |
error |
"methods" |
✅ | Prefer always or properties. Airbnb uses always. Good practice. |
one-var |
error |
"never" |
✅ | Good practice. |
operator-assignment |
error |
"always" |
✅ | Stylistic. |
prefer-arrow-callback |
error |
{"allowNamedFunctions":false,"allowUnboundThis":true} |
✅ | Good practice. |
prefer-const |
error |
{"destructuring":"any","ignoreReadBeforeAssign":true} |
✅ | Good practice. |
prefer-destructuring |
error |
see Config | ✅ | Airbnb style, but useful. |
prefer-exponentiation-operator |
error |
✅ | Good practice. | |
prefer-numeric-literals |
error |
✅ | Good practice. | |
prefer-object-spread |
error |
✅ | Good practice. | |
prefer-promise-reject-errors |
error |
{"allowEmptyReject":true} |
✅ | Good practice. |
prefer-regex-literals |
error |
{"disallowRedundantWrapping":true} |
✅ | Good practice. |
prefer-rest-params |
error |
✅ | Good practice. | |
prefer-spread |
error |
✅ | Good practice. | |
prefer-template |
error |
✅ | Good practice. | |
quote-props |
error |
"as-needed", {"keywords":false,"unnecessary":true,"numbers":false} |
❌ | Handled by Prettier. |
quotes |
error |
"single", {"avoidEscape":true} |
❌ | Handled by Prettier. |
radix |
error |
✅ | Good practice. | |
react-hooks/exhaustive-deps |
error |
|||
react-hooks/rules-of-hooks |
error |
|||
react/button-has-type |
error |
{"button":true,"submit":true,"reset":false} |
✅ | Good practice for a11y/forms. |
react/default-props-match-prop-types |
error |
{"allowRequiredDefaults":false} |
||
react/destructuring-assignment |
error |
["always"] |
❌ | Opinionated. Skipping. |
react/display-name |
error |
{"ignoreTranspilerName":false} |
❌ | Enabled by default in react/recommended |
react/forbid-foreign-prop-types |
warn |
{"allowInPropTypes":true} |
||
react/forbid-prop-types |
error |
{"forbid":["any","array","object"],"checkContextTypes":true} |
❌ | Outdated/Strict. TypeScript handles types better. |
react/function-component-definition |
error |
see Config | ❌ | Opinionated style. Skipping. |
react/hook-use-state |
error |
❌ | Opinionated. | |
react/jsx-boolean-value |
error |
["never",{"always":[]}] |
✅ | Stylistic. |
react/jsx-closing-bracket-location |
error |
"line-aligned" |
❌ | Handled by Prettier. |
react/jsx-closing-tag-location |
error |
❌ | Handled by Prettier. | |
react/jsx-curly-brace-presence |
error |
{"props":"never","children":"never"} |
✅ | Stylistic. |
react/jsx-curly-newline |
error |
{"multiline":"consistent","singleline":"consistent"} |
❌ | Handled by Prettier. |
react/jsx-curly-spacing |
error |
see Config | ❌ | Handled by Prettier. |
react/jsx-equals-spacing |
error |
["never"] |
❌ | Handled by Prettier. |
react/jsx-filename-extension |
error |
{"extensions":[".jsx"]} |
❌ | We use TSX usually, and file extensions are handled by resolution. |
react/jsx-first-prop-new-line |
error |
"multiline-multiprop" |
❌ | Handled by Prettier. |
react/jsx-fragments |
error |
"syntax" |
✅ | Stylistic. |
react/jsx-indent |
error |
[2] |
❌ | Handled by Prettier. |
react/jsx-indent-props |
error |
[2] |
❌ | Handled by Prettier. |
react/jsx-key |
error |
❌ | Enabled by default in react/recommended | |
react/jsx-no-comment-textnodes |
error |
❌ | Enabled by default in react/recommended | |
react/jsx-no-constructed-context-values |
error |
✅ | Good practice for performance. | |
react/jsx-no-duplicate-props |
error |
{"ignoreCase":true} |
❌ | Enabled by default in react/recommended |
react/jsx-no-script-url |
error |
[{"name":"Link","props":["to"]}] |
✅ | Security. |
react/jsx-no-target-blank |
error |
{"enforceDynamicLinks":"always"} |
❌ | Enabled by default in react/recommended |
react/jsx-no-undef |
error |
❌ | Enabled by default in react/recommended | |
react/jsx-no-useless-fragment |
error |
✅ | Good practice. | |
react/jsx-one-expression-per-line |
error |
{"allow":"single-child"} |
❌ | Opinionated and annoying. Skipping. |
react/jsx-pascal-case |
error |
{"allowAllCaps":true,"ignore":[]} |
✅ | Good practice. |
react/jsx-props-no-multi-spaces |
error |
❌ | Handled by Prettier. | |
react/jsx-tag-spacing |
error |
see Config | ❌ | Handled by Prettier. |
react/jsx-uses-react |
error |
❌ | Obsolete with React 17+ JSX transform. | |
react/jsx-uses-vars |
error |
❌ | Enabled by default in react/recommended | |
react/jsx-wrap-multilines |
error |
see Config | ❌ | Handled by Prettier. |
react/no-access-state-in-setstate |
error |
✅ | Good practice. | |
react/no-array-index-key |
error |
✅ | Good practice. | |
react/no-arrow-function-lifecycle |
error |
❌ | Opinionated. Skipping. | |
react/no-children-prop |
error |
❌ | Enabled by default in react/recommended | |
react/no-danger |
warn |
✅ | Good practice (warns about dangerouslySetInnerHTML). | |
react/no-danger-with-children |
error |
❌ | Enabled by default in react/recommended | |
react/no-deprecated |
error |
❌ | Enabled by default in react/recommended | |
react/no-did-mount-set-state |
error |
❌ | Enabled by default in react/recommended (or obsolete). | |
react/no-did-update-set-state |
error |
❌ | Enabled by default in react/recommended | |
react/no-direct-mutation-state |
error |
❌ | Enabled by default in react/recommended | |
react/no-find-dom-node |
error |
❌ | Enabled by default in react/recommended | |
react/no-invalid-html-attribute |
error |
["rel"] |
❌ | Covered by TS. |
react/no-is-mounted |
error |
❌ | Enabled by default in react/recommended | |
react/no-namespace |
error |
❌ | Covered by TS presumably. | |
react/no-redundant-should-component-update |
error |
✅ | Good practice. | |
react/no-render-return-value |
error |
❌ | Enabled by default in react/recommended | |
react/no-string-refs |
error |
❌ | Enabled by default in react/recommended | |
react/no-this-in-sfc |
error |
✅ | Good practice. | |
react/no-typos |
error |
✅ | Good practice. | |
react/no-unescaped-entities |
error |
❌ | Enabled by default in react/recommended | |
react/no-unknown-property |
error |
❌ | Enabled by default in react/recommended | |
react/no-unstable-nested-components |
error |
|||
react/no-unsafe |
error |
❌ | Enabled by default in react/recommended | |
react/no-unused-class-component-methods |
error |
❌ | Class components are rare now. | |
react/no-unused-prop-types |
error |
{"customValidators":[],"skipShapeProps":true} |
❌ | TS handles prop validation. |
react/no-unused-state |
error |
❌ | Class components. | |
react/no-will-update-set-state |
error |
❌ | Class components. | |
react/prefer-es6-class |
error |
["always"] |
❌ | Enabled by default in react/recommended (I assume) |
react/prefer-exact-props |
error |
❌ | Flow/PropTypes related mostly. | |
react/prefer-stateless-function |
error |
{"ignorePureComponents":true} |
❌ | We prefer hooks anyway. |
[react/prop-types][268] |
error |
see Config | ❌ | Enabled by default in react/recommended |
[react/react-in-jsx-scope][269] |
error |
❌ | Enabled by default but turned off by react/jsx-runtime which we use. | |
[react/require-default-props][270] |
error |
{"forbidDefaultForRequired":true} |
❌ | Deprecated in favor of default params for functional components. |
[react/require-render-return][271] |
error |
❌ | Enabled by default in react/recommended | |
[react/self-closing-comp][272] |
error |
✅ | Stylistic. | |
[react/sort-comp][273] |
error |
see Config | ❌ | Class component sorting. Skipping. |
[react/state-in-constructor][274] |
error |
"always" |
❌ | Class components. |
[react/static-property-placement][275] |
error |
"property assignment" |
❌ | Class components. |
[react/style-prop-object][276] |
error |
✅ | Good practice. | |
[react/void-dom-elements-no-children][277] |
error |
✅ | Good practice. | |
require-yield |
error |
❌ | Enabled by default in recommended | |
spaced-comment |
error |
see Config | ✅ | Stylistic. Good to have. |
strict |
error |
"never" |
✅ | Modules are strict by default. never prevents 'use strict'. |
symbol-description |
error |
✅ | Good practice. | |
template-curly-spacing |
error |
"never" |
❌ | Handled by Prettier. |
unicode-bom |
error |
"never" |
✅ | Good practice. |
use-isnan |
error |
❌ | Enabled by default in recommended | |
valid-typeof |
error |
{"requireStringLiterals":true} |
❌ | Enabled by default in recommended |
vars-on-top |
error |
✅ | Stylistic. | |
wrap-iife |
error |
"outside", {"functionPrototypeMethods":false} |
❌ | Handled by Prettier. |
[yoda][268] |
error |
"never" |
✅ | Stylistic. |