eslint-plugin-ts-fortress 1.2.2 → 1.2.4
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 +7 -6
- package/dist/rules/import-utils.d.mts.map +1 -1
- package/dist/rules/import-utils.mjs +2 -1
- package/dist/rules/import-utils.mjs.map +1 -1
- package/dist/rules/prefer-canonical-length-constrained-type.d.mts.map +1 -1
- package/dist/rules/prefer-canonical-length-constrained-type.mjs +15 -10
- package/dist/rules/prefer-canonical-length-constrained-type.mjs.map +1 -1
- package/dist/rules/prefer-namespace-import.d.mts.map +1 -1
- package/dist/rules/prefer-namespace-import.mjs +10 -5
- package/dist/rules/prefer-namespace-import.mjs.map +1 -1
- package/dist/rules/prefer-schema-over-guard-chain.d.mts.map +1 -1
- package/dist/rules/prefer-schema-over-guard-chain.mjs +12 -6
- package/dist/rules/prefer-schema-over-guard-chain.mjs.map +1 -1
- package/package.json +26 -22
- package/src/rules/import-utils.mts +3 -1
- package/src/rules/prefer-canonical-length-constrained-type.mts +21 -14
- package/src/rules/prefer-namespace-import.mts +15 -5
- package/src/rules/prefer-schema-over-guard-chain.mts +18 -6
package/README.md
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
# eslint-plugin-ts-fortress
|
|
2
2
|
|
|
3
3
|
ESLint rules that steer schema definitions toward
|
|
4
|
-
[`ts-fortress`](https://www.npmjs.com/package/ts-fortress) idioms. Every rule
|
|
5
|
-
auto-fixable, and every
|
|
4
|
+
[`ts-fortress`](https://www.npmjs.com/package/ts-fortress) idioms. Every rule except
|
|
5
|
+
`prefer-schema-over-guard-chain` (which only reports) is auto-fixable, and every
|
|
6
|
+
rewrite is **type-preserving**.
|
|
6
7
|
|
|
7
8
|
## Installation
|
|
8
9
|
|
|
@@ -93,12 +94,12 @@ import * as t from 'ts-fortress';
|
|
|
93
94
|
// ❌
|
|
94
95
|
const Tags = t.minLengthArray(1, t.string());
|
|
95
96
|
const Rgb = t.boundedLengthTuple(3, 3, t.number());
|
|
96
|
-
const Page = t.boundedLengthTuple(0,
|
|
97
|
+
const Page = t.boundedLengthTuple(0, 10, t.string());
|
|
97
98
|
|
|
98
99
|
// ✅
|
|
99
100
|
const Tags = t.nonEmptyArray(t.string());
|
|
100
101
|
const Rgb = t.fixedLengthTuple(3, t.number());
|
|
101
|
-
const Page = t.maxLengthTuple(
|
|
102
|
+
const Page = t.maxLengthTuple(10, t.string());
|
|
102
103
|
```
|
|
103
104
|
|
|
104
105
|
Each rewrite keeps the accepted values, the `defaultValue`, and the options
|
|
@@ -265,8 +266,8 @@ almost all of what a function-scoped count reports.
|
|
|
265
266
|
'ts-fortress/prefer-schema-over-guard-chain': ['error', { threshold: 4 }],
|
|
266
267
|
```
|
|
267
268
|
|
|
268
|
-
- `threshold` (default `5`) —
|
|
269
|
-
|
|
269
|
+
- `threshold` (default `5`) — the number of guards on one value at which a
|
|
270
|
+
single chain is reported.
|
|
270
271
|
- `guards` (default: the `ts-data-forge` narrowing helpers — `hasKey`,
|
|
271
272
|
`isRecord`, `isString`, `isNumber`, `isBoolean`, `isBigint`, `isSymbol`,
|
|
272
273
|
`isArray`, `isNonEmpty`, `isNonNullish`, `isNotNull`, `isNotUndefined`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import-utils.d.mts","sourceRoot":"","sources":["../../src/rules/import-utils.mts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,QAAQ,EACd,MAAM,0BAA0B,CAAC;AAMlC,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC;IACpC,4EAA4E;IAC5E,aAAa,EAAE,MAAM,CAAC;IACtB,qEAAqE;IACrE,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAC;IAC5B,2EAA2E;IAC3E,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC,CAAC;AAEH,qEAAqE;AACrE,eAAO,MAAM,oBAAoB,YACtB,QAAQ,CAAC,OAAO,KACxB,SAAS,QAAQ,CAAC,iBAAiB,EAKnC,CAAC;AAEJ;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,uBACX,SAAS,QAAQ,CAAC,iBAAiB,EAAE,gBAC3C,MAAM,KACnB,MAAM,GAAG,SASK,CAAC;AAElB;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,uBACV,SAAS,QAAQ,CAAC,iBAAiB,EAAE,KACxD,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,UAAU,KAAK,cAAc,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"import-utils.d.mts","sourceRoot":"","sources":["../../src/rules/import-utils.mts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,QAAQ,EACd,MAAM,0BAA0B,CAAC;AAMlC,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC;IACpC,4EAA4E;IAC5E,aAAa,EAAE,MAAM,CAAC;IACtB,qEAAqE;IACrE,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAC;IAC5B,2EAA2E;IAC3E,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC,CAAC;AAEH,qEAAqE;AACrE,eAAO,MAAM,oBAAoB,YACtB,QAAQ,CAAC,OAAO,KACxB,SAAS,QAAQ,CAAC,iBAAiB,EAKnC,CAAC;AAEJ;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,uBACX,SAAS,QAAQ,CAAC,iBAAiB,EAAE,gBAC3C,MAAM,KACnB,MAAM,GAAG,SASK,CAAC;AAElB;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,uBACV,SAAS,QAAQ,CAAC,iBAAiB,EAAE,KACxD,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,UAAU,KAAK,cAAc,GAAG,SAAS,CAoD9D,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,eAChB,QAAQ,CAAC,UAAU,QACzB,QAAQ,CAAC,IAAI,QACb,MAAM,KACX,OAgBF,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,UACnB,QAAQ,CAAC,SAAS,WAChB,QAAQ,CAAC,OAAO,SAClB,SAAS,MAAM,EAAE,KACvB,SAAS,QAAQ,CAAC,OAAO,EAUX,CAAC"}
|
|
@@ -29,8 +29,9 @@ export const buildCalleeResolver = (importDeclarations) => {
|
|
|
29
29
|
.filter((specifier) => specifier.type === AST_NODE_TYPES.ImportNamespaceSpecifier)
|
|
30
30
|
.map((specifier) => specifier.local.name));
|
|
31
31
|
const localToCanonical = new Map(specifiers.flatMap((specifier) => {
|
|
32
|
-
if (specifier.type !== AST_NODE_TYPES.ImportSpecifier)
|
|
32
|
+
if (specifier.type !== AST_NODE_TYPES.ImportSpecifier) {
|
|
33
33
|
return [];
|
|
34
|
+
}
|
|
34
35
|
const importedName = specifier.imported.type === AST_NODE_TYPES.Identifier
|
|
35
36
|
? specifier.imported.name
|
|
36
37
|
: specifier.imported.value;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import-utils.mjs","sourceRoot":"","sources":["../../src/rules/import-utils.mts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,GAGf,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAarD,qEAAqE;AACrE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,OAAyB,EACc,EAAE,CACzC,OAAO,CAAC,IAAI,CAAC,MAAM,CACjB,CAAC,IAAI,EAAsC,EAAE,CAC3C,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,iBAAiB;IAC9C,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,kBAAkB,CAC3C,CAAC;AAEJ;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,kBAAyD,EACzD,YAAoB,EACA,EAAE,CACtB,kBAAkB;KACf,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC;KAChD,IAAI,CACH,CAAC,SAAS,EAAE,EAAE,CACZ,SAAS,CAAC,IAAI,KAAK,cAAc,CAAC,eAAe;IACjD,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,KAAK,cAAc,CAAC,UAAU;QACpD,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI;QACzB,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,YAAY,CACjD,EAAE,KAAK,CAAC,IAAI,CAAC;AAElB;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,kBAAyD,EACM,EAAE;IACjE,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,CAC3C,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,UAAU,CACxC,CAAC;IAEF,MAAM,cAAc,GAAG,IAAI,GAAG,CAC5B,UAAU;SACP,MAAM,CACL,CAAC,SAAS,EAAE,EAAE,CACZ,SAAS,CAAC,IAAI,KAAK,cAAc,CAAC,wBAAwB,CAC7D;SACA,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAC5C,CAAC;IAEF,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAC9B,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;QAC/B,IAAI,SAAS,CAAC,IAAI,KAAK,cAAc,CAAC,eAAe;
|
|
1
|
+
{"version":3,"file":"import-utils.mjs","sourceRoot":"","sources":["../../src/rules/import-utils.mts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,GAGf,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAarD,qEAAqE;AACrE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,OAAyB,EACc,EAAE,CACzC,OAAO,CAAC,IAAI,CAAC,MAAM,CACjB,CAAC,IAAI,EAAsC,EAAE,CAC3C,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,iBAAiB;IAC9C,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,kBAAkB,CAC3C,CAAC;AAEJ;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,kBAAyD,EACzD,YAAoB,EACA,EAAE,CACtB,kBAAkB;KACf,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC;KAChD,IAAI,CACH,CAAC,SAAS,EAAE,EAAE,CACZ,SAAS,CAAC,IAAI,KAAK,cAAc,CAAC,eAAe;IACjD,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,KAAK,cAAc,CAAC,UAAU;QACpD,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI;QACzB,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,YAAY,CACjD,EAAE,KAAK,CAAC,IAAI,CAAC;AAElB;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,kBAAyD,EACM,EAAE;IACjE,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,CAC3C,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,UAAU,CACxC,CAAC;IAEF,MAAM,cAAc,GAAG,IAAI,GAAG,CAC5B,UAAU;SACP,MAAM,CACL,CAAC,SAAS,EAAE,EAAE,CACZ,SAAS,CAAC,IAAI,KAAK,cAAc,CAAC,wBAAwB,CAC7D;SACA,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAC5C,CAAC;IAEF,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAC9B,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;QAC/B,IAAI,SAAS,CAAC,IAAI,KAAK,cAAc,CAAC,eAAe,EAAE,CAAC;YACtD,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,YAAY,GAChB,SAAS,CAAC,QAAQ,CAAC,IAAI,KAAK,cAAc,CAAC,UAAU;YACnD,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI;YACzB,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;QAE/B,OAAO,OAAO,YAAY,KAAK,QAAQ;YACrC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,CAAU,CAAC;YACjD,CAAC,CAAC,EAAE,CAAC;IACT,CAAC,CAAC,CACH,CAAC;IAEF,OAAO,CAAC,MAAM,EAAE,EAAE;QAChB,IAAI,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,UAAU,EAAE,CAAC;YAC9C,MAAM,aAAa,GAAG,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAExD,OAAO,aAAa,KAAK,SAAS;gBAChC,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;QAClE,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,gBAAgB;YACpD,CAAC,MAAM,CAAC,QAAQ;YAChB,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,UAAU;YAChD,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;YACtC,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,cAAc,CAAC,UAAU;YAClD,CAAC,CAAC;gBACE,aAAa,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI;gBACnC,YAAY,EAAE,MAAM,CAAC,QAAQ;gBAC7B,WAAW,EAAE,IAAI;aAClB;YACH,CAAC,CAAC,SAAS,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,UAA+B,EAC/B,IAAmB,EACnB,IAAY,EACH,EAAE;IACX,KACE,IAAI,SAAS,GAAgC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EACtE,SAAS,KAAK,IAAI,EAClB,SAAS,GAAG,SAAS,CAAC,KAAK,EAC3B,CAAC;QACD,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAEzC,sEAAsE;QACtE,yEAAyE;QACzE,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,KAAyB,EACzB,OAAyB,EACzB,KAAwB,EACK,EAAE,CAC/B,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;IAChB,CAAC,CAAE,EAAY;IACf,CAAC,CAAE;QACC,KAAK,CAAC,gBAAgB,CACpB,OAAO,EACP,KAAK;aACF,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,IAAI,YAAY,kBAAkB,MAAM,CAAC;aACnE,IAAI,CAAC,EAAE,CAAC,CACZ;KACQ,CAAC;AAElB,MAAM,qBAAqB,GAAG,CAAC,IAAmB,EAAW,EAAE,CAC7D,CAAC,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,eAAe;IAC3C,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,sBAAsB;IACnD,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,wBAAwB,CAAC;IACxD,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,iBAAiB;IACrD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,KAAK,kBAAkB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prefer-canonical-length-constrained-type.d.mts","sourceRoot":"","sources":["../../src/rules/prefer-canonical-length-constrained-type.mts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,QAAQ,EAEd,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"prefer-canonical-length-constrained-type.d.mts","sourceRoot":"","sources":["../../src/rules/prefer-canonical-length-constrained-type.mts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,QAAQ,EAEd,MAAM,0BAA0B,CAAC;AAoBlC,KAAK,OAAO,GAAG,SAAS,EAAE,CAAC;AAE3B,KAAK,UAAU,GAAG,kBAAkB,CAAC;AAyFrC,eAAO,MAAM,oCAAoC,EAAE,QAAQ,CAAC,UAAU,CACpE,UAAU,EACV,OAAO,CAmIC,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { AST_NODE_TYPES, } from '@typescript-eslint/utils';
|
|
2
|
+
import { Arr } from 'ts-data-forge';
|
|
2
3
|
import { ARRAY_FN, BOUNDED_LENGTH_TUPLE_FN, FIXED_LENGTH_TUPLE_FN, MAX_LENGTH_TUPLE_FN, MIN_LENGTH_ARRAY_FN, MIN_LENGTH_TUPLE_FN, NON_EMPTY_ARRAY_FN, STRUCTURAL_PREFIX_CAP, } from './constants.mjs';
|
|
3
4
|
import { buildCalleeResolver, buildImportsFix, getImportedLocalName, getTsFortressImports, hasForeignBinding, } from './import-utils.mjs';
|
|
4
5
|
|
|
@@ -89,12 +90,14 @@ export const preferCanonicalLengthConstrainedType = {
|
|
|
89
90
|
return {
|
|
90
91
|
CallExpression: (node) => {
|
|
91
92
|
const resolved = resolveCallee(node.callee);
|
|
92
|
-
if (resolved === undefined)
|
|
93
|
+
if (resolved === undefined) {
|
|
93
94
|
return;
|
|
95
|
+
}
|
|
94
96
|
const rewrite = REWRITES.find((candidate) => candidate.from === resolved.canonicalName &&
|
|
95
97
|
matchesRewrite(node, candidate));
|
|
96
|
-
if (rewrite === undefined)
|
|
98
|
+
if (rewrite === undefined) {
|
|
97
99
|
return;
|
|
100
|
+
}
|
|
98
101
|
|
|
99
102
|
|
|
100
103
|
if (resolved.isNamespace) {
|
|
@@ -123,14 +126,15 @@ export const preferCanonicalLengthConstrainedType = {
|
|
|
123
126
|
},
|
|
124
127
|
'Program:exit': () => {
|
|
125
128
|
const reportable = mut_matches.filter((match) => match.localName !== undefined);
|
|
126
|
-
const namesNeedingImport =
|
|
129
|
+
const namesNeedingImport = Arr.uniq(reportable
|
|
127
130
|
.filter((match) => match.needsImport)
|
|
128
|
-
.map((match) => match.rewrite.to))
|
|
131
|
+
.map((match) => match.rewrite.to));
|
|
129
132
|
|
|
130
133
|
const importFixIndex = reportable.findIndex((match) => match.needsImport);
|
|
131
134
|
for (const [index, { node, propertyNode, rewrite, localName },] of reportable.entries()) {
|
|
132
|
-
if (localName === undefined)
|
|
135
|
+
if (localName === undefined) {
|
|
133
136
|
continue;
|
|
137
|
+
}
|
|
134
138
|
context.report({
|
|
135
139
|
node,
|
|
136
140
|
messageId: 'useCanonicalType',
|
|
@@ -162,7 +166,7 @@ const matchesRewrite = (node, rewrite) => {
|
|
|
162
166
|
const args = node.arguments;
|
|
163
167
|
const boundCount = rewrite.bounds.length;
|
|
164
168
|
if (args.length < boundCount + 1 ||
|
|
165
|
-
|
|
169
|
+
boundCount + 2 < args.length ||
|
|
166
170
|
|
|
167
171
|
|
|
168
172
|
node.typeArguments !== undefined ||
|
|
@@ -173,8 +177,9 @@ const matchesRewrite = (node, rewrite) => {
|
|
|
173
177
|
const [first] = bounds;
|
|
174
178
|
const boundsMatch = rewrite.bounds.every((matcher, index) => {
|
|
175
179
|
const value = bounds[index];
|
|
176
|
-
if (value === undefined)
|
|
180
|
+
if (value === undefined) {
|
|
177
181
|
return false;
|
|
182
|
+
}
|
|
178
183
|
switch (matcher) {
|
|
179
184
|
case 'anyLength':
|
|
180
185
|
return value <= STRUCTURAL_PREFIX_CAP;
|
|
@@ -208,9 +213,9 @@ const dropBoundsFix = (fixer, node, rewrite) => rewrite.bounds.flatMap((_, index
|
|
|
208
213
|
|
|
209
214
|
const dropped = node.arguments[index];
|
|
210
215
|
const next = node.arguments[index + 1];
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
216
|
+
return dropped === undefined ||
|
|
217
|
+
next === undefined ||
|
|
218
|
+
rewrite.keep.includes(index)
|
|
214
219
|
? []
|
|
215
220
|
: [fixer.removeRange([dropped.range[0], next.range[0]])];
|
|
216
221
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prefer-canonical-length-constrained-type.mjs","sourceRoot":"","sources":["../../src/rules/prefer-canonical-length-constrained-type.mts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,GAGf,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,QAAQ,EACR,uBAAuB,EACvB,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAyB5B;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,QAAQ,GAAG;IACf;QACE,IAAI,EAAE,mBAAmB;QACzB,MAAM,EAAE,CAAC,CAAC,CAAC;QACX,EAAE,EAAE,kBAAkB;QACtB,IAAI,EAAE,EAAE;QACR,qBAAqB,EAAE,IAAI;KAC5B;IACD;QACE,IAAI,EAAE,mBAAmB;QACzB,MAAM,EAAE,CAAC,CAAC,CAAC;QACX,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,EAAE;QACR,qBAAqB,EAAE,KAAK;KAC7B;IACD;QACE,IAAI,EAAE,mBAAmB;QACzB,MAAM,EAAE,CAAC,CAAC,CAAC;QACX,EAAE,EAAE,qBAAqB;QACzB,IAAI,EAAE,CAAC,CAAC,CAAC;QACT,qBAAqB,EAAE,KAAK;KAC7B;IACD,uEAAuE;IACvE,wEAAwE;IACxE;QACE,IAAI,EAAE,uBAAuB;QAC7B,MAAM,EAAE,CAAC,WAAW,EAAE,aAAa,CAAC;QACpC,EAAE,EAAE,qBAAqB;QACzB,IAAI,EAAE,CAAC,CAAC,CAAC;QACT,qBAAqB,EAAE,KAAK;KAC7B;IACD;QACE,IAAI,EAAE,uBAAuB;QAC7B,MAAM,EAAE,CAAC,CAAC,EAAE,WAAW,CAAC;QACxB,EAAE,EAAE,mBAAmB;QACvB,IAAI,EAAE,CAAC,CAAC,CAAC;QACT,qBAAqB,EAAE,KAAK;KAC7B;CACoC,CAAC;AAExC,MAAM,CAAC,MAAM,oCAAoC,GAG7C;IACF,IAAI,EAAE;QACJ,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACJ,WAAW,EACT,6MAA6M;SAChN;QACD,OAAO,EAAE,MAAM;QACf,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE;YACR,gBAAgB,EACd,4NAA4N;SAC/N;KACF;IAED,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE;QAClB,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QAEtC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC;QAE/B,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAExD,MAAM,aAAa,GAAG,mBAAmB,CAAC,iBAAiB,CAAC,CAAC;QAE7D,MAAM,WAAW,GAQX,EAAE,CAAC;QAET,OAAO;YACL,cAAc,EAAE,CAAC,IAAI,EAAE,EAAE;gBACvB,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAE5C,IAAI,QAAQ,KAAK,SAAS;
|
|
1
|
+
{"version":3,"file":"prefer-canonical-length-constrained-type.mjs","sourceRoot":"","sources":["../../src/rules/prefer-canonical-length-constrained-type.mts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prefer-namespace-import.d.mts","sourceRoot":"","sources":["../../src/rules/prefer-namespace-import.mts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,QAAQ,EAEd,MAAM,0BAA0B,CAAC;AAKlC,KAAK,OAAO,GAAG,SAAS;IACtB,QAAQ,CAAC;QACP,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC,CAAC;CACJ,CAAC;AAEF,KAAK,UAAU,GAAG,wBAAwB,GAAG,oBAAoB,CAAC;AA0BlE;;;;;;;;;GASG;AACH,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"prefer-namespace-import.d.mts","sourceRoot":"","sources":["../../src/rules/prefer-namespace-import.mts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,QAAQ,EAEd,MAAM,0BAA0B,CAAC;AAKlC,KAAK,OAAO,GAAG,SAAS;IACtB,QAAQ,CAAC;QACP,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC,CAAC;CACJ,CAAC;AAEF,KAAK,UAAU,GAAG,wBAAwB,GAAG,oBAAoB,CAAC;AA0BlE;;;;;;;;;GASG;AACH,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAuGjE,CAAC"}
|
|
@@ -54,8 +54,9 @@ export const preferNamespaceImport = {
|
|
|
54
54
|
'Program:exit': () => {
|
|
55
55
|
const declarations = getTsFortressImports(sourceCode.ast);
|
|
56
56
|
const reported = declarations.filter((declaration) => !isNamespaceOnly(declaration));
|
|
57
|
-
if (!Arr.isNonEmpty(reported))
|
|
57
|
+
if (!Arr.isNonEmpty(reported)) {
|
|
58
58
|
return;
|
|
59
|
+
}
|
|
59
60
|
const namespaceSpecifiers = declarations
|
|
60
61
|
.flatMap((declaration) => declaration.specifiers)
|
|
61
62
|
.filter(isNamespaceSpecifier);
|
|
@@ -125,20 +126,23 @@ const buildFixPlan = (sourceCode, reported, namespaceSpecifiers, namespaceName)
|
|
|
125
126
|
|
|
126
127
|
|
|
127
128
|
|
|
128
|
-
if (!typeOnly && reused?.parent.importKind === 'type')
|
|
129
|
+
if (!typeOnly && reused?.parent.importKind === 'type') {
|
|
129
130
|
return undefined;
|
|
131
|
+
}
|
|
130
132
|
const mut_rewrites = [];
|
|
131
133
|
for (const declaration of offending) {
|
|
132
134
|
const variables = sourceCode.getDeclaredVariables(declaration);
|
|
133
135
|
for (const specifier of declaration.specifiers) {
|
|
134
136
|
const member = resolveMember(specifier);
|
|
135
137
|
const variable = variables.find((candidate) => candidate.defs.some((def) => def.node === specifier));
|
|
136
|
-
if (member === undefined || variable === undefined)
|
|
138
|
+
if (member === undefined || variable === undefined) {
|
|
137
139
|
return undefined;
|
|
140
|
+
}
|
|
138
141
|
for (const reference of variable.references) {
|
|
139
142
|
const rewrite = buildReferenceRewrite(sourceCode, reference.identifier, namespaceName, member.name);
|
|
140
|
-
if (rewrite === undefined)
|
|
143
|
+
if (rewrite === undefined) {
|
|
141
144
|
return undefined;
|
|
145
|
+
}
|
|
142
146
|
mut_rewrites.push(rewrite);
|
|
143
147
|
}
|
|
144
148
|
}
|
|
@@ -188,8 +192,9 @@ const buildReferenceRewrite = (sourceCode, identifier, namespaceName, memberName
|
|
|
188
192
|
const parent = identifier.parent;
|
|
189
193
|
|
|
190
194
|
|
|
191
|
-
if (parent.type === AST_NODE_TYPES.ExportSpecifier)
|
|
195
|
+
if (parent.type === AST_NODE_TYPES.ExportSpecifier) {
|
|
192
196
|
return undefined;
|
|
197
|
+
}
|
|
193
198
|
return {
|
|
194
199
|
identifier,
|
|
195
200
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prefer-namespace-import.mjs","sourceRoot":"","sources":["../../src/rules/prefer-namespace-import.mts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,GAGf,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAU7E,kFAAkF;AAClF,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAuBnC;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAA6C;IAC7E,IAAI,EAAE;QACJ,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACJ,WAAW,EAAE,aAAa,kBAAkB,2DAA2D,kBAAkB,sCAAsC,kBAAkB,uEAAuE;SACzP;QACD,OAAO,EAAE,MAAM;QACf,MAAM,EAAE;YACN;gBACE,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,aAAa,EAAE;wBACb,IAAI,EAAE,QAAQ;wBACd,OAAO,EAAE,MAAM,CAAC,GAAG,CAAA,oBAAoB;wBACvC,WAAW,EAAE;4BACX,4DAA4D;4BAC5D,2DAA2D;4BAC3D,0DAA0D;4BAC1D,0BAA0B;yBAC3B,CAAC,IAAI,CAAC,GAAG,CAAC;qBACZ;iBACF;gBACD,oBAAoB,EAAE,KAAK;aAC5B;SACF;QACD,QAAQ,EAAE;YACR,kBAAkB,EAAE,YAAY,kBAAkB,4DAA4D,kBAAkB,6EAA6E;YAC7M,sBAAsB,EAAE,aAAa,kBAAkB,6BAA6B,kBAAkB,0HAA0H;SACjO;KACF;IAED,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE;QAClB,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QAEtC,MAAM,mBAAmB,GACvB,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,aAAa,IAAI,sBAAsB,CAAC;QAE9D,OAAO;YACL,wEAAwE;YACxE,yEAAyE;YACzE,6DAA6D;YAC7D,cAAc,EAAE,GAAG,EAAE;gBACnB,MAAM,YAAY,GAAG,oBAAoB,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;gBAE1D,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAClC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,eAAe,CAAC,WAAW,CAAC,CAC/C,CAAC;gBAEF,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"prefer-namespace-import.mjs","sourceRoot":"","sources":["../../src/rules/prefer-namespace-import.mts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,GAGf,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAU7E,kFAAkF;AAClF,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAuBnC;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAA6C;IAC7E,IAAI,EAAE;QACJ,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACJ,WAAW,EAAE,aAAa,kBAAkB,2DAA2D,kBAAkB,sCAAsC,kBAAkB,uEAAuE;SACzP;QACD,OAAO,EAAE,MAAM;QACf,MAAM,EAAE;YACN;gBACE,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,aAAa,EAAE;wBACb,IAAI,EAAE,QAAQ;wBACd,OAAO,EAAE,MAAM,CAAC,GAAG,CAAA,oBAAoB;wBACvC,WAAW,EAAE;4BACX,4DAA4D;4BAC5D,2DAA2D;4BAC3D,0DAA0D;4BAC1D,0BAA0B;yBAC3B,CAAC,IAAI,CAAC,GAAG,CAAC;qBACZ;iBACF;gBACD,oBAAoB,EAAE,KAAK;aAC5B;SACF;QACD,QAAQ,EAAE;YACR,kBAAkB,EAAE,YAAY,kBAAkB,4DAA4D,kBAAkB,6EAA6E;YAC7M,sBAAsB,EAAE,aAAa,kBAAkB,6BAA6B,kBAAkB,0HAA0H;SACjO;KACF;IAED,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE;QAClB,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QAEtC,MAAM,mBAAmB,GACvB,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,aAAa,IAAI,sBAAsB,CAAC;QAE9D,OAAO;YACL,wEAAwE;YACxE,yEAAyE;YACzE,6DAA6D;YAC7D,cAAc,EAAE,GAAG,EAAE;gBACnB,MAAM,YAAY,GAAG,oBAAoB,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;gBAE1D,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAClC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,eAAe,CAAC,WAAW,CAAC,CAC/C,CAAC;gBAEF,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC9B,OAAO;gBACT,CAAC;gBAED,MAAM,mBAAmB,GAAG,YAAY;qBACrC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC;qBAChD,MAAM,CAAC,oBAAoB,CAAC,CAAC;gBAEhC,MAAM,CAAC,MAAM,CAAC,GAAG,mBAAmB,CAAC;gBAErC,MAAM,aAAa,GAAG,MAAM,EAAE,KAAK,CAAC,IAAI,IAAI,mBAAmB,CAAC;gBAEhE,MAAM,IAAI,GAAG,YAAY,CACvB,UAAU,EACV,QAAQ,EACR,mBAAmB,EACnB,aAAa,CACd,CAAC;gBAEF,KAAK,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;oBACtD,OAAO,CAAC,MAAM,CAAC;wBACb,IAAI,EAAE,WAAW;wBACjB,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC;4BAC5B,CAAC,CAAC,wBAAwB;4BAC1B,CAAC,CAAC,oBAAoB;wBACxB,IAAI,EAAE,EAAE,aAAa,EAAE;wBACvB,kEAAkE;wBAClE,8DAA8D;wBAC9D,+DAA+D;wBAC/D,yBAAyB;wBACzB,GAAG,EACD,IAAI,KAAK,SAAS,IAAI,KAAK,GAAG,CAAC;4BAC7B,CAAC,CAAC,SAAS;4BACX,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;gCACT,GAAG,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS;oCAC7B,CAAC,CAAC,EAAE;oCACJ,CAAC,CAAC;wCACE,KAAK,CAAC,WAAW,CACf,IAAI,CAAC,QAAQ,CAAC,IAAI,EAClB,IAAI,CAAC,QAAQ,CAAC,IAAI,CACnB;qCACF,CAAC;gCACN,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAC9B,eAAe,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,CAC5C;gCACD,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,CAC5C,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,CACpC;6BACF;qBACR,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;IACD,cAAc,EAAE,CAAC,EAAE,aAAa,EAAE,sBAAsB,EAAE,CAAC;CACnD,CAAC;AAEX,uEAAuE;AAEvE;;;;GAIG;AACH,MAAM,eAAe,GAAG,CAAC,WAAuC,EAAW,EAAE,CAC3E,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC;IACpC,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;AAErD,qEAAqE;AACrE,MAAM,MAAM,GAAG,CAAC,WAAuC,EAAW,EAAE,CAClE,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;AAEtC,MAAM,oBAAoB,GAAG,CAC3B,SAAgC,EACgB,EAAE,CAClD,SAAS,CAAC,IAAI,KAAK,cAAc,CAAC,wBAAwB,CAAC;AAE7D;;;;;;GAMG;AACH,MAAM,YAAY,GAAG,CACnB,UAA+B,EAC/B,QAA+C,EAC/C,mBAAiE,EACjE,aAAqB,EACA,EAAE;IACvB,MAAM,CAAC,MAAM,CAAC,GAAG,mBAAmB,CAAC;IAErC,2EAA2E;IAC3E,4EAA4E;IAC5E,0DAA0D;IAC1D,IACE,mBAAmB,CAAC,MAAM,GAAG,CAAC;QAC9B,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAC5B,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAClD,EACD,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,8EAA8E;IAC9E,oDAAoD;IACpD,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;IAEzE,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAC9B,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,UAAU,KAAK,MAAM,CACnD,CAAC;IAEF,yEAAyE;IACzE,2EAA2E;IAC3E,wCAAwC;IACxC,IAAI,CAAC,QAAQ,IAAI,MAAM,EAAE,MAAM,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;QACtD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,YAAY,GAAuB,EAAE,CAAC;IAE5C,KAAK,MAAM,WAAW,IAAI,SAAS,EAAE,CAAC;QACpC,MAAM,SAAS,GAAG,UAAU,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;QAE/D,KAAK,MAAM,SAAS,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC;YAC/C,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;YAExC,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAC5C,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CACrD,CAAC;YAEF,IAAI,MAAM,KAAK,SAAS,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBACnD,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,KAAK,MAAM,SAAS,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;gBAC5C,MAAM,OAAO,GAAG,qBAAqB,CACnC,UAAU,EACV,SAAS,CAAC,UAAU,EACpB,aAAa,EACb,MAAM,CAAC,IAAI,CACZ,CAAC;gBAEF,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;oBAC1B,OAAO,SAAS,CAAC;gBACnB,CAAC;gBAED,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;IAE3B,4EAA4E;IAC5E,qEAAqE;IACrE,MAAM,QAAQ,GACZ,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS;QAC1C,CAAC,CAAE;YACC,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,UAAU,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,aAAa,UAAU,kBAAkB,IAAI;SACnF;QACb,CAAC,CAAC,SAAS,CAAC;IAEhB,OAAO;QACL,QAAQ;QACR,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,KAAK,QAAQ,EAAE,IAAI,CAAC;QACzE,QAAQ,EAAE,YAAY;KACvB,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,aAAa,GAAG,CACpB,SAAgC,EACoB,EAAE,CACtD,SAAS,CAAC,IAAI,KAAK,cAAc,CAAC,sBAAsB;IACtD,CAAC,CAAE,EAAE,IAAI,EAAE,SAAS,EAAY;IAChC,CAAC,CAAC,SAAS,CAAC,IAAI,KAAK,cAAc,CAAC,eAAe;QAC/C,SAAS,CAAC,QAAQ,CAAC,IAAI,KAAK,cAAc,CAAC,UAAU;QACvD,CAAC,CAAE,EAAE,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAY;QAC9C,CAAC,CAAC,SAAS,CAAC;AAElB;;;;GAIG;AACH,MAAM,qBAAqB,GAAG,CAC5B,UAA+B,EAC/B,UAAwD,EACxD,aAAqB,EACrB,UAA8B,EACA,EAAE;IAChC,IACE,UAAU,CAAC,IAAI,KAAK,cAAc,CAAC,UAAU;QAC7C,4EAA4E;QAC5E,2EAA2E;QAC3E,iBAAiB,CAAC,UAAU,EAAE,UAAU,EAAE,aAAa,CAAC,EACxD,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,MAAM,GACV,UAAU,KAAK,SAAS;QACtB,CAAC,CAAC,aAAa;QACf,CAAC,CAAE,GAAG,aAAa,IAAI,UAAU,EAAY,CAAC;IAElD,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAEjC,2EAA2E;IAC3E,kEAAkE;IAClE,IAAI,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,eAAe,EAAE,CAAC;QACnD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO;QACL,UAAU;QACV,yEAAyE;QACzE,0BAA0B;QAC1B,IAAI,EACF,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,QAAQ;YACvC,MAAM,CAAC,SAAS;YAChB,MAAM,CAAC,KAAK,KAAK,UAAU;YACzB,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,KAAK,MAAM,EAAE;YACjC,CAAC,CAAC,MAAM;KACb,CAAC;AACJ,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,eAAe,GAAG,CACtB,KAAyB,EACzB,UAA+B,EAC/B,IAAmB,EACD,EAAE;IACpB,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CACpC,UAAU,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAC1C,CAAC;IAEF,OAAO,KAAK,CAAC,WAAW,CAAC;QACvB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACb,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;KAC9C,CAAC,CAAC;AACL,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prefer-schema-over-guard-chain.d.mts","sourceRoot":"","sources":["../../src/rules/prefer-schema-over-guard-chain.mts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,QAAQ,EAEd,MAAM,0BAA0B,CAAC;AAGlC,KAAK,OAAO,GAAG,SAAS;IACtB,QAAQ,CAAC;QACP,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;KAC5B,CAAC,CAAC;CACJ,CAAC;AAEF,KAAK,UAAU,GAAG,cAAc,CAAC;AAmDjC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,UAAU,CAC1D,UAAU,EACV,OAAO,
|
|
1
|
+
{"version":3,"file":"prefer-schema-over-guard-chain.d.mts","sourceRoot":"","sources":["../../src/rules/prefer-schema-over-guard-chain.mts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,QAAQ,EAEd,MAAM,0BAA0B,CAAC;AAGlC,KAAK,OAAO,GAAG,SAAS;IACtB,QAAQ,CAAC;QACP,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;KAC5B,CAAC,CAAC;CACJ,CAAC;AAEF,KAAK,UAAU,GAAG,cAAc,CAAC;AAmDjC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,UAAU,CAC1D,UAAU,EACV,OAAO,CAqHC,CAAC"}
|
|
@@ -138,8 +138,9 @@ export const preferSchemaOverGuardChain = {
|
|
|
138
138
|
operand.operator === '!'
|
|
139
139
|
? operand.argument
|
|
140
140
|
: operand;
|
|
141
|
-
if (call.type !== AST_NODE_TYPES.CallExpression)
|
|
141
|
+
if (call.type !== AST_NODE_TYPES.CallExpression) {
|
|
142
142
|
return undefined;
|
|
143
|
+
}
|
|
143
144
|
const name = call.callee.type === AST_NODE_TYPES.Identifier
|
|
144
145
|
? call.callee.name
|
|
145
146
|
: call.callee.type === AST_NODE_TYPES.MemberExpression &&
|
|
@@ -147,15 +148,17 @@ export const preferSchemaOverGuardChain = {
|
|
|
147
148
|
call.callee.property.type === AST_NODE_TYPES.Identifier
|
|
148
149
|
? call.callee.property.name
|
|
149
150
|
: undefined;
|
|
150
|
-
if (name === undefined || !guards.includes(name))
|
|
151
|
+
if (name === undefined || !guards.includes(name)) {
|
|
151
152
|
return undefined;
|
|
153
|
+
}
|
|
152
154
|
const [subject] = call.arguments;
|
|
153
155
|
return subject === undefined ? undefined : rootIdentifierOf(subject);
|
|
154
156
|
};
|
|
155
157
|
return {
|
|
156
158
|
LogicalExpression: (node) => {
|
|
157
|
-
if (node.operator === '??')
|
|
159
|
+
if (node.operator === '??') {
|
|
158
160
|
return;
|
|
161
|
+
}
|
|
159
162
|
|
|
160
163
|
|
|
161
164
|
if (node.parent.type === AST_NODE_TYPES.LogicalExpression &&
|
|
@@ -165,13 +168,15 @@ export const preferSchemaOverGuardChain = {
|
|
|
165
168
|
const mut_counts = new Map();
|
|
166
169
|
for (const operand of operandsOf(node)) {
|
|
167
170
|
const name = guardedName(operand);
|
|
168
|
-
if (name === undefined)
|
|
171
|
+
if (name === undefined) {
|
|
169
172
|
continue;
|
|
173
|
+
}
|
|
170
174
|
mut_counts.set(name, (mut_counts.get(name) ?? 0) + 1);
|
|
171
175
|
}
|
|
172
176
|
for (const [name, count] of mut_counts) {
|
|
173
|
-
if (count < threshold)
|
|
177
|
+
if (count < threshold) {
|
|
174
178
|
continue;
|
|
179
|
+
}
|
|
175
180
|
context.report({
|
|
176
181
|
node,
|
|
177
182
|
messageId: 'preferSchema',
|
|
@@ -197,8 +202,9 @@ node) => [node.left, node.right].flatMap((side) => side.type === AST_NODE_TYPES.
|
|
|
197
202
|
const rootIdentifierOf = (
|
|
198
203
|
|
|
199
204
|
node) => {
|
|
200
|
-
if (node.type === AST_NODE_TYPES.Identifier)
|
|
205
|
+
if (node.type === AST_NODE_TYPES.Identifier) {
|
|
201
206
|
return node.name;
|
|
207
|
+
}
|
|
202
208
|
if (node.type === AST_NODE_TYPES.MemberExpression) {
|
|
203
209
|
return rootIdentifierOf(node.object);
|
|
204
210
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prefer-schema-over-guard-chain.mjs","sourceRoot":"","sources":["../../src/rules/prefer-schema-over-guard-chain.mts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,GAGf,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAWrD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAE5B;;;;GAIG;AACH,MAAM,cAAc,GAAsB;IACxC,QAAQ;IACR,SAAS;IACT,UAAU;IACV,WAAW;IACX,YAAY;IACZ,cAAc;IACd,WAAW;IACX,gBAAgB;IAChB,UAAU;IACV,aAAa;IACb,UAAU;IACV,UAAU;IACV,UAAU;CACF,CAAC;AAEX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAGnC;IACF,IAAI,EAAE;QACJ,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACJ,WAAW,EAAE,yHAAyH,kBAAkB,IAAI;SAC7J;QACD,MAAM,EAAE;YACN;gBACE,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,SAAS,EAAE;wBACT,IAAI,EAAE,SAAS;wBACf,OAAO,EAAE,CAAC;wBACV,WAAW,EAAE;4BACX,gEAAgE;4BAChE,+BAA+B,iBAAiB,GAAG;yBACpD,CAAC,IAAI,CAAC,GAAG,CAAC;qBACZ;oBACD,MAAM,EAAE;wBACN,IAAI,EAAE,OAAO;wBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;wBACzB,WAAW,EAAE;4BACX,8DAA8D;4BAC9D,yDAAyD;4BACzD,mCAAmC;yBACpC,CAAC,IAAI,CAAC,GAAG,CAAC;qBACZ;iBACF;gBACD,oBAAoB,EAAE,KAAK;aAC5B;SACF;QACD,QAAQ,EAAE;YACR,YAAY,EAAE,gIAAgI,kBAAkB,kHAAkH;SACnR;KACF;IAED,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE;QAClB,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS,IAAI,iBAAiB,CAAC;QAErE,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,cAAc,CAAC;QAE5D,2EAA2E;QAC3E,MAAM,WAAW,GAAG;QAClB,8EAA8E;QAC9E,OAAsB,EACF,EAAE;YACtB,MAAM,IAAI,GACR,OAAO,CAAC,IAAI,KAAK,cAAc,CAAC,eAAe;gBAC/C,OAAO,CAAC,QAAQ,KAAK,GAAG;gBACtB,CAAC,CAAC,OAAO,CAAC,QAAQ;gBAClB,CAAC,CAAC,OAAO,CAAC;YAEd,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,cAAc;
|
|
1
|
+
{"version":3,"file":"prefer-schema-over-guard-chain.mjs","sourceRoot":"","sources":["../../src/rules/prefer-schema-over-guard-chain.mts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eslint-plugin-ts-fortress",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.4",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "ESLint rules that steer schema definitions toward ts-fortress idioms.",
|
|
6
6
|
"keywords": [
|
|
@@ -35,21 +35,22 @@
|
|
|
35
35
|
"LICENSE"
|
|
36
36
|
],
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@typescript-eslint/utils": "8.
|
|
39
|
-
"ts-data-forge": "~14.7.
|
|
38
|
+
"@typescript-eslint/utils": "8.70.1",
|
|
39
|
+
"ts-data-forge": "~14.7.1",
|
|
40
40
|
"ts-type-forge": "~9.2.2"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
|
-
"@typescript-eslint/parser": "8.
|
|
44
|
-
"@typescript-eslint/rule-tester": "8.
|
|
43
|
+
"@typescript-eslint/parser": "8.70.1",
|
|
44
|
+
"@typescript-eslint/rule-tester": "8.70.1",
|
|
45
45
|
"dedent": "1.7.2",
|
|
46
|
-
"eslint-config-typed": "5.
|
|
47
|
-
"eslint-plugin-ts-data-forge": "0.
|
|
48
|
-
"eslint-plugin-ts-type-forge": "0.8.
|
|
49
|
-
"prettier": "3.9.
|
|
46
|
+
"eslint-config-typed": "5.16.0",
|
|
47
|
+
"eslint-plugin-ts-data-forge": "0.8.2",
|
|
48
|
+
"eslint-plugin-ts-type-forge": "0.8.5",
|
|
49
|
+
"prettier": "3.9.9",
|
|
50
50
|
"prettier-plugin-organize-imports": "4.3.0",
|
|
51
51
|
"prettier-plugin-packagejson": "3.0.2",
|
|
52
|
-
"ts-
|
|
52
|
+
"ts-fortress": "12.1.3",
|
|
53
|
+
"ts-repo-utils": "10.7.1"
|
|
53
54
|
},
|
|
54
55
|
"peerDependencies": {
|
|
55
56
|
"eslint": ">=9.0.0",
|
|
@@ -65,20 +66,23 @@
|
|
|
65
66
|
},
|
|
66
67
|
"scripts": {
|
|
67
68
|
"build": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ./scripts/cmd/build.mts",
|
|
68
|
-
"build:min": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ./scripts/cmd/build.mts --skip-check",
|
|
69
69
|
"check:ext": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ./scripts/cmd/check-ext.mts",
|
|
70
|
-
"
|
|
71
|
-
"
|
|
72
|
-
"
|
|
70
|
+
"check:lint": "eslint .",
|
|
71
|
+
"check:test": "pnpm run z:vitest run",
|
|
72
|
+
"check:test:cov": "pnpm run z:vitest run --coverage",
|
|
73
|
+
"check:types": "node ../../node_modules/typescript-native/bin/tsc --noEmit",
|
|
74
|
+
"doc": "pnpm run gen:readme",
|
|
75
|
+
"fix:fmt": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ../../libs/ts-repo-utils/src/cmd/format-uncommitted.mts --cwd .",
|
|
76
|
+
"fix:fmt:diff": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ../../libs/ts-repo-utils/src/cmd/format-diff-from.mts origin/main --cwd .",
|
|
77
|
+
"fix:fmt:full": "pnpm run z:prettier .",
|
|
78
|
+
"fix:lint": "eslint . --fix",
|
|
79
|
+
"fmt": "pnpm run fix:fmt",
|
|
80
|
+
"gen": "run-s gen:rule-types gen:readme",
|
|
81
|
+
"gen:readme": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ./scripts/cmd/embed-examples.mts",
|
|
73
82
|
"gen:rule-types": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ./scripts/cmd/gen-rule-types.mts",
|
|
74
|
-
"
|
|
75
|
-
"
|
|
76
|
-
"
|
|
77
|
-
"test:cov": "pnpm run z:vitest run --coverage",
|
|
78
|
-
"testw": "pnpm run z:vitest",
|
|
79
|
-
"tsc": "node ../../node_modules/typescript-native/bin/tsc --noEmit",
|
|
80
|
-
"tscw": "node ../../node_modules/typescript-native/bin/tsc --noEmit --watch -p ./tsconfig.json",
|
|
81
|
-
"type-check": "node ../../node_modules/typescript-native/bin/tsc --noEmit",
|
|
83
|
+
"test": "pnpm run check:test",
|
|
84
|
+
"watch:test": "pnpm run z:vitest",
|
|
85
|
+
"watch:types": "node ../../node_modules/typescript-native/bin/tsc --noEmit --watch -p ./tsconfig.json",
|
|
82
86
|
"z:prettier": "prettier --config ../../.prettierrc --ignore-path ../../.prettierignore --ignore-path ../../.gitignore --ignore-unknown --no-error-on-unmatched-pattern --write",
|
|
83
87
|
"z:vitest": "vitest --config ./configs/vitest.config.mts"
|
|
84
88
|
}
|
|
@@ -72,7 +72,9 @@ export const buildCalleeResolver = (
|
|
|
72
72
|
|
|
73
73
|
const localToCanonical = new Map<string, string>(
|
|
74
74
|
specifiers.flatMap((specifier) => {
|
|
75
|
-
if (specifier.type !== AST_NODE_TYPES.ImportSpecifier)
|
|
75
|
+
if (specifier.type !== AST_NODE_TYPES.ImportSpecifier) {
|
|
76
|
+
return [];
|
|
77
|
+
}
|
|
76
78
|
|
|
77
79
|
const importedName =
|
|
78
80
|
specifier.imported.type === AST_NODE_TYPES.Identifier
|
|
@@ -3,6 +3,7 @@ import {
|
|
|
3
3
|
type TSESLint,
|
|
4
4
|
type TSESTree,
|
|
5
5
|
} from '@typescript-eslint/utils';
|
|
6
|
+
import { Arr } from 'ts-data-forge';
|
|
6
7
|
import {
|
|
7
8
|
ARRAY_FN,
|
|
8
9
|
BOUNDED_LENGTH_TUPLE_FN,
|
|
@@ -153,7 +154,9 @@ export const preferCanonicalLengthConstrainedType: TSESLint.RuleModule<
|
|
|
153
154
|
CallExpression: (node) => {
|
|
154
155
|
const resolved = resolveCallee(node.callee);
|
|
155
156
|
|
|
156
|
-
if (resolved === undefined)
|
|
157
|
+
if (resolved === undefined) {
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
157
160
|
|
|
158
161
|
const rewrite = REWRITES.find(
|
|
159
162
|
(candidate) =>
|
|
@@ -161,7 +164,9 @@ export const preferCanonicalLengthConstrainedType: TSESLint.RuleModule<
|
|
|
161
164
|
matchesRewrite(node, candidate),
|
|
162
165
|
);
|
|
163
166
|
|
|
164
|
-
if (rewrite === undefined)
|
|
167
|
+
if (rewrite === undefined) {
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
165
170
|
|
|
166
171
|
// A namespace call (`t.maxLengthTuple(...)`) only swaps the property
|
|
167
172
|
// name, so it never needs a binding of its own.
|
|
@@ -201,12 +206,10 @@ export const preferCanonicalLengthConstrainedType: TSESLint.RuleModule<
|
|
|
201
206
|
(match) => match.localName !== undefined,
|
|
202
207
|
);
|
|
203
208
|
|
|
204
|
-
const namesNeedingImport =
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
.map((match) => match.rewrite.to),
|
|
209
|
-
),
|
|
209
|
+
const namesNeedingImport = Arr.uniq(
|
|
210
|
+
reportable
|
|
211
|
+
.filter((match) => match.needsImport)
|
|
212
|
+
.map((match) => match.rewrite.to),
|
|
210
213
|
);
|
|
211
214
|
|
|
212
215
|
// Every missing import rides on a single report; see `buildImportsFix`.
|
|
@@ -218,7 +221,9 @@ export const preferCanonicalLengthConstrainedType: TSESLint.RuleModule<
|
|
|
218
221
|
index,
|
|
219
222
|
{ node, propertyNode, rewrite, localName },
|
|
220
223
|
] of reportable.entries()) {
|
|
221
|
-
if (localName === undefined)
|
|
224
|
+
if (localName === undefined) {
|
|
225
|
+
continue;
|
|
226
|
+
}
|
|
222
227
|
|
|
223
228
|
context.report({
|
|
224
229
|
node,
|
|
@@ -259,7 +264,7 @@ const matchesRewrite = (
|
|
|
259
264
|
|
|
260
265
|
if (
|
|
261
266
|
args.length < boundCount + 1 ||
|
|
262
|
-
|
|
267
|
+
boundCount + 2 < args.length ||
|
|
263
268
|
// Explicit type arguments pin the bound independently of the literal, so
|
|
264
269
|
// dropping or moving the literal could change the resulting type.
|
|
265
270
|
node.typeArguments !== undefined ||
|
|
@@ -275,7 +280,9 @@ const matchesRewrite = (
|
|
|
275
280
|
const boundsMatch = rewrite.bounds.every((matcher, index) => {
|
|
276
281
|
const value = bounds[index];
|
|
277
282
|
|
|
278
|
-
if (value === undefined)
|
|
283
|
+
if (value === undefined) {
|
|
284
|
+
return false;
|
|
285
|
+
}
|
|
279
286
|
|
|
280
287
|
switch (matcher) {
|
|
281
288
|
case 'anyLength':
|
|
@@ -329,9 +336,9 @@ const dropBoundsFix = (
|
|
|
329
336
|
|
|
330
337
|
const next = node.arguments[index + 1];
|
|
331
338
|
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
339
|
+
return dropped === undefined ||
|
|
340
|
+
next === undefined ||
|
|
341
|
+
rewrite.keep.includes(index)
|
|
335
342
|
? []
|
|
336
343
|
: [fixer.removeRange([dropped.range[0], next.range[0]])];
|
|
337
344
|
});
|
|
@@ -97,7 +97,9 @@ export const preferNamespaceImport: TSESLint.RuleModule<MessageIds, Options> = {
|
|
|
97
97
|
(declaration) => !isNamespaceOnly(declaration),
|
|
98
98
|
);
|
|
99
99
|
|
|
100
|
-
if (!Arr.isNonEmpty(reported))
|
|
100
|
+
if (!Arr.isNonEmpty(reported)) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
101
103
|
|
|
102
104
|
const namespaceSpecifiers = declarations
|
|
103
105
|
.flatMap((declaration) => declaration.specifiers)
|
|
@@ -210,7 +212,9 @@ const buildFixPlan = (
|
|
|
210
212
|
// `import type * as t` cannot carry a value reference, so a value import
|
|
211
213
|
// does not merge into one; a namespace import of its own would be a second
|
|
212
214
|
// one, which the check above rules out.
|
|
213
|
-
if (!typeOnly && reused?.parent.importKind === 'type')
|
|
215
|
+
if (!typeOnly && reused?.parent.importKind === 'type') {
|
|
216
|
+
return undefined;
|
|
217
|
+
}
|
|
214
218
|
|
|
215
219
|
const mut_rewrites: ReferenceRewrite[] = [];
|
|
216
220
|
|
|
@@ -224,7 +228,9 @@ const buildFixPlan = (
|
|
|
224
228
|
candidate.defs.some((def) => def.node === specifier),
|
|
225
229
|
);
|
|
226
230
|
|
|
227
|
-
if (member === undefined || variable === undefined)
|
|
231
|
+
if (member === undefined || variable === undefined) {
|
|
232
|
+
return undefined;
|
|
233
|
+
}
|
|
228
234
|
|
|
229
235
|
for (const reference of variable.references) {
|
|
230
236
|
const rewrite = buildReferenceRewrite(
|
|
@@ -234,7 +240,9 @@ const buildFixPlan = (
|
|
|
234
240
|
member.name,
|
|
235
241
|
);
|
|
236
242
|
|
|
237
|
-
if (rewrite === undefined)
|
|
243
|
+
if (rewrite === undefined) {
|
|
244
|
+
return undefined;
|
|
245
|
+
}
|
|
238
246
|
|
|
239
247
|
mut_rewrites.push(rewrite);
|
|
240
248
|
}
|
|
@@ -305,7 +313,9 @@ const buildReferenceRewrite = (
|
|
|
305
313
|
|
|
306
314
|
// `export { string }` names the binding rather than using it, and a member
|
|
307
315
|
// access is not a name — such a file has to be rewritten by hand.
|
|
308
|
-
if (parent.type === AST_NODE_TYPES.ExportSpecifier)
|
|
316
|
+
if (parent.type === AST_NODE_TYPES.ExportSpecifier) {
|
|
317
|
+
return undefined;
|
|
318
|
+
}
|
|
309
319
|
|
|
310
320
|
return {
|
|
311
321
|
identifier,
|
|
@@ -163,7 +163,9 @@ export const preferSchemaOverGuardChain: TSESLint.RuleModule<
|
|
|
163
163
|
? operand.argument
|
|
164
164
|
: operand;
|
|
165
165
|
|
|
166
|
-
if (call.type !== AST_NODE_TYPES.CallExpression)
|
|
166
|
+
if (call.type !== AST_NODE_TYPES.CallExpression) {
|
|
167
|
+
return undefined;
|
|
168
|
+
}
|
|
167
169
|
|
|
168
170
|
const name =
|
|
169
171
|
call.callee.type === AST_NODE_TYPES.Identifier
|
|
@@ -174,7 +176,9 @@ export const preferSchemaOverGuardChain: TSESLint.RuleModule<
|
|
|
174
176
|
? call.callee.property.name
|
|
175
177
|
: undefined;
|
|
176
178
|
|
|
177
|
-
if (name === undefined || !guards.includes(name))
|
|
179
|
+
if (name === undefined || !guards.includes(name)) {
|
|
180
|
+
return undefined;
|
|
181
|
+
}
|
|
178
182
|
|
|
179
183
|
const [subject] = call.arguments;
|
|
180
184
|
|
|
@@ -183,7 +187,9 @@ export const preferSchemaOverGuardChain: TSESLint.RuleModule<
|
|
|
183
187
|
|
|
184
188
|
return {
|
|
185
189
|
LogicalExpression: (node) => {
|
|
186
|
-
if (node.operator === '??')
|
|
190
|
+
if (node.operator === '??') {
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
187
193
|
|
|
188
194
|
// Only the outermost node of a chain, so that `a && b && c` is judged
|
|
189
195
|
// once as three operands rather than three times as nested pairs.
|
|
@@ -199,13 +205,17 @@ export const preferSchemaOverGuardChain: TSESLint.RuleModule<
|
|
|
199
205
|
for (const operand of operandsOf(node)) {
|
|
200
206
|
const name = guardedName(operand);
|
|
201
207
|
|
|
202
|
-
if (name === undefined)
|
|
208
|
+
if (name === undefined) {
|
|
209
|
+
continue;
|
|
210
|
+
}
|
|
203
211
|
|
|
204
212
|
mut_counts.set(name, (mut_counts.get(name) ?? 0) + 1);
|
|
205
213
|
}
|
|
206
214
|
|
|
207
215
|
for (const [name, count] of mut_counts) {
|
|
208
|
-
if (count < threshold)
|
|
216
|
+
if (count < threshold) {
|
|
217
|
+
continue;
|
|
218
|
+
}
|
|
209
219
|
|
|
210
220
|
context.report({
|
|
211
221
|
node,
|
|
@@ -239,7 +249,9 @@ const rootIdentifierOf = (
|
|
|
239
249
|
// eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
|
|
240
250
|
node: TSESTree.Node,
|
|
241
251
|
): string | undefined => {
|
|
242
|
-
if (node.type === AST_NODE_TYPES.Identifier)
|
|
252
|
+
if (node.type === AST_NODE_TYPES.Identifier) {
|
|
253
|
+
return node.name;
|
|
254
|
+
}
|
|
243
255
|
|
|
244
256
|
if (node.type === AST_NODE_TYPES.MemberExpression) {
|
|
245
257
|
return rootIdentifierOf(node.object);
|