linted 16.3.2 → 16.3.3-rc.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. package/.github/workflows/RELEASE.yml +35 -0
  2. package/.github/workflows/rc.yml +35 -0
  3. package/LICENSE +21 -21
  4. package/README.md +388 -388
  5. package/SECURITY.md +9 -9
  6. package/dist/imports/plugins/index.d.ts.map +1 -1
  7. package/eslint.config.js +3 -3
  8. package/package.json +99 -99
  9. package/src/declarations/markdownlint/index.d.ts +3 -3
  10. package/src/declarations/markdownlint/parser.d.ts +9 -9
  11. package/src/declarations/mocha/index.d.ts +8 -8
  12. package/src/imports/index.ts +4 -4
  13. package/src/imports/parsers/index.ts +16 -16
  14. package/src/imports/plugins/index.ts +20 -20
  15. package/src/index.ts +34 -34
  16. package/src/statics/files/html/index.ts +1 -1
  17. package/src/statics/files/index.ts +22 -22
  18. package/src/statics/files/js/index.ts +1 -1
  19. package/src/statics/files/json/index.ts +1 -1
  20. package/src/statics/files/jsonc/index.ts +4 -4
  21. package/src/statics/files/md/index.ts +1 -1
  22. package/src/statics/files/mocha/index.ts +1 -1
  23. package/src/statics/files/svelte/index.ts +1 -1
  24. package/src/statics/files/ts/index.ts +5 -5
  25. package/src/statics/files/yml/index.ts +5 -5
  26. package/src/statics/index.ts +4 -4
  27. package/src/statics/rules/index.ts +22 -22
  28. package/src/statics/rules/presets/Html.ts +5 -5
  29. package/src/statics/rules/presets/Js.ts +5 -5
  30. package/src/statics/rules/presets/Json.ts +5 -5
  31. package/src/statics/rules/presets/Jsonc.ts +5 -5
  32. package/src/statics/rules/presets/Md.ts +4 -4
  33. package/src/statics/rules/presets/Mocha.ts +5 -5
  34. package/src/statics/rules/presets/Svelte.ts +16 -16
  35. package/src/statics/rules/presets/Ts.ts +14 -14
  36. package/src/statics/rules/presets/Yml.ts +5 -5
  37. package/src/statics/rules/presets/html/Enable.ts +5 -5
  38. package/src/statics/rules/presets/html/Recommended.ts +7 -7
  39. package/src/statics/rules/presets/index.ts +10 -10
  40. package/src/statics/rules/presets/js/Enable.ts +288 -288
  41. package/src/statics/rules/presets/js/EnableStylistic.ts +288 -288
  42. package/src/statics/rules/presets/json/Enable.ts +33 -33
  43. package/src/statics/rules/presets/json/EnableX.ts +51 -51
  44. package/src/statics/rules/presets/jsonc/OverrideJson.ts +6 -6
  45. package/src/statics/rules/presets/md/Enable.ts +23 -23
  46. package/src/statics/rules/presets/mocha/Enable.ts +5 -5
  47. package/src/statics/rules/presets/mocha/Recommended.ts +7 -7
  48. package/src/statics/rules/presets/svelte/DisableJS.ts +7 -7
  49. package/src/statics/rules/presets/svelte/DisableTS.ts +5 -5
  50. package/src/statics/rules/presets/svelte/DisableX.ts +6 -6
  51. package/src/statics/rules/presets/svelte/Enable.ts +130 -130
  52. package/src/statics/rules/presets/svelte/EnableX.ts +6 -6
  53. package/src/statics/rules/presets/ts/DisableCompiler.ts +23 -23
  54. package/src/statics/rules/presets/ts/DisableX.ts +34 -34
  55. package/src/statics/rules/presets/ts/Enable.ts +407 -407
  56. package/src/statics/rules/presets/ts/EnableX.ts +87 -87
  57. package/src/statics/rules/presets/yml/Enable.ts +30 -30
  58. package/src/statics/rules/presets/yml/EnableX.ts +18 -18
  59. package/src/statics/rules/strings/id/index.ts +17 -17
  60. package/src/statics/rules/strings/index.ts +6 -6
  61. package/src/statics/rules/strings/level/index.ts +5 -5
  62. package/src/statics/rules/strings/state/index.ts +55 -55
  63. package/tsconfig.json +160 -160
@@ -1,288 +1,288 @@
1
- import { Strings, type RuleEntry } from "../index.js";
2
-
3
- const {
4
- Id: { Enable },
5
- Level: { ERROR, OFF },
6
- State: {
7
- NEVER,
8
- ALWAYS,
9
- AS_NEEDED,
10
- CONSECUTIVE,
11
- ALLOW,
12
- ALL,
13
- MULTI,
14
- BOTH,
15
- },
16
- } = Strings;
17
-
18
- export default [
19
- Enable,
20
- {
21
- // #region Problems
22
- // [ https://eslint.org/docs/latest/rules/#possible-problems ]
23
- "array-callback-return": [ERROR, { allowImplicit: false, checkForEach: true, allowVoid: true }],
24
- "constructor-super": ERROR, /* tsc */
25
- "for-direction": ERROR,
26
- "getter-return": [ERROR, { allowImplicit: false }], /* tsc */
27
- "no-async-promise-executor": ERROR,
28
- "no-await-in-loop": ERROR,
29
- "no-class-assign": ERROR,
30
- "no-compare-neg-zero": ERROR,
31
- "no-cond-assign": [ERROR, ALWAYS],
32
- "no-const-assign": ERROR, /* tsc */
33
- "no-constant-binary-expression": ERROR,
34
- "no-constant-condition": [ERROR, { checkLoops: true }], /* BUG: incorrect option description (claims "all" is ok): https://eslint.org/docs/latest/rules/no-constant-condition */
35
- "no-constructor-return": ERROR,
36
- "no-control-regex": ERROR,
37
- "no-debugger": ERROR,
38
- "no-dupe-args": ERROR, /* tsc */
39
- "no-dupe-class-members": ERROR, /* tsc -- TSLint:off: tsc */
40
- "no-dupe-else-if": ERROR,
41
- "no-dupe-keys": ERROR, /* tsc */
42
- "no-duplicate-case": ERROR,
43
- "no-duplicate-imports": OFF, /* BUG: breaks separation of TS type-only imports from value imports */
44
- "no-empty-character-class": ERROR,
45
- "no-empty-pattern": [ERROR, { allowObjectPatternsAsParameters: false }],
46
- "no-ex-assign": ERROR,
47
- "no-fallthrough": [ERROR, { allowEmptyCase: true, reportUnusedFallthroughComment: true }],
48
- "no-func-assign": ERROR, /* tsc */
49
- "no-import-assign": ERROR, /* tsc (except Object.assign()) */
50
- "no-inner-declarations": [ERROR, BOTH, { blockScopedFunctions: ALLOW }],
51
- "no-invalid-regexp": [ERROR, { allowConstructorFlags: [] }],
52
- "no-irregular-whitespace": [
53
- ERROR,
54
- {
55
- skipStrings: true,
56
- skipComments: true,
57
- skipRegExps: true,
58
- skipTemplates: true,
59
- skipJSXText: true,
60
- },
61
- ],
62
- "no-loss-of-precision": ERROR, /* TSLint */
63
- "no-misleading-character-class": ERROR,
64
- "no-new-native-nonconstructor": ERROR,
65
- "no-obj-calls": ERROR, /* tsc */
66
- "no-promise-executor-return": [ERROR, { allowVoid: true }],
67
- "no-prototype-builtins": ERROR,
68
- "no-self-assign": [ERROR, { props: true }],
69
- "no-self-compare": ERROR,
70
- "no-setter-return": ERROR, /* tsc */
71
- "no-sparse-arrays": ERROR,
72
- "no-template-curly-in-string": ERROR,
73
- "no-this-before-super": ERROR, /* tsc */
74
- "no-undef": ERROR, /* tsc */
75
- "no-unexpected-multiline": ERROR,
76
- "no-unmodified-loop-condition": ERROR,
77
- "no-unreachable": ERROR, /* tsc */
78
- "no-unreachable-loop": [ERROR, { ignore: [] /* WhileStatement, DoWhileStatement, ForStatement, ForInStatement, ForOfStatement */ }],
79
- "no-unsafe-finally": ERROR,
80
- "no-unsafe-negation": [ERROR, { enforceForOrderingRelations: true }], /* tsc */
81
- "no-unsafe-optional-chaining": [ERROR, { disallowArithmeticOperators: true }],
82
- "no-unused-private-class-members": ERROR,
83
- "no-unused-vars": [
84
- ERROR,
85
- {
86
- vars: ALL,
87
- args: ALL,
88
- caughtErrors: ALL,
89
- ignoreRestSiblings: false,
90
- ignoreClassWithStaticInitBlock: false,
91
- reportUsedIgnorePattern: true,
92
- },
93
- ], /* TSLint */
94
- "no-use-before-define": [
95
- ERROR,
96
- {
97
- functions: true,
98
- classes: true,
99
- variables: true,
100
- allowNamedExports: false,
101
- },
102
- ], /* TSLint */
103
- "no-useless-assignment": ERROR,
104
- "no-useless-backreference": ERROR,
105
- "require-atomic-updates": [ERROR, { allowProperties: false }],
106
- "use-isnan": [ERROR, { enforceForSwitchCase: true, enforceForIndexOf: true }],
107
- "valid-typeof": [ERROR, { requireStringLiterals: true }],
108
-
109
- // #endregion
110
-
111
- // #region Suggestions
112
- // [ https://eslint.org/docs/latest/rules/#suggestions ]
113
- "accessor-pairs": [ERROR, { setWithoutGet: true, getWithoutSet: false, enforceForClassMembers: true }],
114
- "arrow-body-style": [ERROR, AS_NEEDED, { requireReturnForObjectLiteral: true }],
115
- "block-scoped-var": ERROR,
116
- camelcase: OFF, /* preference */
117
- "capitalized-comments": OFF, /* preference */
118
- "class-methods-use-this": OFF, /* preference -- TSLint */
119
- complexity: OFF, /* preference */
120
- "consistent-return": [ERROR, { treatUndefinedAsUnspecified: false }], /* tsc -- TSLint:off: tsconfig: noImplicitReturns */
121
- "consistent-this": ERROR,
122
- curly: [ERROR, MULTI],
123
- "default-case": OFF, /* preference: don't care */
124
- "default-case-last": ERROR,
125
- "default-param-last": ERROR, /* TSLint */
126
- "dot-notation": [ERROR, { allowKeywords: true }], /* TSLint */
127
- eqeqeq: [ERROR, ALWAYS],
128
- "func-name-matching": OFF, /* preference */
129
- "func-names": OFF, /* preference */
130
- "func-style": OFF, /* preference */
131
- "grouped-accessor-pairs": OFF, /* preference -- BUG: requires adjacency, not as described in documentation */
132
- "guard-for-in": OFF, /* preference - not helpful because using for-in on non-literal objects is bad practice and this rule doesn't guard against that anyway, while adding a pointless check to known object literals */
133
- "id-denylist": OFF, /* preference */
134
- "id-length": OFF, /* preference */
135
- "id-match": OFF, /* preference */
136
- "init-declarations": [ERROR, ALWAYS], /* TSLint */
137
- "logical-assignment-operators": [ERROR, ALWAYS, { enforceForIfStatements: true }],
138
- "max-classes-per-file": OFF, /* preference */
139
- "max-depth": OFF, /* preference */
140
- "max-lines": OFF, /* preference */
141
- "max-lines-per-function": OFF, /* preference */
142
- "max-nested-callbacks": OFF, /* preference */
143
- "max-params": OFF, /* preference -- TSLint:off: preference */
144
- "max-statements": OFF, /* preference */
145
- "multiline-comment-style": OFF, /* preference */
146
- "new-cap": OFF, /* preference -- breaks Scriptable */
147
- "no-alert": ERROR,
148
- "no-array-constructor": ERROR, /* TSLint */
149
- "no-bitwise": [ERROR, { allow: [], int32Hint: true }],
150
- "no-caller": ERROR,
151
- "no-case-declarations": ERROR,
152
- "no-console": OFF, /* preference -- breaks Node.js console applications and Scriptable, and otherwise unnecessarily hampers browser test code */
153
- "no-continue": ERROR,
154
- "no-delete-var": ERROR,
155
- "no-div-regex": ERROR,
156
- "no-else-return": OFF, /* preference */
157
- "no-empty": [ERROR, { allowEmptyCatch: false }],
158
- "no-empty-function": [ERROR, { allow: ["constructors"] /** functions, arrowFunctions, generatorFunctions, methods, generatorMethods, getters, setters, constructors, asyncFunctions, asyncMethods; TS-ONLY: private-constructors, protected-constructors, decoratedFunctions, overrideMethods */ }], /* TSLint */
159
- "no-empty-static-block": ERROR,
160
- "no-eq-null": ERROR,
161
- "no-eval": [ERROR, { allowIndirect: false }],
162
- "no-extend-native": [ERROR, { exceptions: [] }],
163
- "no-extra-bind": ERROR,
164
- "no-extra-boolean-cast": [ERROR, { enforceForLogicalOperands: true }],
165
- "no-extra-label": ERROR,
166
- "no-global-assign": [ERROR, { exceptions: [] }],
167
- "no-implicit-coercion": [
168
- ERROR,
169
- {
170
- "boolean": true,
171
- number: true,
172
- string: true,
173
- disallowTemplateShorthand: true,
174
- allow: [], /** "~" | "!!" | "+" | "- -" | "-" | "*" */
175
- },
176
- ],
177
- "no-implicit-globals": OFF, /* investigate (breaks Scriptable? breaks Sveltekit?) */
178
- "no-implied-eval": ERROR, /* TSLint */
179
- "no-inline-comments": OFF, /* preference */
180
- "no-invalid-this": [ERROR, { capIsConstructor: false }], /* TSLint:off: tsconfig: { strict, noImplicitThis } */
181
- "no-iterator": ERROR,
182
- "no-label-var": ERROR,
183
- "no-lone-blocks": ERROR,
184
- "no-lonely-if": OFF, /* preference */
185
- "no-loop-func": ERROR, /* TSLint */
186
- "no-magic-numbers": OFF, /* preference - breaks TypeScript number literals, even with most liberal exceptions */
187
- "no-multi-assign": [ERROR, { ignoreNonDeclaration: false }],
188
- "no-multi-str": ERROR,
189
- "no-negated-condition": OFF, /* preference */
190
- "no-nested-ternary": OFF, /* preference */
191
- "no-new": ERROR,
192
- "no-new-func": ERROR,
193
- "no-new-wrappers": ERROR,
194
- "no-nonoctal-decimal-escape": ERROR,
195
- "no-object-constructor": ERROR,
196
- "no-octal": ERROR,
197
- "no-octal-escape": ERROR,
198
- "no-param-reassign": [ERROR, { props: true, ignorePropertyModificationsFor: [], ignorePropertyModificationsForRegex: [] }],
199
- "no-plusplus": [ERROR, { allowForLoopAfterthoughts: true }],
200
- "no-proto": ERROR,
201
- "no-redeclare": [ERROR, { builtinGlobals: true }], /* tsc -- TSLint:off: tsc (let, const, -var) */
202
- "no-regex-spaces": OFF, /* preference */
203
- "no-restricted-exports": OFF, /* preference */
204
- "no-restricted-globals": OFF, /* preference */
205
- "no-restricted-imports": OFF, /* preference -- TSLint:off */
206
- "no-restricted-properties": OFF, /* preference */
207
- "no-restricted-syntax": OFF, /* preference */
208
- "no-return-assign": [ERROR, ALWAYS], /* ALWAYS | "except-parens" (disallow assignments unless enclosed in parens) */
209
- "no-script-url": ERROR,
210
- "no-sequences": [ERROR, { allowInParentheses: true }],
211
- "no-shadow": OFF, /* investigate -- TSLint:off: investigate */
212
- "no-shadow-restricted-names": ERROR,
213
- "no-ternary": OFF, /* preference */
214
- "no-throw-literal": ERROR, /* TSLint */
215
- "no-undef-init": ERROR,
216
- "no-undefined": OFF, /* investigate (breaks Scriptable? breaks Sveltekit?) */
217
- "no-underscore-dangle": OFF, /* preference */
218
- "no-unneeded-ternary": [ERROR, { defaultAssignment: false }],
219
- "no-unused-expressions": [
220
- ERROR,
221
- {
222
- allowShortCircuit: true,
223
- allowTernary: true,
224
- allowTaggedTemplates: true,
225
- enforceForJSX: false,
226
- },
227
- ], /* TSLint */
228
- "no-unused-labels": ERROR,
229
- "no-useless-call": ERROR,
230
- "no-useless-catch": ERROR,
231
- "no-useless-computed-key": [ERROR, { enforceForClassMembers: true }],
232
- "no-useless-concat": ERROR,
233
- "no-useless-constructor": ERROR, /* TSLint */
234
- "no-useless-escape": ERROR,
235
- "no-useless-rename": [ERROR, { ignoreImport: false, ignoreExport: false, ignoreDestructuring: false }],
236
- "no-useless-return": ERROR,
237
- "no-var": ERROR,
238
- "no-void": [ERROR, { allowAsStatement: true }],
239
- "no-warning-comments": OFF, /* preference */
240
- "no-with": ERROR,
241
- "object-shorthand": [ERROR, ALWAYS, { avoidQuotes: true, ignoreConstructors: false, avoidExplicitReturnArrows: false }],
242
- "one-var": [
243
- ERROR,
244
- {
245
- "var": CONSECUTIVE,
246
- let: CONSECUTIVE,
247
- "const": CONSECUTIVE,
248
- separateRequires: true,
249
- },
250
- ],
251
- "operator-assignment": [ERROR, ALWAYS],
252
- "prefer-arrow-callback": [ERROR, { allowNamedFunctions: false, allowUnboundThis: true }],
253
- "prefer-const": [
254
- ERROR,
255
- { destructuring: ALL, ignoreReadBeforeAssign: false },
256
- ],
257
- "prefer-destructuring": [ERROR, { VariableDeclarator: { array: true, object: true }, AssignmentExpression: { array: false, object: false } }, { enforceForRenamedProperties: true }], /* TSLint */
258
- "prefer-exponentiation-operator": ERROR,
259
- "prefer-named-capture-group": OFF,
260
- "prefer-numeric-literals": ERROR,
261
- "prefer-object-has-own": ERROR,
262
- "prefer-object-spread": ERROR,
263
- "prefer-promise-reject-errors": [ERROR, { allowEmptyReject: false }],
264
- "prefer-regex-literals": [ERROR, { disallowRedundantWrapping: true }], /* TSLint */
265
- "prefer-rest-params": ERROR,
266
- "prefer-spread": ERROR,
267
- "prefer-template": ERROR,
268
- radix: [ERROR, AS_NEEDED],
269
- "require-await": ERROR, /* TSLint */
270
- "require-unicode-regexp": ERROR,
271
- "require-yield": ERROR,
272
- "sort-imports": OFF, /* preference */
273
- "sort-keys": OFF, /* preference */
274
- "sort-vars": OFF, /* preference */
275
- strict: OFF, /* preference */
276
- "symbol-description": OFF, /* preference */
277
- "vars-on-top": ERROR,
278
- yoda: [ERROR, NEVER, { exceptRange: false, onlyEquality: false }],
279
-
280
- // #endregion
281
-
282
- // #region Layout & Formatting
283
- // [ https://eslint.org/docs/latest/rules/#layout--formatting ]
284
- "unicode-bom": OFF, /* preference: don't care */
285
-
286
- // #endregion
287
- },
288
- ] as const satisfies RuleEntry;
1
+ import { Strings, type RuleEntry } from "../index.js";
2
+
3
+ const {
4
+ Id: { Enable },
5
+ Level: { ERROR, OFF },
6
+ State: {
7
+ NEVER,
8
+ ALWAYS,
9
+ AS_NEEDED,
10
+ CONSECUTIVE,
11
+ ALLOW,
12
+ ALL,
13
+ MULTI,
14
+ BOTH,
15
+ },
16
+ } = Strings;
17
+
18
+ export default [
19
+ Enable,
20
+ {
21
+ // #region Problems
22
+ // [ https://eslint.org/docs/latest/rules/#possible-problems ]
23
+ "array-callback-return": [ERROR, { allowImplicit: false, checkForEach: true, allowVoid: true }],
24
+ "constructor-super": ERROR, /* tsc */
25
+ "for-direction": ERROR,
26
+ "getter-return": [ERROR, { allowImplicit: false }], /* tsc */
27
+ "no-async-promise-executor": ERROR,
28
+ "no-await-in-loop": ERROR,
29
+ "no-class-assign": ERROR,
30
+ "no-compare-neg-zero": ERROR,
31
+ "no-cond-assign": [ERROR, ALWAYS],
32
+ "no-const-assign": ERROR, /* tsc */
33
+ "no-constant-binary-expression": ERROR,
34
+ "no-constant-condition": [ERROR, { checkLoops: true }], /* BUG: incorrect option description (claims "all" is ok): https://eslint.org/docs/latest/rules/no-constant-condition */
35
+ "no-constructor-return": ERROR,
36
+ "no-control-regex": ERROR,
37
+ "no-debugger": ERROR,
38
+ "no-dupe-args": ERROR, /* tsc */
39
+ "no-dupe-class-members": ERROR, /* tsc -- TSLint:off: tsc */
40
+ "no-dupe-else-if": ERROR,
41
+ "no-dupe-keys": ERROR, /* tsc */
42
+ "no-duplicate-case": ERROR,
43
+ "no-duplicate-imports": OFF, /* BUG: breaks separation of TS type-only imports from value imports */
44
+ "no-empty-character-class": ERROR,
45
+ "no-empty-pattern": [ERROR, { allowObjectPatternsAsParameters: false }],
46
+ "no-ex-assign": ERROR,
47
+ "no-fallthrough": [ERROR, { allowEmptyCase: true, reportUnusedFallthroughComment: true }],
48
+ "no-func-assign": ERROR, /* tsc */
49
+ "no-import-assign": ERROR, /* tsc (except Object.assign()) */
50
+ "no-inner-declarations": [ERROR, BOTH, { blockScopedFunctions: ALLOW }],
51
+ "no-invalid-regexp": [ERROR, { allowConstructorFlags: [] }],
52
+ "no-irregular-whitespace": [
53
+ ERROR,
54
+ {
55
+ skipStrings: true,
56
+ skipComments: true,
57
+ skipRegExps: true,
58
+ skipTemplates: true,
59
+ skipJSXText: true,
60
+ },
61
+ ],
62
+ "no-loss-of-precision": ERROR, /* TSLint */
63
+ "no-misleading-character-class": ERROR,
64
+ "no-new-native-nonconstructor": ERROR,
65
+ "no-obj-calls": ERROR, /* tsc */
66
+ "no-promise-executor-return": [ERROR, { allowVoid: true }],
67
+ "no-prototype-builtins": ERROR,
68
+ "no-self-assign": [ERROR, { props: true }],
69
+ "no-self-compare": ERROR,
70
+ "no-setter-return": ERROR, /* tsc */
71
+ "no-sparse-arrays": ERROR,
72
+ "no-template-curly-in-string": ERROR,
73
+ "no-this-before-super": ERROR, /* tsc */
74
+ "no-undef": ERROR, /* tsc */
75
+ "no-unexpected-multiline": ERROR,
76
+ "no-unmodified-loop-condition": ERROR,
77
+ "no-unreachable": ERROR, /* tsc */
78
+ "no-unreachable-loop": [ERROR, { ignore: [] /* WhileStatement, DoWhileStatement, ForStatement, ForInStatement, ForOfStatement */ }],
79
+ "no-unsafe-finally": ERROR,
80
+ "no-unsafe-negation": [ERROR, { enforceForOrderingRelations: true }], /* tsc */
81
+ "no-unsafe-optional-chaining": [ERROR, { disallowArithmeticOperators: true }],
82
+ "no-unused-private-class-members": ERROR,
83
+ "no-unused-vars": [
84
+ ERROR,
85
+ {
86
+ vars: ALL,
87
+ args: ALL,
88
+ caughtErrors: ALL,
89
+ ignoreRestSiblings: false,
90
+ ignoreClassWithStaticInitBlock: false,
91
+ reportUsedIgnorePattern: true,
92
+ },
93
+ ], /* TSLint */
94
+ "no-use-before-define": [
95
+ ERROR,
96
+ {
97
+ functions: true,
98
+ classes: true,
99
+ variables: true,
100
+ allowNamedExports: false,
101
+ },
102
+ ], /* TSLint */
103
+ "no-useless-assignment": ERROR,
104
+ "no-useless-backreference": ERROR,
105
+ "require-atomic-updates": [ERROR, { allowProperties: false }],
106
+ "use-isnan": [ERROR, { enforceForSwitchCase: true, enforceForIndexOf: true }],
107
+ "valid-typeof": [ERROR, { requireStringLiterals: true }],
108
+
109
+ // #endregion
110
+
111
+ // #region Suggestions
112
+ // [ https://eslint.org/docs/latest/rules/#suggestions ]
113
+ "accessor-pairs": [ERROR, { setWithoutGet: true, getWithoutSet: false, enforceForClassMembers: true }],
114
+ "arrow-body-style": [ERROR, AS_NEEDED, { requireReturnForObjectLiteral: true }],
115
+ "block-scoped-var": ERROR,
116
+ camelcase: OFF, /* preference */
117
+ "capitalized-comments": OFF, /* preference */
118
+ "class-methods-use-this": OFF, /* preference -- TSLint */
119
+ complexity: OFF, /* preference */
120
+ "consistent-return": [ERROR, { treatUndefinedAsUnspecified: false }], /* tsc -- TSLint:off: tsconfig: noImplicitReturns */
121
+ "consistent-this": ERROR,
122
+ curly: [ERROR, MULTI],
123
+ "default-case": OFF, /* preference: don't care */
124
+ "default-case-last": ERROR,
125
+ "default-param-last": ERROR, /* TSLint */
126
+ "dot-notation": [ERROR, { allowKeywords: true }], /* TSLint */
127
+ eqeqeq: [ERROR, ALWAYS],
128
+ "func-name-matching": OFF, /* preference */
129
+ "func-names": OFF, /* preference */
130
+ "func-style": OFF, /* preference */
131
+ "grouped-accessor-pairs": OFF, /* preference -- BUG: requires adjacency, not as described in documentation */
132
+ "guard-for-in": OFF, /* preference - not helpful because using for-in on non-literal objects is bad practice and this rule doesn't guard against that anyway, while adding a pointless check to known object literals */
133
+ "id-denylist": OFF, /* preference */
134
+ "id-length": OFF, /* preference */
135
+ "id-match": OFF, /* preference */
136
+ "init-declarations": [ERROR, ALWAYS], /* TSLint */
137
+ "logical-assignment-operators": [ERROR, ALWAYS, { enforceForIfStatements: true }],
138
+ "max-classes-per-file": OFF, /* preference */
139
+ "max-depth": OFF, /* preference */
140
+ "max-lines": OFF, /* preference */
141
+ "max-lines-per-function": OFF, /* preference */
142
+ "max-nested-callbacks": OFF, /* preference */
143
+ "max-params": OFF, /* preference -- TSLint:off: preference */
144
+ "max-statements": OFF, /* preference */
145
+ "multiline-comment-style": OFF, /* preference */
146
+ "new-cap": OFF, /* preference -- breaks Scriptable */
147
+ "no-alert": ERROR,
148
+ "no-array-constructor": ERROR, /* TSLint */
149
+ "no-bitwise": [ERROR, { allow: [], int32Hint: true }],
150
+ "no-caller": ERROR,
151
+ "no-case-declarations": ERROR,
152
+ "no-console": OFF, /* preference -- breaks Node.js console applications and Scriptable, and otherwise unnecessarily hampers browser test code */
153
+ "no-continue": ERROR,
154
+ "no-delete-var": ERROR,
155
+ "no-div-regex": ERROR,
156
+ "no-else-return": OFF, /* preference */
157
+ "no-empty": [ERROR, { allowEmptyCatch: false }],
158
+ "no-empty-function": [ERROR, { allow: ["constructors"] /** functions, arrowFunctions, generatorFunctions, methods, generatorMethods, getters, setters, constructors, asyncFunctions, asyncMethods; TS-ONLY: private-constructors, protected-constructors, decoratedFunctions, overrideMethods */ }], /* TSLint */
159
+ "no-empty-static-block": ERROR,
160
+ "no-eq-null": ERROR,
161
+ "no-eval": [ERROR, { allowIndirect: false }],
162
+ "no-extend-native": [ERROR, { exceptions: [] }],
163
+ "no-extra-bind": ERROR,
164
+ "no-extra-boolean-cast": [ERROR, { enforceForLogicalOperands: true }],
165
+ "no-extra-label": ERROR,
166
+ "no-global-assign": [ERROR, { exceptions: [] }],
167
+ "no-implicit-coercion": [
168
+ ERROR,
169
+ {
170
+ "boolean": true,
171
+ number: true,
172
+ string: true,
173
+ disallowTemplateShorthand: true,
174
+ allow: [], /** "~" | "!!" | "+" | "- -" | "-" | "*" */
175
+ },
176
+ ],
177
+ "no-implicit-globals": OFF, /* investigate (breaks Scriptable? breaks Sveltekit?) */
178
+ "no-implied-eval": ERROR, /* TSLint */
179
+ "no-inline-comments": OFF, /* preference */
180
+ "no-invalid-this": [ERROR, { capIsConstructor: false }], /* TSLint:off: tsconfig: { strict, noImplicitThis } */
181
+ "no-iterator": ERROR,
182
+ "no-label-var": ERROR,
183
+ "no-lone-blocks": ERROR,
184
+ "no-lonely-if": OFF, /* preference */
185
+ "no-loop-func": ERROR, /* TSLint */
186
+ "no-magic-numbers": OFF, /* preference - breaks TypeScript number literals, even with most liberal exceptions */
187
+ "no-multi-assign": [ERROR, { ignoreNonDeclaration: false }],
188
+ "no-multi-str": ERROR,
189
+ "no-negated-condition": OFF, /* preference */
190
+ "no-nested-ternary": OFF, /* preference */
191
+ "no-new": ERROR,
192
+ "no-new-func": ERROR,
193
+ "no-new-wrappers": ERROR,
194
+ "no-nonoctal-decimal-escape": ERROR,
195
+ "no-object-constructor": ERROR,
196
+ "no-octal": ERROR,
197
+ "no-octal-escape": ERROR,
198
+ "no-param-reassign": [ERROR, { props: true, ignorePropertyModificationsFor: [], ignorePropertyModificationsForRegex: [] }],
199
+ "no-plusplus": [ERROR, { allowForLoopAfterthoughts: true }],
200
+ "no-proto": ERROR,
201
+ "no-redeclare": [ERROR, { builtinGlobals: true }], /* tsc -- TSLint:off: tsc (let, const, -var) */
202
+ "no-regex-spaces": OFF, /* preference */
203
+ "no-restricted-exports": OFF, /* preference */
204
+ "no-restricted-globals": OFF, /* preference */
205
+ "no-restricted-imports": OFF, /* preference -- TSLint:off */
206
+ "no-restricted-properties": OFF, /* preference */
207
+ "no-restricted-syntax": OFF, /* preference */
208
+ "no-return-assign": [ERROR, ALWAYS], /* ALWAYS | "except-parens" (disallow assignments unless enclosed in parens) */
209
+ "no-script-url": ERROR,
210
+ "no-sequences": [ERROR, { allowInParentheses: true }],
211
+ "no-shadow": OFF, /* investigate -- TSLint:off: investigate */
212
+ "no-shadow-restricted-names": ERROR,
213
+ "no-ternary": OFF, /* preference */
214
+ "no-throw-literal": ERROR, /* TSLint */
215
+ "no-undef-init": ERROR,
216
+ "no-undefined": OFF, /* investigate (breaks Scriptable? breaks Sveltekit?) */
217
+ "no-underscore-dangle": OFF, /* preference */
218
+ "no-unneeded-ternary": [ERROR, { defaultAssignment: false }],
219
+ "no-unused-expressions": [
220
+ ERROR,
221
+ {
222
+ allowShortCircuit: true,
223
+ allowTernary: true,
224
+ allowTaggedTemplates: true,
225
+ enforceForJSX: false,
226
+ },
227
+ ], /* TSLint */
228
+ "no-unused-labels": ERROR,
229
+ "no-useless-call": ERROR,
230
+ "no-useless-catch": ERROR,
231
+ "no-useless-computed-key": [ERROR, { enforceForClassMembers: true }],
232
+ "no-useless-concat": ERROR,
233
+ "no-useless-constructor": ERROR, /* TSLint */
234
+ "no-useless-escape": ERROR,
235
+ "no-useless-rename": [ERROR, { ignoreImport: false, ignoreExport: false, ignoreDestructuring: false }],
236
+ "no-useless-return": ERROR,
237
+ "no-var": ERROR,
238
+ "no-void": [ERROR, { allowAsStatement: true }],
239
+ "no-warning-comments": OFF, /* preference */
240
+ "no-with": ERROR,
241
+ "object-shorthand": [ERROR, ALWAYS, { avoidQuotes: true, ignoreConstructors: false, avoidExplicitReturnArrows: false }],
242
+ "one-var": [
243
+ ERROR,
244
+ {
245
+ "var": CONSECUTIVE,
246
+ let: CONSECUTIVE,
247
+ "const": CONSECUTIVE,
248
+ separateRequires: true,
249
+ },
250
+ ],
251
+ "operator-assignment": [ERROR, ALWAYS],
252
+ "prefer-arrow-callback": [ERROR, { allowNamedFunctions: false, allowUnboundThis: true }],
253
+ "prefer-const": [
254
+ ERROR,
255
+ { destructuring: ALL, ignoreReadBeforeAssign: false },
256
+ ],
257
+ "prefer-destructuring": [ERROR, { VariableDeclarator: { array: true, object: true }, AssignmentExpression: { array: false, object: false } }, { enforceForRenamedProperties: true }], /* TSLint */
258
+ "prefer-exponentiation-operator": ERROR,
259
+ "prefer-named-capture-group": OFF,
260
+ "prefer-numeric-literals": ERROR,
261
+ "prefer-object-has-own": ERROR,
262
+ "prefer-object-spread": ERROR,
263
+ "prefer-promise-reject-errors": [ERROR, { allowEmptyReject: false }],
264
+ "prefer-regex-literals": [ERROR, { disallowRedundantWrapping: true }], /* TSLint */
265
+ "prefer-rest-params": ERROR,
266
+ "prefer-spread": ERROR,
267
+ "prefer-template": ERROR,
268
+ radix: [ERROR, AS_NEEDED],
269
+ "require-await": ERROR, /* TSLint */
270
+ "require-unicode-regexp": ERROR,
271
+ "require-yield": ERROR,
272
+ "sort-imports": OFF, /* preference */
273
+ "sort-keys": OFF, /* preference */
274
+ "sort-vars": OFF, /* preference */
275
+ strict: OFF, /* preference */
276
+ "symbol-description": OFF, /* preference */
277
+ "vars-on-top": ERROR,
278
+ yoda: [ERROR, NEVER, { exceptRange: false, onlyEquality: false }],
279
+
280
+ // #endregion
281
+
282
+ // #region Layout & Formatting
283
+ // [ https://eslint.org/docs/latest/rules/#layout--formatting ]
284
+ "unicode-bom": OFF, /* preference: don't care */
285
+
286
+ // #endregion
287
+ },
288
+ ] as const satisfies RuleEntry;