@typescript-eslint/eslint-plugin 7.7.2-alpha.1 → 7.7.2-alpha.3
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.
|
@@ -105,96 +105,103 @@ exports.default = (0, util_1.createRule)({
|
|
|
105
105
|
create(context) {
|
|
106
106
|
const services = (0, util_1.getParserServices)(context);
|
|
107
107
|
const checker = services.program.getTypeChecker();
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
}
|
|
150
|
-
const result = (0, util_1.isUnsafeAssignment)(tupleType, parameterType, checker,
|
|
151
|
-
// we can't pass the individual tuple members in here as this will most likely be a spread variable
|
|
152
|
-
// not a spread array
|
|
153
|
-
null);
|
|
154
|
-
if (result) {
|
|
155
|
-
context.report({
|
|
156
|
-
node: argument,
|
|
157
|
-
messageId: 'unsafeTupleSpread',
|
|
158
|
-
data: {
|
|
159
|
-
sender: checker.typeToString(tupleType),
|
|
160
|
-
receiver: checker.typeToString(parameterType),
|
|
161
|
-
},
|
|
162
|
-
});
|
|
163
|
-
}
|
|
108
|
+
function checkUnsafeArguments(args, callee, node) {
|
|
109
|
+
if (args.length === 0) {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
// ignore any-typed calls as these are caught by no-unsafe-call
|
|
113
|
+
if ((0, util_1.isTypeAnyType)(services.getTypeAtLocation(callee))) {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
const tsNode = services.esTreeNodeToTSNodeMap.get(node);
|
|
117
|
+
const signature = (0, util_1.nullThrows)(FunctionSignature.create(checker, tsNode), 'Expected to a signature resolved');
|
|
118
|
+
if (node.type === utils_1.AST_NODE_TYPES.TaggedTemplateExpression) {
|
|
119
|
+
// Consumes the first parameter (TemplateStringsArray) of the function called with TaggedTemplateExpression.
|
|
120
|
+
signature.getNextParameterType();
|
|
121
|
+
}
|
|
122
|
+
for (const argument of args) {
|
|
123
|
+
switch (argument.type) {
|
|
124
|
+
// spreads consume
|
|
125
|
+
case utils_1.AST_NODE_TYPES.SpreadElement: {
|
|
126
|
+
const spreadArgType = services.getTypeAtLocation(argument.argument);
|
|
127
|
+
if ((0, util_1.isTypeAnyType)(spreadArgType)) {
|
|
128
|
+
// foo(...any)
|
|
129
|
+
context.report({
|
|
130
|
+
node: argument,
|
|
131
|
+
messageId: 'unsafeSpread',
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
else if ((0, util_1.isTypeAnyArrayType)(spreadArgType, checker)) {
|
|
135
|
+
// foo(...any[])
|
|
136
|
+
// TODO - we could break down the spread and compare the array type against each argument
|
|
137
|
+
context.report({
|
|
138
|
+
node: argument,
|
|
139
|
+
messageId: 'unsafeArraySpread',
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
else if (checker.isTupleType(spreadArgType)) {
|
|
143
|
+
// foo(...[tuple1, tuple2])
|
|
144
|
+
const spreadTypeArguments = checker.getTypeArguments(spreadArgType);
|
|
145
|
+
for (const tupleType of spreadTypeArguments) {
|
|
146
|
+
const parameterType = signature.getNextParameterType();
|
|
147
|
+
if (parameterType == null) {
|
|
148
|
+
continue;
|
|
164
149
|
}
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
150
|
+
const result = (0, util_1.isUnsafeAssignment)(tupleType, parameterType, checker,
|
|
151
|
+
// we can't pass the individual tuple members in here as this will most likely be a spread variable
|
|
152
|
+
// not a spread array
|
|
153
|
+
null);
|
|
154
|
+
if (result) {
|
|
155
|
+
context.report({
|
|
156
|
+
node: argument,
|
|
157
|
+
messageId: 'unsafeTupleSpread',
|
|
158
|
+
data: {
|
|
159
|
+
sender: checker.typeToString(tupleType),
|
|
160
|
+
receiver: checker.typeToString(parameterType),
|
|
161
|
+
},
|
|
162
|
+
});
|
|
169
163
|
}
|
|
170
164
|
}
|
|
171
|
-
|
|
172
|
-
//
|
|
173
|
-
//
|
|
174
|
-
|
|
165
|
+
if (spreadArgType.target.hasRestElement) {
|
|
166
|
+
// the last element was a rest - so all remaining defined arguments can be considered "consumed"
|
|
167
|
+
// all remaining arguments should be compared against the rest type (if one exists)
|
|
168
|
+
signature.consumeRemainingArguments();
|
|
175
169
|
}
|
|
176
|
-
break;
|
|
177
170
|
}
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
171
|
+
else {
|
|
172
|
+
// something that's iterable
|
|
173
|
+
// handling this will be pretty complex - so we ignore it for now
|
|
174
|
+
// TODO - handle generic iterable case
|
|
175
|
+
}
|
|
176
|
+
break;
|
|
177
|
+
}
|
|
178
|
+
default: {
|
|
179
|
+
const parameterType = signature.getNextParameterType();
|
|
180
|
+
if (parameterType == null) {
|
|
181
|
+
continue;
|
|
182
|
+
}
|
|
183
|
+
const argumentType = services.getTypeAtLocation(argument);
|
|
184
|
+
const result = (0, util_1.isUnsafeAssignment)(argumentType, parameterType, checker, argument);
|
|
185
|
+
if (result) {
|
|
186
|
+
context.report({
|
|
187
|
+
node: argument,
|
|
188
|
+
messageId: 'unsafeArgument',
|
|
189
|
+
data: {
|
|
190
|
+
sender: checker.typeToString(argumentType),
|
|
191
|
+
receiver: checker.typeToString(parameterType),
|
|
192
|
+
},
|
|
193
|
+
});
|
|
195
194
|
}
|
|
196
195
|
}
|
|
197
196
|
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
return {
|
|
200
|
+
'CallExpression, NewExpression'(node) {
|
|
201
|
+
checkUnsafeArguments(node.arguments, node.callee, node);
|
|
202
|
+
},
|
|
203
|
+
TaggedTemplateExpression(node) {
|
|
204
|
+
checkUnsafeArguments(node.quasi.expressions, node.tag, node);
|
|
198
205
|
},
|
|
199
206
|
};
|
|
200
207
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-unsafe-argument.js","sourceRoot":"","sources":["../../src/rules/no-unsafe-argument.ts"],"names":[],"mappings":";;AACA,oDAA0D;AAG1D,
|
|
1
|
+
{"version":3,"file":"no-unsafe-argument.js","sourceRoot":"","sources":["../../src/rules/no-unsafe-argument.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@typescript-eslint/eslint-plugin",
|
|
3
|
-
"version": "7.7.2-alpha.
|
|
3
|
+
"version": "7.7.2-alpha.3",
|
|
4
4
|
"description": "TypeScript plugin for ESLint",
|
|
5
5
|
"files": [
|
|
6
6
|
"dist",
|
|
@@ -62,10 +62,10 @@
|
|
|
62
62
|
},
|
|
63
63
|
"dependencies": {
|
|
64
64
|
"@eslint-community/regexpp": "^4.10.0",
|
|
65
|
-
"@typescript-eslint/scope-manager": "7.7.2-alpha.
|
|
66
|
-
"@typescript-eslint/type-utils": "7.7.2-alpha.
|
|
67
|
-
"@typescript-eslint/utils": "7.7.2-alpha.
|
|
68
|
-
"@typescript-eslint/visitor-keys": "7.7.2-alpha.
|
|
65
|
+
"@typescript-eslint/scope-manager": "7.7.2-alpha.3",
|
|
66
|
+
"@typescript-eslint/type-utils": "7.7.2-alpha.3",
|
|
67
|
+
"@typescript-eslint/utils": "7.7.2-alpha.3",
|
|
68
|
+
"@typescript-eslint/visitor-keys": "7.7.2-alpha.3",
|
|
69
69
|
"debug": "^4.3.4",
|
|
70
70
|
"graphemer": "^1.4.0",
|
|
71
71
|
"ignore": "^5.3.1",
|
|
@@ -78,8 +78,8 @@
|
|
|
78
78
|
"@types/marked": "*",
|
|
79
79
|
"@types/mdast": "^4.0.3",
|
|
80
80
|
"@types/natural-compare": "*",
|
|
81
|
-
"@typescript-eslint/rule-schema-to-typescript-types": "7.7.2-alpha.
|
|
82
|
-
"@typescript-eslint/rule-tester": "7.7.2-alpha.
|
|
81
|
+
"@typescript-eslint/rule-schema-to-typescript-types": "7.7.2-alpha.3",
|
|
82
|
+
"@typescript-eslint/rule-tester": "7.7.2-alpha.3",
|
|
83
83
|
"ajv": "^6.12.6",
|
|
84
84
|
"chalk": "^5.3.0",
|
|
85
85
|
"cross-env": "^7.0.3",
|