UNPKG

2.82 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/require-valid-file-annotation': ['error', 'always'],
50
51 'import/no-unresolved': 'off',
52 'import/named': 'off',
53 'import/namespace': 'off',
54 'import/default': 'off'
55 })
56}
57
58if (getInstalledPackage('ava')) {
59 config.extends.push('plugin:ava/recommended')
60 config.plugins.push('ava')
61 Object.assign(config.rules, {
62 'ava/no-async-fn-without-await': 'off',
63 'ava/no-ignored-test-files': 'off',
64 'ava/use-test': 'off'
65 })
66}
67
68const reactVersion = getInstalledPackage('react')
69if (reactVersion) {
70 config.extends.push(
71 'plugin:react/recommended',
72 'standard-jsx',
73 'prettier/react'
74 )
75
76 Object.assign(config.settings, {
77 react: {
78 createClass: 'createReactClass',
79 pragma: 'React',
80 version: reactVersion
81 }
82 })
83
84 if (flowVersion) {
85 Object.assign(config.settings.react, { flowVersion })
86 }
87
88 Object.assign(config.rules, {
89 'class-methods-use-this': 'off',
90 'jsx-quotes': 'off',
91
92 'react/prop-types': 'off',
93
94 'react/jsx-handler-names': 'error',
95 'react/jsx-pascal-case': 'error',
96 'react/no-array-index-key': 'error',
97 'react/no-did-mount-set-state': 'error',
98 'react/no-did-update-set-state': 'error',
99 'react/no-redundant-should-component-update': 'error',
100 'react/no-typos': 'error',
101 'react/no-will-update-set-state': 'error',
102 'react/sort-comp': 'error',
103 'react/style-prop-object': 'error',
104 'react/void-dom-elements-no-children': 'error'
105 })
106}
107
108module.exports = config