-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
129 lines (119 loc) · 3.83 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
module.exports = {
extends: ['drupal'],
ignorePatterns: [
// Ignore generated files.
'dist/',
// Ignore TypeScript ".d.ts" files, which seem to confuse ESLint.
'*.d.ts',
// Use inverse matching (!) to NOT ignore the following files.
//
// ESLint normally ignores all hidden files, but some can and should be
// linted anyway.
'!.eslintrc.js',
'!.prettierrc.js',
'!.stylelintrc.js',
],
globals: {
once: 'readonly',
},
settings: {
react: {
version: 'detect',
},
},
rules: {
// Allow methods to be non-static even if they do not use `this`. Making a
// method static is a design choice as much as anything.
'class-methods-use-this': 'off',
// Allow an item to be exported by name even when it is the only item being
// exported. Making an item a default export is a design choice as much as
// anything.
'import/prefer-default-export': 'off',
// Some `else` statements that are not strictly necessary can nonetheless
// improve readability.
'no-else-return': 'off',
// Allow more than one class per file. Not all classes are reusable and
// creating separate files for non-reusable classes can be tedious,
// unnecessary, and even potentially confusing.
'max-classes-per-file': 'off',
// The `drupal` configuration uses ESLint to check whether code follows
// Prettier style. Turn that off. Real-time editor warnings about formatting
// can be very annoying and we run `prettier --check`, which accomplishes
// the same thing, as part of our front-end tests.
'prettier/prettier': 'off',
// Keep imports as well-organized as possible.
'import/order': [
'error',
{
groups: [
'builtin',
'external',
'internal',
'unknown',
'parent',
'sibling',
'index',
'object',
'type',
],
'newlines-between': 'always-and-inside-groups',
warnOnUnassignedImports: true,
},
],
},
overrides: [
// Configure settings for TypeScript files.
//
// We need to manually extend the `prettier` config last, even though the
// `drupal` config extends it, because the `airbnb-typescript/base` config
// sets rules which conflict with Prettier.
{
files: ['*.ts', '*.tsx'],
parserOptions: {
project: './tsconfig.json',
},
extends: ['airbnb-typescript/base', 'prettier'],
},
// Configure settings for JavaScript files that use React.
//
// We need to manually extend the `prettier` config last, even though the
// `drupal` config extends it, because the `airbnb/hooks` config sets rules
// which conflict with Prettier.
{
files: ['*.jsx'],
extends: ['airbnb/hooks', 'prettier'],
},
// Configure settings for TypeScript files that use React.
//
// We need to manually extend the `prettier` config last, even though the
// `drupal` config extends it, because the `airbnb-typescript` and
// `airbnb/hooks` configs set rules which conflict with Prettier.
{
files: ['*.tsx'],
extends: ['airbnb-typescript', 'airbnb/hooks', 'prettier'],
rules: {
// We use a version of React that supports fragments.
'react/jsx-fragments': 'off',
},
},
// Allow devDependencies to be imported in files with certain names.
//
// This configuration needs to be provided after the configuration for
// TypeScript files to override those rules.
{
files: [
'.eslintrc.{js,ts}',
'.prettierrc.{js,ts}',
'.stylelintrc.{js,ts}',
'cypress.config.{js,ts}',
'vite.config.{js,ts}',
],
rules: {
'import/no-extraneous-dependencies': [
'error',
{ devDependencies: true },
],
},
},
],
};