@typescript-eslint/eslint-plugin 8.15.1-alpha.5 → 8.15.1-alpha.6
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.
@@ -34,6 +34,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
34
34
|
})();
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
36
36
|
const utils_1 = require("@typescript-eslint/utils");
|
37
|
+
const tsutils = __importStar(require("ts-api-utils"));
|
37
38
|
const ts = __importStar(require("typescript"));
|
38
39
|
const util_1 = require("../util");
|
39
40
|
var Usefulness;
|
@@ -52,6 +53,7 @@ exports.default = (0, util_1.createRule)({
|
|
52
53
|
requiresTypeChecking: true,
|
53
54
|
},
|
54
55
|
messages: {
|
56
|
+
baseArrayJoin: "Using `join()` for {{name}} {{certainty}} use Object's default stringification format ('[object Object]') when stringified.",
|
55
57
|
baseToString: "'{{name}}' {{certainty}} use Object's default stringification format ('[object Object]') when stringified.",
|
56
58
|
},
|
57
59
|
schema: [
|
@@ -96,6 +98,63 @@ exports.default = (0, util_1.createRule)({
|
|
96
98
|
},
|
97
99
|
});
|
98
100
|
}
|
101
|
+
function checkExpressionForArrayJoin(node, type) {
|
102
|
+
const certainty = collectJoinCertainty(type);
|
103
|
+
if (certainty === Usefulness.Always) {
|
104
|
+
return;
|
105
|
+
}
|
106
|
+
context.report({
|
107
|
+
node,
|
108
|
+
messageId: 'baseArrayJoin',
|
109
|
+
data: {
|
110
|
+
name: context.sourceCode.getText(node),
|
111
|
+
certainty,
|
112
|
+
},
|
113
|
+
});
|
114
|
+
}
|
115
|
+
function collectUnionTypeCertainty(type, collectSubTypeCertainty) {
|
116
|
+
const certainties = type.types.map(t => collectSubTypeCertainty(t));
|
117
|
+
if (certainties.every(certainty => certainty === Usefulness.Never)) {
|
118
|
+
return Usefulness.Never;
|
119
|
+
}
|
120
|
+
if (certainties.every(certainty => certainty === Usefulness.Always)) {
|
121
|
+
return Usefulness.Always;
|
122
|
+
}
|
123
|
+
return Usefulness.Sometimes;
|
124
|
+
}
|
125
|
+
function collectIntersectionTypeCertainty(type, collectSubTypeCertainty) {
|
126
|
+
for (const subType of type.types) {
|
127
|
+
const subtypeUsefulness = collectSubTypeCertainty(subType);
|
128
|
+
if (subtypeUsefulness === Usefulness.Always) {
|
129
|
+
return Usefulness.Always;
|
130
|
+
}
|
131
|
+
}
|
132
|
+
return Usefulness.Never;
|
133
|
+
}
|
134
|
+
function collectJoinCertainty(type) {
|
135
|
+
if (tsutils.isUnionType(type)) {
|
136
|
+
return collectUnionTypeCertainty(type, collectJoinCertainty);
|
137
|
+
}
|
138
|
+
if (tsutils.isIntersectionType(type)) {
|
139
|
+
return collectIntersectionTypeCertainty(type, collectJoinCertainty);
|
140
|
+
}
|
141
|
+
if (checker.isTupleType(type)) {
|
142
|
+
const typeArgs = checker.getTypeArguments(type);
|
143
|
+
const certainties = typeArgs.map(t => collectToStringCertainty(t));
|
144
|
+
if (certainties.some(certainty => certainty === Usefulness.Never)) {
|
145
|
+
return Usefulness.Never;
|
146
|
+
}
|
147
|
+
if (certainties.some(certainty => certainty === Usefulness.Sometimes)) {
|
148
|
+
return Usefulness.Sometimes;
|
149
|
+
}
|
150
|
+
return Usefulness.Always;
|
151
|
+
}
|
152
|
+
if (checker.isArrayType(type)) {
|
153
|
+
const elemType = (0, util_1.nullThrows)(type.getNumberIndexType(), 'array should have number index type');
|
154
|
+
return collectToStringCertainty(elemType);
|
155
|
+
}
|
156
|
+
return Usefulness.Always;
|
157
|
+
}
|
99
158
|
function collectToStringCertainty(type) {
|
100
159
|
const toString = checker.getPropertyOfType(type, 'toString') ??
|
101
160
|
checker.getPropertyOfType(type, 'toLocaleString');
|
@@ -115,35 +174,12 @@ exports.default = (0, util_1.createRule)({
|
|
115
174
|
return Usefulness.Always;
|
116
175
|
}
|
117
176
|
if (type.isIntersection()) {
|
118
|
-
|
119
|
-
const subtypeUsefulness = collectToStringCertainty(subType);
|
120
|
-
if (subtypeUsefulness === Usefulness.Always) {
|
121
|
-
return Usefulness.Always;
|
122
|
-
}
|
123
|
-
}
|
124
|
-
return Usefulness.Never;
|
177
|
+
return collectIntersectionTypeCertainty(type, collectToStringCertainty);
|
125
178
|
}
|
126
179
|
if (!type.isUnion()) {
|
127
180
|
return Usefulness.Never;
|
128
181
|
}
|
129
|
-
|
130
|
-
let someSubtypeUseful = false;
|
131
|
-
for (const subType of type.types) {
|
132
|
-
const subtypeUsefulness = collectToStringCertainty(subType);
|
133
|
-
if (subtypeUsefulness !== Usefulness.Always && allSubtypesUseful) {
|
134
|
-
allSubtypesUseful = false;
|
135
|
-
}
|
136
|
-
if (subtypeUsefulness !== Usefulness.Never && !someSubtypeUseful) {
|
137
|
-
someSubtypeUseful = true;
|
138
|
-
}
|
139
|
-
}
|
140
|
-
if (allSubtypesUseful && someSubtypeUseful) {
|
141
|
-
return Usefulness.Always;
|
142
|
-
}
|
143
|
-
if (someSubtypeUseful) {
|
144
|
-
return Usefulness.Sometimes;
|
145
|
-
}
|
146
|
-
return Usefulness.Never;
|
182
|
+
return collectUnionTypeCertainty(type, collectToStringCertainty);
|
147
183
|
}
|
148
184
|
function isBuiltInStringCall(node) {
|
149
185
|
if (node.callee.type === utils_1.AST_NODE_TYPES.Identifier &&
|
@@ -172,6 +208,11 @@ exports.default = (0, util_1.createRule)({
|
|
172
208
|
checkExpression(node.arguments[0]);
|
173
209
|
}
|
174
210
|
},
|
211
|
+
'CallExpression > MemberExpression.callee > Identifier[name = "join"].property'(node) {
|
212
|
+
const memberExpr = node.parent;
|
213
|
+
const type = (0, util_1.getConstrainedTypeAtLocation)(services, memberExpr.object);
|
214
|
+
checkExpressionForArrayJoin(memberExpr.object, type);
|
215
|
+
},
|
175
216
|
'CallExpression > MemberExpression.callee > Identifier[name = /^(toLocaleString|toString)$/].property'(node) {
|
176
217
|
const memberExpr = node.parent;
|
177
218
|
checkExpression(memberExpr.object);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"no-base-to-string.js","sourceRoot":"","sources":["../../src/rules/no-base-to-string.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,oDAA0D;AAC1D,+CAAiC;AAEjC,
|
1
|
+
{"version":3,"file":"no-base-to-string.js","sourceRoot":"","sources":["../../src/rules/no-base-to-string.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,oDAA0D;AAC1D,sDAAwC;AACxC,+CAAiC;AAEjC,kCAMiB;AAEjB,IAAK,UAIJ;AAJD,WAAK,UAAU;IACb,+BAAiB,CAAA;IACjB,4BAAc,CAAA;IACd,+BAAiB,CAAA;AACnB,CAAC,EAJI,UAAU,KAAV,UAAU,QAId;AASD,kBAAe,IAAA,iBAAU,EAAsB;IAC7C,IAAI,EAAE,mBAAmB;IACzB,IAAI,EAAE;QACJ,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACJ,WAAW,EACT,8HAA8H;YAChI,WAAW,EAAE,aAAa;YAC1B,oBAAoB,EAAE,IAAI;SAC3B;QACD,QAAQ,EAAE;YACR,aAAa,EACX,6HAA6H;YAC/H,YAAY,EACV,4GAA4G;SAC/G;QACD,MAAM,EAAE;YACN;gBACE,IAAI,EAAE,QAAQ;gBACd,oBAAoB,EAAE,KAAK;gBAC3B,UAAU,EAAE;oBACV,gBAAgB,EAAE;wBAChB,IAAI,EAAE,OAAO;wBACb,WAAW,EACT,0DAA0D;wBAC5D,KAAK,EAAE;4BACL,IAAI,EAAE,QAAQ;yBACf;qBACF;iBACF;aACF;SACF;KACF;IACD,cAAc,EAAE;QACd;YACE,gBAAgB,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,iBAAiB,CAAC;SAChE;KACF;IACD,MAAM,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC;QACtB,MAAM,QAAQ,GAAG,IAAA,wBAAiB,EAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QAClD,MAAM,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,EAAE,CAAC;QAEvD,SAAS,eAAe,CAAC,IAAmB,EAAE,IAAc;YAC1D,IAAI,IAAI,CAAC,IAAI,KAAK,sBAAc,CAAC,OAAO,EAAE,CAAC;gBACzC,OAAO;YACT,CAAC;YACD,MAAM,SAAS,GAAG,wBAAwB,CACxC,IAAI,IAAI,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,CACzC,CAAC;YACF,IAAI,SAAS,KAAK,UAAU,CAAC,MAAM,EAAE,CAAC;gBACpC,OAAO;YACT,CAAC;YAED,OAAO,CAAC,MAAM,CAAC;gBACb,IAAI;gBACJ,SAAS,EAAE,cAAc;gBACzB,IAAI,EAAE;oBACJ,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC;oBACtC,SAAS;iBACV;aACF,CAAC,CAAC;QACL,CAAC;QAED,SAAS,2BAA2B,CAClC,IAAmB,EACnB,IAAa;YAEb,MAAM,SAAS,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;YAE7C,IAAI,SAAS,KAAK,UAAU,CAAC,MAAM,EAAE,CAAC;gBACpC,OAAO;YACT,CAAC;YAED,OAAO,CAAC,MAAM,CAAC;gBACb,IAAI;gBACJ,SAAS,EAAE,eAAe;gBAC1B,IAAI,EAAE;oBACJ,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC;oBACtC,SAAS;iBACV;aACF,CAAC,CAAC;QACL,CAAC;QAED,SAAS,yBAAyB,CAChC,IAAkB,EAClB,uBAAsD;YAEtD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC;YACpE,IAAI,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,KAAK,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnE,OAAO,UAAU,CAAC,KAAK,CAAC;YAC1B,CAAC;YAED,IAAI,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,KAAK,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBACpE,OAAO,UAAU,CAAC,MAAM,CAAC;YAC3B,CAAC;YAED,OAAO,UAAU,CAAC,SAAS,CAAC;QAC9B,CAAC;QAED,SAAS,gCAAgC,CACvC,IAAyB,EACzB,uBAAsD;YAEtD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACjC,MAAM,iBAAiB,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;gBAE3D,IAAI,iBAAiB,KAAK,UAAU,CAAC,MAAM,EAAE,CAAC;oBAC5C,OAAO,UAAU,CAAC,MAAM,CAAC;gBAC3B,CAAC;YACH,CAAC;YAED,OAAO,UAAU,CAAC,KAAK,CAAC;QAC1B,CAAC;QAED,SAAS,oBAAoB,CAAC,IAAa;YACzC,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9B,OAAO,yBAAyB,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;YAC/D,CAAC;YAED,IAAI,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrC,OAAO,gCAAgC,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;YACtE,CAAC;YAED,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9B,MAAM,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;gBAChD,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnE,IAAI,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,KAAK,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;oBAClE,OAAO,UAAU,CAAC,KAAK,CAAC;gBAC1B,CAAC;gBAED,IAAI,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,KAAK,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;oBACtE,OAAO,UAAU,CAAC,SAAS,CAAC;gBAC9B,CAAC;gBAED,OAAO,UAAU,CAAC,MAAM,CAAC;YAC3B,CAAC;YAED,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9B,MAAM,QAAQ,GAAG,IAAA,iBAAU,EACzB,IAAI,CAAC,kBAAkB,EAAE,EACzB,qCAAqC,CACtC,CAAC;gBACF,OAAO,wBAAwB,CAAC,QAAQ,CAAC,CAAC;YAC5C,CAAC;YAED,OAAO,UAAU,CAAC,MAAM,CAAC;QAC3B,CAAC;QAED,SAAS,wBAAwB,CAAC,IAAa;YAC7C,MAAM,QAAQ,GACZ,OAAO,CAAC,iBAAiB,CAAC,IAAI,EAAE,UAAU,CAAC;gBAC3C,OAAO,CAAC,iBAAiB,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;YACpD,MAAM,YAAY,GAAG,QAAQ,EAAE,eAAe,EAAE,CAAC;YACjD,IAAI,CAAC,QAAQ,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC5D,OAAO,UAAU,CAAC,MAAM,CAAC;YAC3B,CAAC;YAED,mFAAmF;YACnF,IACE,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO;gBACjC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,cAAc,EACxC,CAAC;gBACD,OAAO,UAAU,CAAC,MAAM,CAAC;YAC3B,CAAC;YAED,IAAI,gBAAgB,CAAC,QAAQ,CAAC,IAAA,kBAAW,EAAC,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;gBAC1D,OAAO,UAAU,CAAC,MAAM,CAAC;YAC3B,CAAC;YAED,IACE,YAAY,CAAC,KAAK,CAChB,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CACb,CAAC,EAAE,CAAC,sBAAsB,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CACtE,EACD,CAAC;gBACD,OAAO,UAAU,CAAC,MAAM,CAAC;YAC3B,CAAC;YAED,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;gBAC1B,OAAO,gCAAgC,CAAC,IAAI,EAAE,wBAAwB,CAAC,CAAC;YAC1E,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;gBACpB,OAAO,UAAU,CAAC,KAAK,CAAC;YAC1B,CAAC;YACD,OAAO,yBAAyB,CAAC,IAAI,EAAE,wBAAwB,CAAC,CAAC;QACnE,CAAC;QAED,SAAS,mBAAmB,CAAC,IAA6B;YACxD,IACE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,sBAAc,CAAC,UAAU;gBAC9C,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ;gBAC7B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EACjB,CAAC;gBACD,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAChD,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACzC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC;YAChC,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO;YACL,yEAAyE,CACvE,IAA+D;gBAE/D,MAAM,QAAQ,GAAG,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACvD,MAAM,SAAS,GAAG,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAEzD,IAAI,IAAA,kBAAW,EAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,QAAQ,EAAE,CAAC;oBAChD,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;gBACzC,CAAC;qBAAM,IACL,IAAA,kBAAW,EAAC,OAAO,EAAE,SAAS,CAAC,KAAK,QAAQ;oBAC5C,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,sBAAc,CAAC,iBAAiB,EACnD,CAAC;oBACD,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBACvC,CAAC;YACH,CAAC;YACD,cAAc,CAAC,IAA6B;gBAC1C,IAAI,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC9B,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrC,CAAC;YACH,CAAC;YACD,+EAA+E,CAC7E,IAAyB;gBAEzB,MAAM,UAAU,GAAG,IAAI,CAAC,MAAmC,CAAC;gBAC5D,MAAM,IAAI,GAAG,IAAA,mCAA4B,EAAC,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;gBACvE,2BAA2B,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACvD,CAAC;YACD,sGAAsG,CACpG,IAAyB;gBAEzB,MAAM,UAAU,GAAG,IAAI,CAAC,MAAmC,CAAC;gBAC5D,eAAe,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YACrC,CAAC;YAED,eAAe,CAAC,IAA8B;gBAC5C,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,sBAAc,CAAC,wBAAwB,EAAE,CAAC;oBACjE,OAAO;gBACT,CAAC;gBACD,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;oBAC1C,eAAe,CAAC,UAAU,CAAC,CAAC;gBAC9B,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@typescript-eslint/eslint-plugin",
|
3
|
-
"version": "8.15.1-alpha.
|
3
|
+
"version": "8.15.1-alpha.6",
|
4
4
|
"description": "TypeScript plugin for ESLint",
|
5
5
|
"files": [
|
6
6
|
"dist",
|
@@ -61,10 +61,10 @@
|
|
61
61
|
},
|
62
62
|
"dependencies": {
|
63
63
|
"@eslint-community/regexpp": "^4.10.0",
|
64
|
-
"@typescript-eslint/scope-manager": "8.15.1-alpha.
|
65
|
-
"@typescript-eslint/type-utils": "8.15.1-alpha.
|
66
|
-
"@typescript-eslint/utils": "8.15.1-alpha.
|
67
|
-
"@typescript-eslint/visitor-keys": "8.15.1-alpha.
|
64
|
+
"@typescript-eslint/scope-manager": "8.15.1-alpha.6",
|
65
|
+
"@typescript-eslint/type-utils": "8.15.1-alpha.6",
|
66
|
+
"@typescript-eslint/utils": "8.15.1-alpha.6",
|
67
|
+
"@typescript-eslint/visitor-keys": "8.15.1-alpha.6",
|
68
68
|
"graphemer": "^1.4.0",
|
69
69
|
"ignore": "^5.3.1",
|
70
70
|
"natural-compare": "^1.4.0",
|
@@ -75,8 +75,8 @@
|
|
75
75
|
"@types/marked": "^5.0.2",
|
76
76
|
"@types/mdast": "^4.0.3",
|
77
77
|
"@types/natural-compare": "*",
|
78
|
-
"@typescript-eslint/rule-schema-to-typescript-types": "8.15.1-alpha.
|
79
|
-
"@typescript-eslint/rule-tester": "8.15.1-alpha.
|
78
|
+
"@typescript-eslint/rule-schema-to-typescript-types": "8.15.1-alpha.6",
|
79
|
+
"@typescript-eslint/rule-tester": "8.15.1-alpha.6",
|
80
80
|
"ajv": "^6.12.6",
|
81
81
|
"cross-env": "^7.0.3",
|
82
82
|
"cross-fetch": "*",
|