@typescript-eslint/eslint-plugin 8.1.1-alpha.8 → 8.2.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/dist/rules/array-type.js +4 -1
- package/dist/rules/array-type.js.map +1 -1
- package/dist/rules/enum-utils/shared.js +1 -1
- package/dist/rules/enum-utils/shared.js.map +1 -1
- package/dist/rules/member-ordering.js +1 -1
- package/dist/rules/member-ordering.js.map +1 -1
- package/dist/rules/naming-convention-utils/shared.js +1 -1
- package/dist/rules/naming-convention-utils/shared.js.map +1 -1
- package/dist/rules/no-invalid-void-type.js +2 -2
- package/dist/rules/no-invalid-void-type.js.map +1 -1
- package/dist/rules/no-redundant-type-constituents.js +10 -2
- package/dist/rules/no-redundant-type-constituents.js.map +1 -1
- package/dist/rules/no-restricted-types.js +1 -1
- package/dist/rules/no-restricted-types.js.map +1 -1
- package/dist/rules/no-unnecessary-template-expression.js +2 -2
- package/dist/rules/no-unnecessary-template-expression.js.map +1 -1
- package/dist/rules/no-unnecessary-type-assertion.js +44 -17
- package/dist/rules/no-unnecessary-type-assertion.js.map +1 -1
- package/dist/rules/no-unnecessary-type-parameters.js +1 -1
- package/dist/rules/no-unnecessary-type-parameters.js.map +1 -1
- package/dist/rules/no-unsafe-enum-comparison.js +23 -6
- package/dist/rules/no-unsafe-enum-comparison.js.map +1 -1
- package/dist/rules/prefer-includes.js +1 -1
- package/dist/rules/prefer-includes.js.map +1 -1
- package/dist/rules/require-await.js +80 -0
- package/dist/rules/require-await.js.map +1 -1
- package/dist/rules/use-unknown-in-catch-callback-variable.js +46 -85
- package/dist/rules/use-unknown-in-catch-callback-variable.js.map +1 -1
- package/dist/util/escapeRegExp.js +1 -1
- package/dist/util/escapeRegExp.js.map +1 -1
- package/dist/util/index.js +2 -0
- package/dist/util/index.js.map +1 -1
- package/dist/util/isStartOfExpressionStatement.js +23 -0
- package/dist/util/isStartOfExpressionStatement.js.map +1 -0
- package/dist/util/needsPrecedingSemiColon.js +98 -0
- package/dist/util/needsPrecedingSemiColon.js.map +1 -0
- package/docs/rules/use-unknown-in-catch-callback-variable.mdx +13 -4
- package/package.json +7 -7
@@ -30,12 +30,22 @@ const shared_1 = require("./enum-utils/shared");
|
|
30
30
|
/**
|
31
31
|
* @returns Whether the right type is an unsafe comparison against any left type.
|
32
32
|
*/
|
33
|
-
function typeViolates(leftTypeParts,
|
34
|
-
const
|
35
|
-
return ((
|
36
|
-
|
37
|
-
|
38
|
-
|
33
|
+
function typeViolates(leftTypeParts, rightType) {
|
34
|
+
const leftEnumValueTypes = new Set(leftTypeParts.map(getEnumValueType));
|
35
|
+
return ((leftEnumValueTypes.has(ts.TypeFlags.Number) && isNumberLike(rightType)) ||
|
36
|
+
(leftEnumValueTypes.has(ts.TypeFlags.String) && isStringLike(rightType)));
|
37
|
+
}
|
38
|
+
function isNumberLike(type) {
|
39
|
+
const typeParts = tsutils.intersectionTypeParts(type);
|
40
|
+
return typeParts.some(typePart => {
|
41
|
+
return tsutils.isTypeFlagSet(typePart, ts.TypeFlags.Number | ts.TypeFlags.NumberLike);
|
42
|
+
});
|
43
|
+
}
|
44
|
+
function isStringLike(type) {
|
45
|
+
const typeParts = tsutils.intersectionTypeParts(type);
|
46
|
+
return typeParts.some(typePart => {
|
47
|
+
return tsutils.isTypeFlagSet(typePart, ts.TypeFlags.String | ts.TypeFlags.StringLike);
|
48
|
+
});
|
39
49
|
}
|
40
50
|
/**
|
41
51
|
* @returns What type a type's enum value is (number or string), if either.
|
@@ -89,6 +99,13 @@ exports.default = (0, util_1.createRule)({
|
|
89
99
|
return false;
|
90
100
|
}
|
91
101
|
}
|
102
|
+
// We need to split the type into the union type parts in order to find
|
103
|
+
// valid enum comparisons like:
|
104
|
+
//
|
105
|
+
// ```ts
|
106
|
+
// declare const something: Fruit | Vegetable;
|
107
|
+
// something === Fruit.Apple;
|
108
|
+
// ```
|
92
109
|
const leftTypeParts = tsutils.unionTypeParts(leftType);
|
93
110
|
const rightTypeParts = tsutils.unionTypeParts(rightType);
|
94
111
|
// If a type exists in both sides, we consider this comparison safe:
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"no-unsafe-enum-comparison.js","sourceRoot":"","sources":["../../src/rules/no-unsafe-enum-comparison.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AACA,sDAAwC;AACxC,+CAAiC;AAEjC,kCAAwE;AACxE,gDAI6B;AAE7B;;GAEG;AACH,SAAS,YAAY,CAAC,aAAwB,EAAE,
|
1
|
+
{"version":3,"file":"no-unsafe-enum-comparison.js","sourceRoot":"","sources":["../../src/rules/no-unsafe-enum-comparison.ts"],"names":[],"mappings":"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"}
|
@@ -132,7 +132,7 @@ exports.default = (0, util_1.createRule)({
|
|
132
132
|
// '\b': '\\b',
|
133
133
|
};
|
134
134
|
const replaceRegex = new RegExp(Object.values(EscapeMap).join('|'), 'g');
|
135
|
-
return str.
|
135
|
+
return str.replaceAll(replaceRegex, char => EscapeMap[char]);
|
136
136
|
}
|
137
137
|
function checkArrayIndexOf(node, allowFixing) {
|
138
138
|
// Check if the comparison is equivalent to `includes()`.
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"prefer-includes.js","sourceRoot":"","sources":["../../src/rules/prefer-includes.ts"],"names":[],"mappings":"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
|
1
|
+
{"version":3,"file":"prefer-includes.js","sourceRoot":"","sources":["../../src/rules/prefer-includes.ts"],"names":[],"mappings":"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"}
|
@@ -39,7 +39,9 @@ exports.default = (0, util_1.createRule)({
|
|
39
39
|
schema: [],
|
40
40
|
messages: {
|
41
41
|
missingAwait: "{{name}} has no 'await' expression.",
|
42
|
+
removeAsync: "Remove 'async'.",
|
42
43
|
},
|
44
|
+
hasSuggestions: true,
|
43
45
|
},
|
44
46
|
defaultOptions: [],
|
45
47
|
create(context) {
|
@@ -71,6 +73,72 @@ exports.default = (0, util_1.createRule)({
|
|
71
73
|
!scopeInfo.hasAwait &&
|
72
74
|
!isEmptyFunction(node) &&
|
73
75
|
!(scopeInfo.isGen && scopeInfo.isAsyncYield)) {
|
76
|
+
// If the function belongs to a method definition or
|
77
|
+
// property, then the function's range may not include the
|
78
|
+
// `async` keyword and we should look at the parent instead.
|
79
|
+
const nodeWithAsyncKeyword = (node.parent.type === utils_1.AST_NODE_TYPES.MethodDefinition &&
|
80
|
+
node.parent.value === node) ||
|
81
|
+
(node.parent.type === utils_1.AST_NODE_TYPES.Property &&
|
82
|
+
node.parent.method &&
|
83
|
+
node.parent.value === node)
|
84
|
+
? node.parent
|
85
|
+
: node;
|
86
|
+
const asyncToken = (0, util_1.nullThrows)(context.sourceCode.getFirstToken(nodeWithAsyncKeyword, token => token.value === 'async'), 'The node is an async function, so it must have an "async" token.');
|
87
|
+
const asyncRange = [
|
88
|
+
asyncToken.range[0],
|
89
|
+
(0, util_1.nullThrows)(context.sourceCode.getTokenAfter(asyncToken, {
|
90
|
+
includeComments: true,
|
91
|
+
}), 'There will always be a token after the "async" keyword.').range[0],
|
92
|
+
];
|
93
|
+
// Removing the `async` keyword can cause parsing errors if the
|
94
|
+
// current statement is relying on automatic semicolon insertion.
|
95
|
+
// If ASI is currently being used, then we should replace the
|
96
|
+
// `async` keyword with a semicolon.
|
97
|
+
const nextToken = (0, util_1.nullThrows)(context.sourceCode.getTokenAfter(asyncToken), 'There will always be a token after the "async" keyword.');
|
98
|
+
const addSemiColon = nextToken.type === utils_1.AST_TOKEN_TYPES.Punctuator &&
|
99
|
+
(nextToken.value === '[' || nextToken.value === '(') &&
|
100
|
+
(nodeWithAsyncKeyword.type === utils_1.AST_NODE_TYPES.MethodDefinition ||
|
101
|
+
(0, util_1.isStartOfExpressionStatement)(nodeWithAsyncKeyword)) &&
|
102
|
+
(0, util_1.needsPrecedingSemicolon)(context.sourceCode, nodeWithAsyncKeyword);
|
103
|
+
const changes = [
|
104
|
+
{ range: asyncRange, replacement: addSemiColon ? ';' : undefined },
|
105
|
+
];
|
106
|
+
// If there's a return type annotation and it's a
|
107
|
+
// `Promise<T>`, we can also change the return type
|
108
|
+
// annotation to just `T` as part of the suggestion.
|
109
|
+
// Alternatively, if the function is a generator and
|
110
|
+
// the return type annotation is `AsyncGenerator<T>`,
|
111
|
+
// then we can change it to `Generator<T>`.
|
112
|
+
if (node.returnType?.typeAnnotation.type ===
|
113
|
+
utils_1.AST_NODE_TYPES.TSTypeReference) {
|
114
|
+
if (scopeInfo.isGen) {
|
115
|
+
if (hasTypeName(node.returnType.typeAnnotation, 'AsyncGenerator')) {
|
116
|
+
changes.push({
|
117
|
+
range: node.returnType.typeAnnotation.typeName.range,
|
118
|
+
replacement: 'Generator',
|
119
|
+
});
|
120
|
+
}
|
121
|
+
}
|
122
|
+
else if (hasTypeName(node.returnType.typeAnnotation, 'Promise') &&
|
123
|
+
node.returnType.typeAnnotation.typeArguments != null) {
|
124
|
+
const openAngle = (0, util_1.nullThrows)(context.sourceCode.getFirstToken(node.returnType.typeAnnotation, token => token.type === utils_1.AST_TOKEN_TYPES.Punctuator &&
|
125
|
+
token.value === '<'), 'There are type arguments, so the angle bracket will exist.');
|
126
|
+
const closeAngle = (0, util_1.nullThrows)(context.sourceCode.getLastToken(node.returnType.typeAnnotation, token => token.type === utils_1.AST_TOKEN_TYPES.Punctuator &&
|
127
|
+
token.value === '>'), 'There are type arguments, so the angle bracket will exist.');
|
128
|
+
changes.push(
|
129
|
+
// Remove the closing angled bracket.
|
130
|
+
{ range: closeAngle.range, replacement: undefined },
|
131
|
+
// Remove the "Promise" identifier
|
132
|
+
// and the opening angled bracket.
|
133
|
+
{
|
134
|
+
range: [
|
135
|
+
node.returnType.typeAnnotation.typeName.range[0],
|
136
|
+
openAngle.range[1],
|
137
|
+
],
|
138
|
+
replacement: undefined,
|
139
|
+
});
|
140
|
+
}
|
141
|
+
}
|
74
142
|
context.report({
|
75
143
|
node,
|
76
144
|
loc: (0, util_1.getFunctionHeadLoc)(node, context.sourceCode),
|
@@ -78,6 +146,14 @@ exports.default = (0, util_1.createRule)({
|
|
78
146
|
data: {
|
79
147
|
name: (0, util_1.upperCaseFirst)((0, util_1.getFunctionNameWithKind)(node)),
|
80
148
|
},
|
149
|
+
suggest: [
|
150
|
+
{
|
151
|
+
messageId: 'removeAsync',
|
152
|
+
fix: (fixer) => changes.map(change => change.replacement !== undefined
|
153
|
+
? fixer.replaceTextRange(change.range, change.replacement)
|
154
|
+
: fixer.removeRange(change.range)),
|
155
|
+
},
|
156
|
+
],
|
81
157
|
});
|
82
158
|
}
|
83
159
|
scopeInfo = scopeInfo.upper;
|
@@ -171,4 +247,8 @@ function expandUnionOrIntersectionType(type) {
|
|
171
247
|
}
|
172
248
|
return [type];
|
173
249
|
}
|
250
|
+
function hasTypeName(typeReference, typeName) {
|
251
|
+
return (typeReference.typeName.type === utils_1.AST_NODE_TYPES.Identifier &&
|
252
|
+
typeReference.typeName.name === typeName);
|
253
|
+
}
|
174
254
|
//# sourceMappingURL=require-await.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"require-await.js","sourceRoot":"","sources":["../../src/rules/require-await.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AACA,
|
1
|
+
{"version":3,"file":"require-await.js","sourceRoot":"","sources":["../../src/rules/require-await.ts"],"names":[],"mappings":"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"}
|
@@ -26,12 +26,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
26
|
const utils_1 = require("@typescript-eslint/utils");
|
27
27
|
const tsutils = __importStar(require("ts-api-utils"));
|
28
28
|
const util_1 = require("../util");
|
29
|
-
const useUnknownMessageBase = 'Prefer the safe `: unknown` for a
|
29
|
+
const useUnknownMessageBase = 'Prefer the safe `: unknown` for a `{{method}}`{{append}} callback variable.';
|
30
|
+
/**
|
31
|
+
* `x.memberName` => 'memberKey'
|
32
|
+
*
|
33
|
+
* `const mk = 'memberKey'; x[mk]` => 'memberKey'
|
34
|
+
*
|
35
|
+
* `const mk = 1234; x[mk]` => 1234
|
36
|
+
*/
|
37
|
+
const getStaticMemberAccessKey = ({ computed, property }, scope) => computed ? (0, util_1.getStaticValue)(property, scope) : { value: property.name };
|
30
38
|
exports.default = (0, util_1.createRule)({
|
31
39
|
name: 'use-unknown-in-catch-callback-variable',
|
32
40
|
meta: {
|
33
41
|
docs: {
|
34
|
-
description: 'Enforce typing arguments in
|
42
|
+
description: 'Enforce typing arguments in Promise rejection callbacks as `unknown`',
|
35
43
|
requiresTypeChecking: true,
|
36
44
|
recommended: 'strict',
|
37
45
|
},
|
@@ -40,9 +48,8 @@ exports.default = (0, util_1.createRule)({
|
|
40
48
|
useUnknown: useUnknownMessageBase,
|
41
49
|
useUnknownArrayDestructuringPattern: `${useUnknownMessageBase} The thrown error may not be iterable.`,
|
42
50
|
useUnknownObjectDestructuringPattern: `${useUnknownMessageBase} The thrown error may be nullable, or may not have the expected shape.`,
|
43
|
-
|
44
|
-
|
45
|
-
addUnknownRestTypeAnnotationSuggestion: 'Add an explicit `: [unknown]` type annotation to the catch rest variable.',
|
51
|
+
addUnknownTypeAnnotationSuggestion: 'Add an explicit `: unknown` type annotation to the rejection callback variable.',
|
52
|
+
addUnknownRestTypeAnnotationSuggestion: 'Add an explicit `: [unknown]` type annotation to the rejection callback rest variable.',
|
46
53
|
wrongTypeAnnotationSuggestion: 'Change existing type annotation to `: unknown`.',
|
47
54
|
wrongRestTypeAnnotationSuggestion: 'Change existing type annotation to `: [unknown]`.',
|
48
55
|
},
|
@@ -52,17 +59,8 @@ exports.default = (0, util_1.createRule)({
|
|
52
59
|
},
|
53
60
|
defaultOptions: [],
|
54
61
|
create(context) {
|
55
|
-
const
|
56
|
-
const checker =
|
57
|
-
function isPromiseCatchAccess(node) {
|
58
|
-
if (!(node.type === utils_1.AST_NODE_TYPES.MemberExpression &&
|
59
|
-
isStaticMemberAccessOfValue(node, 'catch'))) {
|
60
|
-
return false;
|
61
|
-
}
|
62
|
-
const objectTsNode = services.esTreeNodeToTSNodeMap.get(node.object);
|
63
|
-
const tsNode = services.esTreeNodeToTSNodeMap.get(node);
|
64
|
-
return tsutils.isThenableType(checker, tsNode, checker.getTypeAtLocation(objectTsNode));
|
65
|
-
}
|
62
|
+
const { program, esTreeNodeToTSNodeMap } = (0, util_1.getParserServices)(context);
|
63
|
+
const checker = program.getTypeChecker();
|
66
64
|
function isFlaggableHandlerType(type) {
|
67
65
|
for (const unionPart of tsutils.unionTypeParts(type)) {
|
68
66
|
const callSignatures = tsutils.getCallSignaturesOfType(unionPart);
|
@@ -97,40 +95,11 @@ exports.default = (0, util_1.createRule)({
|
|
97
95
|
}
|
98
96
|
return false;
|
99
97
|
}
|
100
|
-
/**
|
101
|
-
* If passed an ordinary expression, this will check it as expected.
|
102
|
-
*
|
103
|
-
* If passed a spread element, it treats it as the union of unwrapped array/tuple type.
|
104
|
-
*/
|
105
98
|
function shouldFlagArgument(node) {
|
106
|
-
const argument =
|
99
|
+
const argument = esTreeNodeToTSNodeMap.get(node);
|
107
100
|
const typeOfArgument = checker.getTypeAtLocation(argument);
|
108
101
|
return isFlaggableHandlerType(typeOfArgument);
|
109
102
|
}
|
110
|
-
function shouldFlagMultipleSpreadArgs(argumentsList) {
|
111
|
-
// One could try to be clever about unpacking fixed length tuples and stuff
|
112
|
-
// like that, but there's no need, since this is all invalid use of `.catch`
|
113
|
-
// anyway at the end of the day. Instead, we'll just check whether any of the
|
114
|
-
// possible args types would violate the rule on its own.
|
115
|
-
return argumentsList.some(argument => shouldFlagArgument(argument));
|
116
|
-
}
|
117
|
-
function shouldFlagSingleSpreadArg(node) {
|
118
|
-
const spreadArgs = services.esTreeNodeToTSNodeMap.get(node.argument);
|
119
|
-
const spreadArgsType = checker.getTypeAtLocation(spreadArgs);
|
120
|
-
if (checker.isArrayType(spreadArgsType)) {
|
121
|
-
const arrayType = checker.getTypeArguments(spreadArgsType)[0];
|
122
|
-
return isFlaggableHandlerType(arrayType);
|
123
|
-
}
|
124
|
-
if (checker.isTupleType(spreadArgsType)) {
|
125
|
-
const firstType = checker.getTypeArguments(spreadArgsType).at(0);
|
126
|
-
if (!firstType) {
|
127
|
-
// empty spread args. Suspect code, but not a problem for this rule.
|
128
|
-
return false;
|
129
|
-
}
|
130
|
-
return isFlaggableHandlerType(firstType);
|
131
|
-
}
|
132
|
-
return true;
|
133
|
-
}
|
134
103
|
/**
|
135
104
|
* Analyzes the syntax of the catch argument and makes a best effort to pinpoint
|
136
105
|
* why it's reporting, and to come up with a suggested fix if possible.
|
@@ -138,7 +107,7 @@ exports.default = (0, util_1.createRule)({
|
|
138
107
|
* This function is explicitly operating under the assumption that the
|
139
108
|
* rule _is reporting_, so it is not guaranteed to be sound to call otherwise.
|
140
109
|
*/
|
141
|
-
function
|
110
|
+
function refineReportIfPossible(argument) {
|
142
111
|
// Only know how to be helpful if a function literal has been provided.
|
143
112
|
if (!(argument.type === utils_1.AST_NODE_TYPES.ArrowFunctionExpression ||
|
144
113
|
argument.type === utils_1.AST_NODE_TYPES.FunctionExpression)) {
|
@@ -224,39 +193,45 @@ exports.default = (0, util_1.createRule)({
|
|
224
193
|
}
|
225
194
|
}
|
226
195
|
return {
|
227
|
-
CallExpression(
|
228
|
-
if (
|
196
|
+
CallExpression({ arguments: args, callee }) {
|
197
|
+
if (callee.type !== utils_1.AST_NODE_TYPES.MemberExpression) {
|
229
198
|
return;
|
230
199
|
}
|
231
|
-
const
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
});
|
241
|
-
}
|
242
|
-
}
|
243
|
-
else if (shouldFlagMultipleSpreadArgs(node.arguments)) {
|
244
|
-
context.report({
|
245
|
-
node,
|
246
|
-
messageId: 'useUnknownSpreadArgs',
|
247
|
-
});
|
248
|
-
}
|
200
|
+
const staticMemberAccessKey = getStaticMemberAccessKey(callee, context.sourceCode.getScope(callee));
|
201
|
+
if (!staticMemberAccessKey) {
|
202
|
+
return;
|
203
|
+
}
|
204
|
+
const promiseMethodInfo = [
|
205
|
+
{ method: 'catch', append: '', argIndexToCheck: 0 },
|
206
|
+
{ method: 'then', append: ' rejection', argIndexToCheck: 1 },
|
207
|
+
].find(({ method }) => staticMemberAccessKey.value === method);
|
208
|
+
if (!promiseMethodInfo) {
|
249
209
|
return;
|
250
210
|
}
|
251
|
-
//
|
211
|
+
// Need to be enough args to check
|
212
|
+
const { argIndexToCheck, ...data } = promiseMethodInfo;
|
213
|
+
if (args.length < argIndexToCheck + 1) {
|
214
|
+
return;
|
215
|
+
}
|
216
|
+
// Argument to check, and all arguments before it, must be "ordinary" arguments (i.e. no spread arguments)
|
252
217
|
// promise.catch(f), promise.catch(() => {}), promise.catch(<expression>, <<other-args>>)
|
253
|
-
|
218
|
+
const argsToCheck = args.slice(0, argIndexToCheck + 1);
|
219
|
+
if (argsToCheck.some(({ type }) => type === utils_1.AST_NODE_TYPES.SpreadElement)) {
|
220
|
+
return;
|
221
|
+
}
|
222
|
+
if (!tsutils.isThenableType(checker, esTreeNodeToTSNodeMap.get(callee), checker.getTypeAtLocation(esTreeNodeToTSNodeMap.get(callee.object)))) {
|
223
|
+
return;
|
224
|
+
}
|
225
|
+
// the `some` check above has already excluded `SpreadElement`, so we are safe to assert the same
|
226
|
+
const node = argsToCheck[argIndexToCheck];
|
227
|
+
if (shouldFlagArgument(node)) {
|
254
228
|
// We are now guaranteed to report, but we have a bit of work to do
|
255
229
|
// to determine exactly where, and whether we can fix it.
|
256
|
-
const overrides =
|
230
|
+
const overrides = refineReportIfPossible(node);
|
257
231
|
context.report({
|
258
|
-
node
|
232
|
+
node,
|
259
233
|
messageId: 'useUnknown',
|
234
|
+
data,
|
260
235
|
...overrides,
|
261
236
|
});
|
262
237
|
}
|
@@ -264,18 +239,4 @@ exports.default = (0, util_1.createRule)({
|
|
264
239
|
};
|
265
240
|
},
|
266
241
|
});
|
267
|
-
/**
|
268
|
-
* Answers whether the member expression looks like
|
269
|
-
* `x.memberName`, `x['memberName']`,
|
270
|
-
* or even `const mn = 'memberName'; x[mn]` (or optional variants thereof).
|
271
|
-
*/
|
272
|
-
function isStaticMemberAccessOfValue(memberExpression, value, scope) {
|
273
|
-
if (!memberExpression.computed) {
|
274
|
-
// x.memberName case.
|
275
|
-
return memberExpression.property.name === value;
|
276
|
-
}
|
277
|
-
// x['memberName'] cases.
|
278
|
-
const staticValueResult = (0, util_1.getStaticValue)(memberExpression.property, scope);
|
279
|
-
return staticValueResult != null && value === staticValueResult.value;
|
280
|
-
}
|
281
242
|
//# sourceMappingURL=use-unknown-in-catch-callback-variable.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"use-unknown-in-catch-callback-variable.js","sourceRoot":"","sources":["../../src/rules/use-unknown-in-catch-callback-variable.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;
|
1
|
+
{"version":3,"file":"use-unknown-in-catch-callback-variable.js","sourceRoot":"","sources":["../../src/rules/use-unknown-in-catch-callback-variable.ts"],"names":[],"mappings":"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"}
|
@@ -9,7 +9,7 @@ const reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
|
|
9
9
|
const reHasRegExpChar = RegExp(reRegExpChar.source);
|
10
10
|
function escapeRegExp(string = '') {
|
11
11
|
return string && reHasRegExpChar.test(string)
|
12
|
-
? string.
|
12
|
+
? string.replaceAll(reRegExpChar, '\\$&')
|
13
13
|
: string;
|
14
14
|
}
|
15
15
|
//# sourceMappingURL=escapeRegExp.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"escapeRegExp.js","sourceRoot":"","sources":["../../src/util/escapeRegExp.ts"],"names":[],"mappings":";;AAOA,oCAIC;AAXD;;;GAGG;AACH,MAAM,YAAY,GAAG,qBAAqB,CAAC;AAC3C,MAAM,eAAe,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AAEpD,SAAgB,YAAY,CAAC,MAAM,GAAG,EAAE;IACtC,OAAO,MAAM,IAAI,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;QAC3C,CAAC,CAAC,MAAM,CAAC,
|
1
|
+
{"version":3,"file":"escapeRegExp.js","sourceRoot":"","sources":["../../src/util/escapeRegExp.ts"],"names":[],"mappings":";;AAOA,oCAIC;AAXD;;;GAGG;AACH,MAAM,YAAY,GAAG,qBAAqB,CAAC;AAC3C,MAAM,eAAe,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AAEpD,SAAgB,YAAY,CAAC,MAAM,GAAG,EAAE;IACtC,OAAO,MAAM,IAAI,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;QAC3C,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,YAAY,EAAE,MAAM,CAAC;QACzC,CAAC,CAAC,MAAM,CAAC;AACb,CAAC"}
|
package/dist/util/index.js
CHANGED
@@ -28,8 +28,10 @@ __exportStar(require("./getThisExpression"), exports);
|
|
28
28
|
__exportStar(require("./getWrappingFixer"), exports);
|
29
29
|
__exportStar(require("./isNodeEqual"), exports);
|
30
30
|
__exportStar(require("./isNullLiteral"), exports);
|
31
|
+
__exportStar(require("./isStartOfExpressionStatement"), exports);
|
31
32
|
__exportStar(require("./isUndefinedIdentifier"), exports);
|
32
33
|
__exportStar(require("./misc"), exports);
|
34
|
+
__exportStar(require("./needsPrecedingSemiColon"), exports);
|
33
35
|
__exportStar(require("./objectIterators"), exports);
|
34
36
|
__exportStar(require("./scopeUtils"), exports);
|
35
37
|
__exportStar(require("./types"), exports);
|
package/dist/util/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/util/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,oDAAuD;AAEvD,6CAA2B;AAC3B,2DAAyC;AACzC,+CAA6B;AAC7B,uDAAqC;AACrC,0DAAwC;AACxC,yDAAuC;AACvC,oDAAkC;AAClC,2DAAyC;AACzC,sDAAoC;AACpC,qDAAmC;AACnC,gDAA8B;AAC9B,kDAAgC;AAChC,0DAAwC;AACxC,yCAAuB;AACvB,oDAAkC;AAClC,+CAA6B;AAC7B,0CAAwB;AACxB,+CAA6B;AAC7B,oDAAkC;AAElC,sEAAsE;AACtE,gEAA8C;AAC9C,MAAM,EACJ,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,UAAU,EACV,iBAAiB,GAClB,GAAG,mBAAW,CAAC;AAMd,oCAAY;AACZ,8BAAS;AACT,4CAAgB;AAChB,8CAAiB;AACjB,gCAAU;AAGV,8CAAiB"}
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/util/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,oDAAuD;AAEvD,6CAA2B;AAC3B,2DAAyC;AACzC,+CAA6B;AAC7B,uDAAqC;AACrC,0DAAwC;AACxC,yDAAuC;AACvC,oDAAkC;AAClC,2DAAyC;AACzC,sDAAoC;AACpC,qDAAmC;AACnC,gDAA8B;AAC9B,kDAAgC;AAChC,iEAA+C;AAC/C,0DAAwC;AACxC,yCAAuB;AACvB,4DAA0C;AAC1C,oDAAkC;AAClC,+CAA6B;AAC7B,0CAAwB;AACxB,+CAA6B;AAC7B,oDAAkC;AAElC,sEAAsE;AACtE,gEAA8C;AAC9C,MAAM,EACJ,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,UAAU,EACV,iBAAiB,GAClB,GAAG,mBAAW,CAAC;AAMd,oCAAY;AACZ,8BAAS;AACT,4CAAgB;AAChB,8CAAiB;AACjB,gCAAU;AAGV,8CAAiB"}
|
@@ -0,0 +1,23 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.isStartOfExpressionStatement = isStartOfExpressionStatement;
|
4
|
+
const utils_1 = require("@typescript-eslint/utils");
|
5
|
+
// The following is copied from `eslint`'s source code.
|
6
|
+
// https://github.com/eslint/eslint/blob/3a4eaf921543b1cd5d1df4ea9dec02fab396af2a/lib/rules/utils/ast-utils.js#L1026-L1041
|
7
|
+
// Could be export { isStartOfExpressionStatement } from 'eslint/lib/rules/utils/ast-utils'
|
8
|
+
/**
|
9
|
+
* Tests if a node appears at the beginning of an ancestor ExpressionStatement node.
|
10
|
+
* @param node The node to check.
|
11
|
+
* @returns Whether the node appears at the beginning of an ancestor ExpressionStatement node.
|
12
|
+
*/
|
13
|
+
function isStartOfExpressionStatement(node) {
|
14
|
+
const start = node.range[0];
|
15
|
+
let ancestor = node;
|
16
|
+
while ((ancestor = ancestor.parent) && ancestor.range[0] === start) {
|
17
|
+
if (ancestor.type === utils_1.AST_NODE_TYPES.ExpressionStatement) {
|
18
|
+
return true;
|
19
|
+
}
|
20
|
+
}
|
21
|
+
return false;
|
22
|
+
}
|
23
|
+
//# sourceMappingURL=isStartOfExpressionStatement.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"isStartOfExpressionStatement.js","sourceRoot":"","sources":["../../src/util/isStartOfExpressionStatement.ts"],"names":[],"mappings":";;AAWA,oEAUC;AApBD,oDAA0D;AAE1D,uDAAuD;AACvD,0HAA0H;AAC1H,2FAA2F;AAC3F;;;;GAIG;AACH,SAAgB,4BAA4B,CAAC,IAAmB;IAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,QAAQ,GAA8B,IAAI,CAAC;IAE/C,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC;QACnE,IAAI,QAAQ,CAAC,IAAI,KAAK,sBAAc,CAAC,mBAAmB,EAAE,CAAC;YACzD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|