{
  "root": true,
  "parser": "babel-eslint",
  "extends": [
    "wordpress",
    "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
  },
  "plugins": ["react", "jsx-a11y", "jest"],
  "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": 0,
    "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 the import path instead."
      },
      {
        "selector": "ImportDeclaration[source.value=/^components$/]",
        "message": "Use @wordpress/components as the import path instead."
      },
      {
        "selector": "ImportDeclaration[source.value=/^date$/]",
        "message": "Use @wordpress/date as the import path instead."
      },
      {
        "selector": "ImportDeclaration[source.value=/^editor$/]",
        "message": "Use @wordpress/editor as the import path instead."
      },
      {
        "selector": "ImportDeclaration[source.value=/^element$/]",
        "message": "Use @wordpress/element as the import path instead."
      },
      {
        "selector": "ImportDeclaration[source.value=/^i18n$/]",
        "message": "Use @wordpress/i18n as the import path instead."
      },
      {
        "selector": "ImportDeclaration[source.value=/^data$/]",
        "message": "Use @wordpress/data as the import path instead."
      },
      {
        "selector": "ImportDeclaration[source.value=/^utils$/]",
        "message": "Use @wordpress/utils as the 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"
  }
}
