@aarongoldenthal/eslint-config-standard 21.0.0 → 22.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.js CHANGED
@@ -1,48 +1,149 @@
1
+ /* eslint-disable max-lines -- required given number of rules */
1
2
  'use strict';
2
3
 
3
- const tabSpaces = 4;
4
4
  const complexityThreshold = 20;
5
- const maxLinesThreshold = 300;
6
5
  const maxFunctionLinesThreshold = 30;
6
+ const maxLinesThreshold = 300;
7
+ const maxParametersThreshold = 4;
8
+ const maxStatementsPerLineThreshold = 1;
9
+ const maxStatementsThreshold = 50;
7
10
  const nestedThreshold = 5;
11
+ const tabSpaces = 4;
8
12
 
9
13
  module.exports = {
10
14
  env: {
11
15
  es2022: true,
12
16
  node: true
13
17
  },
14
- extends: ['eslint:recommended'],
18
+ overrides: [
19
+ {
20
+ files: [
21
+ // Patterns for jest-config
22
+ '**/__tests__/**/*.[jt]s?(x)',
23
+ '**/?(*.)+(spec|test).[jt]s?(x)',
24
+ // Pattern for playwright-config
25
+ '**/*.pwtest.[jt]s'
26
+ ],
27
+ rules: {
28
+ // Assuming 1 test file per module, it can exceed limit
29
+ 'max-lines': 'off',
30
+ // Describes are functions and frequently exceed limit
31
+ 'max-lines-per-function': 'off',
32
+ // Tests frequently use indices and counts
33
+ 'no-magic-numbers': 'off',
34
+ // Undefined is a common value to test no value
35
+ 'no-undefined': 'off',
36
+ // Tests frequently check array elements, destructuring is
37
+ // les intuitive
38
+ 'prefer-destructuring': 'off',
39
+ // Regexes in tests frequently check for match patterns, but
40
+ // groups are not captured
41
+ 'prefer-named-capture-group': 'off',
42
+ // Async tests frequently return promises, which the test
43
+ // runner awaits implicitly
44
+ 'require-await': 'off'
45
+ }
46
+ }
47
+ ],
15
48
  parserOptions: {
16
49
  ecmaVersion: 2022,
17
50
  sourceType: 'script'
18
51
  },
19
52
  reportUnusedDisableDirectives: true,
20
53
  rules: {
21
- 'array-bracket-spacing': 'error',
54
+ // Possible problems
22
55
  'array-callback-return': 'error',
23
- 'arrow-parens': ['error', 'always'],
24
- 'block-scoped-var': 1,
25
- 'block-spacing': 'error',
26
- 'brace-style': ['error', 'stroustrup'],
56
+ 'constructor-super': 'error', // Recommended
57
+ 'for-direction': 'error', // Recommended
58
+ 'getter-return': 'error', // Recommended
59
+ 'no-async-promise-executor': 'error', // Recommended
60
+ 'no-await-in-loop': 'error',
61
+ 'no-class-assign': 'error', // Recommended
62
+ 'no-compare-neg-zero': 'error', // Recommended
63
+ 'no-cond-assign': 'error', // Recommended
64
+ 'no-const-assign': 'error', // Recommended
65
+ 'no-constant-binary-expression': 'error',
66
+ 'no-constant-condition': 'error', // Recommended
67
+ 'no-constructor-return': 'error',
68
+ 'no-control-regex': 'error', // Recommended
69
+ 'no-debugger': 'error', // Recommended
70
+ 'no-dupe-args': 'error', // Recommended
71
+ 'no-dupe-class-members': 'error', // Recommended
72
+ 'no-dupe-else-if': 'error', // Recommended
73
+ 'no-dupe-keys': 'error', // Recommended
74
+ 'no-duplicate-case': 'error', // Recommended
75
+ 'no-duplicate-imports': 'error',
76
+ 'no-empty-character-class': 'error', // Recommended
77
+ 'no-empty-pattern': 'error', // Recommended
78
+ 'no-ex-assign': 'error', // Recommended
79
+ 'no-fallthrough': 'error', // Recommended
80
+ 'no-func-assign': 'error', // Recommended
81
+ 'no-import-assign': 'error', // Recommended
82
+ 'no-inner-declarations': 'error', // Recommended
83
+ 'no-invalid-regexp': 'error', // Recommended
84
+ 'no-irregular-whitespace': ['error', { skipStrings: true }], // Recommended
85
+ 'no-loss-of-precision': 'error', // Recommended
86
+ 'no-misleading-character-class': 'error', // Recommended
87
+ 'no-new-native-nonconstructor': 'error',
88
+ 'no-new-symbol': 'error', // Recommended
89
+ 'no-obj-calls': 'error', // Recommended
90
+ 'no-promise-executor-return': 'error',
91
+ 'no-prototype-builtins': 'error', // Recommended
92
+ 'no-self-assign': 'error', // Recommended
93
+ 'no-self-compare': 'error',
94
+ 'no-setter-return': 'error', // Recommended
95
+ 'no-sparse-arrays': 'error', // Recommended
96
+ 'no-template-curly-in-string': 'error',
97
+ 'no-this-before-super': 'error', // Recommended
98
+ 'no-undef': 'error', // Recommended
99
+ 'no-unexpected-multiline': 'error', // Recommended, Prettier
100
+ 'no-unmodified-loop-condition': 'error',
101
+ 'no-unreachable': 'error', // Recommended
102
+ 'no-unreachable-loop': 'error',
103
+ 'no-unsafe-finally': 'error', // Recommended
104
+ 'no-unsafe-negation': 'error', // Recommended
105
+ 'no-unsafe-optional-chaining': 'error', // Recommended
106
+ 'no-unused-private-class-members': 'error',
107
+ 'no-unused-vars': 'error', // Recommended
108
+ 'no-use-before-define': ['error', { functions: false }],
109
+ 'no-useless-backreference': 'error', // Recommended
110
+ 'require-atomic-updates': 'error',
111
+ 'use-isnan': 'error', // Recommended
112
+ 'valid-typeof': 'error', // Recommended
113
+
114
+ // Suggestions
115
+ // eslint-disable-next-line sort-keys -- match eslint docs
116
+ 'accessor-pairs': 'error',
117
+ 'arrow-body-style': ['error', 'as-needed'],
118
+ 'block-scoped-var': 'error',
27
119
  camelcase: 'error',
28
- 'comma-dangle': ['error', 'never'],
29
- 'comma-spacing': ['error', { before: false, after: true }],
120
+ 'capitalized-comments': [
121
+ 'error',
122
+ 'always',
123
+ { ignoreConsecutiveComments: true, ignorePattern: 'nosemgrep' }
124
+ ],
125
+ 'class-methods-use-this': 'error',
30
126
  complexity: ['error', complexityThreshold],
31
- 'computed-property-spacing': ['error', 'never'],
32
- curly: 'error',
127
+ 'consistent-return': 'error',
128
+ // Disabled due to 'unicorn/no-this-assignment
129
+ 'consistent-this': 'off',
130
+ curly: 'error', // Prettier
33
131
  'default-case': 'error',
34
132
  'default-case-last': 'error',
35
133
  'default-param-last': 'error',
36
- 'eol-last': ['error', 'always'],
134
+ 'dot-notation': ['error', { allowPattern: '^[a-z]+(_[a-z]+)+$' }],
37
135
  eqeqeq: ['error', 'always'],
38
- 'func-call-spacing': ['error', 'never'],
136
+ 'func-name-matching': 'off',
137
+ 'func-names': 'off',
138
+ 'func-style': ['error', 'declaration', { allowArrowFunctions: true }],
39
139
  'grouped-accessor-pairs': ['error', 'getBeforeSet'],
40
- indent: ['error', tabSpaces, { SwitchCase: 1 }],
41
- 'key-spacing': 'error',
42
- 'keyword-spacing': ['error', { before: true, after: true }],
43
- 'linebreak-style': ['error', 'unix'],
44
- 'lines-between-class-members': ['error', 'always'],
140
+ 'guard-for-in': 'error',
141
+ 'id-denylist': 'off',
142
+ 'id-length': 'off',
143
+ 'id-match': 'off',
144
+ 'init-declarations': 'off',
45
145
  'logical-assignment-operators': ['error', 'always'],
146
+ 'max-classes-per-file': ['error', 1],
46
147
  'max-depth': ['error', { max: nestedThreshold }],
47
148
  'max-lines': ['error', maxLinesThreshold],
48
149
  'max-lines-per-function': [
@@ -54,90 +155,207 @@ module.exports = {
54
155
  }
55
156
  ],
56
157
  'max-nested-callbacks': ['error', { max: nestedThreshold }],
57
- 'new-parens': 'error',
158
+ 'max-params': ['error', { max: maxParametersThreshold }],
159
+ 'max-statements': ['error', { max: maxStatementsThreshold }],
160
+ 'multiline-comment-style': ['error', 'separate-lines'],
161
+ 'new-cap': 'error',
58
162
  'no-alert': 'error',
59
163
  'no-array-constructor': 'error',
164
+ 'no-bitwise': 'error',
165
+ 'no-caller': 'error',
166
+ 'no-case-declarations': 'error', // Recommended
167
+ 'no-confusing-arrow': 'error', // Prettier
60
168
  'no-console': 'off',
61
- 'no-constant-binary-expression': 'error',
62
- 'no-constructor-return': 'error',
169
+ 'no-continue': 'error',
170
+ 'no-delete-var': 'error', // Recommended
63
171
  'no-div-regex': 'error',
64
- 'no-duplicate-imports': 'error',
65
172
  'no-else-return': 'error',
173
+ 'no-empty': 'error', // Recommended
174
+ 'no-empty-function': ['error', { allow: ['arrowFunctions'] }],
66
175
  'no-empty-static-block': 'error',
67
176
  'no-eq-null': 'error',
68
177
  'no-eval': 'error',
69
178
  'no-extend-native': 'error',
70
179
  'no-extra-bind': 'error',
180
+ 'no-extra-boolean-cast': 'error', // Recommended
181
+ 'no-extra-label': 'error',
182
+ 'no-extra-semi': 'error', // Recommended, Prettier
183
+ 'no-floating-decimal': 'error', // Prettier
184
+ 'no-global-assign': 'error', // Recommended
71
185
  'no-implicit-coercion': 'error',
72
186
  'no-implicit-globals': 'off',
73
187
  'no-implied-eval': 'error',
188
+ 'no-inline-comments': 'off',
189
+ 'no-invalid-this': 'error',
190
+ 'no-iterator': 'error',
191
+ 'no-label-var': 'error',
192
+ 'no-labels': 'error',
74
193
  'no-lone-blocks': 'error',
75
194
  'no-lonely-if': 'error',
76
195
  'no-loop-func': 'error',
77
196
  'no-magic-numbers': ['error', { ignore: [-1, 0, 1] }],
78
- 'no-mixed-spaces-and-tabs': 'error',
197
+ 'no-mixed-operators': 'error', // Prettier
79
198
  'no-multi-assign': 'error',
80
- 'no-multi-spaces': 'error',
81
199
  'no-multi-str': 'error',
200
+ // Disabled in favor of unicorn/no-negated-condition
201
+ 'no-negated-condition': 'off',
82
202
  // Disabled in favor of unicorn/no-nested-ternary
83
203
  'no-nested-ternary': 'off',
84
204
  'no-new': 'error',
85
205
  'no-new-func': 'error',
86
- 'no-new-native-nonconstructor': 'error',
87
206
  'no-new-object': 'error',
88
207
  'no-new-wrappers': 'error',
208
+ 'no-nonoctal-decimal-escape': 'error', // Recommended
209
+ 'no-octal': 'error', // Recommended
210
+ 'no-octal-escape': 'error',
89
211
  'no-param-reassign': ['error', { props: false }],
90
- 'no-promise-executor-return': 'error',
212
+ 'no-plusplus': 'off',
213
+ 'no-proto': 'error',
214
+ 'no-redeclare': 'error', // Recommended
215
+ 'no-regex-spaces': 'error', // Recommended
216
+ 'no-restricted-exports': 'off',
217
+ 'no-restricted-globals': 'off',
218
+ 'no-restricted-imports': 'off',
219
+ 'no-restricted-properties': 'off',
220
+ 'no-restricted-syntax': 'off',
91
221
  'no-return-assign': 'error',
92
222
  'no-return-await': 'error',
93
223
  'no-script-url': 'error',
94
- 'no-self-compare': 'error',
95
224
  'no-sequences': ['error', { allowInParentheses: false }],
96
225
  'no-shadow': 'error',
97
- 'no-template-curly-in-string': 'error',
226
+ 'no-shadow-restricted-names': 'error', // Recommended
227
+ 'no-ternary': 'off',
98
228
  'no-throw-literal': 'error',
99
- 'no-trailing-spaces': 'error',
229
+ 'no-undef-init': 'error',
230
+ // Disabled, too many valid positives
231
+ 'no-undefined': 'off',
100
232
  'no-underscore-dangle': 'error',
101
233
  'no-unneeded-ternary': 'error',
102
- 'no-unreachable-loop': 'error',
103
- 'no-use-before-define': ['error', { functions: false }],
234
+ 'no-unused-expressions': [
235
+ 'error',
236
+ { allowShortCircuit: true, allowTernary: true }
237
+ ],
238
+ 'no-unused-labels': 'error', // Recommended
239
+ 'no-useless-call': 'error',
240
+ 'no-useless-catch': 'error', // Recommended
241
+ 'no-useless-computed-key': 'error',
104
242
  'no-useless-concat': 'error',
105
243
  'no-useless-constructor': 'error',
244
+ 'no-useless-escape': 'error', // Recommended
245
+ 'no-useless-rename': 'error',
106
246
  'no-useless-return': 'error',
107
247
  'no-var': 'error',
108
- 'no-warning-comments': 'error',
109
- 'no-whitespace-before-property': 'error',
110
- 'object-curly-spacing': ['error', 'always'],
248
+ 'no-void': 'error',
249
+ 'no-warning-comments': [
250
+ 'error',
251
+ { terms: ['TODO', 'FIXME', 'HACK', 'XXX', 'BUG'] }
252
+ ],
253
+ 'no-with': 'error', // Recommended
111
254
  'object-shorthand': 'error',
255
+ 'one-var': 'off',
256
+ 'one-var-declaration-per-line': 'off', // Prettier
112
257
  'operator-assignment': 'error',
113
- 'padded-blocks': ['error', 'never'],
258
+ 'prefer-arrow-callback': 'error',
114
259
  'prefer-const': 'error',
115
260
  'prefer-destructuring': ['error', { array: true, object: true }],
261
+ 'prefer-exponentiation-operator': 'error',
262
+ 'prefer-named-capture-group': 'error',
263
+ 'prefer-numeric-literals': 'error',
264
+ 'prefer-object-has-own': 'error',
116
265
  'prefer-object-spread': ['error'],
117
266
  'prefer-promise-reject-errors': 'error',
118
267
  'prefer-regex-literals': 'error',
119
268
  'prefer-rest-params': 'error',
120
269
  'prefer-spread': 'error',
121
270
  'prefer-template': 'error',
122
- quotes: ['error', 'single'],
271
+ 'quote-props': 'off', // Prettier
272
+ radix: ['error', 'as-needed'],
123
273
  'require-await': 'error',
124
- 'rest-spread-spacing': 'error',
125
- 'semi-spacing': 'error',
126
- semi: ['error', 'always'],
127
- 'space-before-blocks': ['error', 'always'],
274
+ 'require-unicode-regexp': 'off',
275
+ 'require-yield': 'error', // Recommended
276
+ 'sort-imports': ['error', { allowSeparatedGroups: true }],
277
+ 'sort-keys': ['error', 'asc', { caseSensitive: true, natural: true }],
278
+ 'sort-vars': 'error',
279
+ 'spaced-comment': ['error', 'always'],
280
+ strict: 'error',
281
+ 'symbol-description': 'error',
282
+ // Disabled due to no-var
283
+ 'vars-on-top': 'off',
284
+ yoda: 'error',
285
+
286
+ // Layout & Formatting
287
+ // eslint-disable-next-line sort-keys -- match eslint docs
288
+ 'array-bracket-newline': 'off', // Prettier
289
+ 'array-bracket-spacing': 'off', // Prettier
290
+ 'array-element-newline': 'off', // Prettier
291
+ 'arrow-parens': ['error', 'always'], // Prettier
292
+ 'arrow-spacing': 'error', // Prettier
293
+ 'block-spacing': 'error', // Prettier
294
+ 'brace-style': ['error', 'stroustrup'], // Prettier
295
+ 'comma-dangle': ['error', 'never'], // Prettier
296
+ 'comma-spacing': ['error', { after: true, before: false }], // Prettier
297
+ 'comma-style': 'off', // Prettier
298
+ 'computed-property-spacing': ['error', 'never'], // Prettier
299
+ 'dot-location': ['error', 'property'], // Prettier
300
+ 'eol-last': ['error', 'always'], // Prettier
301
+ 'func-call-spacing': ['error', 'never'], // Prettier
302
+ 'function-call-argument-newline': 'off', // Prettier
303
+ 'function-paren-newline': 'off', // Prettier
304
+ 'generator-star-spacing': 'off', // Prettier
305
+ 'implicit-arrow-linebreak': 'off', // Prettier
306
+ indent: ['error', tabSpaces, { SwitchCase: 1 }], // Prettier
307
+ 'jsx-quotes': 'off', // Prettier
308
+ 'key-spacing': 'error', // Prettier
309
+ 'keyword-spacing': ['error', { after: true, before: true }], // Prettier
310
+ 'line-comment-position': 'off',
311
+ 'linebreak-style': ['error', 'unix'], // Prettier
312
+ 'lines-around-comment': 'off', // Prettier
313
+ 'lines-between-class-members': ['error', 'always'],
314
+ 'max-len': 'off', // Prettier
315
+ 'max-statements-per-line': [
316
+ 'error',
317
+ { max: maxStatementsPerLineThreshold }
318
+ ],
319
+ 'multiline-ternary': 'off', // Prettier
320
+ 'new-parens': 'error', // Prettier
321
+ 'newline-per-chained-call': 'off', // Prettier
322
+ 'no-extra-parens': 'off', // Prettier
323
+ 'no-mixed-spaces-and-tabs': 'error', // Recommended, Prettier
324
+ 'no-multi-spaces': 'error', // Prettier
325
+ 'no-multiple-empty-lines': 'off', // Prettier
326
+ 'no-tabs': 'off', // Prettier
327
+ 'no-trailing-spaces': 'error', // Prettier
328
+ 'no-whitespace-before-property': 'error', // Prettier
329
+ 'nonblock-statement-body-position': 'off', // Prettier
330
+ 'object-curly-newline': 'off', // Prettier
331
+ 'object-curly-spacing': ['error', 'always'], // Prettier
332
+ 'object-property-newline': 'off', // Prettier
333
+ 'operator-linebreak': 'off', // Prettier
334
+ 'padded-blocks': ['error', 'never'], // Prettier
335
+ 'padding-line-between-statements': 'off',
336
+ quotes: ['error', 'single'], // Prettier
337
+ 'rest-spread-spacing': 'error', // Prettier
338
+ semi: ['error', 'always'], // Prettier
339
+ 'semi-spacing': 'error', // Prettier
340
+ 'semi-style': ['error', 'last'], // Prettier
341
+ 'space-before-blocks': ['error', 'always'], // Prettier
128
342
  'space-before-function-paren': [
129
343
  'error',
130
344
  {
131
345
  anonymous: 'always',
132
- named: 'never',
133
- asyncArrow: 'always'
346
+ asyncArrow: 'always',
347
+ named: 'never'
134
348
  }
135
- ],
136
- 'space-in-parens': ['error', 'never'],
137
- 'spaced-comment': ['error', 'always'],
138
- strict: 'error',
139
- 'template-curly-spacing': 'error',
140
- 'wrap-iife': 'error',
141
- yoda: 'error'
349
+ ], // Prettier
350
+ 'space-in-parens': ['error', 'never'], // Prettier
351
+ 'space-infix-ops': 'off', // Prettier
352
+ 'space-unary-ops': 'off', // Prettier
353
+ 'switch-colon-spacing': 'off', // Prettier
354
+ 'template-curly-spacing': 'error', // Prettier
355
+ 'template-tag-spacing': 'off', // Prettier
356
+ 'unicode-bom': 'off', // Prettier
357
+ 'wrap-iife': 'error', // Prettier
358
+ 'wrap-regex': 'off', // Prettier
359
+ 'yield-star-spacing': 'off' // Prettier
142
360
  }
143
361
  };
package/jest-config.js CHANGED
@@ -3,13 +3,13 @@
3
3
  module.exports = {
4
4
  overrides: [
5
5
  {
6
+ env: {
7
+ jest: true
8
+ },
6
9
  files: [
7
10
  '**/__tests__/**/*.[jt]s?(x)',
8
11
  '**/?(*.)+(spec|test).[jt]s?(x)'
9
12
  ],
10
- env: {
11
- jest: true
12
- },
13
13
  plugins: ['jest'],
14
14
  rules: {
15
15
  'jest/consistent-test-it': [
@@ -38,21 +38,22 @@ module.exports = {
38
38
  'jest/no-restricted-matchers': [
39
39
  'error',
40
40
  {
41
- toBeTruthy: 'Avoid `toBeTruthy`',
41
+ 'not.toBeFalsy': 'Avoid `not.toBeFalsy`',
42
42
  'not.toBeTruthy': 'Avoid `not.toBeTruthy`',
43
- 'resolves.toBeTruthy': 'Avoid `resolves.toBeTruthy`',
44
- 'rejects.toBeTruthy': 'Avoid `rejects.toBeTruthy`',
45
- 'resolves.not.toBeTruthy':
46
- 'Avoid `resolves.not.toBeTruthy`',
43
+ 'rejects.not.toBeFalsy':
44
+ 'Avoid `rejects.not.toBeFalsy`',
47
45
  'rejects.not.toBeTruthy':
48
46
  'Avoid `rejects.not.toBeTruthy`',
49
- toBeFalsy: 'Avoid `toBeFalsy`',
50
- 'not.toBeFalsy': 'Avoid `not.toBeFalsy`',
51
- 'resolves.toBeFalsy': 'Avoid `resolves.toBeFalsy`',
52
47
  'rejects.toBeFalsy': 'Avoid `rejects.toBeFalsy`',
48
+ 'rejects.toBeTruthy': 'Avoid `rejects.toBeTruthy`',
53
49
  'resolves.not.toBeFalsy':
54
50
  'Avoid `resolves.not.toBeFalsy`',
55
- 'rejects.not.toBeFalsy': 'Avoid `rejects.not.toBeFalsy`'
51
+ 'resolves.not.toBeTruthy':
52
+ 'Avoid `resolves.not.toBeTruthy`',
53
+ 'resolves.toBeFalsy': 'Avoid `resolves.toBeFalsy`',
54
+ 'resolves.toBeTruthy': 'Avoid `resolves.toBeTruthy`',
55
+ toBeFalsy: 'Avoid `toBeFalsy`',
56
+ toBeTruthy: 'Avoid `toBeTruthy`'
56
57
  }
57
58
  ],
58
59
  'jest/no-standalone-expect': 'error',
package/jsdoc-config.js CHANGED
@@ -38,8 +38,8 @@ module.exports = {
38
38
  'jsdoc/informative-docs': 'error',
39
39
  'jsdoc/match-description': 'error',
40
40
  'jsdoc/multiline-blocks': 'error', // Recommended
41
- 'jsdoc/newline-after-description': 'error', // Recommended
42
41
  'jsdoc/no-bad-blocks': 'error',
42
+ 'jsdoc/no-blank-blocks': 'error',
43
43
  'jsdoc/no-defaults': 'off',
44
44
  'jsdoc/no-missing-syntax': 'off',
45
45
  'jsdoc/no-multi-asterisks': 'error', // Recommended
@@ -47,8 +47,8 @@ module.exports = {
47
47
  'jsdoc/no-types': 'off',
48
48
  'jsdoc/no-undefined-types': 'error', // Recommended
49
49
  'jsdoc/require-asterisk-prefix': 'error',
50
- 'jsdoc/require-description-complete-sentence': 'error',
51
50
  'jsdoc/require-description': 'error',
51
+ 'jsdoc/require-description-complete-sentence': 'error',
52
52
  'jsdoc/require-example': 'off',
53
53
  'jsdoc/require-file-overview': 'off',
54
54
  'jsdoc/require-hyphen-before-param-description': ['error', 'never'],
@@ -65,23 +65,28 @@ module.exports = {
65
65
  }
66
66
  }
67
67
  ], // Recommended
68
+ 'jsdoc/require-param': 'error', // Recommended
68
69
  'jsdoc/require-param-description': 'error', // Recommended
69
70
  'jsdoc/require-param-name': 'error', // Recommended
70
71
  'jsdoc/require-param-type': 'error', // Recommended
71
- 'jsdoc/require-param': 'error', // Recommended
72
72
  'jsdoc/require-property': 'error', // Recommended
73
73
  'jsdoc/require-property-description': 'error', // Recommended
74
74
  'jsdoc/require-property-name': 'error', // Recommended
75
75
  'jsdoc/require-property-type': 'error', // Recommended
76
+ 'jsdoc/require-returns': 'error', // Recommended
76
77
  'jsdoc/require-returns-check': 'error', // Recommended
77
78
  'jsdoc/require-returns-description': 'error', // Recommended
78
79
  'jsdoc/require-returns-type': 'error', // Recommended
79
- 'jsdoc/require-returns': 'error', // Recommended
80
- 'jsdoc/require-throws': 'error', // Recommended
80
+ 'jsdoc/require-throws': 'error',
81
81
  'jsdoc/require-yields': 'error', // Recommended
82
82
  'jsdoc/require-yields-check': 'error', // Recommended
83
83
  'jsdoc/sort-tags': 'error',
84
- 'jsdoc/tag-lines': 'error', // Recommended
84
+ 'jsdoc/tag-lines': [
85
+ // Recommended
86
+ 'error',
87
+ 'never',
88
+ { applyToEndTag: false, startLines: 1 }
89
+ ],
85
90
  'jsdoc/valid-types': 'error' // Recommended
86
91
  }
87
92
  };
package/node-config.js CHANGED
@@ -37,8 +37,8 @@ module.exports = {
37
37
  'n/prefer-global/process': ['error', 'always'],
38
38
  'n/prefer-global/text-decoder': ['error', 'always'],
39
39
  'n/prefer-global/text-encoder': ['error', 'always'],
40
- 'n/prefer-global/url-search-params': ['error', 'always'],
41
40
  'n/prefer-global/url': ['error', 'always'],
41
+ 'n/prefer-global/url-search-params': ['error', 'always'],
42
42
  'n/prefer-promises/dns': 'error',
43
43
  'n/prefer-promises/fs': 'error',
44
44
  'n/process-exit-as-throw': 'error',
package/package.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "@aarongoldenthal/eslint-config-standard",
3
- "version": "21.0.0",
3
+ "version": "22.1.0",
4
4
  "description": "Standard ESLint configuration settings",
5
5
  "main": "index.js",
6
6
  "scripts": {
7
7
  "hooks-pre-commit": "npm run lint && npm run prettier-check",
8
8
  "hooks-pre-push": "npm audit --audit-level=high && npm test",
9
9
  "lint": "npm run lint-js && npm run lint-md",
10
- "lint-js": "eslint \"**/*.js\"",
11
- "lint-md": "markdownlint **/*.md --ignore node_modules",
10
+ "lint-js": "eslint .",
11
+ "lint-md": "markdownlint-cli2 \"**/*.md\" \"#node_modules\"",
12
12
  "prettier-check": "prettier --check --ignore-path=.gitignore .",
13
13
  "prettier-fix": "prettier --write --ignore-path=.gitignore .",
14
14
  "test": "jest --ci"
@@ -23,7 +23,7 @@
23
23
  "author": "Aaron Goldenthal <npm@aarongoldenthal.com>",
24
24
  "license": "MIT",
25
25
  "engines": {
26
- "node": "^14.15.0 || ^16.13.0 || >=18.0.0"
26
+ "node": "^16.13.0 || ^18.12.0 || >=20.0.0"
27
27
  },
28
28
  "files": [
29
29
  "index.js",
@@ -38,19 +38,19 @@
38
38
  "@eslint-community/eslint-plugin-eslint-comments": "3.2.1",
39
39
  "eslint-config-prettier": "8.8.0",
40
40
  "eslint-plugin-jest": "27.2.1",
41
- "eslint-plugin-jsdoc": "41.1.1",
42
- "eslint-plugin-n": "15.7.0",
41
+ "eslint-plugin-jsdoc": "44.2.5",
42
+ "eslint-plugin-n": "16.0.0",
43
43
  "eslint-plugin-playwright": "0.12.0",
44
44
  "eslint-plugin-promise": "6.1.1",
45
45
  "eslint-plugin-sonarjs": "0.19.0",
46
- "eslint-plugin-unicorn": "46.0.0"
46
+ "eslint-plugin-unicorn": "47.0.0"
47
47
  },
48
48
  "devDependencies": {
49
- "eslint": "^8.38.0",
49
+ "eslint": "^8.41.0",
50
50
  "jest": "^29.5.0",
51
- "jest-junit": "^15.0.0",
52
- "markdownlint-cli": "^0.33.0",
53
- "prettier": "^2.8.7"
51
+ "jest-junit": "^16.0.0",
52
+ "markdownlint-cli2": "^0.7.1",
53
+ "prettier": "^2.8.8"
54
54
  },
55
55
  "peerDependencies": {
56
56
  "eslint": "^8.27.0"
@@ -3,11 +3,11 @@
3
3
  module.exports = {
4
4
  overrides: [
5
5
  {
6
- files: ['**/*.pwtest.[jt]s'],
7
- plugins: ['playwright'],
8
6
  env: {
9
7
  'shared-node-browser': true
10
8
  },
9
+ files: ['**/*.pwtest.[jt]s'],
10
+ plugins: ['playwright'],
11
11
  rules: {
12
12
  'playwright/max-nested-describe': 'error',
13
13
  'playwright/missing-playwright-await': 'error',
package/promise-config.js CHANGED
@@ -16,7 +16,7 @@ module.exports = {
16
16
  'promise/no-return-wrap': 'error',
17
17
  'promise/param-names': [
18
18
  'error',
19
- { resolvePattern: '^resolve$', rejectPattern: '^reject$' }
19
+ { rejectPattern: '^reject$', resolvePattern: '^resolve$' }
20
20
  ],
21
21
  'promise/prefer-await-to-callbacks': 'error',
22
22
  'promise/prefer-await-to-then': 'error',
package/unicorn-config.js CHANGED
@@ -1,107 +1,118 @@
1
1
  'use strict';
2
2
 
3
3
  module.exports = {
4
+ overrides: [
5
+ {
6
+ files: ['*.test.js'],
7
+ rules: {
8
+ // Tests utility functions are more readable when they are
9
+ // nested with the tests
10
+ 'unicorn/consistent-function-scoping': 'off'
11
+ }
12
+ }
13
+ ],
4
14
  plugins: ['unicorn'],
5
15
  rules: {
6
- 'unicorn/better-regex': 'error',
7
- 'unicorn/catch-error-name': 'error',
8
- 'unicorn/consistent-destructuring': 'error',
9
- 'unicorn/consistent-function-scoping': 'error',
16
+ 'unicorn/better-regex': 'error', // Recommended
17
+ 'unicorn/catch-error-name': 'error', // Recommended
18
+ 'unicorn/consistent-destructuring': 'error', // Recommended
19
+ 'unicorn/consistent-function-scoping': 'error', // Recommended
10
20
  'unicorn/custom-error-definition': 'error',
11
- 'unicorn/empty-brace-spaces': 'off',
12
- 'unicorn/error-message': 'error',
13
- 'unicorn/escape-case': 'error',
14
- 'unicorn/expiring-todo-comments': 'off',
15
- 'unicorn/explicit-length-check': 'error',
16
- 'unicorn/filename-case': ['error', { case: 'kebabCase' }],
17
- 'unicorn/import-style': 'off',
18
- 'unicorn/new-for-builtins': 'error',
19
- 'unicorn/no-abusive-eslint-disable': 'error',
20
- 'unicorn/no-array-callback-reference': 'error',
21
- 'unicorn/no-array-for-each': 'error',
22
- 'unicorn/no-array-method-this-argument': 'off',
23
- 'unicorn/no-array-push-push': 'error',
24
- 'unicorn/no-array-reduce': 'error',
25
- 'unicorn/no-await-expression-member': 'error',
26
- 'unicorn/no-console-spaces': 'error',
27
- 'unicorn/no-document-cookie': 'error',
28
- 'unicorn/no-empty-file': 'error',
29
- 'unicorn/no-for-loop': 'error',
30
- 'unicorn/no-hex-escape': 'error',
31
- 'unicorn/no-instanceof-array': 'error',
32
- 'unicorn/no-invalid-remove-event-listener': 'error',
33
- 'unicorn/no-keyword-prefix': 'off',
34
- 'unicorn/no-lonely-if': 'error',
35
- 'unicorn/no-negated-condition': 'error',
36
- 'unicorn/no-nested-ternary': 'error',
37
- 'unicorn/no-new-array': 'error',
38
- 'unicorn/no-new-buffer': 'off',
39
- 'unicorn/no-null': 'error',
40
- 'unicorn/no-object-as-default-parameter': 'error',
41
- 'unicorn/no-process-exit': 'error',
42
- 'unicorn/no-static-only-class': 'error',
43
- 'unicorn/no-thenable': 'error',
44
- 'unicorn/no-this-assignment': 'error',
45
- 'unicorn/no-typeof-undefined': 'error',
46
- 'unicorn/no-unnecessary-await': 'error',
47
- 'unicorn/no-unreadable-array-destructuring': 'error',
48
- 'unicorn/no-unreadable-iife': 'error',
21
+ 'unicorn/empty-brace-spaces': 'off', // Recommended, Prettier
22
+ 'unicorn/error-message': 'error', // Recommended
23
+ 'unicorn/escape-case': 'error', // Recommended
24
+ 'unicorn/expiring-todo-comments': 'off', // Recommended
25
+ 'unicorn/explicit-length-check': 'error', // Recommended
26
+ 'unicorn/filename-case': ['error', { case: 'kebabCase' }], // Recommended
27
+ 'unicorn/import-style': 'off', // Recommended
28
+ 'unicorn/new-for-builtins': 'error', // Recommended
29
+ 'unicorn/no-abusive-eslint-disable': 'error', // Recommended
30
+ 'unicorn/no-array-callback-reference': 'error', // Recommended
31
+ 'unicorn/no-array-for-each': 'error', // Recommended
32
+ 'unicorn/no-array-method-this-argument': 'off', // Recommended
33
+ 'unicorn/no-array-push-push': 'error', // Recommended
34
+ 'unicorn/no-array-reduce': 'error', // Recommended
35
+ 'unicorn/no-await-expression-member': 'error', // Recommended
36
+ 'unicorn/no-console-spaces': 'error', // Recommended
37
+ 'unicorn/no-document-cookie': 'error', // Recommended
38
+ 'unicorn/no-empty-file': 'error', // Recommended
39
+ 'unicorn/no-for-loop': 'error', // Recommended
40
+ 'unicorn/no-hex-escape': 'error', // Recommended
41
+ 'unicorn/no-instanceof-array': 'error', // Recommended
42
+ 'unicorn/no-invalid-remove-event-listener': 'error', // Recommended
43
+ 'unicorn/no-keyword-prefix': 'off', // Recommended
44
+ 'unicorn/no-lonely-if': 'error', // Recommended
45
+ 'unicorn/no-negated-condition': 'error', // Recommended
46
+ 'unicorn/no-nested-ternary': 'error', // Recommended, Prettier
47
+ 'unicorn/no-new-array': 'error', // Recommended
48
+ 'unicorn/no-new-buffer': 'off', // Recommended
49
+ 'unicorn/no-null': 'error', // Recommended
50
+ 'unicorn/no-object-as-default-parameter': 'error', // Recommended
51
+ 'unicorn/no-process-exit': 'error', // Recommended
52
+ 'unicorn/no-static-only-class': 'error', // Recommended
53
+ 'unicorn/no-thenable': 'error', // Recommended
54
+ 'unicorn/no-this-assignment': 'error', // Recommended
55
+ 'unicorn/no-typeof-undefined': 'error', // Recommended
56
+ 'unicorn/no-unnecessary-await': 'error', // Recommended
57
+ 'unicorn/no-unreadable-array-destructuring': 'error', // Recommended
58
+ 'unicorn/no-unreadable-iife': 'error', // Recommended
49
59
  'unicorn/no-unsafe-regex': 'error',
50
60
  'unicorn/no-unused-properties': 'error',
51
- 'unicorn/no-useless-fallback-in-spread': 'error',
52
- 'unicorn/no-useless-length-check': 'error',
53
- 'unicorn/no-useless-promise-resolve-reject': 'error',
54
- 'unicorn/no-useless-spread': 'error',
55
- 'unicorn/no-useless-switch-case': 'error',
56
- 'unicorn/no-useless-undefined': 'error',
57
- 'unicorn/no-zero-fractions': 'error',
58
- 'unicorn/number-literal-case': 'error',
59
- 'unicorn/numeric-separators-style': 'error',
60
- 'unicorn/prefer-add-event-listener': 'error',
61
- 'unicorn/prefer-array-find': 'error',
62
- 'unicorn/prefer-array-flat': 'error',
63
- 'unicorn/prefer-array-flat-map': 'error',
64
- 'unicorn/prefer-array-index-of': 'error',
65
- 'unicorn/prefer-array-some': 'error',
66
- 'unicorn/prefer-at': 'off',
67
- 'unicorn/prefer-code-point': 'error',
68
- 'unicorn/prefer-date-now': 'error',
69
- 'unicorn/prefer-default-parameters': 'error',
70
- 'unicorn/prefer-dom-node-append': 'error',
71
- 'unicorn/prefer-dom-node-dataset': 'error',
72
- 'unicorn/prefer-dom-node-remove': 'error',
73
- 'unicorn/prefer-dom-node-text-content': 'error',
74
- 'unicorn/prefer-event-target': 'off',
75
- 'unicorn/prefer-export-from': 'off',
76
- 'unicorn/prefer-includes': 'error',
61
+ 'unicorn/no-useless-fallback-in-spread': 'error', // Recommended
62
+ 'unicorn/no-useless-length-check': 'error', // Recommended
63
+ 'unicorn/no-useless-promise-resolve-reject': 'error', // Recommended
64
+ 'unicorn/no-useless-spread': 'error', // Recommended
65
+ 'unicorn/no-useless-switch-case': 'error', // Recommended
66
+ 'unicorn/no-useless-undefined': 'error', // Recommended
67
+ 'unicorn/no-zero-fractions': 'error', // Recommended
68
+ 'unicorn/number-literal-case': 'error', // Prettier // Recommended
69
+ 'unicorn/numeric-separators-style': 'error', // Recommended
70
+ 'unicorn/prefer-add-event-listener': 'error', // Recommended
71
+ 'unicorn/prefer-array-find': 'error', // Recommended
72
+ 'unicorn/prefer-array-flat': 'error', // Recommended
73
+ 'unicorn/prefer-array-flat-map': 'error', // Recommended
74
+ 'unicorn/prefer-array-index-of': 'error', // Recommended
75
+ 'unicorn/prefer-array-some': 'error', // Recommended
76
+ 'unicorn/prefer-at': 'error', // Recommended
77
+ 'unicorn/prefer-blob-reading-methods': 'error', // Recommended
78
+ 'unicorn/prefer-code-point': 'error', // Recommended
79
+ 'unicorn/prefer-date-now': 'error', // Recommended
80
+ 'unicorn/prefer-default-parameters': 'error', // Recommended
81
+ 'unicorn/prefer-dom-node-append': 'error', // Recommended
82
+ 'unicorn/prefer-dom-node-dataset': 'error', // Recommended
83
+ 'unicorn/prefer-dom-node-remove': 'error', // Recommended
84
+ 'unicorn/prefer-dom-node-text-content': 'error', // Recommended
85
+ 'unicorn/prefer-event-target': 'error', // Recommended
86
+ 'unicorn/prefer-export-from': 'off', // Recommended
87
+ 'unicorn/prefer-includes': 'error', // Recommended
77
88
  'unicorn/prefer-json-parse-buffer': 'off',
78
- 'unicorn/prefer-keyboard-event-key': 'error',
79
- 'unicorn/prefer-logical-operator-over-ternary': 'error',
80
- 'unicorn/prefer-math-trunc': 'off',
81
- 'unicorn/prefer-modern-dom-apis': 'error',
82
- 'unicorn/prefer-modern-math-apis': 'error',
83
- 'unicorn/prefer-module': 'off',
84
- 'unicorn/prefer-native-coercion-functions': 'error',
85
- 'unicorn/prefer-negative-index': 'error',
86
- 'unicorn/prefer-node-protocol': 'off',
87
- 'unicorn/prefer-number-properties': 'error',
88
- 'unicorn/prefer-object-from-entries': 'off',
89
- 'unicorn/prefer-optional-catch-binding': 'error',
90
- 'unicorn/prefer-prototype-methods': 'off',
91
- 'unicorn/prefer-query-selector': 'error',
92
- 'unicorn/prefer-reflect-apply': 'off',
93
- 'unicorn/prefer-regexp-test': 'error',
94
- 'unicorn/prefer-set-has': 'error',
95
- 'unicorn/prefer-set-size': 'error',
96
- 'unicorn/prefer-spread': 'error',
97
- 'unicorn/prefer-string-replace-all': 'off',
98
- 'unicorn/prefer-string-slice': 'error',
99
- 'unicorn/prefer-string-starts-ends-with': 'error',
100
- 'unicorn/prefer-string-trim-start-end': 'error',
101
- 'unicorn/prefer-switch': 'error',
102
- 'unicorn/prefer-ternary': 'error',
103
- 'unicorn/prefer-top-level-await': 'off',
104
- 'unicorn/prefer-type-error': 'error',
89
+ 'unicorn/prefer-keyboard-event-key': 'error', // Recommended
90
+ 'unicorn/prefer-logical-operator-over-ternary': 'error', // Recommended
91
+ 'unicorn/prefer-math-trunc': 'off', // Recommended
92
+ 'unicorn/prefer-modern-dom-apis': 'error', // Recommended
93
+ 'unicorn/prefer-modern-math-apis': 'error', // Recommended
94
+ 'unicorn/prefer-module': 'off', // Recommended
95
+ 'unicorn/prefer-native-coercion-functions': 'error', // Recommended
96
+ 'unicorn/prefer-negative-index': 'error', // Recommended
97
+ 'unicorn/prefer-node-protocol': 'off', // Recommended
98
+ 'unicorn/prefer-number-properties': 'error', // Recommended
99
+ 'unicorn/prefer-object-from-entries': 'off', // Recommended
100
+ 'unicorn/prefer-optional-catch-binding': 'error', // Recommended
101
+ 'unicorn/prefer-prototype-methods': 'off', // Recommended
102
+ 'unicorn/prefer-query-selector': 'error', // Recommended
103
+ 'unicorn/prefer-reflect-apply': 'off', // Recommended
104
+ 'unicorn/prefer-regexp-test': 'error', // Recommended
105
+ 'unicorn/prefer-set-has': 'error', // Recommended
106
+ 'unicorn/prefer-set-size': 'error', // Recommended
107
+ 'unicorn/prefer-spread': 'error', // Recommended
108
+ 'unicorn/prefer-string-replace-all': 'error', // Recommended
109
+ 'unicorn/prefer-string-slice': 'error', // Recommended
110
+ 'unicorn/prefer-string-starts-ends-with': 'error', // Recommended
111
+ 'unicorn/prefer-string-trim-start-end': 'error', // Recommended
112
+ 'unicorn/prefer-switch': 'error', // Recommended
113
+ 'unicorn/prefer-ternary': 'error', // Recommended
114
+ 'unicorn/prefer-top-level-await': 'off', // Recommended
115
+ 'unicorn/prefer-type-error': 'error', // Recommended
105
116
  'unicorn/prevent-abbreviations': [
106
117
  'error',
107
118
  {
@@ -112,23 +123,15 @@ module.exports = {
112
123
  pkg: true
113
124
  }
114
125
  }
115
- ],
116
- 'unicorn/relative-url-style': 'error',
117
- 'unicorn/require-array-join-separator': 'error',
118
- 'unicorn/require-number-to-fixed-digits-argument': 'error',
126
+ ], // Recommended
127
+ 'unicorn/relative-url-style': 'error', // Recommended
128
+ 'unicorn/require-array-join-separator': 'error', // Recommended
129
+ 'unicorn/require-number-to-fixed-digits-argument': 'error', // Recommended
119
130
  'unicorn/require-post-message-target-origin': 'off',
120
131
  'unicorn/string-content': 'off',
121
- 'unicorn/switch-case-braces': ['error', 'always'],
122
- 'unicorn/template-indent': 'off',
123
- 'unicorn/text-encoding-identifier-case': 'error',
124
- 'unicorn/throw-new-error': 'error'
125
- },
126
- overrides: [
127
- {
128
- files: ['*.test.js'],
129
- rules: {
130
- 'unicorn/consistent-function-scoping': 'off'
131
- }
132
- }
133
- ]
132
+ 'unicorn/switch-case-braces': ['error', 'always'], // Recommended
133
+ 'unicorn/template-indent': 'off', // Recommended
134
+ 'unicorn/text-encoding-identifier-case': 'error', // Recommended
135
+ 'unicorn/throw-new-error': 'error' // Recommended
136
+ }
134
137
  };