.eslintrc.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. module.exports = {
  2. env: {
  3. browser: true,
  4. es6: true,
  5. jest: true,
  6. },
  7. extends: ['eslint:recommended', 'plugin:react/recommended', 'plugin:prettier/recommended'],
  8. settings: {
  9. react: {
  10. version: 'detect',
  11. },
  12. },
  13. globals: {
  14. shallow: true,
  15. render: true,
  16. mount: true,
  17. global: true,
  18. },
  19. parser: 'babel-eslint',
  20. parserOptions: {
  21. ecmaFeatures: {
  22. jsx: true,
  23. },
  24. ecmaVersion: 2018,
  25. sourceType: 'module',
  26. },
  27. rules: {
  28. 'arrow-body-style': ['warn', 'as-needed'],
  29. 'arrow-parens': ['warn', 'as-needed'],
  30. 'arrow-spacing': 'error',
  31. 'block-spacing': ['error', 'never'],
  32. camelcase: ['error', {properties: 'always'}],
  33. 'comma-dangle': 0,
  34. 'comma-spacing': ['error', {before: false, after: true}],
  35. 'comma-style': ['error', 'last'],
  36. 'global-require': 0,
  37. indent: ['error', 2],
  38. 'key-spacing': ['error', {beforeColon: false, afterColon: true}],
  39. 'keyword-spacing': ['error', {before: true, after: true}],
  40. 'linebreak-style': ['error', 'unix'],
  41. 'linebreak-style': ['error', 'unix'],
  42. 'max-len': ['error', 120],
  43. 'no-confusing-arrow': ['error', {allowParens: false}],
  44. 'no-multi-spaces': 'error',
  45. 'no-shadow': 1,
  46. 'no-trailing-spaces': 'error',
  47. 'no-unused-expressions': 1,
  48. 'no-unused-vars': 1,
  49. 'no-useless-rename': 'error',
  50. 'no-whitespace-before-property': 'error',
  51. 'object-curly-newline': ['error', {consistent: true}],
  52. 'object-curly-spacing': ['error', 'never'],
  53. quotes: ['error', 'single'],
  54. semi: ['error', 'always'],
  55. 'semi-spacing': ['error', {before: false, after: true}],
  56. 'space-before-blocks': ['error', 'always'],
  57. 'space-before-function-paren': [
  58. 'error',
  59. {
  60. anonymous: 'never',
  61. named: 'never',
  62. asyncArrow: 'always',
  63. },
  64. ],
  65. 'space-in-parens': ['error', 'never'],
  66. 'space-infix-ops': ['error', {int32Hint: false}],
  67. 'space-unary-ops': [2, {words: true, nonwords: false}],
  68. 'react/jsx-filename-extension': ['error'],
  69. 'react/jsx-indent': [1, 2],
  70. 'react/jsx-key': 1,
  71. 'react/jsx-no-comment-textnodes': 1,
  72. 'react/jsx-no-duplicate-props': 1,
  73. 'react/jsx-no-target-blank': 2,
  74. 'react/jsx-props-no-multi-spaces': 1,
  75. 'react/jsx-sort-props': 1,
  76. 'react/jsx-tag-spacing': ['warn', {beforeSelfClosing: true}],
  77. 'react/no-children-prop': 1,
  78. 'react/no-deprecated': 1,
  79. 'react/no-direct-mutation-state': 2,
  80. 'react/no-typos': 1,
  81. 'react/no-unknown-property': 1,
  82. 'react/prefer-stateless-function': 1,
  83. 'react/prop-types': 1,
  84. 'react/react-in-jsx-scope': 2,
  85. 'react/require-default-props': 1,
  86. 'react/require-render-return': 1,
  87. 'react/sort-comp': 1,
  88. 'react/jsx-wrap-multilines': [
  89. 1,
  90. {
  91. declaration: 'parens-new-line',
  92. assignment: 'parens-new-line',
  93. return: 'parens-new-line',
  94. arrow: 'parens-new-line',
  95. condition: 'parens-new-line',
  96. logical: 'parens-new-line',
  97. prop: 'parens-new-line',
  98. },
  99. ],
  100. },
  101. };