UNPKG

2.86 kBJavaScriptView Raw
1const getInstalledPackage = require('./getInstalledPackage')
2
3const config = {
4 extends: [
5 'plugin:import/recommended',
6 'standard',
7 'prettier',
8 'prettier/standard'
9 ],
10 plugins: ['import', 'prettier'],
11 settings: {
12 'import/resolver': {
13 [require.resolve('eslint-import-resolver-babel-module')]: {},
14 [require.resolve('eslint-import-resolver-package-name-import')]: {}
15 }
16 },
17 rules: {
18 'class-methods-use-this': 'error',
19 'object-shorthand': 'error',
20 'no-duplicate-imports': 'off',
21 'no-var': 'error',
22 'prefer-const': 'error',
23 'prefer-arrow-callback': 'error',
24 'prefer-template': 'error',
25 'prefer-reflect': 'error',
26 'prefer-rest-params': 'error',
27 'prefer-spread': 'error',
28 'no-param-reassign': 'error',
29
30 'import/no-named-as-default': 'off',
31 'import/unambiguous': 'off',
32
33 'node/no-deprecated-api': 'off',
34
35 'prettier/prettier': ['error', { semi: false, singleQuote: true }]
36 }
37}
38
39const flowVersion = getInstalledPackage('flow-bin')
40if (flowVersion) {
41 config.extends.push('plugin:flowtype/recommended', 'prettier/flowtype')
42
43 config.plugins.push('flowtype')
44
45 Object.assign(config.rules, {
46 'flowtype/no-dupe-keys': 'error',
47 'flowtype/no-primitive-constructor-types': 'error',
48 'flowtype/no-unused-expressions': 'error',
49 'flowtype/no-weak-types': 'error',
50 'flowtype/require-valid-file-annotation': ['error', 'always'],
51
52 'import/no-unresolved': 'off',
53 'import/named': 'off',
54 'import/namespace': 'off',
55 'import/default': 'off'
56 })
57}
58
59if (getInstalledPackage('ava')) {
60 config.extends.push('plugin:ava/recommended')
61 config.plugins.push('ava')
62 Object.assign(config.rules, {
63 'ava/no-async-fn-without-await': 'off',
64 'ava/no-ignored-test-files': 'off',
65 'ava/use-test': 'off'
66 })
67}
68
69const reactVersion = getInstalledPackage('react')
70if (reactVersion) {
71 config.extends.push(
72 'plugin:react/recommended',
73 'standard-jsx',
74 'prettier/react'
75 )
76
77 Object.assign(config.settings, {
78 react: {
79 createClass: 'createReactClass',
80 pragma: 'React',
81 version: reactVersion
82 }
83 })
84
85 if (flowVersion) {
86 Object.assign(config.settings.react, { flowVersion })
87 }
88
89 Object.assign(config.rules, {
90 'class-methods-use-this': 'off',
91 'jsx-quotes': 'off',
92
93 'react/prop-types': 'off',
94
95 'react/jsx-handler-names': 'error',
96 'react/jsx-pascal-case': 'error',
97 'react/no-array-index-key': 'error',
98 'react/no-did-mount-set-state': 'error',
99 'react/no-did-update-set-state': 'error',
100 'react/no-redundant-should-component-update': 'error',
101 'react/no-typos': 'error',
102 'react/no-will-update-set-state': 'error',
103 'react/sort-comp': 'error',
104 'react/style-prop-object': 'error',
105 'react/void-dom-elements-no-children': 'error'
106 })
107}
108
109module.exports = config