-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy path.eslintrc.js
More file actions
133 lines (124 loc) · 3.3 KB
/
.eslintrc.js
File metadata and controls
133 lines (124 loc) · 3.3 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
/**
* @type {ESLint.ConfigData}
*/
module.exports = {
extends: ['prettier'],
ignorePatterns: [
'**/lib/**',
'**/public/**',
// Enable dotfile linting
'!.*',
'node_modules',
'node_modules/.*'
],
overrides: [
{
files: ['**/*.{cjs,js,mjs}'],
extends: [
'eslint:recommended',
'plugin:import/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'],
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 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'
*/