.eslintrc.js 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. const fs = require('fs')
  2. const path = require('path')
  3. const prettierOptions = JSON.parse(
  4. fs.readFileSync(path.resolve(__dirname, '.prettierrc'), 'utf8')
  5. )
  6. module.exports = {
  7. parser: 'babel-eslint',
  8. extends: ['standard', 'standard-react', 'prettier', 'prettier/react'],
  9. plugins: ['prettier', 'redux-saga', 'react', 'react-hooks', 'jsx-a11y'],
  10. env: {
  11. browser: true,
  12. node: true,
  13. jest: true,
  14. es6: true
  15. },
  16. parserOptions: {
  17. ecmaVersion: 6,
  18. sourceType: 'module',
  19. ecmaFeatures: {
  20. jsx: true
  21. }
  22. },
  23. rules: {
  24. 'prettier/prettier': ['error', prettierOptions],
  25. // 'arrow-parens': 0,
  26. 'arrow-body-style': [2, 'as-needed'],
  27. 'class-methods-use-this': 0,
  28. 'import/imports-first': 0,
  29. 'import/newline-after-import': 0,
  30. 'import/no-dynamic-require': 0,
  31. 'import/no-extraneous-dependencies': 0,
  32. 'import/no-named-as-default': 0,
  33. 'import/no-unresolved': 2,
  34. 'import/no-webpack-loader-syntax': 0,
  35. 'import/prefer-default-export': 0,
  36. indent: [
  37. 2,
  38. 2,
  39. {
  40. SwitchCase: 1
  41. }
  42. ],
  43. 'jsx-a11y/aria-props': 2,
  44. 'jsx-a11y/heading-has-content': 0,
  45. 'jsx-a11y/label-has-associated-control': [
  46. 2,
  47. {
  48. // NOTE: If this error triggers, either disable it or add
  49. // your custom components, labels and attributes via these options
  50. // See https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/label-has-associated-control.md
  51. controlComponents: ['Input']
  52. }
  53. ],
  54. 'jsx-a11y/label-has-for': 0,
  55. 'jsx-a11y/mouse-events-have-key-events': 2,
  56. 'jsx-a11y/role-has-required-aria-props': 2,
  57. 'jsx-a11y/role-supports-aria-props': 2,
  58. 'jsx-quotes': ['error', 'prefer-double'],
  59. 'max-len': 0,
  60. 'newline-per-chained-call': 0,
  61. 'no-confusing-arrow': 0,
  62. 'no-console': 1,
  63. 'no-unused-vars': 2,
  64. 'no-use-before-define': 0,
  65. 'prefer-template': 2,
  66. // "space-before-function-paren": 2,
  67. "space-before-function-paren": ["error", "never"],
  68. 'react/destructuring-assignment': 0,
  69. 'react-hooks/rules-of-hooks': 'error',
  70. 'react-hooks/exhaustive-deps': 'error',
  71. 'react/jsx-closing-tag-location': 0,
  72. 'react/forbid-prop-types': 0,
  73. 'react/jsx-first-prop-new-line': [2, 'multiline'],
  74. 'react/jsx-filename-extension': 0,
  75. 'react/jsx-no-target-blank': 0,
  76. 'react/jsx-uses-vars': 2,
  77. 'react/require-default-props': 0,
  78. 'react/require-extension': 0,
  79. 'react/self-closing-comp': 0,
  80. 'react/sort-comp': 0,
  81. 'redux-saga/no-yield-in-race': 2,
  82. 'redux-saga/yield-effects': 2,
  83. 'require-yield': 0
  84. },
  85. settings: {
  86. 'import/resolver': {
  87. webpack: {
  88. config: './internals/webpack/webpack.prod.babel.js'
  89. }
  90. }
  91. }
  92. }