@seanblonien/eslint-config-base 1.0.10 → 1.0.12
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/dist/index.js +268 -211
- package/dist/index.js.map +1 -1
- package/package.json +1 -3
package/dist/index.js
CHANGED
|
@@ -63,6 +63,7 @@ var booleanNameExceptionsList = [
|
|
|
63
63
|
"^allow",
|
|
64
64
|
"^visible",
|
|
65
65
|
"^merge$",
|
|
66
|
+
"^ssr$",
|
|
66
67
|
"^multiSelect$",
|
|
67
68
|
"Shown$",
|
|
68
69
|
"^enumerable$",
|
|
@@ -77,16 +78,14 @@ var booleanNameConvention = new RegExp(
|
|
|
77
78
|
|
|
78
79
|
// src/index.ts
|
|
79
80
|
var config = [
|
|
80
|
-
// Base
|
|
81
|
+
// Base configurations
|
|
81
82
|
eslint.configs.recommended,
|
|
82
|
-
// TypeScript recommended configs
|
|
83
83
|
...tseslint.configs.recommendedTypeChecked,
|
|
84
84
|
...tseslint.configs.stylisticTypeChecked,
|
|
85
85
|
...tseslint.configs.strict,
|
|
86
|
-
//
|
|
86
|
+
// Plugin configurations
|
|
87
87
|
stylistic.configs.customize({
|
|
88
88
|
arrowParens: true,
|
|
89
|
-
// jsx: true,
|
|
90
89
|
braceStyle: "1tbs",
|
|
91
90
|
commaDangle: "always-multiline",
|
|
92
91
|
indent: 2,
|
|
@@ -94,15 +93,13 @@ var config = [
|
|
|
94
93
|
quotes: "single",
|
|
95
94
|
semi: true
|
|
96
95
|
}),
|
|
97
|
-
// Import plugin configuration
|
|
98
96
|
importXPlugin.flatConfigs.recommended,
|
|
99
97
|
importXPlugin.flatConfigs.typescript,
|
|
100
98
|
sortPlugin.configs["flat/recommended"],
|
|
101
|
-
// Code quality plugins
|
|
102
99
|
unicornPlugin.configs.recommended,
|
|
103
100
|
comments.recommended,
|
|
104
101
|
sonarjsPlugin.configs.recommended,
|
|
105
|
-
//
|
|
102
|
+
// Main configuration
|
|
106
103
|
{
|
|
107
104
|
files: ["**/*.{js,mjs,cjs,ts,tsx}"],
|
|
108
105
|
languageOptions: {
|
|
@@ -129,44 +126,99 @@ var config = [
|
|
|
129
126
|
"unused-imports": unusedImports
|
|
130
127
|
},
|
|
131
128
|
rules: {
|
|
132
|
-
//
|
|
133
|
-
//
|
|
129
|
+
// === DISABLED CORE RULES (replaced by plugins) ===
|
|
130
|
+
// These core ESLint rules are disabled because we use enhanced versions from plugins:
|
|
134
131
|
"quotes": "off",
|
|
132
|
+
// Replaced by @stylistic/quotes with better formatting options and JSX support
|
|
135
133
|
"jsx-quotes": "off",
|
|
134
|
+
// Replaced by @stylistic/jsx-quotes for JSX-specific quote handling
|
|
136
135
|
"func-call-spacing": "off",
|
|
136
|
+
// Replaced by @stylistic/function-call-spacing for consistent spacing
|
|
137
137
|
"dot-notation": "off",
|
|
138
|
+
// Replaced by @typescript-eslint/dot-notation with TypeScript awareness
|
|
138
139
|
"no-unused-expressions": "off",
|
|
140
|
+
// Replaced by @typescript-eslint/no-unused-expressions with better TS support
|
|
139
141
|
"no-use-before-define": "off",
|
|
142
|
+
// Replaced by @typescript-eslint/no-use-before-define for TypeScript hoisting rules
|
|
140
143
|
"default-param-last": "off",
|
|
144
|
+
// Replaced by @typescript-eslint/default-param-last with TS parameter awareness
|
|
141
145
|
"no-redeclare": "off",
|
|
146
|
+
// Replaced by @typescript-eslint/no-redeclare for better type checking
|
|
142
147
|
"no-shadow": "off",
|
|
143
|
-
//
|
|
144
|
-
"
|
|
148
|
+
// Replaced by @typescript-eslint/no-shadow for TypeScript variable shadowing
|
|
149
|
+
"spaced-comment": "off",
|
|
150
|
+
// Replaced by @stylistic/spaced-comment with more formatting options
|
|
151
|
+
"no-unused-vars": "off",
|
|
152
|
+
// Replaced by @typescript-eslint/no-unused-vars and unused-imports plugin
|
|
153
|
+
"@stylistic/no-unused-vars": "off",
|
|
154
|
+
// Replaced by unused-imports/no-unused-vars for better import handling
|
|
155
|
+
"sonarjs/no-unused-vars": "off",
|
|
156
|
+
// Replaced by unused-imports/no-unused-vars to avoid conflicts
|
|
157
|
+
"no-magic-numbers": "off",
|
|
158
|
+
// Replaced by @typescript-eslint/no-magic-numbers with TypeScript-aware exceptions
|
|
159
|
+
// === DISABLED PLUGIN RULES (intentionally turned off) ===
|
|
160
|
+
// Sort plugin rules (replaced by import-x/order):
|
|
161
|
+
"sort/imports": "off",
|
|
162
|
+
// Replaced by import-x/order which has better TypeScript support
|
|
163
|
+
"sort/object-properties": "off",
|
|
164
|
+
// Object property sorting is not required
|
|
165
|
+
"sort/string-unions": "off",
|
|
166
|
+
// String union sorting is not required
|
|
167
|
+
// Unicorn rules that are too restrictive or don't match our style:
|
|
168
|
+
"unicorn/prefer-global-this": "off",
|
|
169
|
+
// GlobalThis is not always preferred over window/global
|
|
170
|
+
"unicorn/prevent-abbreviations": "off",
|
|
171
|
+
// Common abbreviations (props, args, etc.) are acceptable
|
|
172
|
+
"unicorn/no-array-reduce": "off",
|
|
173
|
+
// Array.reduce is a valid and useful method
|
|
174
|
+
"unicorn/no-array-for-each": "off",
|
|
175
|
+
// Array.forEach is preferred over for...of in many cases
|
|
176
|
+
"unicorn/prefer-top-level-await": "off",
|
|
177
|
+
// Top-level await is not always appropriate
|
|
178
|
+
"unicorn/no-array-callback-reference": "off",
|
|
179
|
+
// Method references as callbacks are acceptable
|
|
180
|
+
"unicorn/prefer-switch": "off",
|
|
181
|
+
// Switch statements are banned (see no-restricted-syntax below)
|
|
182
|
+
"unicorn/prefer-object-from-entries": "off",
|
|
183
|
+
// Object.fromEntries is not always better
|
|
184
|
+
"unicorn/no-null": "off",
|
|
185
|
+
// Null is still a valid value in many contexts
|
|
186
|
+
// SonarJS rules that are disabled for various reasons:
|
|
187
|
+
"sonarjs/cognitive-complexity": "off",
|
|
188
|
+
// Replaced by core complexity rule which is simpler
|
|
189
|
+
"sonarjs/no-nested-functions": "off",
|
|
190
|
+
// Replaced by complexity rule, nested functions are sometimes needed
|
|
191
|
+
"sonarjs/function-return-type": "off",
|
|
192
|
+
// TypeScript handles return type checking better
|
|
193
|
+
"sonarjs/no-redundant-optional": "off",
|
|
194
|
+
// TypeScript handles optional types better
|
|
195
|
+
"sonarjs/no-commented-code": "off",
|
|
196
|
+
// Performance-intensive rule, commented code is sometimes useful
|
|
197
|
+
"sonarjs/todo-tag": "off",
|
|
198
|
+
// TODO comments are acceptable during development
|
|
199
|
+
"sonarjs/pseudo-random": "off",
|
|
200
|
+
// Math.random() is acceptable for non-cryptographic uses
|
|
201
|
+
"sonarjs/void-use": "off",
|
|
202
|
+
// Allow void operators for type assertions and async function annotations
|
|
203
|
+
"sonarjs/no-nested-conditional": "off",
|
|
204
|
+
// Replaced by no-nested-ternary rule
|
|
205
|
+
"sonarjs/no-hardcoded-passwords": "off",
|
|
206
|
+
// Import and testing rules:
|
|
207
|
+
"import-x/no-named-as-default-member": "off",
|
|
208
|
+
// Named default exports are sometimes necessary
|
|
209
|
+
// === STYLISTIC & FORMATTING ===
|
|
145
210
|
"@stylistic/quotes": ["warn", "single", { avoidEscape: true }],
|
|
146
211
|
"@stylistic/jsx-quotes": ["warn", "prefer-single"],
|
|
147
|
-
"@stylistic/jsx-one-expression-per-line": "off",
|
|
148
212
|
"@stylistic/block-spacing": ["warn", "never"],
|
|
149
213
|
"@stylistic/object-curly-newline": [
|
|
150
214
|
"warn",
|
|
151
215
|
{ ObjectPattern: { multiline: true, consistent: true } }
|
|
152
216
|
],
|
|
153
|
-
"object-property-newline": [
|
|
154
|
-
"warn",
|
|
155
|
-
{ allowAllPropertiesOnSameLine: true }
|
|
156
|
-
],
|
|
157
|
-
"function-call-argument-newline": ["warn", "consistent"],
|
|
158
|
-
"no-multiple-empty-lines": ["warn", { max: 1, maxEOF: 1 }],
|
|
159
|
-
"no-multi-spaces": "warn",
|
|
160
|
-
"no-useless-rename": "warn",
|
|
161
|
-
"arrow-spacing": "warn",
|
|
162
|
-
"space-infix-ops": "warn",
|
|
163
217
|
"@stylistic/operator-linebreak": [
|
|
164
218
|
"warn",
|
|
165
219
|
"after",
|
|
166
220
|
{ overrides: { "?": "before", ":": "before" } }
|
|
167
221
|
],
|
|
168
|
-
"comma-style": ["warn", "last"],
|
|
169
|
-
"complexity": ["warn", { max: 20 }],
|
|
170
222
|
"@stylistic/max-len": [
|
|
171
223
|
"warn",
|
|
172
224
|
{
|
|
@@ -180,16 +232,6 @@ var config = [
|
|
|
180
232
|
ignoreRegExpLiterals: true
|
|
181
233
|
}
|
|
182
234
|
],
|
|
183
|
-
"no-extra-parens": [
|
|
184
|
-
"error",
|
|
185
|
-
"all",
|
|
186
|
-
{
|
|
187
|
-
ignoreJSX: "all",
|
|
188
|
-
// don’t complain about JSX parens
|
|
189
|
-
enforceForArrowConditionals: false,
|
|
190
|
-
nestedBinaryExpressions: false
|
|
191
|
-
}
|
|
192
|
-
],
|
|
193
235
|
"@stylistic/jsx-wrap-multilines": [
|
|
194
236
|
"error",
|
|
195
237
|
{
|
|
@@ -201,47 +243,156 @@ var config = [
|
|
|
201
243
|
logical: "parens-new-line"
|
|
202
244
|
}
|
|
203
245
|
],
|
|
246
|
+
"@stylistic/brace-style": ["warn", "1tbs", { allowSingleLine: true }],
|
|
247
|
+
"@stylistic/comma-dangle": ["warn", "always-multiline"],
|
|
248
|
+
"@stylistic/comma-spacing": "warn",
|
|
249
|
+
"@stylistic/function-call-spacing": ["error"],
|
|
250
|
+
"@stylistic/array-element-newline": ["warn", { multiline: true, consistent: true }],
|
|
251
|
+
"@stylistic/array-bracket-newline": ["warn", "consistent"],
|
|
252
|
+
"@stylistic/no-mixed-operators": ["warn", { allowSamePrecedence: true }],
|
|
253
|
+
"@stylistic/rest-spread-spacing": ["warn", "never"],
|
|
254
|
+
"@stylistic/spaced-comment": ["warn", "always", { line: { markers: ["!", "?", "-", "**"] } }],
|
|
255
|
+
"@stylistic/jsx-one-expression-per-line": "warn",
|
|
256
|
+
// === CODE QUALITY & STRUCTURE ===
|
|
257
|
+
// Complexity and size limits:
|
|
258
|
+
"complexity": ["warn", { max: 20 }],
|
|
259
|
+
// Warn when cyclomatic complexity exceeds 20
|
|
204
260
|
"max-lines-per-function": ["error", 120],
|
|
205
|
-
|
|
261
|
+
// Error when functions exceed 120 lines
|
|
262
|
+
"max-lines": ["error", { max: 600, skipBlankLines: true }],
|
|
263
|
+
// Error when files exceed 900 lines
|
|
264
|
+
// Code style preferences:
|
|
206
265
|
"func-style": ["warn", "expression"],
|
|
266
|
+
// Prefer function expressions over declarations
|
|
267
|
+
"object-shorthand": ["warn", "always"],
|
|
268
|
+
// Use object shorthand ({ name } instead of { name: name })
|
|
269
|
+
"arrow-body-style": ["warn", "as-needed"],
|
|
270
|
+
// Use concise arrow functions when possible
|
|
271
|
+
"prefer-destructuring": "warn",
|
|
272
|
+
// Prefer destructuring for object/array access
|
|
273
|
+
"prefer-arrow-callback": "error",
|
|
274
|
+
// Prefer arrow functions for callbacks
|
|
275
|
+
"prefer-template": "warn",
|
|
276
|
+
// Use template literals instead of string concatenation
|
|
277
|
+
"one-var": ["error", "never"],
|
|
278
|
+
// Declare each variable separately
|
|
279
|
+
"no-bitwise": "error",
|
|
280
|
+
// Disallow bitwise operators (often used for obfuscation)
|
|
281
|
+
// Parentheses and expression clarity:
|
|
282
|
+
"no-extra-parens": [
|
|
283
|
+
"error",
|
|
284
|
+
"all",
|
|
285
|
+
{
|
|
286
|
+
ignoreJSX: "all",
|
|
287
|
+
// JSX requires parentheses for multi-line expressions
|
|
288
|
+
enforceForArrowConditionals: false,
|
|
289
|
+
// Allow parentheses in arrow conditionals
|
|
290
|
+
nestedBinaryExpressions: false
|
|
291
|
+
// Allow parentheses for clarity in nested expressions
|
|
292
|
+
}
|
|
293
|
+
],
|
|
294
|
+
// === SECURITY & BEST PRACTICES ===
|
|
295
|
+
// Prevent dangerous code execution patterns:
|
|
296
|
+
"no-eval": "error",
|
|
297
|
+
// Disallows eval() which can execute arbitrary code
|
|
298
|
+
"no-implied-eval": "error",
|
|
299
|
+
// Catches indirect eval usage (setTimeout with string, etc.)
|
|
300
|
+
"no-new-func": "error",
|
|
301
|
+
// Prevents Function constructor which is similar to eval
|
|
302
|
+
"no-script-url": "error",
|
|
303
|
+
// Disallows javascript: URLs which are XSS vectors
|
|
304
|
+
// Error handling and promises:
|
|
305
|
+
"prefer-promise-reject-errors": "error",
|
|
306
|
+
// Ensures promises are rejected with Error objects
|
|
307
|
+
"no-throw-literal": "error",
|
|
308
|
+
// Prevents throwing non-Error objects (strings, numbers, etc.)
|
|
309
|
+
// Code quality and safety:
|
|
310
|
+
"no-unreachable-loop": "error",
|
|
311
|
+
// Catches loops with unreachable iterations
|
|
312
|
+
"no-unsafe-negation": "error",
|
|
313
|
+
// Prevents unsafe negation patterns that can cause bugs
|
|
314
|
+
"yoda": "error",
|
|
315
|
+
// Enforces consistent comparison order (variable == constant, not constant == variable)
|
|
316
|
+
// Promise constructor safety:
|
|
317
|
+
"no-promise-executor-return": "error",
|
|
318
|
+
// Prevents returning values from promise executor
|
|
319
|
+
"no-async-promise-executor": "error",
|
|
320
|
+
// Prevents async promise constructors (anti-pattern)
|
|
321
|
+
// === GENERAL JAVASCRIPT RULES ===
|
|
322
|
+
"quote-props": ["warn", "consistent-as-needed"],
|
|
323
|
+
"object-property-newline": ["warn", { allowAllPropertiesOnSameLine: true }],
|
|
324
|
+
"function-call-argument-newline": ["warn", "consistent"],
|
|
325
|
+
"no-multiple-empty-lines": ["warn", { max: 1, maxEOF: 1 }],
|
|
326
|
+
"no-multi-spaces": "warn",
|
|
327
|
+
"no-useless-rename": "warn",
|
|
328
|
+
"arrow-spacing": "warn",
|
|
329
|
+
"space-infix-ops": "warn",
|
|
330
|
+
"comma-style": ["warn", "last"],
|
|
331
|
+
"no-nested-ternary": "warn",
|
|
332
|
+
"no-unneeded-ternary": "warn",
|
|
333
|
+
"no-else-return": "error",
|
|
334
|
+
"no-console": "warn",
|
|
335
|
+
"no-useless-concat": "warn",
|
|
336
|
+
"no-new": "error",
|
|
337
|
+
"no-extra-semi": "error",
|
|
338
|
+
"no-implicit-coercion": ["warn", { allow: ["!!"] }],
|
|
339
|
+
"no-extra-boolean-cast": "warn",
|
|
207
340
|
"padding-line-between-statements": [
|
|
208
341
|
"error",
|
|
209
342
|
{
|
|
210
|
-
// Require a blank line after directive prologues ("use client", "use strict", etc.)
|
|
211
343
|
blankLine: "always",
|
|
212
344
|
prev: "directive",
|
|
213
345
|
next: "*"
|
|
214
346
|
},
|
|
215
347
|
{
|
|
216
|
-
// But we *don't* want to require blank lines between multiple directives
|
|
217
|
-
// (so `"use client";` can be followed immediately by `"use strict";`)
|
|
218
348
|
blankLine: "any",
|
|
219
349
|
prev: "directive",
|
|
220
350
|
next: "directive"
|
|
221
351
|
},
|
|
222
352
|
{
|
|
223
|
-
// No blank line between import and import statements
|
|
224
353
|
blankLine: "never",
|
|
225
354
|
prev: "import",
|
|
226
355
|
next: "import"
|
|
227
356
|
}
|
|
228
357
|
],
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
"
|
|
232
|
-
"
|
|
233
|
-
"prefer-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
358
|
+
// === TYPESCRIPT RULES ===
|
|
359
|
+
// Type safety & preferences
|
|
360
|
+
"@typescript-eslint/no-explicit-any": ["warn", { fixToUnknown: true }],
|
|
361
|
+
"@typescript-eslint/no-inferrable-types": ["warn", { ignoreParameters: true }],
|
|
362
|
+
"@typescript-eslint/prefer-nullish-coalescing": [
|
|
363
|
+
"warn",
|
|
364
|
+
{ ignorePrimitives: { string: true } }
|
|
365
|
+
],
|
|
366
|
+
"@typescript-eslint/no-non-null-asserted-nullish-coalescing": "error",
|
|
367
|
+
"@typescript-eslint/no-non-null-asserted-optional-chain": "error",
|
|
368
|
+
"@typescript-eslint/no-extra-non-null-assertion": "error",
|
|
369
|
+
"@typescript-eslint/no-confusing-non-null-assertion": "error",
|
|
370
|
+
"@typescript-eslint/ban-ts-comment": [
|
|
371
|
+
"error",
|
|
372
|
+
{ "ts-expect-error": "allow-with-description", "ts-ignore": "allow-with-description" }
|
|
373
|
+
],
|
|
374
|
+
"@typescript-eslint/no-empty-object-type": "warn",
|
|
375
|
+
"@typescript-eslint/no-unsafe-function-type": "warn",
|
|
376
|
+
"@typescript-eslint/no-wrapper-object-types": "warn",
|
|
377
|
+
"@typescript-eslint/array-type": ["warn", { default: "array" }],
|
|
378
|
+
"@typescript-eslint/no-unnecessary-condition": "warn",
|
|
379
|
+
"@typescript-eslint/no-unnecessary-boolean-literal-compare": "warn",
|
|
380
|
+
"@typescript-eslint/no-floating-promises": "error",
|
|
381
|
+
"@typescript-eslint/await-thenable": "error",
|
|
382
|
+
"@typescript-eslint/prefer-readonly": "warn",
|
|
383
|
+
"@typescript-eslint/no-invalid-void-type": "error",
|
|
384
|
+
// Void types are valid in many contexts (e.g., Promise<void>)
|
|
385
|
+
"@typescript-eslint/no-misused-promises": "error",
|
|
386
|
+
// Too many false positives with promise handling
|
|
387
|
+
// TypeScript consistency
|
|
388
|
+
"@typescript-eslint/consistent-indexed-object-style": ["error", "record"],
|
|
389
|
+
"@typescript-eslint/consistent-type-assertions": ["error", { assertionStyle: "as" }],
|
|
390
|
+
"@typescript-eslint/consistent-type-definitions": ["error", "type"],
|
|
391
|
+
"@typescript-eslint/consistent-type-exports": "error",
|
|
392
|
+
"@typescript-eslint/method-signature-style": "error",
|
|
393
|
+
// TypeScript equivalents of core rules
|
|
237
394
|
"@typescript-eslint/no-redeclare": "error",
|
|
238
395
|
"@typescript-eslint/default-param-last": "error",
|
|
239
|
-
"@typescript-eslint/require-await": "off",
|
|
240
|
-
"no-return-await": "warn",
|
|
241
|
-
"no-nested-ternary": "warn",
|
|
242
|
-
"no-unneeded-ternary": "warn",
|
|
243
|
-
"no-else-return": "warn",
|
|
244
|
-
"no-constant-condition": "off",
|
|
245
396
|
"@typescript-eslint/dot-notation": "error",
|
|
246
397
|
"@typescript-eslint/no-unused-expressions": [
|
|
247
398
|
"error",
|
|
@@ -255,14 +406,7 @@ var config = [
|
|
|
255
406
|
"error",
|
|
256
407
|
{ variables: true, functions: false }
|
|
257
408
|
],
|
|
258
|
-
"no-
|
|
259
|
-
"no-useless-concat": "warn",
|
|
260
|
-
"no-new": "error",
|
|
261
|
-
"no-extra-semi": "error",
|
|
262
|
-
"no-implicit-coercion": ["warn", { allow: ["!!"] }],
|
|
263
|
-
"no-extra-boolean-cast": "warn",
|
|
264
|
-
// Magic numbers
|
|
265
|
-
"no-magic-numbers": "off",
|
|
409
|
+
"@typescript-eslint/no-shadow": "error",
|
|
266
410
|
"@typescript-eslint/no-magic-numbers": [
|
|
267
411
|
"error",
|
|
268
412
|
{
|
|
@@ -273,44 +417,44 @@ var config = [
|
|
|
273
417
|
ignore: [0, 1, -1, 2]
|
|
274
418
|
}
|
|
275
419
|
],
|
|
276
|
-
//
|
|
277
|
-
"@
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
420
|
+
// Expressions and async
|
|
421
|
+
"@typescript-eslint/no-confusing-void-expression": [
|
|
422
|
+
"error",
|
|
423
|
+
{ ignoreArrowShorthand: true }
|
|
424
|
+
],
|
|
425
|
+
"@typescript-eslint/no-meaningless-void-operator": "error",
|
|
426
|
+
// TypeScript modern preferences
|
|
427
|
+
"@typescript-eslint/prefer-includes": "error",
|
|
428
|
+
"@typescript-eslint/prefer-optional-chain": "error",
|
|
429
|
+
"@typescript-eslint/prefer-reduce-type-parameter": "error",
|
|
430
|
+
"@typescript-eslint/prefer-string-starts-ends-with": "error",
|
|
431
|
+
// === NAMING CONVENTIONS ===
|
|
282
432
|
"camelcase": ["warn", { allow: ["^_", "content_type", "reply_to"] }],
|
|
283
433
|
"@typescript-eslint/naming-convention": [
|
|
284
434
|
"warn",
|
|
285
|
-
// Property naming rules
|
|
286
435
|
{
|
|
287
436
|
selector: "property",
|
|
288
437
|
format: ["camelCase", "UPPER_CASE"],
|
|
289
438
|
leadingUnderscore: "allow",
|
|
290
439
|
filter: {
|
|
291
440
|
regex: String.raw`^_|[- /?:{}@%]|Provider|Comp|^item$|^condition$|^container$|^Container$|^\d+$`,
|
|
292
|
-
// ignore properties with dashes/slashes/spaces
|
|
293
441
|
match: false
|
|
294
442
|
}
|
|
295
443
|
},
|
|
296
|
-
// Variable-like naming rules
|
|
297
444
|
{
|
|
298
445
|
selector: "variableLike",
|
|
299
446
|
format: ["camelCase", "UPPER_CASE", "PascalCase"],
|
|
300
447
|
trailingUnderscore: "allow"
|
|
301
448
|
},
|
|
302
|
-
// Function variable naming rules
|
|
303
449
|
{
|
|
304
450
|
selector: "variable",
|
|
305
451
|
format: ["camelCase", "PascalCase"],
|
|
306
452
|
types: ["function"],
|
|
307
453
|
filter: {
|
|
308
454
|
regex: "^_|Comp|Provider|Stack|Wrapper|Root",
|
|
309
|
-
// allowing for 'Component' parameter names
|
|
310
455
|
match: false
|
|
311
456
|
}
|
|
312
457
|
},
|
|
313
|
-
// Type naming rules
|
|
314
458
|
{
|
|
315
459
|
selector: "typeLike",
|
|
316
460
|
format: ["PascalCase"],
|
|
@@ -319,12 +463,10 @@ var config = [
|
|
|
319
463
|
match: false
|
|
320
464
|
}
|
|
321
465
|
},
|
|
322
|
-
// Boolean naming rules
|
|
323
466
|
{
|
|
324
467
|
selector: ["variable", "property", "parameter", "typeProperty"],
|
|
325
468
|
types: ["boolean"],
|
|
326
469
|
format: ["UPPER_CASE", "PascalCase"],
|
|
327
|
-
// must be PascalCase because prefix is trimmed
|
|
328
470
|
prefix: booleanNamePrefixes,
|
|
329
471
|
filter: {
|
|
330
472
|
regex: booleanNameExceptions,
|
|
@@ -332,148 +474,86 @@ var config = [
|
|
|
332
474
|
}
|
|
333
475
|
}
|
|
334
476
|
],
|
|
335
|
-
//
|
|
336
|
-
|
|
337
|
-
"
|
|
338
|
-
|
|
339
|
-
"
|
|
340
|
-
|
|
341
|
-
"
|
|
477
|
+
// === IMPORTS & EXPORTS ===
|
|
478
|
+
// Import path and structure validation:
|
|
479
|
+
"import-x/no-absolute-path": "warn",
|
|
480
|
+
// Prevent absolute paths in imports (should use relative or package imports)
|
|
481
|
+
"import-x/newline-after-import": ["warn", { count: 1 }],
|
|
482
|
+
// Require exactly one blank line after imports
|
|
483
|
+
"import-x/no-cycle": ["error", { maxDepth: 1, ignoreExternal: true }],
|
|
484
|
+
// Prevent circular dependencies
|
|
485
|
+
"import-x/order": [
|
|
342
486
|
"warn",
|
|
343
|
-
{
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
"@typescript-eslint/no-unnecessary-boolean-literal-compare": "warn",
|
|
363
|
-
// TS consistency
|
|
364
|
-
"@typescript-eslint/consistent-indexed-object-style": ["error", "record"],
|
|
365
|
-
"@typescript-eslint/consistent-type-assertions": [
|
|
366
|
-
"error",
|
|
367
|
-
{ assertionStyle: "as" }
|
|
368
|
-
],
|
|
369
|
-
"@typescript-eslint/consistent-type-definitions": ["error", "type"],
|
|
370
|
-
"@typescript-eslint/consistent-type-exports": "error",
|
|
371
|
-
"@typescript-eslint/method-signature-style": "error",
|
|
372
|
-
// Expressions and async
|
|
373
|
-
"@typescript-eslint/no-confusing-void-expression": [
|
|
374
|
-
"error",
|
|
375
|
-
{ ignoreArrowShorthand: true }
|
|
487
|
+
{
|
|
488
|
+
"groups": [
|
|
489
|
+
"builtin",
|
|
490
|
+
// Node.js built-in modules
|
|
491
|
+
"external",
|
|
492
|
+
// Packages from node_modules
|
|
493
|
+
["type", "internal"],
|
|
494
|
+
// Type imports, Absolute imports (often aliased like 'src/components')
|
|
495
|
+
"parent",
|
|
496
|
+
// Relative imports from parent directories (../)
|
|
497
|
+
"sibling",
|
|
498
|
+
// Relative imports from sibling directories (./)
|
|
499
|
+
"index",
|
|
500
|
+
// Index file imports (./index.js)
|
|
501
|
+
"object"
|
|
502
|
+
// Imports from object notation
|
|
503
|
+
],
|
|
504
|
+
"newlines-between": "never"
|
|
505
|
+
}
|
|
376
506
|
],
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
"@typescript-eslint/no-misused-promises": "off",
|
|
380
|
-
"@typescript-eslint/no-var-requires": "off",
|
|
381
|
-
// TS modern prefs
|
|
382
|
-
"@typescript-eslint/prefer-includes": "error",
|
|
383
|
-
"@typescript-eslint/prefer-optional-chain": "error",
|
|
384
|
-
"@typescript-eslint/prefer-reduce-type-parameter": "error",
|
|
385
|
-
"@typescript-eslint/prefer-string-starts-ends-with": "error",
|
|
386
|
-
// --- Comment Formatting Rules ---
|
|
387
|
-
"spaced-comment": "off",
|
|
388
|
-
"@stylistic/spaced-comment": ["warn", "always", { line: { markers: ["!", "?", "-", "**"] } }],
|
|
389
|
-
// --- Unused Variables & Imports Rules ---
|
|
390
|
-
"no-unused-vars": "off",
|
|
391
|
-
"@stylistic/no-unused-vars": "off",
|
|
392
|
-
"sonarjs/no-unused-vars": "off",
|
|
507
|
+
// === UNUSED IMPORTS & VARIABLES ===
|
|
508
|
+
// Automatically remove unused imports:
|
|
393
509
|
"unused-imports/no-unused-imports": "error",
|
|
510
|
+
// Error on unused imports (auto-fixable)
|
|
511
|
+
// Handle unused variables with underscore convention:
|
|
394
512
|
"unused-imports/no-unused-vars": [
|
|
395
513
|
"warn",
|
|
396
514
|
{
|
|
397
515
|
vars: "all",
|
|
516
|
+
// Check all variables
|
|
398
517
|
varsIgnorePattern: "^_",
|
|
518
|
+
// Ignore variables starting with underscore
|
|
399
519
|
args: "after-used",
|
|
520
|
+
// Only check arguments after the last used one
|
|
400
521
|
argsIgnorePattern: "^_"
|
|
522
|
+
// Ignore arguments starting with underscore
|
|
401
523
|
}
|
|
402
524
|
],
|
|
403
|
-
//
|
|
525
|
+
// === BANNED APIS ===
|
|
526
|
+
// Ban imperative array/object operations in favor of modern syntax:
|
|
404
527
|
"ban/ban": [
|
|
405
528
|
"warn",
|
|
406
529
|
{
|
|
407
530
|
name: ["*", "concat"],
|
|
408
|
-
message: "
|
|
531
|
+
message: "Array.concat is an imperative operation. Use ES6 spread syntax instead: [...items, newItem]"
|
|
409
532
|
},
|
|
410
533
|
{
|
|
411
534
|
name: ["Object", "assign"],
|
|
412
|
-
message: "Use the spread operator
|
|
535
|
+
message: "Object.assign is imperative. Use the spread operator instead: {...obj}"
|
|
413
536
|
}
|
|
414
537
|
],
|
|
415
|
-
//
|
|
416
|
-
//
|
|
538
|
+
// === CODE STRUCTURE RESTRICTIONS ===
|
|
539
|
+
// Enforce functional programming patterns:
|
|
417
540
|
"no-loops/no-loops": "error",
|
|
418
|
-
//
|
|
541
|
+
// Ban for/while/do-while loops, use array methods instead
|
|
542
|
+
// Enforce pattern-based conditional logic:
|
|
419
543
|
"no-restricted-syntax": [
|
|
420
544
|
"error",
|
|
421
545
|
{
|
|
422
546
|
selector: "SwitchStatement",
|
|
423
|
-
message: "Switch statements are banned. Use `ts-pattern` instead."
|
|
547
|
+
message: "Switch statements are banned. Use `ts-pattern` library for pattern matching instead."
|
|
424
548
|
}
|
|
425
549
|
],
|
|
426
|
-
//
|
|
550
|
+
// === ESLINT COMMENTS ===
|
|
427
551
|
"@eslint-community/eslint-comments/require-description": ["error", { ignore: ["eslint-enable"] }],
|
|
428
|
-
//
|
|
552
|
+
// === TESTING LIBRARY ===
|
|
429
553
|
"testing-library/no-render-in-lifecycle": ["error", { allowTestingFrameworkSetupHook: "beforeEach" }],
|
|
430
|
-
|
|
431
|
-
// --- Import Rules ---
|
|
432
|
-
// Commented out rules kept for reference
|
|
433
|
-
// 'import/no-default-export': 'warn',
|
|
434
|
-
// 'import/no-restricted-paths': ['warn', { zones: restrictedPaths }], // Define restrictedPaths
|
|
435
|
-
"import-x/no-named-as-default-member": "off",
|
|
436
|
-
"import-x/no-absolute-path": "warn",
|
|
437
|
-
"import-x/newline-after-import": ["warn", { count: 1 }],
|
|
438
|
-
"import-x/no-cycle": ["error", { maxDepth: 1, ignoreExternal: true }],
|
|
439
|
-
"import-x/order": [
|
|
440
|
-
"warn",
|
|
441
|
-
{
|
|
442
|
-
groups: [
|
|
443
|
-
"builtin",
|
|
444
|
-
// Node.js built-in modules
|
|
445
|
-
"external",
|
|
446
|
-
// Packages from node_modules
|
|
447
|
-
["type", "internal"],
|
|
448
|
-
// Type imports, Absolute imports (often aliased like 'src/components')
|
|
449
|
-
"parent",
|
|
450
|
-
// Relative imports from parent directories (../)
|
|
451
|
-
"sibling",
|
|
452
|
-
// Relative imports from sibling directories (./)
|
|
453
|
-
"index",
|
|
454
|
-
// Index file imports (./index.js)
|
|
455
|
-
"object"
|
|
456
|
-
// Imports from object notation
|
|
457
|
-
]
|
|
458
|
-
}
|
|
459
|
-
],
|
|
460
|
-
// --- Sort Rules ---
|
|
461
|
-
"sort/imports": "off",
|
|
462
|
-
// use 'import-x/order' rule instead
|
|
463
|
-
"sort/object-properties": "off",
|
|
554
|
+
// === SORTING ===
|
|
464
555
|
"sort/type-properties": "warn",
|
|
465
|
-
|
|
466
|
-
// --- Unicorn Rules ---
|
|
467
|
-
"unicorn/prefer-global-this": "off",
|
|
468
|
-
"unicorn/prevent-abbreviations": "off",
|
|
469
|
-
"unicorn/no-array-reduce": "off",
|
|
470
|
-
"unicorn/no-array-for-each": "off",
|
|
471
|
-
"unicorn/prefer-top-level-await": "off",
|
|
472
|
-
"unicorn/no-array-callback-reference": "off",
|
|
473
|
-
"unicorn/prefer-switch": "off",
|
|
474
|
-
"unicorn/no-abusive-eslint-disable": "off",
|
|
475
|
-
"unicorn/prefer-object-from-entries": "off",
|
|
476
|
-
"unicorn/no-null": "off",
|
|
556
|
+
// === UNICORN ===
|
|
477
557
|
"unicorn/filename-case": [
|
|
478
558
|
"warn",
|
|
479
559
|
{
|
|
@@ -485,31 +565,8 @@ var config = [
|
|
|
485
565
|
"unicorn/no-unused-properties": "warn",
|
|
486
566
|
"unicorn/consistent-destructuring": "warn",
|
|
487
567
|
"unicorn/no-useless-undefined": ["warn", { checkArguments: false }],
|
|
488
|
-
//
|
|
489
|
-
"sonarjs/no-duplicated-branches": "warn"
|
|
490
|
-
"sonarjs/no-duplicate-string": "off",
|
|
491
|
-
"sonarjs/deprecation": "off",
|
|
492
|
-
"sonarjs/cognitive-complexity": "off",
|
|
493
|
-
// use 'complexity' rule instead
|
|
494
|
-
"sonarjs/no-nested-functions": "off",
|
|
495
|
-
// use 'complexity' rule instead
|
|
496
|
-
"sonarjs/function-return-type": "off",
|
|
497
|
-
// use '@typescript-eslint/explicit-module-boundary-types' rule instead
|
|
498
|
-
"sonarjs/no-redundant-optional": "off",
|
|
499
|
-
// use '@typescript-eslint/no-redundant-optional' rule instead
|
|
500
|
-
"sonarjs/no-commented-code": "off",
|
|
501
|
-
// slow rule
|
|
502
|
-
"sonarjs/todo-tag": "off",
|
|
503
|
-
// eventually re-enable
|
|
504
|
-
"sonarjs/pseudo-random": "off",
|
|
505
|
-
"sonarjs/different-types-comparison": "off",
|
|
506
|
-
// too many false positives
|
|
507
|
-
"sonarjs/redundant-type-aliases": "off",
|
|
508
|
-
"sonarjs/void-use": "off",
|
|
509
|
-
// allow to annotate async functions not explicitly awaited
|
|
510
|
-
"sonarjs/no-nested-conditional": "off",
|
|
511
|
-
// use 'no-nested-ternary' rule instead
|
|
512
|
-
"sonarjs/no-hardcoded-passwords": "off"
|
|
568
|
+
// === SONARJS ===
|
|
569
|
+
"sonarjs/no-duplicated-branches": "warn"
|
|
513
570
|
},
|
|
514
571
|
settings: {
|
|
515
572
|
"import-x/extensions": [".js", ".cjs", ".mjs"],
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/boolean-naming.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-magic-numbers -- config file */\n/* eslint-disable @typescript-eslint/naming-convention -- config file */\nimport eslint from '@eslint/js';\n// @ts-expect-error - no types available\nimport comments from '@eslint-community/eslint-plugin-eslint-comments/configs';\nimport stylistic from '@stylistic/eslint-plugin';\nimport { createTypeScriptImportResolver } from 'eslint-import-resolver-typescript';\nimport importXPlugin from 'eslint-plugin-import-x';\nimport sonarjsPlugin from 'eslint-plugin-sonarjs';\nimport sortPlugin from 'eslint-plugin-sort';\nimport testingLibraryPlugin from 'eslint-plugin-testing-library';\nimport unicornPlugin from 'eslint-plugin-unicorn';\nimport unusedImports from 'eslint-plugin-unused-imports';\nimport globals from 'globals';\nimport tseslint from 'typescript-eslint';\n// @ts-expect-error - no types available\nimport noLoopsPlugin from 'eslint-plugin-no-loops';\n// @ts-expect-error - no types available\nimport banPlugin from 'eslint-plugin-ban';\nimport type { Linter } from 'eslint';\nimport { booleanNameExceptions, booleanNamePrefixes } from './boolean-naming';\n\ntype Plugin = typeof testingLibraryPlugin;\n\nconst config: Linter.Config[] = [\n // Base recommended rules from ESLint\n eslint.configs.recommended,\n\n // TypeScript recommended configs\n ...tseslint.configs.recommendedTypeChecked,\n ...tseslint.configs.stylisticTypeChecked,\n ...tseslint.configs.strict,\n\n // Apply stylistic rules with customized settings\n stylistic.configs.customize({\n arrowParens: true,\n // jsx: true,\n braceStyle: '1tbs',\n commaDangle: 'always-multiline',\n indent: 2,\n quoteProps: 'consistent-as-needed',\n quotes: 'single',\n semi: true,\n }),\n\n // Import plugin configuration\n importXPlugin.flatConfigs.recommended,\n importXPlugin.flatConfigs.typescript,\n sortPlugin.configs['flat/recommended'],\n\n // Code quality plugins\n unicornPlugin.configs.recommended,\n (comments as { recommended: Linter.Config }).recommended,\n sonarjsPlugin.configs.recommended,\n\n // General JavaScript/TypeScript configuration\n {\n files: ['**/*.{js,mjs,cjs,ts,tsx}'],\n languageOptions: {\n ecmaVersion: 'latest',\n globals: {\n ...globals.browser,\n ...globals.node,\n ...globals.es2025,\n ...globals.vitest,\n },\n parserOptions: {\n projectService: true,\n warnOnUnsupportedTypeScriptVersion: true,\n },\n sourceType: 'module',\n },\n linterOptions: {\n reportUnusedDisableDirectives: true,\n },\n plugins: {\n 'no-loops': noLoopsPlugin as Plugin,\n 'ban': banPlugin as Plugin,\n 'testing-library': testingLibraryPlugin,\n 'unused-imports': unusedImports,\n },\n rules: {\n // --- Stylistic Rules ---\n // Core rules turned off in favor of stylistic rules\n 'quotes': 'off',\n 'jsx-quotes': 'off',\n 'func-call-spacing': 'off',\n 'dot-notation': 'off',\n 'no-unused-expressions': 'off',\n 'no-use-before-define': 'off',\n 'default-param-last': 'off',\n 'no-redeclare': 'off',\n 'no-shadow': 'off',\n\n // Stylistic (overrides vs stylistic recommended)\n 'quote-props': ['warn', 'consistent-as-needed'],\n '@stylistic/quotes': ['warn', 'single', { avoidEscape: true }],\n '@stylistic/jsx-quotes': ['warn', 'prefer-single'],\n '@stylistic/jsx-one-expression-per-line': 'off',\n '@stylistic/block-spacing': ['warn', 'never'],\n '@stylistic/object-curly-newline': [\n 'warn',\n { ObjectPattern: { multiline: true, consistent: true } },\n ],\n 'object-property-newline': [\n 'warn',\n { allowAllPropertiesOnSameLine: true },\n ],\n 'function-call-argument-newline': ['warn', 'consistent'],\n 'no-multiple-empty-lines': ['warn', { max: 1, maxEOF: 1 }],\n 'no-multi-spaces': 'warn',\n 'no-useless-rename': 'warn',\n 'arrow-spacing': 'warn',\n 'space-infix-ops': 'warn',\n '@stylistic/operator-linebreak': [\n 'warn',\n 'after',\n { overrides: { '?': 'before', ':': 'before' } },\n ],\n 'comma-style': ['warn', 'last'],\n 'complexity': ['warn', { max: 20 }],\n '@stylistic/max-len': [\n 'warn',\n {\n code: 100,\n comments: 120,\n ignoreUrls: true,\n ignoreTrailingComments: true,\n ignorePattern:\n String.raw`^.*eslint-(disable|enable).+|it\\(|ErrorCodes|@param|@return|^\\s*\\[[^\\]]+\\]:\\s*.+?;$`,\n ignoreTemplateLiterals: true,\n ignoreStrings: true,\n ignoreRegExpLiterals: true,\n },\n ],\n 'no-extra-parens': [\n 'error',\n 'all',\n {\n ignoreJSX: 'all', // don’t complain about JSX parens\n enforceForArrowConditionals: false,\n nestedBinaryExpressions: false,\n },\n ],\n '@stylistic/jsx-wrap-multilines': [\n 'error',\n {\n declaration: 'parens-new-line',\n assignment: 'parens-new-line',\n return: 'parens-new-line',\n arrow: 'parens-new-line',\n condition: 'parens-new-line',\n logical: 'parens-new-line',\n },\n ],\n 'max-lines-per-function': ['error', 120],\n 'max-lines': ['error', { max: 900, skipBlankLines: true }],\n 'func-style': ['warn', 'expression'],\n 'padding-line-between-statements': [\n 'error',\n {\n // Require a blank line after directive prologues (\"use client\", \"use strict\", etc.)\n blankLine: 'always',\n prev: 'directive',\n next: '*',\n },\n {\n // But we *don't* want to require blank lines between multiple directives\n // (so `\"use client\";` can be followed immediately by `\"use strict\";`)\n blankLine: 'any',\n prev: 'directive',\n next: 'directive',\n },\n {\n // No blank line between import and import statements\n blankLine: 'never',\n prev: 'import',\n next: 'import',\n },\n ],\n 'object-shorthand': ['warn', 'always'],\n 'arrow-body-style': ['warn', 'as-needed'],\n 'prefer-destructuring': 'warn',\n 'prefer-arrow-callback': 'error',\n 'prefer-template': 'warn',\n 'one-var': ['error', 'never'],\n 'no-bitwise': 'error',\n\n // TypeScript equivalents and customizations\n '@typescript-eslint/no-redeclare': 'error',\n '@typescript-eslint/default-param-last': 'error',\n '@typescript-eslint/require-await': 'off',\n 'no-return-await': 'warn',\n 'no-nested-ternary': 'warn',\n 'no-unneeded-ternary': 'warn',\n 'no-else-return': 'warn',\n 'no-constant-condition': 'off',\n '@typescript-eslint/dot-notation': 'error',\n '@typescript-eslint/no-unused-expressions': [\n 'error',\n {\n allowShortCircuit: true,\n allowTernary: true,\n allowTaggedTemplates: true,\n },\n ],\n '@typescript-eslint/no-use-before-define': [\n 'error',\n { variables: true, functions: false },\n ],\n 'no-console': 'warn',\n 'no-useless-concat': 'warn',\n 'no-new': 'error',\n 'no-extra-semi': 'error',\n 'no-implicit-coercion': ['warn', { allow: ['!!'] }],\n 'no-extra-boolean-cast': 'warn',\n\n // Magic numbers\n 'no-magic-numbers': 'off',\n '@typescript-eslint/no-magic-numbers': [\n 'error',\n {\n ignoreEnums: true,\n ignoreArrayIndexes: true,\n ignoreDefaultValues: true,\n ignoreTypeIndexes: true,\n ignore: [0, 1, -1, 2],\n },\n ],\n\n // More stylistic specifics\n '@stylistic/brace-style': ['warn', '1tbs', { allowSingleLine: true }],\n '@stylistic/comma-dangle': ['warn', 'always-multiline'],\n '@stylistic/comma-spacing': 'warn',\n '@stylistic/function-call-spacing': ['error'],\n\n // Naming\n 'camelcase': ['warn', { allow: ['^_', 'content_type', 'reply_to'] }],\n '@typescript-eslint/naming-convention': [\n 'warn',\n // Property naming rules\n {\n selector: 'property',\n format: ['camelCase', 'UPPER_CASE'],\n leadingUnderscore: 'allow',\n filter: {\n regex: String.raw`^_|[- /?:{}@%]|Provider|Comp|^item$|^condition$|^container$|^Container$|^\\d+$`, // ignore properties with dashes/slashes/spaces\n match: false,\n },\n },\n // Variable-like naming rules\n {\n selector: 'variableLike',\n format: ['camelCase', 'UPPER_CASE', 'PascalCase'],\n trailingUnderscore: 'allow',\n },\n // Function variable naming rules\n {\n selector: 'variable',\n format: ['camelCase', 'PascalCase'],\n types: ['function'],\n filter: {\n regex: '^_|Comp|Provider|Stack|Wrapper|Root', // allowing for 'Component' parameter names\n match: false,\n },\n },\n // Type naming rules\n {\n selector: 'typeLike',\n format: ['PascalCase'],\n filter: {\n regex: '^_|_$',\n match: false,\n },\n },\n // Boolean naming rules\n {\n selector: ['variable', 'property', 'parameter', 'typeProperty'],\n types: ['boolean'],\n format: ['UPPER_CASE', 'PascalCase'], // must be PascalCase because prefix is trimmed\n prefix: booleanNamePrefixes,\n filter: {\n regex: booleanNameExceptions,\n match: false,\n },\n },\n ],\n\n // TS type safety and preferences\n '@typescript-eslint/no-explicit-any': ['warn', { fixToUnknown: true }],\n '@typescript-eslint/no-inferrable-types': ['warn', { ignoreParameters: true }],\n '@typescript-eslint/no-shadow': 'error',\n '@typescript-eslint/no-unsafe-enum-comparison': 'off',\n '@typescript-eslint/no-base-to-string': 'off',\n '@typescript-eslint/prefer-nullish-coalescing': [\n 'warn',\n { ignorePrimitives: { string: true } },\n ],\n '@typescript-eslint/no-non-null-asserted-nullish-coalescing': 'error',\n '@typescript-eslint/no-non-null-asserted-optional-chain': 'error',\n '@typescript-eslint/no-extra-non-null-assertion': 'error',\n '@typescript-eslint/no-confusing-non-null-assertion': 'error',\n '@typescript-eslint/ban-ts-comment': [\n 'error',\n { 'ts-expect-error': 'allow-with-description', 'ts-ignore': 'allow-with-description' },\n ],\n '@typescript-eslint/no-empty-object-type': 'warn',\n '@typescript-eslint/no-unsafe-function-type': 'warn',\n '@typescript-eslint/no-wrapper-object-types': 'warn',\n '@typescript-eslint/array-type': ['warn', { default: 'array' }],\n '@stylistic/array-element-newline': ['warn', { multiline: true, consistent: true }],\n '@stylistic/array-bracket-newline': ['warn', 'consistent'],\n '@stylistic/no-mixed-operators': ['warn', { allowSamePrecedence: true }],\n '@stylistic/rest-spread-spacing': ['warn', 'never'],\n '@typescript-eslint/no-unnecessary-condition': 'warn',\n '@typescript-eslint/no-unnecessary-boolean-literal-compare': 'warn',\n\n // TS consistency\n '@typescript-eslint/consistent-indexed-object-style': ['error', 'record'],\n '@typescript-eslint/consistent-type-assertions': [\n 'error',\n { assertionStyle: 'as' },\n ],\n '@typescript-eslint/consistent-type-definitions': ['error', 'type'],\n '@typescript-eslint/consistent-type-exports': 'error',\n '@typescript-eslint/method-signature-style': 'error',\n\n // Expressions and async\n '@typescript-eslint/no-confusing-void-expression': [\n 'error',\n { ignoreArrowShorthand: true },\n ],\n '@typescript-eslint/no-invalid-void-type': 'off',\n '@typescript-eslint/no-meaningless-void-operator': 'error',\n '@typescript-eslint/no-misused-promises': 'off',\n '@typescript-eslint/no-var-requires': 'off',\n\n // TS modern prefs\n '@typescript-eslint/prefer-includes': 'error',\n '@typescript-eslint/prefer-optional-chain': 'error',\n '@typescript-eslint/prefer-reduce-type-parameter': 'error',\n '@typescript-eslint/prefer-string-starts-ends-with': 'error',\n\n // --- Comment Formatting Rules ---\n 'spaced-comment': 'off',\n '@stylistic/spaced-comment': ['warn', 'always', { line: { markers: ['!', '?', '-', '**'] } }],\n\n // --- Unused Variables & Imports Rules ---\n 'no-unused-vars': 'off',\n '@stylistic/no-unused-vars': 'off',\n 'sonarjs/no-unused-vars': 'off',\n 'unused-imports/no-unused-imports': 'error',\n 'unused-imports/no-unused-vars': [\n 'warn',\n {\n vars: 'all',\n varsIgnorePattern: '^_',\n args: 'after-used',\n argsIgnorePattern: '^_',\n },\n ],\n\n // --- Banned API Rules ---\n 'ban/ban': [\n 'warn',\n {\n name: ['*', 'concat'],\n message:\n 'Imperative operation: prefer use ES6 spread, i.e. [...items, newItem]',\n },\n {\n name: ['Object', 'assign'],\n message: 'Use the spread operator `{...obj}` instead',\n },\n ],\n\n // --- Code Structure Restrictions ---\n // No loops rule\n 'no-loops/no-loops': 'error',\n\n // Syntax restrictions\n 'no-restricted-syntax': [\n 'error',\n {\n selector: 'SwitchStatement',\n message:\n 'Switch statements are banned. Use `ts-pattern` instead.',\n },\n ],\n\n // --- ESLint Comments Rules ---\n '@eslint-community/eslint-comments/require-description': ['error', { ignore: ['eslint-enable'] }],\n\n // --- Testing Library Rules ---\n 'testing-library/no-render-in-lifecycle': ['error', { allowTestingFrameworkSetupHook: 'beforeEach' }],\n 'testing-library/no-unnecessary-act': 'off',\n\n // --- Import Rules ---\n // Commented out rules kept for reference\n // 'import/no-default-export': 'warn',\n // 'import/no-restricted-paths': ['warn', { zones: restrictedPaths }], // Define restrictedPaths\n 'import-x/no-named-as-default-member': 'off',\n 'import-x/no-absolute-path': 'warn',\n 'import-x/newline-after-import': ['warn', { count: 1 }],\n 'import-x/no-cycle': ['error', { maxDepth: 1, ignoreExternal: true }],\n 'import-x/order': ['warn',\n {\n groups: [\n 'builtin', // Node.js built-in modules\n 'external', // Packages from node_modules\n ['type', 'internal'], // Type imports, Absolute imports (often aliased like 'src/components')\n 'parent', // Relative imports from parent directories (../)\n 'sibling', // Relative imports from sibling directories (./)\n 'index', // Index file imports (./index.js)\n 'object', // Imports from object notation\n ],\n }],\n\n // --- Sort Rules ---\n 'sort/imports': 'off', // use 'import-x/order' rule instead\n 'sort/object-properties': 'off',\n 'sort/type-properties': 'warn',\n 'sort/string-unions': 'off',\n\n // --- Unicorn Rules ---\n 'unicorn/prefer-global-this': 'off',\n 'unicorn/prevent-abbreviations': 'off',\n 'unicorn/no-array-reduce': 'off',\n 'unicorn/no-array-for-each': 'off',\n 'unicorn/prefer-top-level-await': 'off',\n 'unicorn/no-array-callback-reference': 'off',\n 'unicorn/prefer-switch': 'off',\n 'unicorn/no-abusive-eslint-disable': 'off',\n 'unicorn/prefer-object-from-entries': 'off',\n 'unicorn/no-null': 'off',\n 'unicorn/filename-case': [\n 'warn',\n {\n cases: { camelCase: true, kebabCase: true },\n ignore: [/\\.(js|cjs)$/], // Keep ignoring JS/CJS if needed\n },\n ],\n 'unicorn/no-unused-properties': 'warn',\n 'unicorn/consistent-destructuring': 'warn',\n 'unicorn/no-useless-undefined': ['warn', { checkArguments: false }],\n\n // --- SonarJS Rules ---\n 'sonarjs/no-duplicated-branches': 'warn',\n 'sonarjs/no-duplicate-string': 'off',\n 'sonarjs/deprecation': 'off',\n 'sonarjs/cognitive-complexity': 'off', // use 'complexity' rule instead\n 'sonarjs/no-nested-functions': 'off', // use 'complexity' rule instead\n 'sonarjs/function-return-type': 'off', // use '@typescript-eslint/explicit-module-boundary-types' rule instead\n 'sonarjs/no-redundant-optional': 'off', // use '@typescript-eslint/no-redundant-optional' rule instead\n 'sonarjs/no-commented-code': 'off', // slow rule\n 'sonarjs/todo-tag': 'off', // eventually re-enable\n 'sonarjs/pseudo-random': 'off',\n 'sonarjs/different-types-comparison': 'off', // too many false positives\n 'sonarjs/redundant-type-aliases': 'off',\n 'sonarjs/void-use': 'off', // allow to annotate async functions not explicitly awaited\n 'sonarjs/no-nested-conditional': 'off', // use 'no-nested-ternary' rule instead\n 'sonarjs/no-hardcoded-passwords': 'off',\n },\n settings: {\n 'import-x/extensions': ['.js', '.cjs', '.mjs'],\n 'import-x/parsers': { 'typescript-eslint': ['.ts', '.tsx'] },\n 'import-x/resolver-next': [\n createTypeScriptImportResolver({\n alwaysTryTypes: true,\n bun: true,\n }),\n ],\n },\n },\n\n // Config files overrides\n {\n files: ['**/*.config.{ts,js,mjs,cjs}'],\n rules: {\n '@typescript-eslint/no-magic-numbers': 'off',\n '@typescript-eslint/naming-convention': 'off',\n },\n },\n];\n\n// Export shared utilities for use in other packages\nexport { booleanNameConvention, booleanNameExceptions, booleanNamePrefixes } from './boolean-naming';\n\nexport default config;\n\n/* eslint-enable @typescript-eslint/no-magic-numbers */\n/* eslint-enable @typescript-eslint/naming-convention */\n","/**\n * Combines an array of regex expressions into a single regex expression via the union operator.\n */\nconst concatElementsByRegexUnion = (elements: string[]) =>\n elements.reduce((element, accum, index) => `${accum}${index === 0 ? '' : '|'}${element}`, '');\n\n// Prefixes allowed at the start of a boolean variable/parameter name\nexport const booleanNamePrefixes = [\n 'is',\n 'as',\n 'are',\n 'was',\n 'should',\n 'has',\n 'can',\n 'did',\n 'will',\n 'use',\n 'does',\n 'show',\n 'allow',\n 'enabled',\n 'enable',\n 'disable',\n 'editable',\n 'refetch',\n 'destructive',\n 'hide',\n 'error',\n 'override',\n 'need',\n 'must',\n 'require',\n 'want',\n 'with',\n];\n// Regex for the rest of a boolean variable/parameter name (the part after the prefix)\nconst booleanNameSuffixes = '[A-Z]([A-Za-z]?)+';\n// Exceptions to the rule for allowable boolean variable/parameter names\nconst booleanNameExceptionsList = [\n '^_',\n '_$',\n '[- /?:{}@%]',\n '^[A-Z][a-z]*([A-Z][a-z]*)',\n '^item$',\n '^value$',\n '^condition$',\n '^container$',\n '^included',\n '^center$',\n '^debug$',\n '^concurrent',\n '^animated$',\n '^allow',\n '^visible',\n '^merge$',\n '^multiSelect$',\n 'Shown$',\n '^enumerable$',\n '^configurable$',\n];\n// A singular regex string for the boolean name exceptions (instead of array of expressions)\nexport const booleanNameExceptions = concatElementsByRegexUnion(booleanNameExceptionsList);\n\n// The full boolean naming convetions regex\nexport const booleanNameConvention = new RegExp(\n `${concatElementsByRegexUnion(\n booleanNamePrefixes,\n )}|${booleanNameSuffixes}|${booleanNameExceptions}`,\n).toString();\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/boolean-naming.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-magic-numbers, @typescript-eslint/naming-convention -- config file */\nimport eslint from '@eslint/js';\n// @ts-expect-error - no types available\nimport comments from '@eslint-community/eslint-plugin-eslint-comments/configs';\nimport stylistic from '@stylistic/eslint-plugin';\nimport { createTypeScriptImportResolver } from 'eslint-import-resolver-typescript';\nimport importXPlugin from 'eslint-plugin-import-x';\nimport sonarjsPlugin from 'eslint-plugin-sonarjs';\nimport sortPlugin from 'eslint-plugin-sort';\nimport testingLibraryPlugin from 'eslint-plugin-testing-library';\nimport unicornPlugin from 'eslint-plugin-unicorn';\nimport unusedImports from 'eslint-plugin-unused-imports';\nimport globals from 'globals';\nimport tseslint from 'typescript-eslint';\n// @ts-expect-error - no types available\nimport noLoopsPlugin from 'eslint-plugin-no-loops';\n// @ts-expect-error - no types available\nimport banPlugin from 'eslint-plugin-ban';\nimport type { Linter } from 'eslint';\nimport { booleanNameExceptions, booleanNamePrefixes } from './boolean-naming';\n\ntype Plugin = typeof testingLibraryPlugin;\n\nconst config: Linter.Config[] = [\n // Base configurations\n eslint.configs.recommended,\n ...tseslint.configs.recommendedTypeChecked,\n ...tseslint.configs.stylisticTypeChecked,\n ...tseslint.configs.strict,\n\n // Plugin configurations\n stylistic.configs.customize({\n arrowParens: true,\n braceStyle: '1tbs',\n commaDangle: 'always-multiline',\n indent: 2,\n quoteProps: 'consistent-as-needed',\n quotes: 'single',\n semi: true,\n }),\n importXPlugin.flatConfigs.recommended,\n importXPlugin.flatConfigs.typescript,\n sortPlugin.configs['flat/recommended'],\n unicornPlugin.configs.recommended,\n (comments as { recommended: Linter.Config }).recommended,\n sonarjsPlugin.configs.recommended,\n\n // Main configuration\n {\n files: ['**/*.{js,mjs,cjs,ts,tsx}'],\n languageOptions: {\n ecmaVersion: 'latest',\n globals: {\n ...globals.browser,\n ...globals.node,\n ...globals.es2025,\n ...globals.vitest,\n },\n parserOptions: {\n projectService: true,\n warnOnUnsupportedTypeScriptVersion: true,\n },\n sourceType: 'module',\n },\n linterOptions: {\n reportUnusedDisableDirectives: true,\n },\n plugins: {\n 'no-loops': noLoopsPlugin as Plugin,\n 'ban': banPlugin as Plugin,\n 'testing-library': testingLibraryPlugin,\n 'unused-imports': unusedImports,\n },\n rules: {\n // === DISABLED CORE RULES (replaced by plugins) ===\n // These core ESLint rules are disabled because we use enhanced versions from plugins:\n 'quotes': 'off', // Replaced by @stylistic/quotes with better formatting options and JSX support\n 'jsx-quotes': 'off', // Replaced by @stylistic/jsx-quotes for JSX-specific quote handling\n 'func-call-spacing': 'off', // Replaced by @stylistic/function-call-spacing for consistent spacing\n 'dot-notation': 'off', // Replaced by @typescript-eslint/dot-notation with TypeScript awareness\n 'no-unused-expressions': 'off', // Replaced by @typescript-eslint/no-unused-expressions with better TS support\n 'no-use-before-define': 'off', // Replaced by @typescript-eslint/no-use-before-define for TypeScript hoisting rules\n 'default-param-last': 'off', // Replaced by @typescript-eslint/default-param-last with TS parameter awareness\n 'no-redeclare': 'off', // Replaced by @typescript-eslint/no-redeclare for better type checking\n 'no-shadow': 'off', // Replaced by @typescript-eslint/no-shadow for TypeScript variable shadowing\n 'spaced-comment': 'off', // Replaced by @stylistic/spaced-comment with more formatting options\n 'no-unused-vars': 'off', // Replaced by @typescript-eslint/no-unused-vars and unused-imports plugin\n '@stylistic/no-unused-vars': 'off', // Replaced by unused-imports/no-unused-vars for better import handling\n 'sonarjs/no-unused-vars': 'off', // Replaced by unused-imports/no-unused-vars to avoid conflicts\n 'no-magic-numbers': 'off', // Replaced by @typescript-eslint/no-magic-numbers with TypeScript-aware exceptions\n\n // === DISABLED PLUGIN RULES (intentionally turned off) ===\n // Sort plugin rules (replaced by import-x/order):\n 'sort/imports': 'off', // Replaced by import-x/order which has better TypeScript support\n 'sort/object-properties': 'off', // Object property sorting is not required\n 'sort/string-unions': 'off', // String union sorting is not required\n\n // Unicorn rules that are too restrictive or don't match our style:\n 'unicorn/prefer-global-this': 'off', // GlobalThis is not always preferred over window/global\n 'unicorn/prevent-abbreviations': 'off', // Common abbreviations (props, args, etc.) are acceptable\n 'unicorn/no-array-reduce': 'off', // Array.reduce is a valid and useful method\n 'unicorn/no-array-for-each': 'off', // Array.forEach is preferred over for...of in many cases\n 'unicorn/prefer-top-level-await': 'off', // Top-level await is not always appropriate\n 'unicorn/no-array-callback-reference': 'off', // Method references as callbacks are acceptable\n 'unicorn/prefer-switch': 'off', // Switch statements are banned (see no-restricted-syntax below)\n 'unicorn/prefer-object-from-entries': 'off', // Object.fromEntries is not always better\n 'unicorn/no-null': 'off', // Null is still a valid value in many contexts\n\n // SonarJS rules that are disabled for various reasons:\n 'sonarjs/cognitive-complexity': 'off', // Replaced by core complexity rule which is simpler\n 'sonarjs/no-nested-functions': 'off', // Replaced by complexity rule, nested functions are sometimes needed\n 'sonarjs/function-return-type': 'off', // TypeScript handles return type checking better\n 'sonarjs/no-redundant-optional': 'off', // TypeScript handles optional types better\n 'sonarjs/no-commented-code': 'off', // Performance-intensive rule, commented code is sometimes useful\n 'sonarjs/todo-tag': 'off', // TODO comments are acceptable during development\n 'sonarjs/pseudo-random': 'off', // Math.random() is acceptable for non-cryptographic uses\n 'sonarjs/void-use': 'off', // Allow void operators for type assertions and async function annotations\n 'sonarjs/no-nested-conditional': 'off', // Replaced by no-nested-ternary rule\n 'sonarjs/no-hardcoded-passwords': 'off',\n\n // Import and testing rules:\n 'import-x/no-named-as-default-member': 'off', // Named default exports are sometimes necessary\n\n // === STYLISTIC & FORMATTING ===\n '@stylistic/quotes': ['warn', 'single', { avoidEscape: true }],\n '@stylistic/jsx-quotes': ['warn', 'prefer-single'],\n '@stylistic/block-spacing': ['warn', 'never'],\n '@stylistic/object-curly-newline': [\n 'warn',\n { ObjectPattern: { multiline: true, consistent: true } },\n ],\n '@stylistic/operator-linebreak': [\n 'warn',\n 'after',\n { overrides: { '?': 'before', ':': 'before' } },\n ],\n '@stylistic/max-len': [\n 'warn',\n {\n code: 100,\n comments: 120,\n ignoreUrls: true,\n ignoreTrailingComments: true,\n ignorePattern: String.raw`^.*eslint-(disable|enable).+|it\\(|ErrorCodes|@param|@return|^\\s*\\[[^\\]]+\\]:\\s*.+?;$`,\n ignoreTemplateLiterals: true,\n ignoreStrings: true,\n ignoreRegExpLiterals: true,\n },\n ],\n '@stylistic/jsx-wrap-multilines': [\n 'error',\n {\n declaration: 'parens-new-line',\n assignment: 'parens-new-line',\n return: 'parens-new-line',\n arrow: 'parens-new-line',\n condition: 'parens-new-line',\n logical: 'parens-new-line',\n },\n ],\n '@stylistic/brace-style': ['warn', '1tbs', { allowSingleLine: true }],\n '@stylistic/comma-dangle': ['warn', 'always-multiline'],\n '@stylistic/comma-spacing': 'warn',\n '@stylistic/function-call-spacing': ['error'],\n '@stylistic/array-element-newline': ['warn', { multiline: true, consistent: true }],\n '@stylistic/array-bracket-newline': ['warn', 'consistent'],\n '@stylistic/no-mixed-operators': ['warn', { allowSamePrecedence: true }],\n '@stylistic/rest-spread-spacing': ['warn', 'never'],\n '@stylistic/spaced-comment': ['warn', 'always', { line: { markers: ['!', '?', '-', '**'] } }],\n '@stylistic/jsx-one-expression-per-line': 'warn',\n\n // === CODE QUALITY & STRUCTURE ===\n // Complexity and size limits:\n 'complexity': ['warn', { max: 20 }], // Warn when cyclomatic complexity exceeds 20\n 'max-lines-per-function': ['error', 120], // Error when functions exceed 120 lines\n 'max-lines': ['error', { max: 600, skipBlankLines: true }], // Error when files exceed 900 lines\n\n // Code style preferences:\n 'func-style': ['warn', 'expression'], // Prefer function expressions over declarations\n 'object-shorthand': ['warn', 'always'], // Use object shorthand ({ name } instead of { name: name })\n 'arrow-body-style': ['warn', 'as-needed'], // Use concise arrow functions when possible\n 'prefer-destructuring': 'warn', // Prefer destructuring for object/array access\n 'prefer-arrow-callback': 'error', // Prefer arrow functions for callbacks\n 'prefer-template': 'warn', // Use template literals instead of string concatenation\n 'one-var': ['error', 'never'], // Declare each variable separately\n 'no-bitwise': 'error', // Disallow bitwise operators (often used for obfuscation)\n\n // Parentheses and expression clarity:\n 'no-extra-parens': [\n 'error',\n 'all',\n {\n ignoreJSX: 'all', // JSX requires parentheses for multi-line expressions\n enforceForArrowConditionals: false, // Allow parentheses in arrow conditionals\n nestedBinaryExpressions: false, // Allow parentheses for clarity in nested expressions\n },\n ],\n\n // === SECURITY & BEST PRACTICES ===\n // Prevent dangerous code execution patterns:\n 'no-eval': 'error', // Disallows eval() which can execute arbitrary code\n 'no-implied-eval': 'error', // Catches indirect eval usage (setTimeout with string, etc.)\n 'no-new-func': 'error', // Prevents Function constructor which is similar to eval\n 'no-script-url': 'error', // Disallows javascript: URLs which are XSS vectors\n\n // Error handling and promises:\n 'prefer-promise-reject-errors': 'error', // Ensures promises are rejected with Error objects\n 'no-throw-literal': 'error', // Prevents throwing non-Error objects (strings, numbers, etc.)\n\n // Code quality and safety:\n 'no-unreachable-loop': 'error', // Catches loops with unreachable iterations\n 'no-unsafe-negation': 'error', // Prevents unsafe negation patterns that can cause bugs\n 'yoda': 'error', // Enforces consistent comparison order (variable == constant, not constant == variable)\n\n // Promise constructor safety:\n 'no-promise-executor-return': 'error', // Prevents returning values from promise executor\n 'no-async-promise-executor': 'error', // Prevents async promise constructors (anti-pattern)\n\n // === GENERAL JAVASCRIPT RULES ===\n 'quote-props': ['warn', 'consistent-as-needed'],\n 'object-property-newline': ['warn', { allowAllPropertiesOnSameLine: true }],\n 'function-call-argument-newline': ['warn', 'consistent'],\n 'no-multiple-empty-lines': ['warn', { max: 1, maxEOF: 1 }],\n 'no-multi-spaces': 'warn',\n 'no-useless-rename': 'warn',\n 'arrow-spacing': 'warn',\n 'space-infix-ops': 'warn',\n 'comma-style': ['warn', 'last'],\n 'no-nested-ternary': 'warn',\n 'no-unneeded-ternary': 'warn',\n 'no-else-return': 'error',\n 'no-console': 'warn',\n 'no-useless-concat': 'warn',\n 'no-new': 'error',\n 'no-extra-semi': 'error',\n 'no-implicit-coercion': ['warn', { allow: ['!!'] }],\n 'no-extra-boolean-cast': 'warn',\n 'padding-line-between-statements': [\n 'error',\n {\n blankLine: 'always',\n prev: 'directive',\n next: '*',\n },\n {\n blankLine: 'any',\n prev: 'directive',\n next: 'directive',\n },\n {\n blankLine: 'never',\n prev: 'import',\n next: 'import',\n },\n ],\n\n // === TYPESCRIPT RULES ===\n // Type safety & preferences\n '@typescript-eslint/no-explicit-any': ['warn', { fixToUnknown: true }],\n '@typescript-eslint/no-inferrable-types': ['warn', { ignoreParameters: true }],\n '@typescript-eslint/prefer-nullish-coalescing': [\n 'warn',\n { ignorePrimitives: { string: true } },\n ],\n '@typescript-eslint/no-non-null-asserted-nullish-coalescing': 'error',\n '@typescript-eslint/no-non-null-asserted-optional-chain': 'error',\n '@typescript-eslint/no-extra-non-null-assertion': 'error',\n '@typescript-eslint/no-confusing-non-null-assertion': 'error',\n '@typescript-eslint/ban-ts-comment': [\n 'error',\n { 'ts-expect-error': 'allow-with-description', 'ts-ignore': 'allow-with-description' },\n ],\n '@typescript-eslint/no-empty-object-type': 'warn',\n '@typescript-eslint/no-unsafe-function-type': 'warn',\n '@typescript-eslint/no-wrapper-object-types': 'warn',\n '@typescript-eslint/array-type': ['warn', { default: 'array' }],\n '@typescript-eslint/no-unnecessary-condition': 'warn',\n '@typescript-eslint/no-unnecessary-boolean-literal-compare': 'warn',\n '@typescript-eslint/no-floating-promises': 'error',\n '@typescript-eslint/await-thenable': 'error',\n '@typescript-eslint/prefer-readonly': 'warn',\n '@typescript-eslint/no-invalid-void-type': 'error', // Void types are valid in many contexts (e.g., Promise<void>)\n '@typescript-eslint/no-misused-promises': 'error', // Too many false positives with promise handling\n\n // TypeScript consistency\n '@typescript-eslint/consistent-indexed-object-style': ['error', 'record'],\n '@typescript-eslint/consistent-type-assertions': ['error', { assertionStyle: 'as' }],\n '@typescript-eslint/consistent-type-definitions': ['error', 'type'],\n '@typescript-eslint/consistent-type-exports': 'error',\n '@typescript-eslint/method-signature-style': 'error',\n\n // TypeScript equivalents of core rules\n '@typescript-eslint/no-redeclare': 'error',\n '@typescript-eslint/default-param-last': 'error',\n '@typescript-eslint/dot-notation': 'error',\n '@typescript-eslint/no-unused-expressions': [\n 'error',\n {\n allowShortCircuit: true,\n allowTernary: true,\n allowTaggedTemplates: true,\n },\n ],\n '@typescript-eslint/no-use-before-define': [\n 'error',\n { variables: true, functions: false },\n ],\n '@typescript-eslint/no-shadow': 'error',\n '@typescript-eslint/no-magic-numbers': [\n 'error',\n {\n ignoreEnums: true,\n ignoreArrayIndexes: true,\n ignoreDefaultValues: true,\n ignoreTypeIndexes: true,\n ignore: [0, 1, -1, 2],\n },\n ],\n\n // Expressions and async\n '@typescript-eslint/no-confusing-void-expression': [\n 'error',\n { ignoreArrowShorthand: true },\n ],\n '@typescript-eslint/no-meaningless-void-operator': 'error',\n\n // TypeScript modern preferences\n '@typescript-eslint/prefer-includes': 'error',\n '@typescript-eslint/prefer-optional-chain': 'error',\n '@typescript-eslint/prefer-reduce-type-parameter': 'error',\n '@typescript-eslint/prefer-string-starts-ends-with': 'error',\n\n // === NAMING CONVENTIONS ===\n 'camelcase': ['warn', { allow: ['^_', 'content_type', 'reply_to'] }],\n '@typescript-eslint/naming-convention': [\n 'warn',\n {\n selector: 'property',\n format: ['camelCase', 'UPPER_CASE'],\n leadingUnderscore: 'allow',\n filter: {\n regex: String.raw`^_|[- /?:{}@%]|Provider|Comp|^item$|^condition$|^container$|^Container$|^\\d+$`,\n match: false,\n },\n },\n {\n selector: 'variableLike',\n format: ['camelCase', 'UPPER_CASE', 'PascalCase'],\n trailingUnderscore: 'allow',\n },\n {\n selector: 'variable',\n format: ['camelCase', 'PascalCase'],\n types: ['function'],\n filter: {\n regex: '^_|Comp|Provider|Stack|Wrapper|Root',\n match: false,\n },\n },\n {\n selector: 'typeLike',\n format: ['PascalCase'],\n filter: {\n regex: '^_|_$',\n match: false,\n },\n },\n {\n selector: ['variable', 'property', 'parameter', 'typeProperty'],\n types: ['boolean'],\n format: ['UPPER_CASE', 'PascalCase'],\n prefix: booleanNamePrefixes,\n filter: {\n regex: booleanNameExceptions,\n match: false,\n },\n },\n ],\n\n // === IMPORTS & EXPORTS ===\n // Import path and structure validation:\n 'import-x/no-absolute-path': 'warn', // Prevent absolute paths in imports (should use relative or package imports)\n 'import-x/newline-after-import': ['warn', { count: 1 }], // Require exactly one blank line after imports\n 'import-x/no-cycle': ['error', { maxDepth: 1, ignoreExternal: true }], // Prevent circular dependencies\n 'import-x/order': ['warn',\n {\n 'groups': [\n 'builtin', // Node.js built-in modules\n 'external', // Packages from node_modules\n ['type', 'internal'], // Type imports, Absolute imports (often aliased like 'src/components')\n 'parent', // Relative imports from parent directories (../)\n 'sibling', // Relative imports from sibling directories (./)\n 'index', // Index file imports (./index.js)\n 'object', // Imports from object notation\n ],\n 'newlines-between': 'never',\n }],\n\n // === UNUSED IMPORTS & VARIABLES ===\n // Automatically remove unused imports:\n 'unused-imports/no-unused-imports': 'error', // Error on unused imports (auto-fixable)\n\n // Handle unused variables with underscore convention:\n 'unused-imports/no-unused-vars': [\n 'warn',\n {\n vars: 'all', // Check all variables\n varsIgnorePattern: '^_', // Ignore variables starting with underscore\n args: 'after-used', // Only check arguments after the last used one\n argsIgnorePattern: '^_', // Ignore arguments starting with underscore\n },\n ],\n\n // === BANNED APIS ===\n // Ban imperative array/object operations in favor of modern syntax:\n 'ban/ban': [\n 'warn',\n {\n name: ['*', 'concat'],\n message: 'Array.concat is an imperative operation. Use ES6 spread syntax instead: [...items, newItem]',\n },\n {\n name: ['Object', 'assign'],\n message: 'Object.assign is imperative. Use the spread operator instead: {...obj}',\n },\n ],\n\n // === CODE STRUCTURE RESTRICTIONS ===\n // Enforce functional programming patterns:\n 'no-loops/no-loops': 'error', // Ban for/while/do-while loops, use array methods instead\n\n // Enforce pattern-based conditional logic:\n 'no-restricted-syntax': [\n 'error',\n {\n selector: 'SwitchStatement',\n message: 'Switch statements are banned. Use `ts-pattern` library for pattern matching instead.',\n },\n ],\n\n // === ESLINT COMMENTS ===\n '@eslint-community/eslint-comments/require-description': ['error', { ignore: ['eslint-enable'] }],\n\n // === TESTING LIBRARY ===\n 'testing-library/no-render-in-lifecycle': ['error', { allowTestingFrameworkSetupHook: 'beforeEach' }],\n\n // === SORTING ===\n 'sort/type-properties': 'warn',\n\n // === UNICORN ===\n 'unicorn/filename-case': [\n 'warn',\n {\n cases: { camelCase: true, kebabCase: true },\n ignore: [/\\.(js|cjs)$/], // Keep ignoring JS/CJS if needed\n },\n ],\n 'unicorn/no-unused-properties': 'warn',\n 'unicorn/consistent-destructuring': 'warn',\n 'unicorn/no-useless-undefined': ['warn', { checkArguments: false }],\n\n // === SONARJS ===\n 'sonarjs/no-duplicated-branches': 'warn',\n },\n settings: {\n 'import-x/extensions': ['.js', '.cjs', '.mjs'],\n 'import-x/parsers': { 'typescript-eslint': ['.ts', '.tsx'] },\n 'import-x/resolver-next': [\n createTypeScriptImportResolver({\n alwaysTryTypes: true,\n bun: true,\n }),\n ],\n },\n },\n\n // Config files overrides\n {\n files: ['**/*.config.{ts,js,mjs,cjs}'],\n rules: {\n '@typescript-eslint/no-magic-numbers': 'off',\n '@typescript-eslint/naming-convention': 'off',\n },\n },\n];\n\n// Export shared utilities for use in other packages\nexport { booleanNameConvention, booleanNameExceptions, booleanNamePrefixes } from './boolean-naming';\n\nexport default config;\n\n/* eslint-enable @typescript-eslint/no-magic-numbers */\n/* eslint-enable @typescript-eslint/naming-convention */\n","/**\n * Combines an array of regex expressions into a single regex expression via the union operator.\n */\nconst concatElementsByRegexUnion = (elements: string[]) =>\n elements.reduce((element, accum, index) => `${accum}${index === 0 ? '' : '|'}${element}`, '');\n\n// Prefixes allowed at the start of a boolean variable/parameter name\nexport const booleanNamePrefixes = [\n 'is',\n 'as',\n 'are',\n 'was',\n 'should',\n 'has',\n 'can',\n 'did',\n 'will',\n 'use',\n 'does',\n 'show',\n 'allow',\n 'enabled',\n 'enable',\n 'disable',\n 'editable',\n 'refetch',\n 'destructive',\n 'hide',\n 'error',\n 'override',\n 'need',\n 'must',\n 'require',\n 'want',\n 'with',\n];\n// Regex for the rest of a boolean variable/parameter name (the part after the prefix)\nconst booleanNameSuffixes = '[A-Z]([A-Za-z]?)+';\n// Exceptions to the rule for allowable boolean variable/parameter names\nconst booleanNameExceptionsList = [\n '^_',\n '_$',\n '[- /?:{}@%]',\n '^[A-Z][a-z]*([A-Z][a-z]*)',\n '^item$',\n '^value$',\n '^condition$',\n '^container$',\n '^included',\n '^center$',\n '^debug$',\n '^concurrent',\n '^animated$',\n '^allow',\n '^visible',\n '^merge$',\n '^ssr$',\n '^multiSelect$',\n 'Shown$',\n '^enumerable$',\n '^configurable$',\n];\n// A singular regex string for the boolean name exceptions (instead of array of expressions)\nexport const booleanNameExceptions = concatElementsByRegexUnion(booleanNameExceptionsList);\n\n// The full boolean naming convetions regex\nexport const booleanNameConvention = new RegExp(\n `${concatElementsByRegexUnion(\n booleanNamePrefixes,\n )}|${booleanNameSuffixes}|${booleanNameExceptions}`,\n).toString();\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seanblonien/eslint-config-base",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.12",
|
|
4
4
|
"description": "Sean Blonien's opinionated ESLint config for TypeScript projects",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"eslint",
|
|
@@ -51,7 +51,6 @@
|
|
|
51
51
|
"devDependencies": {
|
|
52
52
|
"@types/node": "^24.10.4",
|
|
53
53
|
"eslint": "^9.39.2",
|
|
54
|
-
"jiti": "^2.6.1",
|
|
55
54
|
"tsup": "^8.5.1",
|
|
56
55
|
"typescript": "^5.9.3",
|
|
57
56
|
"vitest": "^4.0.16"
|
|
@@ -65,7 +64,6 @@
|
|
|
65
64
|
"scripts": {
|
|
66
65
|
"build": "tsup",
|
|
67
66
|
"clean": "rm -rf dist",
|
|
68
|
-
"lint": "eslint . --fix",
|
|
69
67
|
"test": "vitest run"
|
|
70
68
|
}
|
|
71
69
|
}
|