-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy path.eslintrc.js
More file actions
155 lines (145 loc) · 3.74 KB
/
.eslintrc.js
File metadata and controls
155 lines (145 loc) · 3.74 KB
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
/**
* @type {ESLint.ConfigData}
*/
module.exports = {
extends: ['prettier'],
ignorePatterns: [
'**/app/**',
'**/public/**',
// Enable dotfile linting
'!.*',
'node_modules',
'node_modules/.*',
// Prevent CHANGELOG history changes
'CHANGELOG.md'
],
overrides: [
{
files: ['**/*.{cjs,js,mjs}'],
extends: [
'eslint:recommended',
'plugin:import/recommended',
'plugin:jest/style',
'plugin:jest-dom/recommended',
'plugin:jsdoc/recommended-typescript-flavor',
'plugin:n/recommended',
'plugin:promise/recommended',
'plugin:@typescript-eslint/strict',
'plugin:@typescript-eslint/stylistic',
'prettier'
],
parser: '@typescript-eslint/parser',
parserOptions: {
ecmaVersion: 'latest'
},
plugins: [
'@typescript-eslint',
'import',
'jsdoc',
'n',
'promise',
'jest',
'jest-dom'
],
rules: {
// Always import Node.js packages from `node:*`
'import/enforce-node-protocol-usage': ['error', 'always'],
// Check import or require statements are A-Z ordered
'import/order': [
'error',
{
'alphabetize': { order: 'asc' },
'newlines-between': 'always'
}
],
// Check for valid formatting
'jsdoc/check-line-alignment': [
'warn',
'never',
{
wrapIndent: ' '
}
],
// JSDoc blocks are optional by default
'jsdoc/require-jsdoc': 'off',
// Require hyphens before param description
// Aligns with TSDoc style: https://tsdoc.org/pages/tags/param/
'jsdoc/require-hyphen-before-param-description': 'warn',
// JSDoc @param required in (optional) blocks but
// @param description is not necessary by default
'jsdoc/require-param-description': 'off',
'jsdoc/require-param-type': 'error',
'jsdoc/require-param': 'off',
// JSDoc @returns is optional
'jsdoc/require-returns-description': 'off',
'jsdoc/require-returns-type': 'off',
'jsdoc/require-returns': 'off',
// Maintain new line after description
'jsdoc/tag-lines': [
'warn',
'never',
{
startLines: 1
}
]
},
settings: {
jsdoc: {
// Allows us to use type declarations that exist in our dependencies
mode: 'typescript'
}
}
},
{
// CommonJS modules allow require statements
files: ['**/*.{cjs,js}'],
rules: {
'@typescript-eslint/no-require-imports': 'off',
'@typescript-eslint/no-var-requires': 'off'
}
},
{
// ES modules mandatory file extensions
files: ['**/*.mjs'],
rules: {
'import/extensions': [
'error',
'always',
{
ignorePackages: true,
pattern: {
cjs: 'always',
js: 'always',
mjs: 'always'
}
}
]
}
},
{
// Configure ESLint in test files
files: ['**/*.test.{cjs,js,mjs}'],
extends: ['plugin:jest/recommended', 'plugin:jest/style'],
env: {
'jest/globals': true
},
plugins: ['jest']
},
{
// Configure ESLint in browser JavaScript
files: ['app/assets/**/*.{cjs,js,mjs}'],
excludedFiles: ['app/assets/**/*.test.{cjs,js,mjs}'],
env: {
browser: true
},
parserOptions: {
// Note: Allow ES2015 for import/export syntax
ecmaVersion: '2015'
}
}
],
root: true
}
/**
* @import { ESLint } from 'eslint'
*/