@book000/eslint-config 1.15.44 → 1.16.1

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.
Files changed (3) hide show
  1. package/index.mjs +333 -13
  2. package/package.json +1 -1
  3. package/test.mjs +14 -2
package/index.mjs CHANGED
@@ -9,8 +9,339 @@ export default tseslint.config(
9
9
  // Standard JS のルールセット(スタイル系は prettier に委ねるため無効化)
10
10
  ...neostandard({ noStyle: true }),
11
11
  ...tseslint.configs.recommended,
12
- // @ts-expect-error flat/recommendedの返すpluginsがstring[]なことでエラーになるため
13
- unicorn.configs["flat/recommended"],
12
+ {
13
+ // eslint-plugin-unicorn のルールを flat/recommended に頼らず明示的に列挙する。
14
+ // 理由: flat/recommended は unicorn のバージョンアップごとに収録ルールが
15
+ // 無断で増減し、本パッケージに依存する多数のプロジェクトへ一斉に
16
+ // 新規エラーが波及するリスクがあるため。新しいルールを取り込む場合は
17
+ // このリストへ明示的に追記すること(unicorn の CHANGELOG を確認して判断する)。
18
+ //
19
+ // 生成方法: eslint-plugin-unicorn (現在インストールされている 71.1.0) の
20
+ // flat/recommended が定義するルール一覧を元に、以下を除外・調整して作成した。
21
+ // - deprecated ルールは対象外
22
+ // - catch-error-name, filename-case はオプション付きで設定するため、
23
+ // 下記の専用ブロックに記載し、ここでは省略する
24
+ // - 意図的に off とするルール(下記コメント参照)
25
+ //
26
+ // 注意: このリストは eslint-plugin-unicorn の特定バージョン (71.1.0) 時点の
27
+ // flat/recommended を元に生成した固定スナップショットである。unicorn を
28
+ // アップデートする際は、追加・削除・改名されたルールが無いか CHANGELOG を
29
+ // 確認し、このリストへ反映すること。反映を怠ると、削除・改名されたルール ID
30
+ // を参照したままとなり、ESLint の設定検証エラーで全ユーザーがクラッシュする
31
+ // おそれがある。
32
+ plugins: { unicorn },
33
+ rules: {
34
+ // 集約処理のイディオムとして正当な用途が多く、for ループへの
35
+ // 書き換え強制がかえって可読性を落とすため無効化する
36
+ "unicorn/no-array-reduce": "off",
37
+ // クロージャで意図的に外側スコープの変数を捕捉する関数まで
38
+ // 最上位への移動を要求し、誤検知が多いため無効化する
39
+ "unicorn/consistent-function-scoping": "off",
40
+ // トップレベル await を許可する(IIFE 併用の CLI ツール等のため)
41
+ "unicorn/prefer-top-level-await": "off",
42
+ // 省略形を許可する (dev -> development, prod -> production などの変換をさせない)
43
+ "unicorn/name-replacements": "off",
44
+ // null を許可する
45
+ "unicorn/no-null": "off",
46
+ // 無駄な undefined を許可する
47
+ "unicorn/no-useless-undefined": "off",
48
+ // クラスメンバーの順序(private before public)を強制しない。
49
+ // public-first の慣習は API の可読性として広く使われているため。
50
+ "unicorn/consistent-class-member-order": "off",
51
+ //
52
+ // 以下、上記以外の flat/recommended 収録ルールをすべて明示的に error とする
53
+ "unicorn/better-dom-traversing": "error",
54
+ "unicorn/class-reference-in-static-methods": "error",
55
+ "unicorn/consistent-assert": "error",
56
+ "unicorn/consistent-boolean-name": "error",
57
+ "unicorn/consistent-compound-words": "error",
58
+ "unicorn/consistent-conditional-object-spread": "error",
59
+ "unicorn/consistent-date-clone": "error",
60
+ "unicorn/consistent-empty-array-spread": "error",
61
+ "unicorn/consistent-existence-index-check": "error",
62
+ "unicorn/consistent-export-decorator-position": "error",
63
+ "unicorn/consistent-json-file-read": "error",
64
+ "unicorn/consistent-optional-chaining": "error",
65
+ "unicorn/consistent-template-literal-escape": "error",
66
+ "unicorn/consistent-tuple-labels": "error",
67
+ "unicorn/default-export-style": "error",
68
+ "unicorn/dom-node-dataset": "error",
69
+ "unicorn/empty-brace-spaces": "error",
70
+ "unicorn/error-message": "error",
71
+ "unicorn/escape-case": "error",
72
+ "unicorn/expiring-todo-comments": "error",
73
+ "unicorn/explicit-length-check": "error",
74
+ "unicorn/explicit-timer-delay": "error",
75
+ "unicorn/import-style": "error",
76
+ "unicorn/isolated-functions": "error",
77
+ "unicorn/logical-assignment-operators": "error",
78
+ "unicorn/max-nested-calls": "error",
79
+ "unicorn/new-for-builtins": "error",
80
+ "unicorn/no-abusive-eslint-disable": "error",
81
+ "unicorn/no-accessor-recursion": "error",
82
+ "unicorn/no-accidental-bitwise-operator": "error",
83
+ "unicorn/no-anonymous-default-export": "error",
84
+ "unicorn/no-array-callback-reference": "error",
85
+ "unicorn/no-array-concat-in-loop": "error",
86
+ "unicorn/no-array-fill-with-reference-type": "error",
87
+ "unicorn/no-array-from-fill": "error",
88
+ "unicorn/no-array-method-this-argument": "error",
89
+ "unicorn/no-array-reverse": "error",
90
+ "unicorn/no-array-sort": "error",
91
+ "unicorn/no-array-sort-for-min-max": "error",
92
+ "unicorn/no-array-splice": "error",
93
+ "unicorn/no-async-promise-finally": "error",
94
+ "unicorn/no-await-expression-member": "error",
95
+ "unicorn/no-await-in-promise-methods": "error",
96
+ "unicorn/no-blob-to-file": "error",
97
+ "unicorn/no-boolean-sort-comparator": "error",
98
+ "unicorn/no-break-in-nested-loop": "error",
99
+ "unicorn/no-canvas-to-image": "error",
100
+ "unicorn/no-chained-comparison": "error",
101
+ "unicorn/no-collection-bracket-access": "error",
102
+ "unicorn/no-computed-property-existence-check": "error",
103
+ "unicorn/no-confusing-array-splice": "error",
104
+ "unicorn/no-confusing-array-with": "error",
105
+ "unicorn/no-console-spaces": "error",
106
+ "unicorn/no-constant-zero-expression": "error",
107
+ "unicorn/no-declarations-before-early-exit": "error",
108
+ "unicorn/no-document-cookie": "error",
109
+ "unicorn/no-double-comparison": "error",
110
+ "unicorn/no-duplicate-if-branches": "error",
111
+ "unicorn/no-duplicate-logical-operands": "error",
112
+ "unicorn/no-duplicate-loops": "error",
113
+ "unicorn/no-duplicate-set-values": "error",
114
+ "unicorn/no-empty-file": "error",
115
+ "unicorn/no-error-property-assignment": "error",
116
+ "unicorn/no-exports-in-scripts": "error",
117
+ "unicorn/no-for-each": "error",
118
+ "unicorn/no-for-loop": "error",
119
+ "unicorn/no-global-object-property-assignment": "error",
120
+ "unicorn/no-immediate-mutation": "error",
121
+ "unicorn/no-impossible-length-comparison": "error",
122
+ "unicorn/no-incorrect-query-selector": "error",
123
+ "unicorn/no-incorrect-template-string-interpolation": "error",
124
+ "unicorn/no-instanceof-builtins": "error",
125
+ "unicorn/no-invalid-argument-count": "error",
126
+ "unicorn/no-invalid-character-comparison": "error",
127
+ "unicorn/no-invalid-fetch-options": "error",
128
+ "unicorn/no-invalid-remove-event-listener": "error",
129
+ "unicorn/no-invalid-well-known-symbol-methods": "error",
130
+ "unicorn/no-late-current-target-access": "error",
131
+ "unicorn/no-late-event-control": "error",
132
+ "unicorn/no-lonely-if": "error",
133
+ "unicorn/no-loop-iterable-mutation": "error",
134
+ "unicorn/no-magic-array-flat-depth": "error",
135
+ "unicorn/no-mismatched-map-key": "error",
136
+ "unicorn/no-misrefactored-assignment": "error",
137
+ "unicorn/no-named-default": "error",
138
+ "unicorn/no-negated-array-predicate": "error",
139
+ "unicorn/no-negated-comparison": "error",
140
+ "unicorn/no-negated-condition": "error",
141
+ "unicorn/no-negation-in-equality-check": "error",
142
+ "unicorn/no-nested-ternary": "error",
143
+ "unicorn/no-new-array": "error",
144
+ "unicorn/no-new-buffer": "error",
145
+ "unicorn/no-non-function-verb-prefix": "error",
146
+ "unicorn/no-nonstandard-builtin-properties": "error",
147
+ "unicorn/no-object-as-default-parameter": "error",
148
+ "unicorn/no-object-methods-with-collections": "error",
149
+ "unicorn/no-optional-chaining-on-undeclared-variable": "error",
150
+ "unicorn/no-process-exit": "error",
151
+ "unicorn/no-redundant-comparison": "error",
152
+ "unicorn/no-return-array-push": "error",
153
+ "unicorn/no-selector-as-dom-name": "error",
154
+ "unicorn/no-single-promise-in-promise-methods": "error",
155
+ "unicorn/no-static-only-class": "error",
156
+ "unicorn/no-subtraction-comparison": "error",
157
+ "unicorn/no-thenable": "error",
158
+ "unicorn/no-this-assignment": "error",
159
+ "unicorn/no-this-outside-of-class": "error",
160
+ "unicorn/no-top-level-assignment-in-function": "error",
161
+ "unicorn/no-top-level-side-effects": "error",
162
+ "unicorn/no-typeof-undefined": "error",
163
+ "unicorn/no-uncalled-method": "error",
164
+ "unicorn/no-undeclared-class-members": "error",
165
+ "unicorn/no-unnecessary-array-flat-depth": "error",
166
+ "unicorn/no-unnecessary-array-flat-map": "error",
167
+ "unicorn/no-unnecessary-array-splice-count": "error",
168
+ "unicorn/no-unnecessary-await": "error",
169
+ "unicorn/no-unnecessary-boolean-comparison": "error",
170
+ "unicorn/no-unnecessary-fetch-options": "error",
171
+ "unicorn/no-unnecessary-global-this": "error",
172
+ "unicorn/no-unnecessary-nested-ternary": "error",
173
+ "unicorn/no-unnecessary-polyfills": "error",
174
+ "unicorn/no-unnecessary-slice-end": "error",
175
+ "unicorn/no-unnecessary-splice": "error",
176
+ "unicorn/no-unreadable-array-destructuring": "error",
177
+ "unicorn/no-unreadable-for-of-expression": "error",
178
+ "unicorn/no-unreadable-iife": "error",
179
+ "unicorn/no-unreadable-object-destructuring": "error",
180
+ "unicorn/no-unsafe-buffer-conversion": "error",
181
+ "unicorn/no-unsafe-promise-all-settled-values": "error",
182
+ "unicorn/no-unsafe-property-key": "error",
183
+ "unicorn/no-unsafe-string-replacement": "error",
184
+ "unicorn/no-unused-array-method-return": "error",
185
+ "unicorn/no-useless-boolean-cast": "error",
186
+ "unicorn/no-useless-coercion": "error",
187
+ "unicorn/no-useless-collection-argument": "error",
188
+ "unicorn/no-useless-compound-assignment": "error",
189
+ "unicorn/no-useless-concat": "error",
190
+ "unicorn/no-useless-continue": "error",
191
+ "unicorn/no-useless-delete-check": "error",
192
+ "unicorn/no-useless-else": "error",
193
+ "unicorn/no-useless-error-capture-stack-trace": "error",
194
+ "unicorn/no-useless-fallback-in-spread": "error",
195
+ "unicorn/no-useless-iterator-to-array": "error",
196
+ "unicorn/no-useless-length-check": "error",
197
+ "unicorn/no-useless-logical-operand": "error",
198
+ "unicorn/no-useless-override": "error",
199
+ "unicorn/no-useless-promise-resolve-reject": "error",
200
+ "unicorn/no-useless-recursion": "error",
201
+ "unicorn/no-useless-spread": "error",
202
+ "unicorn/no-useless-switch-case": "error",
203
+ "unicorn/no-useless-template-literals": "error",
204
+ "unicorn/no-xor-as-exponentiation": "error",
205
+ "unicorn/no-zero-fractions": "error",
206
+ "unicorn/number-literal-case": "error",
207
+ "unicorn/numeric-separators-style": "error",
208
+ "unicorn/operator-assignment": "error",
209
+ "unicorn/prefer-abort-signal-any": "error",
210
+ "unicorn/prefer-abort-signal-timeout": "error",
211
+ "unicorn/prefer-add-event-listener": "error",
212
+ "unicorn/prefer-add-event-listener-options": "error",
213
+ "unicorn/prefer-aggregate-error": "error",
214
+ "unicorn/prefer-array-find": "error",
215
+ "unicorn/prefer-array-flat": "error",
216
+ "unicorn/prefer-array-flat-map": "error",
217
+ "unicorn/prefer-array-from-async": "error",
218
+ "unicorn/prefer-array-from-map": "error",
219
+ "unicorn/prefer-array-from-range": "error",
220
+ "unicorn/prefer-array-index-of": "error",
221
+ "unicorn/prefer-array-iterable-methods": "error",
222
+ "unicorn/prefer-array-last-methods": "error",
223
+ "unicorn/prefer-array-slice": "error",
224
+ "unicorn/prefer-array-some": "error",
225
+ "unicorn/prefer-at": "error",
226
+ "unicorn/prefer-await": "error",
227
+ "unicorn/prefer-bigint-literals": "error",
228
+ "unicorn/prefer-blob-reading-methods": "error",
229
+ "unicorn/prefer-block-statement-over-iife": "error",
230
+ "unicorn/prefer-boolean-return": "error",
231
+ "unicorn/prefer-class-fields": "error",
232
+ "unicorn/prefer-classlist-toggle": "error",
233
+ "unicorn/prefer-code-point": "error",
234
+ "unicorn/prefer-continue": "error",
235
+ "unicorn/prefer-date-now": "error",
236
+ "unicorn/prefer-default-parameters": "error",
237
+ "unicorn/prefer-direct-iteration": "error",
238
+ "unicorn/prefer-dom-node-append": "error",
239
+ "unicorn/prefer-dom-node-remove": "error",
240
+ "unicorn/prefer-dom-node-replace-children": "error",
241
+ "unicorn/prefer-dom-node-text-content": "error",
242
+ "unicorn/prefer-early-return": "error",
243
+ "unicorn/prefer-else-if": "error",
244
+ "unicorn/prefer-event-target": "error",
245
+ "unicorn/prefer-export-from": "error",
246
+ "unicorn/prefer-flat-math-min-max": "error",
247
+ "unicorn/prefer-get-or-insert-computed": "error",
248
+ "unicorn/prefer-global-number-constants": "error",
249
+ "unicorn/prefer-global-this": "error",
250
+ "unicorn/prefer-group-by": "error",
251
+ "unicorn/prefer-has-check": "error",
252
+ "unicorn/prefer-hoisting-branch-code": "error",
253
+ "unicorn/prefer-https": "error",
254
+ "unicorn/prefer-identifier-import-export-specifiers": "error",
255
+ "unicorn/prefer-includes": "error",
256
+ "unicorn/prefer-includes-over-repeated-comparisons": "error",
257
+ "unicorn/prefer-iterable-in-constructor": "error",
258
+ "unicorn/prefer-iterator-helpers": "error",
259
+ "unicorn/prefer-iterator-to-array": "error",
260
+ "unicorn/prefer-iterator-to-array-at-end": "error",
261
+ "unicorn/prefer-keyboard-event-key": "error",
262
+ "unicorn/prefer-location-assign": "error",
263
+ "unicorn/prefer-logical-operator-over-ternary": "error",
264
+ "unicorn/prefer-map-from-entries": "error",
265
+ "unicorn/prefer-math-abs": "error",
266
+ "unicorn/prefer-math-constants": "error",
267
+ "unicorn/prefer-math-min-max": "error",
268
+ "unicorn/prefer-math-trunc": "error",
269
+ "unicorn/prefer-minimal-ternary": "error",
270
+ "unicorn/prefer-modern-dom-apis": "error",
271
+ "unicorn/prefer-modern-math-apis": "error",
272
+ "unicorn/prefer-module": "error",
273
+ "unicorn/prefer-native-coercion-functions": "error",
274
+ "unicorn/prefer-negative-index": "error",
275
+ "unicorn/prefer-node-protocol": "error",
276
+ "unicorn/prefer-number-coercion": "error",
277
+ "unicorn/prefer-number-is-safe-integer": "error",
278
+ "unicorn/prefer-number-properties": "error",
279
+ "unicorn/prefer-object-define-properties": "error",
280
+ "unicorn/prefer-object-destructuring-defaults": "error",
281
+ "unicorn/prefer-object-from-entries": "error",
282
+ "unicorn/prefer-object-iterable-methods": "error",
283
+ "unicorn/prefer-observer-apis": "error",
284
+ "unicorn/prefer-optional-catch-binding": "error",
285
+ "unicorn/prefer-path2d": "error",
286
+ "unicorn/prefer-private-class-fields": "error",
287
+ "unicorn/prefer-promise-try": "error",
288
+ "unicorn/prefer-promise-with-resolvers": "error",
289
+ "unicorn/prefer-prototype-methods": "error",
290
+ "unicorn/prefer-query-selector": "error",
291
+ "unicorn/prefer-queue-microtask": "error",
292
+ "unicorn/prefer-reflect-apply": "error",
293
+ "unicorn/prefer-regexp-test": "error",
294
+ "unicorn/prefer-response-static-json": "error",
295
+ "unicorn/prefer-scoped-selector": "error",
296
+ "unicorn/prefer-set-has": "error",
297
+ "unicorn/prefer-set-methods": "error",
298
+ "unicorn/prefer-set-size": "error",
299
+ "unicorn/prefer-simple-condition-first": "error",
300
+ "unicorn/prefer-simple-sort-comparator": "error",
301
+ "unicorn/prefer-simplified-conditions": "error",
302
+ "unicorn/prefer-single-array-predicate": "error",
303
+ "unicorn/prefer-single-call": "error",
304
+ "unicorn/prefer-single-object-destructuring": "error",
305
+ "unicorn/prefer-single-replace": "error",
306
+ "unicorn/prefer-smaller-scope": "error",
307
+ "unicorn/prefer-split-limit": "error",
308
+ "unicorn/prefer-spread": "error",
309
+ "unicorn/prefer-string-match-all": "error",
310
+ "unicorn/prefer-string-pad-start-end": "error",
311
+ "unicorn/prefer-string-raw": "error",
312
+ "unicorn/prefer-string-repeat": "error",
313
+ "unicorn/prefer-string-replace-all": "error",
314
+ "unicorn/prefer-string-slice": "error",
315
+ "unicorn/prefer-string-starts-ends-with": "error",
316
+ "unicorn/prefer-string-trim-start-end": "error",
317
+ "unicorn/prefer-structured-clone": "error",
318
+ "unicorn/prefer-switch": "error",
319
+ "unicorn/prefer-ternary": "error",
320
+ "unicorn/prefer-toggle-attribute": "error",
321
+ "unicorn/prefer-type-error": "error",
322
+ "unicorn/prefer-type-literal-last": "error",
323
+ "unicorn/prefer-unary-minus": "error",
324
+ "unicorn/prefer-unicode-code-point-escapes": "error",
325
+ "unicorn/prefer-url-can-parse": "error",
326
+ "unicorn/prefer-url-href": "error",
327
+ "unicorn/prefer-url-search-parameters": "error",
328
+ "unicorn/prefer-while-loop-condition": "error",
329
+ "unicorn/relative-url-style": "error",
330
+ "unicorn/require-array-join-separator": "error",
331
+ "unicorn/require-array-sort-compare": "error",
332
+ "unicorn/require-css-escape": "error",
333
+ "unicorn/require-module-attributes": "error",
334
+ "unicorn/require-module-specifiers": "error",
335
+ "unicorn/require-number-to-fixed-digits-argument": "error",
336
+ "unicorn/require-passive-events": "error",
337
+ "unicorn/require-proxy-trap-boolean-return": "error",
338
+ "unicorn/switch-case-braces": "error",
339
+ "unicorn/switch-case-break-position": "error",
340
+ "unicorn/template-indent": "error",
341
+ "unicorn/text-encoding-identifier-case": "error",
342
+ "unicorn/throw-new-error": "error",
343
+ },
344
+ },
14
345
  {
15
346
  files: ["**/*.ts", "**/*.tsx"],
16
347
  languageOptions: {
@@ -66,17 +397,6 @@ export default tseslint.config(
66
397
  // 変数などの未定義使用について、TypeScript準拠とする
67
398
  "no-use-before-define": "off",
68
399
  "@typescript-eslint/no-use-before-define": "error",
69
- // トップレベルのawaitを許可する
70
- "unicorn/prefer-top-level-await": "off",
71
- // クラスメンバーの順序(private before public)を強制しない。
72
- // public-first の慣習は API の可読性として広く使われているため。
73
- "unicorn/consistent-class-member-order": "off",
74
- // 省略形を許可する (dev -> development, prod -> productionなどの変換をさせない)
75
- "unicorn/prevent-abbreviations": "off",
76
- // nullを許可する
77
- "unicorn/no-null": "off",
78
- // 無駄なundefinedを許可する
79
- "unicorn/no-useless-undefined": "off",
80
400
  },
81
401
  },
82
402
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@book000/eslint-config",
3
- "version": "1.15.44",
3
+ "version": "1.16.1",
4
4
  "description": "ESLint config",
5
5
  "keywords": [
6
6
  "eslint-config"
package/test.mjs CHANGED
@@ -12,10 +12,10 @@ async function main() {
12
12
  rules: ["unicorn/prefer-top-level-await"],
13
13
  },
14
14
  {
15
- name: "prevent-abbreviations: dev, prodなど省略形はOK",
15
+ name: "name-replacements: dev, prodなど省略形はOK",
16
16
  code: "const dev = true; const prod = false;",
17
17
  shouldError: false,
18
- rules: ["unicorn/prevent-abbreviations"],
18
+ rules: ["unicorn/name-replacements"],
19
19
  },
20
20
  {
21
21
  name: "no-null: nullの使用はOK",
@@ -23,6 +23,18 @@ async function main() {
23
23
  shouldError: false,
24
24
  rules: ["unicorn/no-null"],
25
25
  },
26
+ {
27
+ name: "no-array-reduce: reduceの使用はOK",
28
+ code: "const sum = [1, 2, 3].reduce((accumulator, value) => accumulator + value, 0);",
29
+ shouldError: false,
30
+ rules: ["unicorn/no-array-reduce"],
31
+ },
32
+ {
33
+ name: "consistent-function-scoping: 外側スコープを捕捉するネストした関数はOK",
34
+ code: "function outer() { const base = 1; function inner() { return base; } return inner(); }",
35
+ shouldError: false,
36
+ rules: ["unicorn/consistent-function-scoping"],
37
+ },
26
38
  {
27
39
  name: "no-use-before-define: 定義前の変数使用はエラー",
28
40
  code: "console.log(a); const a = 1;",