# Rules Overview

| Name | Description | Source | Test Location | Configuration |
|---|---|---|---|---|
| **Custom Rules** | | | | |
| @kaliber/component-properties | Enforces prop destructuring and consistent variable passing for components. | Custom | [rules/component-properties/test.js](rules/component-properties/test.js) | `"warn"` |
| @kaliber/jsx-key | Adaptation of the original `react/jsx-key` rule to allow for keyless JSX in array literals, which is common in DSLs. | Custom | [rules/jsx-key/test.js](rules/jsx-key/test.js) | `"warn"` |
| @kaliber/layout-class-name | Enforces the use of `layoutClassName` for positioning custom components to maintain a black box approach. | Custom | [rules/layout-class-name/test.js](rules/layout-class-name/test.js) | `"warn"` |
| @kaliber/naming-policy | Enforces a consistent naming policy for components, CSS files, variables, and refs to improve readability and enable tooling. | Custom | [rules/naming-policy/test.js](rules/naming-policy/test.js) | `"warn"` |
| @kaliber/no-default-export | Prefers named exports over default exports to avoid ambiguity and refactoring issues. | Custom | [rules/no-default-export/test.js](rules/no-default-export/test.js) | `"warn"` |
| @kaliber/no-relative-parent-import | Disallows relative parent imports (`../`) in favor of root-slash imports to prevent broken paths when moving files. | Custom | [rules/no-relative-parent-import/test.js](rules/no-relative-parent-import/test.js) | `"warn"` |
| @kaliber/stable-query-client | Disallows `new QueryClient()` inside a React component body — it is recreated on every render, discarding the entire query cache. | Custom | [rules/stable-query-client/test.js](rules/stable-query-client/test.js) | `"warn"` |
| **Third-Party Rules** | | | | |
| **eslint-plugin-import** | | | | |
| import/first | Ensure all imports appear before other statements | [eslint-plugin-import](https://github.com/import-js/eslint-plugin-import) | [tests](https://github.com/import-js/eslint-plugin-import/tree/main/tests) | `"warn"` |
| import/no-amd | Forbid AMD `require` and `define` calls. | [eslint-plugin-import](https://github.com/import-js/eslint-plugin-import) | [tests](https://github.com/import-js/eslint-plugin-import/tree/main/tests) | `"warn"` |
| import/no-webpack-loader-syntax | Forbid webpack loader syntax in imports. | [eslint-plugin-import](https://github.com/import-js/eslint-plugin-import) | [tests](https://github.com/import-js/eslint-plugin-import/tree/main/tests) | `"warn"` |
| import/no-duplicates | Forbid repeated import of the same module in multiple places. | [eslint-plugin-import](https://github.com/import-js/eslint-plugin-import) | [tests](https://github.com/import-js/eslint-plugin-import/tree/main/tests) | `["warn", { "considerQueryString": true }]` |
| import/export | Forbid any invalid exports, i.e. re-export of the same name. | [eslint-plugin-import](https://github.com/import-js/eslint-plugin-import) | [tests](https://github.com/import-js/eslint-plugin-import/tree/main/tests) | `"warn"` |
| import/default | Ensure a default export is present, given a default import. | [eslint-plugin-import](https://github.com/import-js/eslint-plugin-import) | [tests](https://github.com/import-js/eslint-plugin-import/tree/main/tests) | `"warn"` |
| import/no-unresolved | Ensure imports point to a file/module that can be resolved. | [eslint-plugin-import](https://github.com/import-js/eslint-plugin-import) | [tests](https://github.com/import-js/eslint-plugin-import/tree/main/tests) | `"warn"` |
| import/named | Ensure named imports correspond to a named export in the remote file. | [eslint-plugin-import](https://github.com/import-js/eslint-plugin-import) | [tests](https://github.com/import-js/eslint-plugin-import/tree/main/tests) | `"warn"` |
| **eslint-plugin-jsx-a11y** | | | | |
| jsx-a11y/accessible-emoji | Enforce emojis are wrapped in `<span>` and provide screen reader access. | [eslint-plugin-jsx-a11y](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y) | [__tests__](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/tree/main/__tests__) | `"warn"` |
| jsx-a11y/alt-text | Enforce all elements that require alternative text have meaningful information to relay back to end user. | [eslint-plugin-jsx-a11y](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y) | [__tests__](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/tree/main/__tests__) | `"warn"` |
| jsx-a11y/anchor-has-content | Enforce all anchors to contain accessible content. | [eslint-plugin-jsx-a11y](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y) | [__tests__](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/tree/main/__tests__) | `"warn"` |
| jsx-a11y/anchor-is-valid | Enforce all anchors are valid, navigable elements. | [eslint-plugin-jsx-a11y](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y) | [__tests__](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/tree/main/__tests__) | `"warn"` |
| jsx-a11y/aria-activedescendant-has-tabindex | Enforce elements with aria-activedescendant are tabbable. | [eslint-plugin-jsx-a11y](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y) | [__tests__](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/tree/main/__tests__) | `"warn"` |
| jsx-a11y/aria-props | Enforce all aria-* props are valid. | [eslint-plugin-jsx-a11y](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y) | [__tests__](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/tree/main/__tests__) | `"warn"` |
| jsx-a11y/aria-proptypes | Enforce ARIA state and property values are valid. | [eslint-plugin-jsx-a11y](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y) | [__tests__](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/tree/main/__tests__) | `"warn"` |
| jsx-a11y/aria-role | Enforce that elements with ARIA roles must use a valid, non-abstract ARIA role. | [eslint-plugin-jsx-a11y](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y) | [__tests__](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/tree/main/__tests__) | `"warn"` |
| jsx-a11y/aria-unsupported-elements | Enforce that elements that do not support ARIA roles, states, and properties do not have those attributes. | [eslint-plugin-jsx-a11y](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y) | [__tests__](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/tree/main/__tests__) | `"warn"` |
| jsx-a11y/heading-has-content | Enforce heading (h1, h2, etc) elements contain accessible content. | [eslint-plugin-jsx-a11y](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y) | [__tests__](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/tree/main/__tests__) | `"warn"` |
| jsx-a11y/html-has-lang | Enforce `<html>` element has lang prop. | [eslint-plugin-jsx-a11y](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y) | [__tests__](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/tree/main/__tests__) | `"warn"` |
| jsx-a11y/iframe-has-title | Enforce iframe elements have a title attribute. | [eslint-plugin-jsx-a11y](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y) | [__tests__](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/tree/main/__tests__) | `"warn"` |
| jsx-a11y/img-redundant-alt | Enforce `<img>` alt prop does not contain the word "image", "picture", or "photo". | [eslint-plugin-jsx-a11y](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y) | [__tests__](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/tree/main/__tests__) | `"warn"` |
| jsx-a11y/no-access-key | Enforce that the accessKey prop is not used on any element to avoid complications with keyboard commands used by a screen reader. | [eslint-plugin-jsx-a11y](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y) | [__tests__](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/tree/main/__tests__) | `"warn"` |
| jsx-a11y/no-distracting-elements | Enforce distracting elements are not used. | [eslint-plugin-jsx-a11y](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y) | [__tests__](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/tree/main/__tests__) | `"warn"` |
| jsx-a11y/no-redundant-roles | Enforce explicit role property is not the same as implicit/default role property on element. | [eslint-plugin-jsx-a11y](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y) | [__tests__](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/tree/main/__tests__) | `"warn"` |
| jsx-a11y/role-has-required-aria-props | Enforce that elements with ARIA roles must have all required attributes for that role. | [eslint-plugin-jsx-a11y](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y) | [__tests__](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/tree/main/__tests__) | `"warn"` |
| jsx-a11y/role-supports-aria-props | Enforce that elements with explicit or implicit roles defined contain only aria-* properties supported by that role. | [eslint-plugin-jsx-a11y](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y) | [__tests__](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/tree/main/__tests__) | `"warn"` |
| jsx-a11y/scope | Enforce scope prop is only used on `<th>` elements. | [eslint-plugin-jsx-a11y](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y) | [__tests__](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/tree/main/__tests__) | `"warn"` |
| **eslint-plugin-react** | | | | |
| react/jsx-boolean-value | Enforce boolean attributes notation in JSX | [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) | [tests](https://github.com/jsx-eslint/eslint-plugin-react/tree/main/tests) | `"warn"` |
| react/jsx-curly-spacing | Enforce or disallow spaces inside of curly braces in JSX attributes and expressions | [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) | [tests](https://github.com/jsx-eslint/eslint-plugin-react/tree/main/tests) | `["warn", "never"]` |
| react/jsx-equals-spacing | Enforce or disallow spaces around equal signs in JSX attributes | [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) | [tests](https://github.com/jsx-eslint/eslint-plugin-react/tree/main/tests) | `"warn"` |
| react/jsx-indent | Enforce JSX indentation | [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) | [tests](https://github.com/jsx-eslint/eslint-plugin-react/tree/main/tests) | `["warn", 2]` |
| react/jsx-indent-props | Enforce props indentation in JSX | [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) | [tests](https://github.com/jsx-eslint/eslint-plugin-react/tree/main/tests) | `["warn", 2]` |
| react/jsx-no-comment-textnodes | Disallow comments from being inserted as text nodes | [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) | [tests](https://github.com/jsx-eslint/eslint-plugin-react/tree/main/tests) | `"warn"` |
| react/jsx-no-duplicate-props | Disallow duplicate properties in JSX | [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) | [tests](https://github.com/jsx-eslint/eslint-plugin-react/tree/main/tests) | `["warn", { "ignoreCase": true }]` |
| react/jsx-no-target-blank | Disallow `target="_blank"` attribute without `rel="noreferrer"` | [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) | [tests](https://github.com/jsx-eslint/eslint-plugin-react/tree/main/tests) | `"warn"` |
| react/jsx-no-undef | Disallow undeclared variables in JSX | [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) | [tests](https://github.com/jsx-eslint/eslint-plugin-react/tree/main/tests) | `["warn", { "allowGlobals": true }]` |
| react/jsx-pascal-case | Enforce PascalCase for user-defined JSX components | [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) | [tests](https://github.com/jsx-eslint/eslint-plugin-react/tree/main/tests) | `["warn", { "allowAllCaps": true }]` |
| react/jsx-tag-spacing | Enforce whitespace in and around the JSX opening and closing brackets | [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) | [tests](https://github.com/jsx-eslint/eslint-plugin-react/tree/main/tests) | `"warn"` |
| react/jsx-uses-vars | Disallow variables used in JSX to be incorrectly marked as unused | [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) | [tests](https://github.com/jsx-eslint/eslint-plugin-react/tree/main/tests) | `"warn"` |
| react/jsx-wrap-multilines | Disallow missing parentheses around multiline JSX | [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) | [tests](https://github.com/jsx-eslint/eslint-plugin-react/tree/main/tests) | `["warn", {"declaration": "parens-new-line", "assignment": "parens-new-line", "return": "parens-new-line", "arrow": "ignore", "condition": "ignore", "logical": "ignore", "prop": "ignore"}]` |
| react/no-danger-with-children | Disallow when a DOM element is using both children and dangerouslySetInnerHTML | [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) | [tests](https://github.com/jsx-eslint/eslint-plugin-react/tree/main/tests) | `"warn"` |
| react/no-deprecated | Disallow usage of deprecated methods | [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) | [tests](https://github.com/jsx-eslint/eslint-plugin-react/tree/main/tests) | `"warn"` |
| react/no-direct-mutation-state | Disallow direct mutation of this.state | [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) | [tests](https://github.com/jsx-eslint/eslint-plugin-react/tree/main/tests) | `"warn"` |
| react/no-unused-prop-types | Disallow definitions of unused propTypes | [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) | [tests](https://github.com/jsx-eslint/eslint-plugin-react/tree/main/tests) | `"warn"` |
| react/prop-types | Disallow missing props validation in a React component definition | [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) | [tests](https://github.com/jsx-eslint/eslint-plugin-react/tree/main/tests) | `["error", { "skipUndeclared": true }]` |
| react/require-render-return | Enforce ES5 or ES6 class for returning value in render function | [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) | [tests](https://github.com/jsx-eslint/eslint-plugin-react/tree/main/tests) | `"warn"` |
| react/self-closing-comp | Disallow extra closing tags for components without children | [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) | [tests](https://github.com/jsx-eslint/eslint-plugin-react/tree/main/tests) | `"warn"` |
| react/void-dom-elements-no-children | Disallow void DOM elements (e.g. `<img />`, `<br />`) from receiving children | [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) | [tests](https://github.com/jsx-eslint/eslint-plugin-react/tree/main/tests) | `"warn"` |
| **eslint-plugin-react-hooks** | | | | |
| react-hooks/rules-of-hooks | Enforces the Rules of Hooks. | [eslint-plugin-react-hooks](https://react.dev/reference/eslint-plugin-react-hooks) | N/A | `"error"` |
| react-hooks/exhaustive-deps | Verifies that all dependencies are correctly specified in the dependency array of hooks like `useEffect` and `useCallback`. | [eslint-plugin-react-hooks](https://react.dev/reference/eslint-plugin-react-hooks) | N/A | `"warn"` |
| **ESLint Core Rules** | | | | |
| brace-style | enforce consistent brace style for blocks | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `["warn", "1tbs", { "allowSingleLine": true }]` |
| indent | enforce consistent indentation | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `["warn", 2, { "SwitchCase": 1, "flatTernaryExpressions": true }]` |
| accessor-pairs | enforce getter and setter pairs in objects | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| array-callback-return | enforce `return` statements in callbacks of array methods | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| arrow-spacing | enforce consistent spacing before and after the arrow in arrow functions | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| block-spacing | enforce consistent spacing inside single-line blocks | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| comma-dangle | require or disallow trailing commas | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `["warn", "only-multiline"]` |
| comma-spacing | enforce consistent spacing before and after commas | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| comma-style | enforce consistent comma style | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| default-case | require `default` cases in `switch` statements | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `["warn", { "commentPattern": "^no default$" }]` |
| dot-location | enforce consistent newlines before and after dots | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `["warn", "property"]` |
| eol-last | require or disallow newline at the end of files | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| eqeqeq | require the use of `===` and `!==` | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| key-spacing | enforce consistent spacing between keys and values in object literal properties | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| keyword-spacing | enforce consistent spacing before and after keywords | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| new-parens | require parentheses when invoking a constructor with no arguments | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-array-constructor | disallow `Array` constructors | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-caller | disallow the use of `arguments.caller` or `arguments.callee` | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-class-assign | disallow reassigning class members | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-compare-neg-zero | disallow comparing against -0 | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-cond-assign | disallow assignment operators in conditional expressions | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-const-assign | disallow reassigning `const` variables | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-constant-condition | disallow constant expressions in conditions | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-control-regex | disallow control characters in regular expressions | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-debugger | disallow the use of `debugger` | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-delete-var | disallow deleting variables | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-dupe-args | disallow duplicate arguments in `function` definitions | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-dupe-class-members | disallow duplicate class members | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-dupe-keys | disallow duplicate keys in object literals | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-duplicate-case | disallow duplicate case labels | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-empty-character-class | disallow empty character classes in regular expressions | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-empty-pattern | disallow empty destructuring patterns | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-eval | disallow the use of `eval()` | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-ex-assign | disallow reassigning exceptions in `catch` clauses | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-extend-native | disallow extending native types | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-extra-bind | disallow unnecessary calls to `.bind()` | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-extra-boolean-cast | disallow unnecessary boolean casts | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-extra-label | disallow unnecessary labels | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-extra-parens | disallow unnecessary parentheses | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `["warn", "functions"]` |
| no-fallthrough | disallow fallthrough of `case` statements | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-floating-decimal | disallow leading or trailing decimal points in numeric literals | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-func-assign | disallow reassigning `function` declarations | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-global-assign | disallow assignments to native objects or read-only global variables | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-implied-eval | disallow the use of `eval()`-like methods | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-invalid-regexp | disallow invalid regular expression strings in `RegExp` constructors | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-irregular-whitespace | disallow irregular whitespace outside of strings and comments | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-iterator | disallow the use of the `__iterator__` property | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-label-var | disallow labels that share a name with a variable | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-labels | disallow labeled statements | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `["warn", { "allowLoop": true, "allowSwitch": false }]` |
| no-lone-blocks | disallow unnecessary nested blocks | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-loop-func | disallow `function` declarations and expressions inside loop statements | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-mixed-spaces-and-tabs | disallow mixed spaces and tabs for indentation | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-path-concat | disallow string concatenation with `__dirname` and `__filename` | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-proto | disallow the use of the `__proto__` property | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-return-assign | disallow assignment operators in `return` statements | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-return-await | disallow unnecessary `return await` | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-trailing-spaces | disallow trailing whitespace at the end of lines | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-unneeded-ternary | disallow ternary operators when simpler alternatives exist | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-unsafe-negation | disallow negating the left operand of relational operators | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-useless-return | disallow redundant return statements | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| object-curly-spacing | enforce consistent spacing inside braces | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `["warn", "always"]` |
| object-shorthand | require or disallow method and property shorthand syntax for object literals | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `["warn", "always"]` |
| quotes | enforce the consistent use of either backticks, double, or single quotes | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `["warn", "single", { "avoidEscape": true, "allowTemplateLiterals": true }]` |
| semi | require or disallow semicolons instead of ASI | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `["warn", "never"]` |
| semi-spacing | enforce consistent spacing before and after semicolons | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `["warn", { "before": false, "after": true }]` |
| space-before-blocks | enforce consistent spacing before blocks | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| space-before-function-paren | enforce consistent spacing before `function` definition opening parenthesis | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `["warn", { "anonymous": "never", "named": "never", "asyncArrow": "always" }]` |
| space-infix-ops | require spacing around infix operators | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| space-unary-ops | enforce consistent spacing before or after unary operators | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `["warn", { "words": true, "nonwords": false }]` |
| template-tag-spacing | require or disallow spacing between template tags and their literals | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-mixed-operators | disallow mixed binary operators | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `["warn", {"groups": [["&", "|", "^", "~", "<<", ">>", ">>>"], ["==", "!=", "===", "!==", ">", ">=", "<", "<="], ["&&", "||"], ["in", "instanceof"]], "allowSamePrecedence": false}]` |
| no-multi-str | disallow multiline strings | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-native-reassign | disallow assignments to native objects or read-only global variables | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-negated-in-lhs | disallow negating the left operand of relational operators | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-new-func | disallow `new` operators with the `Function` object | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-new-object | disallow `Object` constructors | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-new-symbol | disallow `new` operators with the `Symbol` object | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-new-wrappers | disallow `new` operators with the `String`, `Number`, and `Boolean` objects | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-obj-calls | disallow calling global object properties as functions | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-octal | disallow octal literals | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-octal-escape | disallow octal escape sequences in string literals | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-redeclare | disallow variable redeclaration | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-regex-spaces | disallow multiple spaces in regular expressions | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-restricted-globals | disallow specified global variables | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `["warn", "addEventListener", "blur", "close", "closed", "confirm", "defaultStatus", "defaultstatus", "event", "external", "find", "focus", "frameElement", "frames", "history", "innerHeight", "innerWidth", "length", "location", "locationbar", "menubar", "moveBy", "moveTo", "name", "onblur", "onwarn", "onfocus", "onload", "onresize", "onunload", "open", "opener", "opera", "outerHeight", "outerWidth", "pageXOffset", "pageYOffset", "parent", "print", "removeEventListener", "resizeBy", "resizeTo", "screen", "screenLeft", "screenTop", "screenX", "screenY", "scroll", "scrollbars", "scrollBy", "scrollTo", "scrollX", "scrollY", "self", "status", "statusbar", "stop", "toolbar", "top"]` |
| no-restricted-properties | disallow certain properties on certain objects | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `["warn", {"object": "require", "property": "ensure", "message": "Please use import() instead. More info: https://github.com/facebookincubator/create-react-app/blob/master/packages/react-scripts/template/README.md#code-splitting"}, {"object": "System", "property": "import", "message": "Please use import() instead. More info: https://github.com/facebookincubator/create-react-app/blob/master/packages/react-scripts/template/README.md#code-splitting"}]` |
| no-restricted-syntax | disallow specified syntax | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `["warn", "WithStatement"]` |
| no-script-url | disallow `javascript:` urls | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-self-assign | disallow assignments where both sides are exactly the same | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-self-compare | disallow comparisons where both sides are exactly the same | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-shadow-restricted-names | disallow identifiers from shadowing restricted names | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-sparse-arrays | disallow sparse arrays | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-template-curly-in-string | disallow template literal placeholder syntax in regular strings | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-this-before-super | disallow `this`/`super` before calling `super()` in constructors | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-throw-literal | disallow throwing literals as exceptions | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-undef | disallow the use of undeclared variables unless mentioned in `/*global */` comments | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-unexpected-multiline | disallow confusing multiline expressions | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-unreachable | disallow unreachable code after `return`, `throw`, `continue`, and `break` statements | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-unused-expressions | disallow unused expressions | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `["warn", {"allowShortCircuit": true, "allowTernary": true, "allowTaggedTemplates": true}]` |
| no-unused-labels | disallow unused labels | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-unused-vars | disallow unused variables | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `["warn", {"args": "none", "ignoreRestSiblings": true}]` |
| no-use-before-define | disallow the use of variables before they are defined | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `["warn", {"functions": false, "classes": false, "variables": false}]` |
| no-useless-computed-key | disallow unnecessary computed property keys in object literals | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-useless-concat | disallow unnecessary concatenation of literals or template literals | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-useless-constructor | disallow unnecessary constructors | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-useless-escape | disallow unnecessary escape characters | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-whitespace-before-property | disallow whitespace before properties | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| no-with | disallow `with` statements | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| radix | enforce the consistent use of the radix argument when using `parseInt()` | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| require-yield | require generator functions to contain `yield` | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| rest-spread-spacing | enforce spacing between rest and spread operators and their expressions | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `["warn", "never"]` |
| strict | require or disallow strict mode directives | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `["warn", "never"]` |
| unicode-bom | require or disallow Unicode byte order mark (BOM) | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `["warn", "never"]` |
| use-isnan | require calls to `isNaN()` when checking for `NaN` | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
| valid-typeof | enforce comparing `typeof` expressions against valid strings | [ESLint](https://eslint.org/docs/rules/) | [tests](https://github.com/eslint/eslint/tree/main/tests) | `"warn"` |
