{ "root": true, "parser": "@typescript-eslint/parser", "plugins": [ "@typescript-eslint", "react", "jsx-a11y", "jest" ], "extends": [ "plugin:react/recommended", "plugin:jsx-a11y/recommended", "plugin:jest/recommended" ], "env": { "browser": false, "es6": true, "node": true, "mocha": true, "jest/globals": true }, "parserOptions": { "sourceType": "module", "ecmaFeatures": { "jsx": true } }, "globals": { "wp": true, "wpApiSettings": true, "window": true, "document": true }, "settings": { "react": { "pragma": "wp" } }, "rules": { "array-bracket-spacing": ["error", "always"], "brace-style": ["error", "1tbs"], "camelcase": ["error", { "properties": "never" }], "comma-dangle": ["error", "always-multiline"], "comma-spacing": "error", "comma-style": "error", "computed-property-spacing": ["error", "always"], "constructor-super": "error", "dot-notation": "error", "eol-last": "error", "eqeqeq": "error", "func-call-spacing": "error", "indent": ["error", "tab", { "SwitchCase": 1 }], "jsx-a11y/label-has-for": [ "error", { "required": "id" } ], "jsx-a11y/media-has-caption": "off", "jsx-a11y/no-noninteractive-tabindex": "off", "jsx-a11y/role-has-required-aria-props": "off", "jsx-quotes": "error", "key-spacing": "error", "keyword-spacing": "error", "lines-around-comment": "off", "no-alert": "error", "no-bitwise": "error", "no-caller": "error", "no-console": "error", "no-const-assign": "error", "no-debugger": "error", "no-dupe-args": "error", "no-dupe-class-members": "error", "no-dupe-keys": "error", "no-duplicate-case": "error", "no-duplicate-imports": "error", "no-else-return": "error", "no-eval": "error", "no-extra-semi": "error", "no-fallthrough": "error", "no-lonely-if": "error", "no-mixed-operators": "error", "no-mixed-spaces-and-tabs": "error", "no-multiple-empty-lines": ["error", { "max": 1 }], "no-multi-spaces": "error", "no-multi-str": "off", "no-negated-in-lhs": "error", "no-nested-ternary": "error", "no-redeclare": "error", "no-restricted-syntax": [ "error", { "selector": "ImportDeclaration[source.value=/^@wordpress\\u002F.+\\u002F/]", "message": "Path access on WordPress dependencies is not allowed." }, { "selector": "ImportDeclaration[source.value=/^blocks$/]", "message": "Use @wordpress/blocks as import path instead." }, { "selector": "ImportDeclaration[source.value=/^components$/]", "message": "Use @wordpress/components as import path instead." }, { "selector": "ImportDeclaration[source.value=/^date$/]", "message": "Use @wordpress/date as import path instead." }, { "selector": "ImportDeclaration[source.value=/^editor$/]", "message": "Use @wordpress/editor as import path instead." }, { "selector": "ImportDeclaration[source.value=/^element$/]", "message": "Use @wordpress/element as import path instead." }, { "selector": "ImportDeclaration[source.value=/^i18n$/]", "message": "Use @wordpress/i18n as import path instead." }, { "selector": "ImportDeclaration[source.value=/^data$/]", "message": "Use @wordpress/data as import path instead." }, { "selector": "ImportDeclaration[source.value=/^utils$/]", "message": "Use @wordpress/utils as import path instead." }, { "selector": "CallExpression[callee.name=/^__|_n|_x$/]:not([arguments.0.type=/^Literal|BinaryExpression$/])", "message": "Translate function arguments must be string literals." }, { "selector": "CallExpression[callee.name=/^_n|_x$/]:not([arguments.1.type=/^Literal|BinaryExpression$/])", "message": "Translate function arguments must be string literals." }, { "selector": "CallExpression[callee.name=_nx]:not([arguments.2.type=/^Literal|BinaryExpression$/])", "message": "Translate function arguments must be string literals." } ], "no-shadow": "error", "no-undef": "error", "no-undef-init": "error", "no-unreachable": "error", "no-unsafe-negation": "error", "no-unused-expressions": "error", "no-unused-vars": "error", "no-useless-computed-key": "error", "no-useless-constructor": "error", "no-useless-return": "error", "no-var": "error", "no-whitespace-before-property": "error", "object-curly-spacing": ["error", "always"], "padded-blocks": ["error", "never"], "prefer-const": "error", "quote-props": ["error", "as-needed"], "react/display-name": "off", "react/jsx-curly-spacing": [ "error", { "when": "always", "children": true } ], "react/jsx-equals-spacing": "error", "react/jsx-indent": ["error", "tab"], "react/jsx-indent-props": ["error", "tab"], "react/jsx-key": "error", "react/jsx-tag-spacing": "error", "react/no-children-prop": "off", "react/no-find-dom-node": "warn", "react/prop-types": "off", "semi": "error", "semi-spacing": "error", "space-before-blocks": ["error", "always"], "space-before-function-paren": ["error", "never"], "space-in-parens": ["error", "always"], "space-infix-ops": ["error", { "int32Hint": false }], "space-unary-ops": [ "error", { "overrides": { "!": true } } ], "template-curly-spacing": ["error", "always"], "valid-jsdoc": ["error", { "requireReturn": false }], "valid-typeof": "error", "yoda": "off" } }