.eslintrc.js 2.9 KB

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