eslint-config-typed 5.17.4 → 5.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -10
- package/dist/plugins/ts-restrictions/rules/check-destructuring-completeness.d.mts.map +1 -1
- package/dist/plugins/ts-restrictions/rules/check-destructuring-completeness.mjs +13 -10
- package/dist/plugins/ts-restrictions/rules/check-destructuring-completeness.mjs.map +1 -1
- package/dist/plugins/ts-restrictions/rules/comparison-utils.d.mts +6 -1
- package/dist/plugins/ts-restrictions/rules/comparison-utils.d.mts.map +1 -1
- package/dist/plugins/ts-restrictions/rules/comparison-utils.mjs +10 -2
- package/dist/plugins/ts-restrictions/rules/comparison-utils.mjs.map +1 -1
- package/dist/plugins/ts-restrictions/rules/jsx-boolean-logical-operands.d.mts +3 -2
- package/dist/plugins/ts-restrictions/rules/jsx-boolean-logical-operands.d.mts.map +1 -1
- package/dist/plugins/ts-restrictions/rules/jsx-boolean-logical-operands.mjs +9 -2
- package/dist/plugins/ts-restrictions/rules/jsx-boolean-logical-operands.mjs.map +1 -1
- package/dist/plugins/ts-restrictions/rules/no-negated-comparison.d.mts +5 -3
- package/dist/plugins/ts-restrictions/rules/no-negated-comparison.d.mts.map +1 -1
- package/dist/plugins/ts-restrictions/rules/no-negated-comparison.mjs +6 -3
- package/dist/plugins/ts-restrictions/rules/no-negated-comparison.mjs.map +1 -1
- package/dist/plugins/ts-restrictions/rules/no-string-spread.d.mts.map +1 -1
- package/dist/plugins/ts-restrictions/rules/no-string-spread.mjs +6 -14
- package/dist/plugins/ts-restrictions/rules/no-string-spread.mjs.map +1 -1
- package/dist/plugins/ts-restrictions/rules/no-unnecessary-array-from.d.mts.map +1 -1
- package/dist/plugins/ts-restrictions/rules/no-unnecessary-array-from.mjs +4 -4
- package/dist/plugins/ts-restrictions/rules/no-unnecessary-array-from.mjs.map +1 -1
- package/dist/plugins/ts-restrictions/rules/no-unnecessary-coalesce-undefined.d.mts.map +1 -1
- package/dist/plugins/ts-restrictions/rules/no-unnecessary-coalesce-undefined.mjs +4 -3
- package/dist/plugins/ts-restrictions/rules/no-unnecessary-coalesce-undefined.mjs.map +1 -1
- package/dist/plugins/ts-restrictions/rules/prefer-curried-call.d.mts +14 -3
- package/dist/plugins/ts-restrictions/rules/prefer-curried-call.d.mts.map +1 -1
- package/dist/plugins/ts-restrictions/rules/prefer-curried-call.mjs +149 -7
- package/dist/plugins/ts-restrictions/rules/prefer-curried-call.mjs.map +1 -1
- package/dist/plugins/ts-restrictions/rules/prefer-logical-over-boolean-ternary.d.mts +5 -3
- package/dist/plugins/ts-restrictions/rules/prefer-logical-over-boolean-ternary.d.mts.map +1 -1
- package/dist/plugins/ts-restrictions/rules/prefer-logical-over-boolean-ternary.mjs +8 -4
- package/dist/plugins/ts-restrictions/rules/prefer-logical-over-boolean-ternary.mjs.map +1 -1
- package/dist/plugins/ts-restrictions/rules/prefer-non-mutating-array-method.d.mts.map +1 -1
- package/dist/plugins/ts-restrictions/rules/prefer-non-mutating-array-method.mjs +5 -4
- package/dist/plugins/ts-restrictions/rules/prefer-non-mutating-array-method.mjs.map +1 -1
- package/dist/plugins/ts-restrictions/rules/prefer-nullish-coalescing-when-safe.d.mts.map +1 -1
- package/dist/plugins/ts-restrictions/rules/prefer-nullish-coalescing-when-safe.mjs +21 -12
- package/dist/plugins/ts-restrictions/rules/prefer-nullish-coalescing-when-safe.mjs.map +1 -1
- package/dist/plugins/ts-restrictions/rules/prefer-optional-chain-over-ternary.d.mts +2 -1
- package/dist/plugins/ts-restrictions/rules/prefer-optional-chain-over-ternary.d.mts.map +1 -1
- package/dist/plugins/ts-restrictions/rules/prefer-optional-chain-over-ternary.mjs +10 -6
- package/dist/plugins/ts-restrictions/rules/prefer-optional-chain-over-ternary.mjs.map +1 -1
- package/dist/plugins/ts-restrictions/rules/rules.d.mts +1 -1
- package/dist/plugins/ts-restrictions/rules/type-layer-utils.d.mts +15 -0
- package/dist/plugins/ts-restrictions/rules/type-layer-utils.d.mts.map +1 -0
- package/dist/plugins/ts-restrictions/rules/type-layer-utils.mjs +21 -0
- package/dist/plugins/ts-restrictions/rules/type-layer-utils.mjs.map +1 -0
- package/dist/plugins/vitest-coding-style/rules/prefer-assert-strict-equal-for-primitives.d.mts +24 -0
- package/dist/plugins/vitest-coding-style/rules/prefer-assert-strict-equal-for-primitives.d.mts.map +1 -0
- package/dist/plugins/vitest-coding-style/rules/prefer-assert-strict-equal-for-primitives.mjs +138 -0
- package/dist/plugins/vitest-coding-style/rules/prefer-assert-strict-equal-for-primitives.mjs.map +1 -0
- package/dist/plugins/vitest-coding-style/rules/rules.d.mts +1 -0
- package/dist/plugins/vitest-coding-style/rules/rules.d.mts.map +1 -1
- package/dist/plugins/vitest-coding-style/rules/rules.mjs +2 -0
- package/dist/plugins/vitest-coding-style/rules/rules.mjs.map +1 -1
- package/dist/rules/eslint-vitest-coding-style-rules.d.mts +1 -0
- package/dist/rules/eslint-vitest-coding-style-rules.d.mts.map +1 -1
- package/dist/rules/eslint-vitest-coding-style-rules.mjs +1 -0
- package/dist/rules/eslint-vitest-coding-style-rules.mjs.map +1 -1
- package/dist/types/rules/eslint-ts-restrictions-rules.d.mts +6 -5
- package/dist/types/rules/eslint-ts-restrictions-rules.d.mts.map +1 -1
- package/dist/types/rules/eslint-vitest-coding-style-rules.d.mts +16 -0
- package/dist/types/rules/eslint-vitest-coding-style-rules.d.mts.map +1 -1
- package/package.json +3 -3
- package/src/plugins/ts-restrictions/rules/check-destructuring-completeness.mts +22 -16
- package/src/plugins/ts-restrictions/rules/check-destructuring-completeness.test.mts +22 -2
- package/src/plugins/ts-restrictions/rules/comparison-utils.mts +10 -4
- package/src/plugins/ts-restrictions/rules/jsx-boolean-logical-operands.mts +12 -9
- package/src/plugins/ts-restrictions/rules/jsx-boolean-logical-operands.test.mts +26 -0
- package/src/plugins/ts-restrictions/rules/no-negated-comparison.mts +9 -12
- package/src/plugins/ts-restrictions/rules/no-negated-comparison.test.mts +43 -0
- package/src/plugins/ts-restrictions/rules/no-string-spread.mts +6 -32
- package/src/plugins/ts-restrictions/rules/no-unnecessary-array-from.mts +8 -15
- package/src/plugins/ts-restrictions/rules/no-unnecessary-array-from.test.mts +19 -0
- package/src/plugins/ts-restrictions/rules/no-unnecessary-coalesce-undefined.mts +7 -9
- package/src/plugins/ts-restrictions/rules/no-unnecessary-coalesce-undefined.test.mts +7 -0
- package/src/plugins/ts-restrictions/rules/prefer-curried-call.mts +193 -12
- package/src/plugins/ts-restrictions/rules/prefer-curried-call.test.mts +117 -0
- package/src/plugins/ts-restrictions/rules/prefer-logical-over-boolean-ternary.mts +11 -14
- package/src/plugins/ts-restrictions/rules/prefer-logical-over-boolean-ternary.test.mts +41 -0
- package/src/plugins/ts-restrictions/rules/prefer-non-mutating-array-method.mts +9 -15
- package/src/plugins/ts-restrictions/rules/prefer-non-mutating-array-method.test.mts +19 -0
- package/src/plugins/ts-restrictions/rules/prefer-nullish-coalescing-when-safe.mts +27 -21
- package/src/plugins/ts-restrictions/rules/prefer-nullish-coalescing-when-safe.test.mts +51 -0
- package/src/plugins/ts-restrictions/rules/prefer-optional-chain-over-ternary.mts +13 -14
- package/src/plugins/ts-restrictions/rules/prefer-optional-chain-over-ternary.test.mts +29 -0
- package/src/plugins/ts-restrictions/rules/type-layer-utils.mts +36 -0
- package/src/plugins/vitest-coding-style/rules/assert-vs-expect-strict-equality.test.mts +3 -1
- package/src/plugins/vitest-coding-style/rules/prefer-assert-strict-equal-for-primitives.mts +194 -0
- package/src/plugins/vitest-coding-style/rules/prefer-assert-strict-equal-for-primitives.test.mts +426 -0
- package/src/plugins/vitest-coding-style/rules/rules.mts +3 -0
- package/src/rules/eslint-vitest-coding-style-rules.mts +1 -0
- package/src/types/rules/eslint-ts-restrictions-rules.mts +6 -5
- package/src/types/rules/eslint-vitest-coding-style-rules.mts +17 -0
package/README.md
CHANGED
|
@@ -642,16 +642,17 @@ This type definition provides overridden `Chai.Assert` type:
|
|
|
642
642
|
- Convert arg types to be readonly
|
|
643
643
|
- Replace `Object` with `object`
|
|
644
644
|
|
|
645
|
-
| Included rules | Description
|
|
646
|
-
| :--------------------------------------------------- |
|
|
647
|
-
| `no-expect-to-strict-equal` | Forbid `expect(x).toStrictEqual(y)`; prefer `assert.deepStrictEqual(x, y)`
|
|
648
|
-
| `prefer-assert-deep-strict-equal-over-deep-equal` | Replace `assert.deepEqual(x)` with `assert.deepStrictEqual(x)`
|
|
649
|
-
| `prefer-assert-
|
|
650
|
-
| `prefer-assert-is-
|
|
651
|
-
| `prefer-assert-is-false-over-
|
|
652
|
-
| `prefer-assert-is-
|
|
653
|
-
| `prefer-assert-is-true-over-
|
|
654
|
-
| `prefer-assert-is-
|
|
645
|
+
| Included rules | Description |
|
|
646
|
+
| :--------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
647
|
+
| `no-expect-to-strict-equal` | Forbid `expect(x).toStrictEqual(y)`; prefer `assert.deepStrictEqual(x, y)` |
|
|
648
|
+
| `prefer-assert-deep-strict-equal-over-deep-equal` | Replace `assert.deepEqual(x)` with `assert.deepStrictEqual(x)` |
|
|
649
|
+
| `prefer-assert-strict-equal-for-primitives` | Replace `assert.deepStrictEqual(x, y)` with `assert.strictEqual(x, y)` when both are primitives (type-aware; only a suggestion when both may be `NaN` or a zero) |
|
|
650
|
+
| `prefer-assert-is-true-over-assert` | Canonicalize `assert(x)` / `assert.isOk(x)` / `assert.ok(x)` to `assert.isTrue(x)` |
|
|
651
|
+
| `prefer-assert-is-false-over-assert-not-ok` | Canonicalize `assert.isNotOk(x)` / `assert.notOk(x)` to `assert.isFalse(x)` |
|
|
652
|
+
| `prefer-assert-is-false-over-negated-assert-is-true` | Rewrite `assert.isTrue(!x)` to `assert.isFalse(x)` |
|
|
653
|
+
| `prefer-assert-is-true-over-negated-assert-is-false` | Rewrite `assert.isFalse(!x)` to `assert.isTrue(x)` |
|
|
654
|
+
| `prefer-assert-is-true-over-expect-true` | Rewrite `expect(x).toBe(true)` to `assert.isTrue(x)` (only when `x` is boolean; type-aware) |
|
|
655
|
+
| `prefer-assert-is-false-over-expect-false` | Rewrite `expect(x).toBe(false)` to `assert.isFalse(x)` (only when `x` is boolean; type-aware) |
|
|
655
656
|
|
|
656
657
|
Why `assert.deepStrictEqual` rather than `expect(x).toStrictEqual(y)`, given
|
|
657
658
|
that only the latter compares prototypes: it is the only one of the two that
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-destructuring-completeness.d.mts","sourceRoot":"","sources":["../../../../src/plugins/ts-restrictions/rules/check-destructuring-completeness.mts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,QAAQ,EAEd,MAAM,0BAA0B,CAAC;AAMlC,KAAK,OAAO,GAAG,SAAS;IACtB,QAAQ,CAAC;QACP,8BAA8B,CAAC,EAAE,OAAO,CAAC;QACzC,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC,CAAC;CACJ,CAAC;AAEF,KAAK,UAAU,GAAG,yBAAyB,CAAC;AAI5C;;;;;;GAMG;AACH,eAAO,MAAM,8BAA8B,EAAE,QAAQ,CAAC,UAAU,CAC9D,UAAU,EACV,OAAO,
|
|
1
|
+
{"version":3,"file":"check-destructuring-completeness.d.mts","sourceRoot":"","sources":["../../../../src/plugins/ts-restrictions/rules/check-destructuring-completeness.mts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,QAAQ,EAEd,MAAM,0BAA0B,CAAC;AAMlC,KAAK,OAAO,GAAG,SAAS;IACtB,QAAQ,CAAC;QACP,8BAA8B,CAAC,EAAE,OAAO,CAAC;QACzC,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC,CAAC;CACJ,CAAC;AAEF,KAAK,UAAU,GAAG,yBAAyB,CAAC;AAI5C;;;;;;GAMG;AACH,eAAO,MAAM,8BAA8B,EAAE,QAAQ,CAAC,UAAU,CAC9D,UAAU,EACV,OAAO,CA2OC,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AST_NODE_TYPES, } from '@typescript-eslint/utils';
|
|
2
|
-
import { skipTypeWrappers } from 'eslint-rule-forge';
|
|
2
|
+
import { skipTypeWrappers, typeWrapperLayers } from 'eslint-rule-forge';
|
|
3
3
|
import { Arr } from 'ts-data-forge';
|
|
4
4
|
const DEFAULT_DIRECTIVE_KEYWORD = '@check-destructuring-completeness';
|
|
5
5
|
|
|
@@ -105,16 +105,21 @@ export const checkDestructuringCompleteness = {
|
|
|
105
105
|
return;
|
|
106
106
|
}
|
|
107
107
|
|
|
108
|
-
const tsNode = esTreeNodeToTSNodeMap.get(tsSourceNode);
|
|
109
108
|
|
|
110
|
-
if (tsNode === undefined) {
|
|
111
|
-
return;
|
|
112
|
-
}
|
|
113
109
|
|
|
110
|
+
const layerProps = typeWrapperLayers(tsSourceNode).map((layer) => {
|
|
111
|
+
|
|
112
|
+
const tsNode = esTreeNodeToTSNodeMap.get(layer);
|
|
113
|
+
|
|
114
|
+
return tsNode === undefined
|
|
115
|
+
? []
|
|
116
|
+
: getObjectTypeProperties(typeChecker.getNonNullableType(typeChecker.getTypeAtLocation(tsNode)));
|
|
117
|
+
});
|
|
114
118
|
|
|
115
119
|
|
|
116
|
-
|
|
117
|
-
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
const objectProps = (layerProps[0] ?? []).filter((prop) => layerProps.every((props) => props.includes(prop)));
|
|
118
123
|
const collected = collectDestructuredPropNames(objectPattern.properties);
|
|
119
124
|
|
|
120
125
|
|
|
@@ -146,9 +151,7 @@ export const checkDestructuringCompleteness = {
|
|
|
146
151
|
if (!shouldCheck) {
|
|
147
152
|
return;
|
|
148
153
|
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
checkObjectPatternCompleteness(node.id, skipTypeWrappers(node.init));
|
|
154
|
+
checkObjectPatternCompleteness(node.id, node.init);
|
|
152
155
|
},
|
|
153
156
|
ArrowFunctionExpression: (node) => {
|
|
154
157
|
if (!alwaysCheckReactComponentProps) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-destructuring-completeness.mjs","sourceRoot":"","sources":["../../../../src/plugins/ts-restrictions/rules/check-destructuring-completeness.mts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,GAGf,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"check-destructuring-completeness.mjs","sourceRoot":"","sources":["../../../../src/plugins/ts-restrictions/rules/check-destructuring-completeness.mts"],"names":[],"mappings":"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"}
|
|
@@ -26,8 +26,13 @@ export declare const isComparison: (node: DeepReadonly<TSESTree.Node>) => node i
|
|
|
26
26
|
* sides are strings (compared as strings), or both are numeric values that are
|
|
27
27
|
* never `NaN` — number literals, `bigint`, booleans, and number brands that
|
|
28
28
|
* declare `NaNValue: false` (`ValidNumber`, `Int`, `FiniteNumber`, …).
|
|
29
|
+
*
|
|
30
|
+
* `getLayerTypes` gives an operand's type at each of its type-wrapper layers,
|
|
31
|
+
* and every one of them has to say so: `(v as number) < 1` may be `NaN` even
|
|
32
|
+
* when `v` is a `ValidNumber`, and `(n as ValidNumber) < 1` still may when `n`
|
|
33
|
+
* is a `number`.
|
|
29
34
|
*/
|
|
30
|
-
export declare const isExactlyInvertible: (node: ComparisonExpression,
|
|
35
|
+
export declare const isExactlyInvertible: (node: ComparisonExpression, getLayerTypes: (target: DeepReadonly<TSESTree.Node>) => readonly ts.Type[], checker: ts.TypeChecker) => boolean;
|
|
31
36
|
/**
|
|
32
37
|
* The source of `node` with its operator inverted, and everything else —
|
|
33
38
|
* operands, comments, line breaks — as written.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comparison-utils.d.mts","sourceRoot":"","sources":["../../../../src/plugins/ts-restrictions/rules/comparison-utils.mts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,QAAQ,EACd,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,iFAAiF;AACjF,eAAO,MAAM,4BAA4B;aACvC,KAAK,EAAE,KAAK;aACZ,KAAK,EAAE,KAAK;aACZ,IAAI,EAAE,IAAI;aACV,IAAI,EAAE,IAAI;aACV,GAAG,EAAE,IAAI;aACT,IAAI,EAAE,GAAG;aACT,GAAG,EAAE,IAAI;aACT,IAAI,EAAE,GAAG;CACD,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,MAAM,OAAO,4BAA4B,CAAC;AAE3E,MAAM,MAAM,oBAAoB,GAAG,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GACxE,QAAQ,CAAC;IAAE,QAAQ,EAAE,kBAAkB,CAAA;CAAE,CAAC,CAAC;AAE7C,eAAO,MAAM,YAAY,SACjB,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,KAChC,IAAI,IAAI,oBAE0C,CAAC;AAEtD
|
|
1
|
+
{"version":3,"file":"comparison-utils.d.mts","sourceRoot":"","sources":["../../../../src/plugins/ts-restrictions/rules/comparison-utils.mts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,QAAQ,EACd,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,iFAAiF;AACjF,eAAO,MAAM,4BAA4B;aACvC,KAAK,EAAE,KAAK;aACZ,KAAK,EAAE,KAAK;aACZ,IAAI,EAAE,IAAI;aACV,IAAI,EAAE,IAAI;aACV,GAAG,EAAE,IAAI;aACT,IAAI,EAAE,GAAG;aACT,GAAG,EAAE,IAAI;aACT,IAAI,EAAE,GAAG;CACD,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,MAAM,OAAO,4BAA4B,CAAC;AAE3E,MAAM,MAAM,oBAAoB,GAAG,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GACxE,QAAQ,CAAC;IAAE,QAAQ,EAAE,kBAAkB,CAAA;CAAE,CAAC,CAAC;AAE7C,eAAO,MAAM,YAAY,SACjB,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,KAChC,IAAI,IAAI,oBAE0C,CAAC;AAEtD;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,mBAAmB,SACxB,oBAAoB,iBACX,CAAC,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC,IAAI,EAAE,WAEjE,EAAE,CAAC,WAAW,KACtB,OAcF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,SAC3B,oBAAoB,cACd,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,KAC5C,MAoBF,CAAC"}
|
|
@@ -24,13 +24,21 @@ export const isComparison = (node) => node.type === AST_NODE_TYPES.BinaryExpress
|
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
export const isExactlyInvertible = (node, getLayerTypes,
|
|
28
33
|
|
|
29
34
|
checker) => {
|
|
30
35
|
if (!RELATIONAL_OPERATORS.has(node.operator)) {
|
|
31
36
|
return true;
|
|
32
37
|
}
|
|
33
|
-
const sides = [
|
|
38
|
+
const sides = [
|
|
39
|
+
...getLayerTypes(node.left),
|
|
40
|
+
...getLayerTypes(node.right),
|
|
41
|
+
].flatMap(constituentsOf);
|
|
34
42
|
return (sides.every((type) => (type.flags & ts.TypeFlags.StringLike) !== 0) ||
|
|
35
43
|
sides.every((type) => isNeverNaN(type, checker)));
|
|
36
44
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comparison-utils.mjs","sourceRoot":"","sources":["../../../../src/plugins/ts-restrictions/rules/comparison-utils.mts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,GAGf,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvC,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,iFAAiF;AACjF,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,KAAK,EAAE,KAAK;IACZ,KAAK,EAAE,KAAK;IACZ,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,GAAG,EAAE,IAAI;IACT,IAAI,EAAE,GAAG;IACT,GAAG,EAAE,IAAI;IACT,IAAI,EAAE,GAAG;CACD,CAAC;AAOX,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,IAAiC,EACH,EAAE,CAChC,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,gBAAgB;IAC7C,MAAM,CAAC,4BAA4B,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AAEtD
|
|
1
|
+
{"version":3,"file":"comparison-utils.mjs","sourceRoot":"","sources":["../../../../src/plugins/ts-restrictions/rules/comparison-utils.mts"],"names":[],"mappings":"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"}
|
|
@@ -24,8 +24,9 @@ type MessageIds = 'booleanOperands' | 'nonBooleanLeft';
|
|
|
24
24
|
* An operand is "in JSX" when its value can come out of the braces: the
|
|
25
25
|
* expression in `{…}` itself, a branch of a ternary there, or an operand of a
|
|
26
26
|
* longer `&&` / `||` / `??` chain. The test of a ternary is not. An operand is
|
|
27
|
-
*
|
|
28
|
-
* to `boolean` does not make a number one
|
|
27
|
+
* a boolean only when it is one at every `as`, `satisfies` or `!` around it: a
|
|
28
|
+
* cast to `boolean` does not make a number one, and a cast widening a boolean
|
|
29
|
+
* to `boolean | number` is the author saying it may be a number. This replaces
|
|
29
30
|
* `react/jsx-no-leaked-render`, which reported every `&&` alike, whatever its
|
|
30
31
|
* operands were.
|
|
31
32
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsx-boolean-logical-operands.d.mts","sourceRoot":"","sources":["../../../../src/plugins/ts-restrictions/rules/jsx-boolean-logical-operands.mts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,QAAQ,EAEd,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"jsx-boolean-logical-operands.d.mts","sourceRoot":"","sources":["../../../../src/plugins/ts-restrictions/rules/jsx-boolean-logical-operands.mts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,QAAQ,EAEd,MAAM,0BAA0B,CAAC;AAOlC,KAAK,OAAO,GAAG,SAAS,EAAE,CAAC;AAE3B,KAAK,UAAU,GAAG,iBAAiB,GAAG,gBAAgB,CAAC;AAEvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,UAAU,CACzD,UAAU,EACV,OAAO,CAyGC,CAAC"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { AST_NODE_TYPES, ESLintUtils, } from '@typescript-eslint/utils';
|
|
2
|
-
import { isTypeWrapper
|
|
2
|
+
import { isTypeWrapper } from 'eslint-rule-forge';
|
|
3
3
|
import * as ts from 'typescript';
|
|
4
4
|
import { jsxValuePositionOf } from './jsx-utils.mjs';
|
|
5
|
+
import { createGetLayerTypes } from './type-layer-utils.mjs';
|
|
6
|
+
|
|
5
7
|
|
|
6
8
|
|
|
7
9
|
|
|
@@ -47,7 +49,12 @@ export const jsxBooleanLogicalOperands = {
|
|
|
47
49
|
const sourceCode = context.sourceCode;
|
|
48
50
|
const services = ESLintUtils.getParserServices(context);
|
|
49
51
|
const checker = services.program.getTypeChecker();
|
|
50
|
-
const
|
|
52
|
+
const getLayerTypes = createGetLayerTypes(services);
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
const isBoolean = (node) => getLayerTypes(node).every((type) => typeIsBoolean(type, checker));
|
|
51
58
|
const textOf = (node) => sourceCode.getText(asNode(node));
|
|
52
59
|
const ternaryOf = (node, position) => {
|
|
53
60
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsx-boolean-logical-operands.mjs","sourceRoot":"","sources":["../../../../src/plugins/ts-restrictions/rules/jsx-boolean-logical-operands.mts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,WAAW,GAGZ,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"jsx-boolean-logical-operands.mjs","sourceRoot":"","sources":["../../../../src/plugins/ts-restrictions/rules/jsx-boolean-logical-operands.mts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,WAAW,GAGZ,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAyB,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAM7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAGlC;IACF,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACJ,WAAW,EACT,yKAAyK;SAC5K;QACD,OAAO,EAAE,MAAM;QACf,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE;YACR,eAAe,EACb,+EAA+E;YACjF,cAAc,EACZ,kKAAkK;SACrK;KACF;IAED,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE;QAClB,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QAEtC,MAAM,QAAQ,GAAG,WAAW,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAExD,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QAElD,MAAM,aAAa,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAEpD;;;WAGG;QACH,MAAM,SAAS,GAAG,CAAC,IAAuC,EAAW,EAAE,CACrE,aAAa,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QAEpE,MAAM,MAAM,GAAG,CAAC,IAAiC,EAAU,EAAE,CAC3D,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAEnC,MAAM,SAAS,GAAG,CAChB,IAA8C,EAC9C,QAA0B,EAClB,EAAE;YACV,yEAAyE;YACzE,uBAAuB;YACvB,MAAM,IAAI,GACR,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;gBACtE,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;gBAC1B,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAExB,MAAM,KAAK,GACT,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,kBAAkB;gBACrD,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;gBACvB,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG;gBAC3B,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAEzB,oEAAoE;YACpE,MAAM,GAAG,GACP,QAAQ,KAAK,OAAO;gBAClB,CAAC,CAAC,WAAW;gBACb,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI;oBACtB,CAAC,CAAC,OAAO;oBACT,CAAC,CAAC,MAAM,CAAC;YAEf,OAAO,IAAI,CAAC,QAAQ,KAAK,IAAI;gBAC3B,CAAC,CAAC,GAAG,IAAI,MAAM,KAAK,MAAM,GAAG,EAAE;gBAC/B,CAAC,CAAC,GAAG,IAAI,MAAM,GAAG,MAAM,KAAK,EAAE,CAAC;QACpC,CAAC,CAAC;QAEF,OAAO;YACL,iBAAiB,EAAE,CAAC,IAAI,EAAE,EAAE;gBAC1B,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;oBAC3B,OAAO;gBACT,CAAC;gBAED,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;gBAE1C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;oBAC3B,OAAO;gBACT,CAAC;gBAED,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC1B,OAAO,CAAC,MAAM,CAAC;wBACb,IAAI;wBACJ,SAAS,EAAE,gBAAgB;wBAC3B,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;qBAClC,CAAC,CAAC;oBAEH,OAAO;gBACT,CAAC;gBAED,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC1B,OAAO;gBACT,CAAC;gBAED,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBAE9C,OAAO,CAAC,MAAM,CAAC;oBACb,IAAI;oBACJ,SAAS,EAAE,iBAAiB;oBAC5B,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE;oBAC9C,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC;iBACrD,CAAC,CAAC;YACL,CAAC;SACF,CAAC;IACJ,CAAC;IACD,cAAc,EAAE,EAAE;CACV,CAAC;AAEX,kEAAkE;AAClE,MAAM,wBAAwB,GAAgC,IAAI,GAAG,CAAC;IACpE,cAAc,CAAC,uBAAuB;IACtC,cAAc,CAAC,oBAAoB;IACnC,cAAc,CAAC,qBAAqB;IACpC,cAAc,CAAC,kBAAkB;IACjC,cAAc,CAAC,eAAe;CAC/B,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,aAAa,GAAG;AACpB,8EAA8E;AAC9E,IAAa;AACb,8EAA8E;AAC9E,OAAuB,EACd,EAAE;IACX,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,WAAW,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QACzE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QACpD,MAAM,UAAU,GAAG,OAAO,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;QAEzD,OAAO,CACL,UAAU,KAAK,SAAS;YACxB,UAAU,KAAK,IAAI;YACnB,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,CACnC,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,CAA0B,IAAqB,EAAK,EAAE;AACnE,oEAAoE;AACpE,IAAS,CAAC"}
|
|
@@ -11,9 +11,11 @@ type MessageIds = 'negatedComparison' | 'negatedComparisonMaybeNaN' | 'invertCom
|
|
|
11
11
|
* with `NaN` is `false` — `!(x >= 0)` holds for `NaN` and `x < 0` does not —
|
|
12
12
|
* and a check written that way may be relying on it.
|
|
13
13
|
*
|
|
14
|
-
* The comparison is found
|
|
15
|
-
*
|
|
16
|
-
* a `number` cast to a brand that
|
|
14
|
+
* The comparison is found through any `as`, `satisfies` or `!`:
|
|
15
|
+
* `!((a === b) satisfies boolean)` is `a !== b`. An operand's type has to
|
|
16
|
+
* exclude `NaN` at every wrapper layer: a `number` cast to a brand that
|
|
17
|
+
* excludes it may still be one, and a cast widening such a brand to `number`
|
|
18
|
+
* is the author saying it may be.
|
|
17
19
|
*
|
|
18
20
|
* `!!(a === b)` is a conversion to boolean, not a negation, and is left alone.
|
|
19
21
|
* A comment the fix would drop leaves the report without a fix.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-negated-comparison.d.mts","sourceRoot":"","sources":["../../../../src/plugins/ts-restrictions/rules/no-negated-comparison.mts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,QAAQ,EAEd,MAAM,0BAA0B,CAAC;AAWlC,KAAK,OAAO,GAAG,SAAS,EAAE,CAAC;AAE3B,KAAK,UAAU,GACb,mBAAmB,GAAG,2BAA2B,GAAG,kBAAkB,CAAC;AAEzE
|
|
1
|
+
{"version":3,"file":"no-negated-comparison.d.mts","sourceRoot":"","sources":["../../../../src/plugins/ts-restrictions/rules/no-negated-comparison.mts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,QAAQ,EAEd,MAAM,0BAA0B,CAAC;AAWlC,KAAK,OAAO,GAAG,SAAS,EAAE,CAAC;AAE3B,KAAK,UAAU,GACb,mBAAmB,GAAG,2BAA2B,GAAG,kBAAkB,CAAC;AAEzE;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAoI/D,CAAC"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { AST_NODE_TYPES, ESLintUtils, } from '@typescript-eslint/utils';
|
|
2
|
-
import {
|
|
2
|
+
import { skipTypeWrappers } from 'eslint-rule-forge';
|
|
3
3
|
import { invertedComparisonText, isComparison, isExactlyInvertible, } from './comparison-utils.mjs';
|
|
4
|
+
import { createGetLayerTypes } from './type-layer-utils.mjs';
|
|
5
|
+
|
|
6
|
+
|
|
4
7
|
|
|
5
8
|
|
|
6
9
|
|
|
@@ -37,7 +40,7 @@ export const noNegatedComparison = {
|
|
|
37
40
|
const sourceCode = context.sourceCode;
|
|
38
41
|
const services = ESLintUtils.getParserServices(context);
|
|
39
42
|
const checker = services.program.getTypeChecker();
|
|
40
|
-
const
|
|
43
|
+
const getLayerTypes = createGetLayerTypes(services);
|
|
41
44
|
|
|
42
45
|
const hasCommentOutside = (node, comparison) => sourceCode
|
|
43
46
|
.getCommentsInside(asNode(node))
|
|
@@ -67,7 +70,7 @@ export const noNegatedComparison = {
|
|
|
67
70
|
const fix = hasCommentOutside(node, comparison)
|
|
68
71
|
? undefined
|
|
69
72
|
: (fixer) => fixer.replaceText(asNode(node), replacement);
|
|
70
|
-
if (isExactlyInvertible(comparison,
|
|
73
|
+
if (isExactlyInvertible(comparison, getLayerTypes, checker)) {
|
|
71
74
|
context.report({
|
|
72
75
|
node: asNode(node),
|
|
73
76
|
messageId: 'negatedComparison',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-negated-comparison.mjs","sourceRoot":"","sources":["../../../../src/plugins/ts-restrictions/rules/no-negated-comparison.mts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,WAAW,GAGZ,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"no-negated-comparison.mjs","sourceRoot":"","sources":["../../../../src/plugins/ts-restrictions/rules/no-negated-comparison.mts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-string-spread.d.mts","sourceRoot":"","sources":["../../../../src/plugins/ts-restrictions/rules/no-string-spread.mts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"no-string-spread.d.mts","sourceRoot":"","sources":["../../../../src/plugins/ts-restrictions/rules/no-string-spread.mts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAItE,KAAK,OAAO,GAAG,SAAS,EAAE,CAAC;AAE3B,KAAK,UAAU,GAAG,gBAAgB,CAAC;AAanC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CA2E1D,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { ESLintUtils
|
|
2
|
-
import { isTypeWrapper } from 'eslint-rule-forge';
|
|
1
|
+
import { ESLintUtils } from '@typescript-eslint/utils';
|
|
3
2
|
import * as ts from 'typescript';
|
|
3
|
+
import { createGetLayerTypes } from './type-layer-utils.mjs';
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
|
|
@@ -83,14 +83,16 @@ export const noStringSpread = {
|
|
|
83
83
|
}
|
|
84
84
|
return (type.flags & ts.TypeFlags.StringLike) !== 0;
|
|
85
85
|
};
|
|
86
|
-
const
|
|
86
|
+
const getLayerTypes = createGetLayerTypes(parserServices);
|
|
87
87
|
return {
|
|
88
88
|
|
|
89
89
|
|
|
90
90
|
|
|
91
91
|
|
|
92
92
|
SpreadElement: (node) => {
|
|
93
|
-
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
if (!getLayerTypes(node.argument).some(isStringLikeType)) {
|
|
94
96
|
return;
|
|
95
97
|
}
|
|
96
98
|
context.report({
|
|
@@ -102,14 +104,4 @@ export const noStringSpread = {
|
|
|
102
104
|
},
|
|
103
105
|
defaultOptions: [],
|
|
104
106
|
};
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
const someLayerIs = (node, predicate) => predicate(node) ||
|
|
111
|
-
(isTypeWrapper(node) && someLayerIs(node.expression, predicate));
|
|
112
|
-
const asNode = (node) =>
|
|
113
|
-
|
|
114
|
-
node;
|
|
115
107
|
//# sourceMappingURL=no-string-spread.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-string-spread.mjs","sourceRoot":"","sources":["../../../../src/plugins/ts-restrictions/rules/no-string-spread.mts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"no-string-spread.mjs","sourceRoot":"","sources":["../../../../src/plugins/ts-restrictions/rules/no-string-spread.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAiB,MAAM,0BAA0B,CAAC;AACtE,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAM7D;;;;GAIG;AACH,MAAM,mBAAmB,GACvB,EAAE,CAAC,SAAS,CAAC,aAAa;IAC1B,EAAE,CAAC,SAAS,CAAC,aAAa;IAC1B,EAAE,CAAC,SAAS,CAAC,WAAW;IACxB,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,CAAC,MAAM,cAAc,GAA6C;IACtE,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACJ,WAAW,EACT,6JAA6J;SAChK;QACD,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE;YACR,cAAc,EACZ,uRAAuR;SAC1R;KACF;IAED,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE;QAClB,MAAM,cAAc,GAAG,WAAW,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAE9D,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QAExD;;;;;;;;;;;;;;WAcG;QACH,8EAA8E;QAC9E,MAAM,gBAAgB,GAAG,CAAC,IAAa,EAAW,EAAE;YAClD,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnE,OAAO,KAAK,CAAC;YACf,CAAC;YAED,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;gBAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC3C,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC7C,MAAM,UAAU,GAAG,OAAO,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;gBAEzD,OAAO,UAAU,KAAK,SAAS,IAAI,gBAAgB,CAAC,UAAU,CAAC,CAAC;YAClE,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACtD,CAAC,CAAC;QAEF,MAAM,aAAa,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAC;QAE1D,OAAO;YACL,qEAAqE;YACrE,oEAAoE;YACpE,sEAAsE;YACtE,+DAA+D;YAC/D,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE;gBACtB,yDAAyD;gBACzD,wCAAwC;gBACxC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;oBACzD,OAAO;gBACT,CAAC;gBAED,OAAO,CAAC,MAAM,CAAC;oBACb,IAAI;oBACJ,SAAS,EAAE,gBAAgB;iBAC5B,CAAC,CAAC;YACL,CAAC;SACF,CAAC;IACJ,CAAC;IACD,cAAc,EAAE,EAAE;CACV,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-unnecessary-array-from.d.mts","sourceRoot":"","sources":["../../../../src/plugins/ts-restrictions/rules/no-unnecessary-array-from.mts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,QAAQ,EAEd,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"no-unnecessary-array-from.d.mts","sourceRoot":"","sources":["../../../../src/plugins/ts-restrictions/rules/no-unnecessary-array-from.mts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,QAAQ,EAEd,MAAM,0BAA0B,CAAC;AAUlC,KAAK,OAAO,GAAG,SAAS,EAAE,CAAC;AAE3B,KAAK,UAAU,GAAG,sBAAsB,CAAC;AA4DzC,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAkFhE,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { AST_NODE_TYPES, ESLintUtils, } from '@typescript-eslint/utils';
|
|
2
2
|
import { skipTypeWrappers } from 'eslint-rule-forge';
|
|
3
3
|
import { createIsArrayOrTupleType, matchArrayFromCall, toMemberObjectText, } from './array-type-utils.mjs';
|
|
4
|
+
import { createGetLayerTypes } from './type-layer-utils.mjs';
|
|
4
5
|
|
|
5
6
|
|
|
6
7
|
|
|
@@ -74,6 +75,7 @@ export const noUnnecessaryArrayFrom = {
|
|
|
74
75
|
const parserServices = ESLintUtils.getParserServices(context);
|
|
75
76
|
const checker = parserServices.program.getTypeChecker();
|
|
76
77
|
const isArrayOrTupleType = createIsArrayOrTupleType(checker);
|
|
78
|
+
const getLayerTypes = createGetLayerTypes(parserServices);
|
|
77
79
|
return {
|
|
78
80
|
CallExpression: (node) => {
|
|
79
81
|
|
|
@@ -96,14 +98,12 @@ export const noUnnecessaryArrayFrom = {
|
|
|
96
98
|
|
|
97
99
|
|
|
98
100
|
|
|
99
|
-
|
|
100
|
-
if (!isArrayOrTupleType(argType)) {
|
|
101
|
+
if (!getLayerTypes(arg).every(isArrayOrTupleType)) {
|
|
101
102
|
return;
|
|
102
103
|
}
|
|
103
104
|
|
|
104
105
|
|
|
105
|
-
|
|
106
|
-
if (!isArrayOrTupleType(innerType)) {
|
|
106
|
+
if (!getLayerTypes(callee.object).every(isArrayOrTupleType)) {
|
|
107
107
|
return;
|
|
108
108
|
}
|
|
109
109
|
context.report({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-unnecessary-array-from.mjs","sourceRoot":"","sources":["../../../../src/plugins/ts-restrictions/rules/no-unnecessary-array-from.mts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,WAAW,GAGZ,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"no-unnecessary-array-from.mjs","sourceRoot":"","sources":["../../../../src/plugins/ts-restrictions/rules/no-unnecessary-array-from.mts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-unnecessary-coalesce-undefined.d.mts","sourceRoot":"","sources":["../../../../src/plugins/ts-restrictions/rules/no-unnecessary-coalesce-undefined.mts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,QAAQ,EAEd,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"no-unnecessary-coalesce-undefined.d.mts","sourceRoot":"","sources":["../../../../src/plugins/ts-restrictions/rules/no-unnecessary-coalesce-undefined.mts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,QAAQ,EAEd,MAAM,0BAA0B,CAAC;AAMlC,KAAK,OAAO,GAAG,SAAS,EAAE,CAAC;AAE3B,KAAK,UAAU,GAAG,8BAA8B,CAAC;AAsBjD;;;;;;GAMG;AACH,eAAO,MAAM,8BAA8B,EAAE,QAAQ,CAAC,UAAU,CAC9D,UAAU,EACV,OAAO,CAqIC,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { AST_NODE_TYPES, ESLintUtils, } from '@typescript-eslint/utils';
|
|
2
2
|
import { skipTypeWrappers } from 'eslint-rule-forge';
|
|
3
3
|
import * as ts from 'typescript';
|
|
4
|
+
import { createGetLayerTypes } from './type-layer-utils.mjs';
|
|
4
5
|
|
|
5
6
|
|
|
6
7
|
|
|
@@ -48,6 +49,7 @@ export const noUnnecessaryCoalesceUndefined = {
|
|
|
48
49
|
return {};
|
|
49
50
|
}
|
|
50
51
|
const checker = parserServices.program.getTypeChecker();
|
|
52
|
+
const getLayerTypes = createGetLayerTypes(parserServices);
|
|
51
53
|
|
|
52
54
|
|
|
53
55
|
|
|
@@ -91,12 +93,11 @@ export const noUnnecessaryCoalesceUndefined = {
|
|
|
91
93
|
return;
|
|
92
94
|
}
|
|
93
95
|
|
|
94
|
-
const leftTsNode = parserServices.esTreeNodeToTSNodeMap.get(asNode(skipTypeWrappers(node.left)));
|
|
95
|
-
const leftType = checker.getTypeAtLocation(leftTsNode);
|
|
96
96
|
|
|
97
97
|
|
|
98
98
|
|
|
99
|
-
|
|
99
|
+
|
|
100
|
+
if (getLayerTypes(node.left).some(typeIncludesNull)) {
|
|
100
101
|
return;
|
|
101
102
|
}
|
|
102
103
|
context.report({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-unnecessary-coalesce-undefined.mjs","sourceRoot":"","sources":["../../../../src/plugins/ts-restrictions/rules/no-unnecessary-coalesce-undefined.mts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,WAAW,GAGZ,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"no-unnecessary-coalesce-undefined.mjs","sourceRoot":"","sources":["../../../../src/plugins/ts-restrictions/rules/no-unnecessary-coalesce-undefined.mts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,WAAW,GAGZ,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAM7D;;;;GAIG;AACH,MAAM,mBAAmB,GACvB,EAAE,CAAC,SAAS,CAAC,aAAa;IAC1B,EAAE,CAAC,SAAS,CAAC,aAAa;IAC1B,EAAE,CAAC,SAAS,CAAC,WAAW;IACxB,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC;AAE5B;;;;GAIG;AACH,8EAA8E;AAC9E,MAAM,eAAe,GAAG,CAAC,IAAa,EAAW,EAAE,CACjD,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAEjE;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAGvC;IACF,IAAI,EAAE;QACJ,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACJ,WAAW,EACT,+HAA+H;SAClI;QACD,OAAO,EAAE,MAAM;QACf,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE;YACR,4BAA4B,EAC1B,mGAAmG;SACtG;KACF;IAED,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE;QAClB,MAAM,cAAc,GAAG,WAAW,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAE9D,MAAM,eAAe,GAAG,cAAc,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;QAEpE,4EAA4E;QAC5E,2EAA2E;QAC3E,2EAA2E;QAC3E,yEAAyE;QACzE,MAAM,gBAAgB,GACpB,eAAe,CAAC,gBAAgB,IAAI,eAAe,CAAC,MAAM,IAAI,KAAK,CAAC;QAEtE,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QAExD,MAAM,aAAa,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAC;QAE1D;;;;;;;WAOG;QACH,8EAA8E;QAC9E,MAAM,gBAAgB,GAAG,CAAC,IAAa,EAAW,EAAE;YAClD,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnE,OAAO,IAAI,CAAC;YACd,CAAC;YAED,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;gBACnB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC3C,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC7C,MAAM,UAAU,GAAG,OAAO,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;gBAEzD,OAAO,UAAU,KAAK,SAAS,IAAI,gBAAgB,CAAC,UAAU,CAAC,CAAC;YAClE,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChD,CAAC,CAAC;QAEF,OAAO;YACL,iBAAiB,EAAE,CAAC,IAAI,EAAE,EAAE;gBAC1B,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;oBAC3B,OAAO;gBACT,CAAC;gBAED,mEAAmE;gBACnE,mDAAmD;gBACnD,MAAM,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBAEnD,IACE,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,UAAU;oBACxC,KAAK,CAAC,IAAI,KAAK,WAAW,EAC1B,CAAC;oBACD,OAAO;gBACT,CAAC;gBAED,wEAAwE;gBACxE,iEAAiE;gBACjE,oEAAoE;gBACpE,8DAA8D;gBAC9D,MAAM,WAAW,GAAG,cAAc,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAEpE,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;oBAC7D,OAAO;gBACT,CAAC;gBAED,uEAAuE;gBACvE,sEAAsE;gBACtE,qEAAqE;gBACrE,uEAAuE;gBACvE,yDAAyD;gBACzD,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;oBACpD,OAAO;gBACT,CAAC;gBAED,OAAO,CAAC,MAAM,CAAC;oBACb,IAAI;oBACJ,SAAS,EAAE,8BAA8B;oBACzC,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE;wBACb,MAAM,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,oBAAoB,CAC3D,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,KAAK,EACV,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,CAChC,CAAC;wBAEF,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;4BAC3B,OAAO,IAAI,CAAC;wBACd,CAAC;wBAED,MAAM,mBAAmB,GACvB,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;wBAEnD,IAAI,mBAAmB,KAAK,IAAI,EAAE,CAAC;4BACjC,OAAO,IAAI,CAAC;wBACd,CAAC;wBAED,4DAA4D;wBAC5D,mEAAmE;wBACnE,mDAAmD;wBACnD,OAAO,KAAK,CAAC,WAAW,CAAC;4BACvB,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;4BAC5B,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;yBACd,CAAC,CAAC;oBACL,CAAC;iBACF,CAAC,CAAC;YACL,CAAC;SACF,CAAC;IACJ,CAAC;IACD,cAAc,EAAE,EAAE;CACV,CAAC;AAEX,MAAM,MAAM,GAAG,CAA0B,IAAqB,EAAK,EAAE;AACnE,oEAAoE;AACpE,IAAS,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type TSESLint } from '@typescript-eslint/utils';
|
|
2
2
|
type Options = readonly [];
|
|
3
|
-
type MessageIds = 'useFunctionDirectly' | 'useCurriedForm';
|
|
3
|
+
type MessageIds = 'useFunctionDirectly' | 'useCurriedForm' | 'mayNeedGlobalReceiver' | 'replaceWithFunction';
|
|
4
4
|
/**
|
|
5
5
|
* Replaces a redundant arrow wrapper around a function call with a point-free
|
|
6
6
|
* form, using the callee's curried version when one exists:
|
|
@@ -17,8 +17,19 @@ type MessageIds = 'useFunctionDirectly' | 'useCurriedForm';
|
|
|
17
17
|
* The arrow's single parameter must appear exactly once, as the first argument
|
|
18
18
|
* of the call, so dropping the wrapper is behavior-preserving.
|
|
19
19
|
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
20
|
+
* A global the host provides (`requestAnimationFrame`, `setTimeout`, `fetch`
|
|
21
|
+
* in the default libraries) may have to be called on `globalThis` — passed as
|
|
22
|
+
* an object's property, it throws `Illegal invocation` — so `(a) => f(a)` is
|
|
23
|
+
* left alone for one. ECMAScript's own global functions (`parseFloat`,
|
|
24
|
+
* `String`, `Boolean`, ...) do not read `this` and are fixed as usual. Any
|
|
25
|
+
* other global ambient declaration (a `.d.ts` outside the default libraries,
|
|
26
|
+
* `declare global`) cannot be judged, so it is reported with a suggestion
|
|
27
|
+
* rather than fixed.
|
|
28
|
+
*
|
|
29
|
+
* The callee is found through type wrappers and judged by its type at every
|
|
30
|
+
* layer: a cast cannot lend it a curried signature, and one widening it to a
|
|
31
|
+
* type that takes more arguments is the author saying it may read them. The
|
|
32
|
+
* fix keeps the wrappers,
|
|
22
33
|
* parenthesizing a callee that needs it: `(c ? g : h)(a, 1)` → `(c ? g : h)(1)`.
|
|
23
34
|
*/
|
|
24
35
|
export declare const preferCurriedCall: TSESLint.RuleModule<MessageIds, Options>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prefer-curried-call.d.mts","sourceRoot":"","sources":["../../../../src/plugins/ts-restrictions/rules/prefer-curried-call.mts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,QAAQ,EAEd,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"prefer-curried-call.d.mts","sourceRoot":"","sources":["../../../../src/plugins/ts-restrictions/rules/prefer-curried-call.mts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,QAAQ,EAEd,MAAM,0BAA0B,CAAC;AAOlC,KAAK,OAAO,GAAG,SAAS,EAAE,CAAC;AAE3B,KAAK,UAAU,GACX,qBAAqB,GACrB,gBAAgB,GAChB,uBAAuB,GACvB,qBAAqB,CAAC;AAE1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAgS7D,CAAC"}
|