@typescript-eslint/eslint-plugin 7.7.2-alpha.2 → 7.7.2-alpha.3
Sign up to get free protection for your applications and to get access to all the features.
@@ -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",
|