@book000/eslint-config 1.15.44 → 1.16.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.
Files changed (3) hide show
  1. package/index.mjs +190 -2
  2. package/package.json +1 -1
  3. package/test.mjs +12 -0
package/index.mjs CHANGED
@@ -9,8 +9,196 @@ 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 の flat/recommended が定義する
20
+ // ルール一覧を元に、以下を除外・調整して作成した。
21
+ // - deprecated ルールは対象外
22
+ // - catch-error-name, filename-case はオプション付きで設定するため、
23
+ // 下記の専用ブロックに記載し、ここでは省略する
24
+ // - 意図的に off とするルール(下記コメント参照)
25
+ plugins: { unicorn },
26
+ rules: {
27
+ // 集約処理のイディオムとして正当な用途が多く、for ループへの
28
+ // 書き換え強制がかえって可読性を落とすため無効化する
29
+ "unicorn/no-array-reduce": "off",
30
+ // クロージャで意図的に外側スコープの変数を捕捉する関数まで
31
+ // 最上位への移動を要求し、誤検知が多いため無効化する
32
+ "unicorn/consistent-function-scoping": "off",
33
+ // トップレベル await を許可する(IIFE 併用の CLI ツール等のため)
34
+ "unicorn/prefer-top-level-await": "off",
35
+ // 省略形を許可する (dev -> development, prod -> production などの変換をさせない)
36
+ "unicorn/prevent-abbreviations": "off",
37
+ // null を許可する
38
+ "unicorn/no-null": "off",
39
+ // 無駄な undefined を許可する
40
+ "unicorn/no-useless-undefined": "off",
41
+ //
42
+ // 以下、上記以外の flat/recommended 収録ルールをすべて明示的に error とする
43
+ "unicorn/better-dom-traversing": "error",
44
+ "unicorn/consistent-assert": "error",
45
+ "unicorn/consistent-compound-words": "error",
46
+ "unicorn/consistent-date-clone": "error",
47
+ "unicorn/consistent-empty-array-spread": "error",
48
+ "unicorn/consistent-existence-index-check": "error",
49
+ "unicorn/consistent-json-file-read": "error",
50
+ "unicorn/consistent-template-literal-escape": "error",
51
+ "unicorn/dom-node-dataset": "error",
52
+ "unicorn/empty-brace-spaces": "error",
53
+ "unicorn/error-message": "error",
54
+ "unicorn/escape-case": "error",
55
+ "unicorn/expiring-todo-comments": "error",
56
+ "unicorn/explicit-length-check": "error",
57
+ "unicorn/import-style": "error",
58
+ "unicorn/isolated-functions": "error",
59
+ "unicorn/new-for-builtins": "error",
60
+ "unicorn/no-abusive-eslint-disable": "error",
61
+ "unicorn/no-accessor-recursion": "error",
62
+ "unicorn/no-anonymous-default-export": "error",
63
+ "unicorn/no-array-callback-reference": "error",
64
+ "unicorn/no-array-fill-with-reference-type": "error",
65
+ "unicorn/no-array-for-each": "error",
66
+ "unicorn/no-array-from-fill": "error",
67
+ "unicorn/no-array-method-this-argument": "error",
68
+ "unicorn/no-array-reverse": "error",
69
+ "unicorn/no-array-sort": "error",
70
+ "unicorn/no-await-expression-member": "error",
71
+ "unicorn/no-await-in-promise-methods": "error",
72
+ "unicorn/no-blob-to-file": "error",
73
+ "unicorn/no-canvas-to-image": "error",
74
+ "unicorn/no-confusing-array-splice": "error",
75
+ "unicorn/no-console-spaces": "error",
76
+ "unicorn/no-document-cookie": "error",
77
+ "unicorn/no-duplicate-set-values": "error",
78
+ "unicorn/no-empty-file": "error",
79
+ "unicorn/no-exports-in-scripts": "error",
80
+ "unicorn/no-for-loop": "error",
81
+ "unicorn/no-hex-escape": "error",
82
+ "unicorn/no-immediate-mutation": "error",
83
+ "unicorn/no-incorrect-query-selector": "error",
84
+ "unicorn/no-instanceof-builtins": "error",
85
+ "unicorn/no-invalid-fetch-options": "error",
86
+ "unicorn/no-invalid-remove-event-listener": "error",
87
+ "unicorn/no-late-current-target-access": "error",
88
+ "unicorn/no-lonely-if": "error",
89
+ "unicorn/no-magic-array-flat-depth": "error",
90
+ "unicorn/no-named-default": "error",
91
+ "unicorn/no-negated-condition": "error",
92
+ "unicorn/no-negation-in-equality-check": "error",
93
+ "unicorn/no-nested-ternary": "error",
94
+ "unicorn/no-new-array": "error",
95
+ "unicorn/no-new-buffer": "error",
96
+ "unicorn/no-object-as-default-parameter": "error",
97
+ "unicorn/no-process-exit": "error",
98
+ "unicorn/no-single-promise-in-promise-methods": "error",
99
+ "unicorn/no-static-only-class": "error",
100
+ "unicorn/no-thenable": "error",
101
+ "unicorn/no-this-assignment": "error",
102
+ "unicorn/no-this-outside-of-class": "error",
103
+ "unicorn/no-typeof-undefined": "error",
104
+ "unicorn/no-unnecessary-array-flat-depth": "error",
105
+ "unicorn/no-unnecessary-array-splice-count": "error",
106
+ "unicorn/no-unnecessary-await": "error",
107
+ "unicorn/no-unnecessary-nested-ternary": "error",
108
+ "unicorn/no-unnecessary-polyfills": "error",
109
+ "unicorn/no-unnecessary-slice-end": "error",
110
+ "unicorn/no-unreadable-array-destructuring": "error",
111
+ "unicorn/no-unreadable-iife": "error",
112
+ "unicorn/no-unused-array-method-return": "error",
113
+ "unicorn/no-useless-collection-argument": "error",
114
+ "unicorn/no-useless-error-capture-stack-trace": "error",
115
+ "unicorn/no-useless-fallback-in-spread": "error",
116
+ "unicorn/no-useless-iterator-to-array": "error",
117
+ "unicorn/no-useless-length-check": "error",
118
+ "unicorn/no-useless-promise-resolve-reject": "error",
119
+ "unicorn/no-useless-spread": "error",
120
+ "unicorn/no-useless-switch-case": "error",
121
+ "unicorn/no-zero-fractions": "error",
122
+ "unicorn/number-literal-case": "error",
123
+ "unicorn/numeric-separators-style": "error",
124
+ "unicorn/prefer-add-event-listener": "error",
125
+ "unicorn/prefer-array-find": "error",
126
+ "unicorn/prefer-array-flat": "error",
127
+ "unicorn/prefer-array-flat-map": "error",
128
+ "unicorn/prefer-array-index-of": "error",
129
+ "unicorn/prefer-array-last-methods": "error",
130
+ "unicorn/prefer-array-some": "error",
131
+ "unicorn/prefer-at": "error",
132
+ "unicorn/prefer-bigint-literals": "error",
133
+ "unicorn/prefer-blob-reading-methods": "error",
134
+ "unicorn/prefer-class-fields": "error",
135
+ "unicorn/prefer-classlist-toggle": "error",
136
+ "unicorn/prefer-code-point": "error",
137
+ "unicorn/prefer-date-now": "error",
138
+ "unicorn/prefer-default-parameters": "error",
139
+ "unicorn/prefer-dom-node-append": "error",
140
+ "unicorn/prefer-dom-node-remove": "error",
141
+ "unicorn/prefer-dom-node-text-content": "error",
142
+ "unicorn/prefer-event-target": "error",
143
+ "unicorn/prefer-export-from": "error",
144
+ "unicorn/prefer-get-or-insert-computed": "error",
145
+ "unicorn/prefer-global-this": "error",
146
+ "unicorn/prefer-https": "error",
147
+ "unicorn/prefer-includes": "error",
148
+ "unicorn/prefer-includes-over-repeated-comparisons": "error",
149
+ "unicorn/prefer-iterator-to-array-at-end": "error",
150
+ "unicorn/prefer-keyboard-event-key": "error",
151
+ "unicorn/prefer-logical-operator-over-ternary": "error",
152
+ "unicorn/prefer-math-abs": "error",
153
+ "unicorn/prefer-math-min-max": "error",
154
+ "unicorn/prefer-math-trunc": "error",
155
+ "unicorn/prefer-modern-dom-apis": "error",
156
+ "unicorn/prefer-modern-math-apis": "error",
157
+ "unicorn/prefer-module": "error",
158
+ "unicorn/prefer-native-coercion-functions": "error",
159
+ "unicorn/prefer-negative-index": "error",
160
+ "unicorn/prefer-node-protocol": "error",
161
+ "unicorn/prefer-number-properties": "error",
162
+ "unicorn/prefer-object-from-entries": "error",
163
+ "unicorn/prefer-optional-catch-binding": "error",
164
+ "unicorn/prefer-prototype-methods": "error",
165
+ "unicorn/prefer-query-selector": "error",
166
+ "unicorn/prefer-queue-microtask": "error",
167
+ "unicorn/prefer-reflect-apply": "error",
168
+ "unicorn/prefer-regexp-test": "error",
169
+ "unicorn/prefer-response-static-json": "error",
170
+ "unicorn/prefer-set-has": "error",
171
+ "unicorn/prefer-set-size": "error",
172
+ "unicorn/prefer-simple-condition-first": "error",
173
+ "unicorn/prefer-single-call": "error",
174
+ "unicorn/prefer-split-limit": "error",
175
+ "unicorn/prefer-spread": "error",
176
+ "unicorn/prefer-string-match-all": "error",
177
+ "unicorn/prefer-string-pad-start-end": "error",
178
+ "unicorn/prefer-string-raw": "error",
179
+ "unicorn/prefer-string-repeat": "error",
180
+ "unicorn/prefer-string-replace-all": "error",
181
+ "unicorn/prefer-string-slice": "error",
182
+ "unicorn/prefer-string-starts-ends-with": "error",
183
+ "unicorn/prefer-string-trim-start-end": "error",
184
+ "unicorn/prefer-structured-clone": "error",
185
+ "unicorn/prefer-switch": "error",
186
+ "unicorn/prefer-ternary": "error",
187
+ "unicorn/prefer-type-error": "error",
188
+ "unicorn/relative-url-style": "error",
189
+ "unicorn/require-array-join-separator": "error",
190
+ "unicorn/require-css-escape": "error",
191
+ "unicorn/require-module-attributes": "error",
192
+ "unicorn/require-module-specifiers": "error",
193
+ "unicorn/require-number-to-fixed-digits-argument": "error",
194
+ "unicorn/require-passive-events": "error",
195
+ "unicorn/switch-case-braces": "error",
196
+ "unicorn/switch-case-break-position": "error",
197
+ "unicorn/template-indent": "error",
198
+ "unicorn/text-encoding-identifier-case": "error",
199
+ "unicorn/throw-new-error": "error",
200
+ },
201
+ },
14
202
  {
15
203
  files: ["**/*.ts", "**/*.tsx"],
16
204
  languageOptions: {
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.0",
4
4
  "description": "ESLint config",
5
5
  "keywords": [
6
6
  "eslint-config"
package/test.mjs CHANGED
@@ -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;",