UNPKG

eslint-config-amex

Version:
627 lines (529 loc) 25.5 kB
/* * Copyright (c) 2026 American Express Travel Related Services Company, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under * the License. */ /** * This file contains all rules for the `eslint-plugin-react` plugin. * * These rules were migrated from https://github.com/airbnb/javascript/blob/eslint-config-airbnb-v19.0.4/packages/eslint-config-airbnb/rules/react.js. * * Additionally, some rule updates were migrated from https://github.com/americanexpress/eslint-config-amex/blob/16.x/index.js. * * For a complete list of rules, see https://github.com/jsx-eslint/eslint-plugin-react/tree/v7.37.5/docs/rules. */ export default { // Specify whether double or single quotes should be used in JSX attributes // https://eslint.style/rules/jsx-quotes "@stylistic/jsx-quotes": ["error", "prefer-double"], // https://eslint.org/docs/latest/rules/class-methods-use-this "class-methods-use-this": [ "error", { exceptMethods: [ "render", "getInitialState", "getDefaultProps", "getChildContext", "componentWillMount", "UNSAFE_componentWillMount", "componentDidMount", "componentWillReceiveProps", "UNSAFE_componentWillReceiveProps", "shouldComponentUpdate", "componentWillUpdate", "UNSAFE_componentWillUpdate", "componentDidUpdate", "componentWillUnmount", "componentDidCatch", "getSnapshotBeforeUpdate", ], }, ], // Prevent missing displayName in a React component definition // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/display-name.md "react/display-name": ["off", { ignoreTranspilerName: false }], // Forbid certain propTypes (any, array, object) // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/forbid-prop-types.md "react/forbid-prop-types": [ "error", { forbid: ["any", "array", "object"], checkContextTypes: true, checkChildContextTypes: true, }, ], // Forbid certain props on DOM Nodes // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/forbid-dom-props.md "react/forbid-dom-props": ["off", { forbid: [] }], // Enforce boolean attributes notation in JSX // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/jsx-boolean-value.md // migrated from https://github.com/americanexpress/eslint-config-amex/blob/16.x/index.js#L97 "react/jsx-boolean-value": ["error", "always"], // Validate closing bracket location in JSX // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/jsx-closing-bracket-location.md "react/jsx-closing-bracket-location": ["error", "line-aligned"], // Validate closing tag location in JSX // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/jsx-closing-tag-location.md "react/jsx-closing-tag-location": "error", // Enforce or disallow spaces inside of curly braces in JSX attributes // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/jsx-curly-spacing.md "react/jsx-curly-spacing": ["error", "never", { allowMultiline: true }], // Enforce event handler naming conventions in JSX // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/jsx-handler-names.md "react/jsx-handler-names": [ "off", { eventHandlerPrefix: "handle", eventHandlerPropPrefix: "on", }, ], // Validate props indentation in JSX // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/jsx-indent-props.md "react/jsx-indent-props": ["error", 2], // Validate JSX has key prop when in array or iterator // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/jsx-key.md // Turned off because it has too many false positives "react/jsx-key": "off", // Limit maximum of props on a single line in JSX // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/jsx-max-props-per-line.md "react/jsx-max-props-per-line": ["error", { maximum: 1, when: "multiline" }], // Prevent usage of .bind() in JSX props // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/jsx-no-bind.md "react/jsx-no-bind": [ "error", { ignoreRefs: true, allowArrowFunctions: true, allowFunctions: false, allowBind: false, ignoreDOMComponents: true, }, ], // Prevent duplicate props in JSX // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/jsx-no-duplicate-props.md "react/jsx-no-duplicate-props": ["error", { ignoreCase: true }], // Prevent usage of unwrapped JSX strings // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/jsx-no-literals.md "react/jsx-no-literals": ["off", { noStrings: true }], // Disallow undeclared variables in JSX // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/jsx-no-undef.md "react/jsx-no-undef": "error", // Enforce PascalCase for user-defined JSX components // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/jsx-pascal-case.md "react/jsx-pascal-case": [ "error", { allowAllCaps: true, ignore: [], }, ], // Enforce propTypes declarations alphabetical sorting // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/sort-prop-types.md "react/sort-prop-types": [ "off", { ignoreCase: true, callbacksLast: false, requiredFirst: false, sortShapeProp: true, }, ], // Enforce props alphabetical sorting // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/jsx-sort-props.md "react/jsx-sort-props": [ "off", { ignoreCase: true, callbacksLast: false, shorthandFirst: false, shorthandLast: false, noSortAlphabetically: false, reservedFirst: true, }, ], // Enforce defaultProps declarations alphabetical sorting // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/sort-default-props.md "react/sort-default-props": [ "off", { ignoreCase: true, }, ], // Prevent React to be incorrectly marked as unused // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/jsx-uses-react.md "react/jsx-uses-react": ["error"], // Prevent variables used in JSX to be incorrectly marked as unused // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/jsx-uses-vars.md "react/jsx-uses-vars": "error", // Prevent usage of dangerous JSX properties // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/no-danger.md "react/no-danger": "warn", // Prevent usage of deprecated methods // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/no-deprecated.md "react/no-deprecated": ["error"], // Prevent usage of setState in componentDidMount // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/no-did-mount-set-state.md // this is necessary for server-rendering "react/no-did-mount-set-state": "off", // Prevent usage of setState in componentDidUpdate // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/no-did-update-set-state.md "react/no-did-update-set-state": "error", // Prevent usage of setState in componentWillUpdate // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/no-will-update-set-state.md "react/no-will-update-set-state": "error", // Prevent direct mutation of this.state // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/no-direct-mutation-state.md "react/no-direct-mutation-state": "off", // Prevent usage of isMounted // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/no-is-mounted.md "react/no-is-mounted": "error", // Prevent multiple component definition per file // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/no-multi-comp.md "react/no-multi-comp": "off", // Prevent usage of setState // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/no-set-state.md "react/no-set-state": "off", // Prevent using string references // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/no-string-refs.md "react/no-string-refs": "error", // Prevent usage of unknown DOM property // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/no-unknown-property.md "react/no-unknown-property": "error", // Require ES6 class declarations over React.createClass // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/prefer-es6-class.md "react/prefer-es6-class": ["error", "always"], // Require stateless functions when not using lifecycle methods, setState or ref // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/prefer-stateless-function.md "react/prefer-stateless-function": ["error", { ignorePureComponents: true }], // Prevent missing props validation in a React component definition // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/prop-types.md "react/prop-types": [ "error", { ignore: [], customValidators: [], skipUndeclared: true, }, ], // Prevent missing React when using JSX // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/react-in-jsx-scope.md "react/react-in-jsx-scope": "error", // Require render() methods to return something // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/require-render-return.md "react/require-render-return": "error", // Prevent extra closing tags for components without children // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/self-closing-comp.md "react/self-closing-comp": "error", // Enforce component methods order // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/sort-comp.md "react/sort-comp": [ "error", { order: [ "static-variables", "static-methods", "instance-variables", "lifecycle", "/^handle.+$/", "/^on.+$/", "getters", "setters", "/^(get|set)(?!(InitialState$|DefaultProps$|ChildContext$)).+$/", "instance-methods", "everything-else", "rendering", ], groups: { lifecycle: [ "displayName", "propTypes", "contextTypes", "childContextTypes", "mixins", "statics", "defaultProps", "constructor", "getDefaultProps", "getInitialState", "state", "getChildContext", "getDerivedStateFromProps", "componentWillMount", "UNSAFE_componentWillMount", "componentDidMount", "componentWillReceiveProps", "UNSAFE_componentWillReceiveProps", "shouldComponentUpdate", "componentWillUpdate", "UNSAFE_componentWillUpdate", "getSnapshotBeforeUpdate", "componentDidUpdate", "componentDidCatch", "componentWillUnmount", ], rendering: ["/^render.+$/", "render"], }, }, ], // Prevent missing parentheses around multilines JSX // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/jsx-wrap-multilines.md "react/jsx-wrap-multilines": [ "error", { declaration: "parens-new-line", assignment: "parens-new-line", return: "parens-new-line", arrow: "parens-new-line", condition: "parens-new-line", logical: "parens-new-line", prop: "parens-new-line", }, ], // Require that the first prop in a JSX element be on a new line when the element is multiline // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/jsx-first-prop-new-line.md "react/jsx-first-prop-new-line": ["error", "multiline-multiprop"], // Enforce spacing around jsx equals signs // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/jsx-equals-spacing.md "react/jsx-equals-spacing": ["error", "never"], // Enforce JSX indentation // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/jsx-indent.md "react/jsx-indent": ["error", 2], // Disallow target="_blank" on links // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/jsx-no-target-blank.md "react/jsx-no-target-blank": ["error", { enforceDynamicLinks: "always" }], // only .jsx files may have JSX // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/jsx-filename-extension.md "react/jsx-filename-extension": ["error", { extensions: [".jsx"] }], // prevent accidental JS comments from being injected into JSX as text // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/jsx-no-comment-textnodes.md "react/jsx-no-comment-textnodes": "error", // disallow using React.render/ReactDOM.render's return value // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/no-render-return-value.md "react/no-render-return-value": "error", // require a shouldComponentUpdate method, or PureRenderMixin // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/require-optimization.md "react/require-optimization": ["off", { allowDecorators: [] }], // warn against using findDOMNode() // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/no-find-dom-node.md "react/no-find-dom-node": "error", // Forbid certain props on Components // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/forbid-component-props.md "react/forbid-component-props": ["off", { forbid: [] }], // Forbid certain elements // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/forbid-elements.md "react/forbid-elements": ["off", { forbid: [] }], // Prevent problem with children and props.dangerouslySetInnerHTML // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/no-danger-with-children.md "react/no-danger-with-children": "error", // Prevent unused propType definitions // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/no-unused-prop-types.md "react/no-unused-prop-types": [ "error", { customValidators: [], skipShapeProps: true, }, ], // Require style prop value be an object or var // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/style-prop-object.md "react/style-prop-object": "error", // Prevent invalid characters from appearing in markup // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/no-unescaped-entities.md "react/no-unescaped-entities": "error", // Prevent passing of children as props // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/no-children-prop.md "react/no-children-prop": "error", // Validate whitespace in and around the JSX opening and closing brackets // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/jsx-tag-spacing.md "react/jsx-tag-spacing": [ "error", { closingSlash: "never", beforeSelfClosing: "always", afterOpening: "never", beforeClosing: "never", }, ], // Prevent usage of Array index in keys // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/no-array-index-key.md "react/no-array-index-key": "error", // Enforce a defaultProps definition for every prop that is not a required prop // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/require-default-props.md // migrated from https://github.com/americanexpress/eslint-config-amex/blob/16.x/index.js#L240 "react/require-default-props": [ "off", { forbidDefaultForRequired: true, }, ], // Forbids using non-exported propTypes // this is intentionally set to "warn". it would be "error", // but it's only critical if you're stripping propTypes in production. // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/forbid-foreign-prop-types.md "react/forbid-foreign-prop-types": ["warn", { allowInPropTypes: true }], // Prevent void DOM elements from receiving children // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/void-dom-elements-no-children.md "react/void-dom-elements-no-children": "error", // Enforce all defaultProps have a corresponding non-required PropType // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/default-props-match-prop-types.md "react/default-props-match-prop-types": [ "error", { allowRequiredDefaults: false }, ], // Prevent usage of shouldComponentUpdate when extending React.PureComponent // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/no-redundant-should-component-update.md "react/no-redundant-should-component-update": "error", // Prevent unused state values // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/no-unused-state.md "react/no-unused-state": "error", // Enforces consistent naming for boolean props // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/boolean-prop-naming.md // migrated from https://github.com/americanexpress/eslint-config-amex/blob/16.x/index.js#L102 "react/boolean-prop-naming": [ "error", { propTypeNames: ["bool", "mutuallyExclusiveTrueProps"], rule: "^((is|has|can|show|hide|should)[A-Z]([A-Za-z0-9]?)+|(show|hide))", }, ], // Prevents common casing typos // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/no-typos.md "react/no-typos": "error", // Enforce curly braces or disallow unnecessary curly braces in JSX props and/or children // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/jsx-curly-brace-presence.md "react/jsx-curly-brace-presence": [ "error", { props: "never", children: "never" }, ], // One JSX Element Per Line // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/jsx-one-expression-per-line.md // migrated from https://github.com/americanexpress/eslint-config-amex/blob/16.x/index.js#L236 "react/jsx-one-expression-per-line": ["off", { allow: "single-child" }], // Enforce consistent usage of destructuring assignment of props, state, and context // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/destructuring-assignment.md "react/destructuring-assignment": ["error", "always"], // Prevent using this.state within a this.setState // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/no-access-state-in-setstate.md "react/no-access-state-in-setstate": "error", // Prevent usage of button elements without an explicit type attribute // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/button-has-type.md "react/button-has-type": [ "error", { button: true, submit: true, reset: false, }, ], // Ensures inline tags are not rendered without spaces between them // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/jsx-child-element-spacing.md "react/jsx-child-element-spacing": "off", // Prevent this from being used in stateless functional components // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/no-this-in-sfc.md "react/no-this-in-sfc": "error", // Validate JSX maximum depth // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/jsx-max-depth.md "react/jsx-max-depth": "off", // Disallow multiple spaces between inline JSX props // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/jsx-props-no-multi-spaces.md "react/jsx-props-no-multi-spaces": "error", // Prevent usage of UNSAFE_ methods // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/no-unsafe.md "react/no-unsafe": "off", // Enforce shorthand or standard form for React fragments // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/jsx-fragments.md // migrated from https://github.com/americanexpress/eslint-config-amex/blob/16.x/index.js#L229 "react/jsx-fragments": ["off", "syntax"], // Enforce linebreaks in curly braces in JSX attributes and expressions. // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/jsx-curly-newline.md "react/jsx-curly-newline": [ "error", { multiline: "consistent", singleline: "consistent", }, ], // Enforce state initialization style // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/state-in-constructor.md // TODO: set to "never" once babel-preset-airbnb supports public class fields "react/state-in-constructor": ["error", "always"], // Enforces where React component static properties should be positioned // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/static-property-placement.md // TODO: set to "static public field" once babel-preset-airbnb supports public class fields "react/static-property-placement": ["error", "property assignment"], // Disallow JSX props spreading // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/jsx-props-no-spreading.md "react/jsx-props-no-spreading": [ "error", { html: "enforce", custom: "enforce", explicitSpread: "ignore", exceptions: [], }, ], // Enforce that props are read-only // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/prefer-read-only-props.md "react/prefer-read-only-props": "off", // Prevent usage of `javascript:` URLs // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/jsx-no-script-url.md "react/jsx-no-script-url": [ "error", [ { name: "Link", props: ["to"], }, ], ], // Disallow unnecessary fragments // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/jsx-no-useless-fragment.md "react/jsx-no-useless-fragment": "error", // Prevent adjacent inline elements not separated by whitespace // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/no-adjacent-inline-elements.md // TODO: enable? semver-major "react/no-adjacent-inline-elements": "off", // Enforce a specific function type for function components // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/function-component-definition.md // migrated from https://github.com/americanexpress/eslint-config-amex/blob/16.x/index.js#L177 "react/function-component-definition": [ "off", { namedComponents: ["function-declaration", "function-expression"], unnamedComponents: "function-expression", }, ], // Enforce a new line after jsx elements and expressions // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/jsx-newline.md "react/jsx-newline": "off", // Prevent react contexts from taking non-stable values // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/jsx-no-constructed-context-values.md "react/jsx-no-constructed-context-values": "error", // Prevent creating unstable components inside components // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/no-unstable-nested-components.md "react/no-unstable-nested-components": "error", // Enforce that namespaces are not used in React elements // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/no-namespace.md "react/no-namespace": "error", // Prefer exact proptype definitions // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/prefer-exact-props.md "react/prefer-exact-props": "error", // Lifecycle methods should be methods on the prototype, not class fields // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/no-arrow-function-lifecycle.md "react/no-arrow-function-lifecycle": "error", // Prevent usage of invalid attributes // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/no-invalid-html-attribute.md "react/no-invalid-html-attribute": "error", // Prevent declaring unused methods of component class // https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.37.5/docs/rules/no-unused-class-component-methods.md "react/no-unused-class-component-methods": "error", };