@typescript-eslint/eslint-plugin 6.15.0 → 6.17.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/configs/all.js +0 -40
- package/dist/configs/all.js.map +1 -1
- package/dist/rules/block-spacing.js +2 -0
- package/dist/rules/block-spacing.js.map +1 -1
- package/dist/rules/brace-style.js +2 -0
- package/dist/rules/brace-style.js.map +1 -1
- package/dist/rules/comma-dangle.js +2 -0
- package/dist/rules/comma-dangle.js.map +1 -1
- package/dist/rules/comma-spacing.js +2 -0
- package/dist/rules/comma-spacing.js.map +1 -1
- package/dist/rules/func-call-spacing.js +2 -0
- package/dist/rules/func-call-spacing.js.map +1 -1
- package/dist/rules/indent.js +2 -0
- package/dist/rules/indent.js.map +1 -1
- package/dist/rules/key-spacing.js +2 -0
- package/dist/rules/key-spacing.js.map +1 -1
- package/dist/rules/keyword-spacing.js +2 -0
- package/dist/rules/keyword-spacing.js.map +1 -1
- package/dist/rules/lines-around-comment.js +2 -0
- package/dist/rules/lines-around-comment.js.map +1 -1
- package/dist/rules/lines-between-class-members.js +2 -0
- package/dist/rules/lines-between-class-members.js.map +1 -1
- package/dist/rules/member-delimiter-style.js +2 -0
- package/dist/rules/member-delimiter-style.js.map +1 -1
- package/dist/rules/no-extra-parens.js +2 -0
- package/dist/rules/no-extra-parens.js.map +1 -1
- package/dist/rules/no-extra-semi.js +2 -0
- package/dist/rules/no-extra-semi.js.map +1 -1
- package/dist/rules/no-floating-promises.js +44 -5
- package/dist/rules/no-floating-promises.js.map +1 -1
- package/dist/rules/no-for-in-array.js +1 -1
- package/dist/rules/no-for-in-array.js.map +1 -1
- package/dist/rules/no-restricted-imports.js +10 -1
- package/dist/rules/no-restricted-imports.js.map +1 -1
- package/dist/rules/object-curly-spacing.js +2 -0
- package/dist/rules/object-curly-spacing.js.map +1 -1
- package/dist/rules/padding-line-between-statements.js +2 -0
- package/dist/rules/padding-line-between-statements.js.map +1 -1
- package/dist/rules/quotes.js +2 -0
- package/dist/rules/quotes.js.map +1 -1
- package/dist/rules/semi.js +2 -0
- package/dist/rules/semi.js.map +1 -1
- package/dist/rules/space-before-blocks.js +2 -0
- package/dist/rules/space-before-blocks.js.map +1 -1
- package/dist/rules/space-before-function-paren.js +2 -0
- package/dist/rules/space-before-function-paren.js.map +1 -1
- package/dist/rules/space-infix-ops.js +2 -0
- package/dist/rules/space-infix-ops.js.map +1 -1
- package/dist/rules/switch-exhaustiveness-check.js +107 -56
- package/dist/rules/switch-exhaustiveness-check.js.map +1 -1
- package/dist/rules/type-annotation-spacing.js +2 -0
- package/dist/rules/type-annotation-spacing.js.map +1 -1
- package/dist/rules/unbound-method.js +13 -51
- package/dist/rules/unbound-method.js.map +1 -1
- package/docs/rules/explicit-member-accessibility.md +2 -2
- package/docs/rules/explicit-module-boundary-types.md +10 -15
- package/docs/rules/no-empty-interface.md +2 -13
- package/docs/rules/no-explicit-any.md +7 -0
- package/docs/rules/no-floating-promises.md +15 -0
- package/docs/rules/no-for-in-array.md +8 -4
- package/docs/rules/no-meaningless-void-operator.md +2 -0
- package/docs/rules/no-misused-promises.md +3 -3
- package/docs/rules/no-parameter-properties.md +12 -0
- package/docs/rules/no-shadow.md +13 -7
- package/docs/rules/no-this-alias.md +69 -0
- package/docs/rules/no-unnecessary-condition.md +1 -2
- package/docs/rules/parameter-properties.md +2 -2
- package/docs/rules/prefer-literal-enum-member.md +3 -1
- package/docs/rules/prefer-nullish-coalescing.md +10 -0
- package/docs/rules/prefer-readonly-parameter-types.md +8 -5
- package/docs/rules/promise-function-async.md +68 -0
- package/docs/rules/sort-type-constituents.md +56 -0
- package/docs/rules/switch-exhaustiveness-check.md +41 -23
- package/docs/rules/triple-slash-reference.md +71 -23
- package/package.json +8 -8
|
@@ -39,33 +39,101 @@ exports.default = (0, util_1.createRule)({
|
|
|
39
39
|
schema: [
|
|
40
40
|
{
|
|
41
41
|
type: 'object',
|
|
42
|
-
additionalProperties: false,
|
|
43
42
|
properties: {
|
|
43
|
+
allowDefaultCaseForExhaustiveSwitch: {
|
|
44
|
+
description: `If 'true', allow 'default' cases on switch statements with exhaustive cases.`,
|
|
45
|
+
type: 'boolean',
|
|
46
|
+
},
|
|
44
47
|
requireDefaultForNonUnion: {
|
|
45
48
|
description: `If 'true', require a 'default' clause for switches on non-union types.`,
|
|
46
49
|
type: 'boolean',
|
|
47
50
|
},
|
|
48
51
|
},
|
|
52
|
+
additionalProperties: false,
|
|
49
53
|
},
|
|
50
54
|
],
|
|
51
55
|
messages: {
|
|
52
56
|
switchIsNotExhaustive: 'Switch is not exhaustive. Cases not matched: {{missingBranches}}',
|
|
57
|
+
dangerousDefaultCase: 'The switch statement is exhaustive, so the default case is unnecessary.',
|
|
53
58
|
addMissingCases: 'Add branches for missing cases.',
|
|
54
59
|
},
|
|
55
60
|
},
|
|
56
|
-
defaultOptions: [
|
|
57
|
-
|
|
61
|
+
defaultOptions: [
|
|
62
|
+
{
|
|
63
|
+
allowDefaultCaseForExhaustiveSwitch: true,
|
|
64
|
+
requireDefaultForNonUnion: false,
|
|
65
|
+
},
|
|
66
|
+
],
|
|
67
|
+
create(context, [{ allowDefaultCaseForExhaustiveSwitch, requireDefaultForNonUnion }]) {
|
|
58
68
|
const sourceCode = (0, eslint_utils_1.getSourceCode)(context);
|
|
59
69
|
const services = (0, util_1.getParserServices)(context);
|
|
60
70
|
const checker = services.program.getTypeChecker();
|
|
61
71
|
const compilerOptions = services.program.getCompilerOptions();
|
|
72
|
+
function getSwitchMetadata(node) {
|
|
73
|
+
const defaultCase = node.cases.find(switchCase => switchCase.test == null);
|
|
74
|
+
const discriminantType = (0, util_1.getConstrainedTypeAtLocation)(services, node.discriminant);
|
|
75
|
+
const symbolName = discriminantType.getSymbol()?.escapedName;
|
|
76
|
+
if (!discriminantType.isUnion()) {
|
|
77
|
+
return {
|
|
78
|
+
symbolName,
|
|
79
|
+
missingBranchTypes: [],
|
|
80
|
+
defaultCase,
|
|
81
|
+
isUnion: false,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
const caseTypes = new Set();
|
|
85
|
+
for (const switchCase of node.cases) {
|
|
86
|
+
// If the `test` property of the switch case is `null`, then we are on a
|
|
87
|
+
// `default` case.
|
|
88
|
+
if (switchCase.test == null) {
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
const caseType = (0, util_1.getConstrainedTypeAtLocation)(services, switchCase.test);
|
|
92
|
+
caseTypes.add(caseType);
|
|
93
|
+
}
|
|
94
|
+
const unionTypes = tsutils.unionTypeParts(discriminantType);
|
|
95
|
+
const missingBranchTypes = unionTypes.filter(unionType => !caseTypes.has(unionType));
|
|
96
|
+
return {
|
|
97
|
+
symbolName,
|
|
98
|
+
missingBranchTypes,
|
|
99
|
+
defaultCase,
|
|
100
|
+
isUnion: true,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
function checkSwitchExhaustive(node, switchMetadata) {
|
|
104
|
+
const { missingBranchTypes, symbolName, defaultCase } = switchMetadata;
|
|
105
|
+
// We only trigger the rule if a `default` case does not exist, since that
|
|
106
|
+
// would disqualify the switch statement from having cases that exactly
|
|
107
|
+
// match the members of a union.
|
|
108
|
+
if (missingBranchTypes.length > 0 && defaultCase === undefined) {
|
|
109
|
+
context.report({
|
|
110
|
+
node: node.discriminant,
|
|
111
|
+
messageId: 'switchIsNotExhaustive',
|
|
112
|
+
data: {
|
|
113
|
+
missingBranches: missingBranchTypes
|
|
114
|
+
.map(missingType => tsutils.isTypeFlagSet(missingType, ts.TypeFlags.ESSymbolLike)
|
|
115
|
+
? `typeof ${missingType.getSymbol()?.escapedName}`
|
|
116
|
+
: checker.typeToString(missingType))
|
|
117
|
+
.join(' | '),
|
|
118
|
+
},
|
|
119
|
+
suggest: [
|
|
120
|
+
{
|
|
121
|
+
messageId: 'addMissingCases',
|
|
122
|
+
fix(fixer) {
|
|
123
|
+
return fixSwitch(fixer, node, missingBranchTypes, symbolName?.toString());
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
],
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
}
|
|
62
130
|
function fixSwitch(fixer, node, missingBranchTypes, // null means default branch
|
|
63
131
|
symbolName) {
|
|
64
132
|
const lastCase = node.cases.length > 0 ? node.cases[node.cases.length - 1] : null;
|
|
65
133
|
const caseIndent = lastCase
|
|
66
134
|
? ' '.repeat(lastCase.loc.start.column)
|
|
67
|
-
: //
|
|
68
|
-
//
|
|
135
|
+
: // If there are no cases, use indentation of the switch statement and
|
|
136
|
+
// leave it to the user to format it correctly.
|
|
69
137
|
' '.repeat(node.loc.start.column);
|
|
70
138
|
const missingCases = [];
|
|
71
139
|
for (const missingBranchType of missingBranchTypes) {
|
|
@@ -73,14 +141,16 @@ exports.default = (0, util_1.createRule)({
|
|
|
73
141
|
missingCases.push(`default: { throw new Error('default case') }`);
|
|
74
142
|
continue;
|
|
75
143
|
}
|
|
76
|
-
// While running this rule on checker.ts of TypeScript
|
|
144
|
+
// While running this rule on the "checker.ts" file of TypeScript, the
|
|
77
145
|
// the fix introduced a compiler error due to:
|
|
78
146
|
//
|
|
147
|
+
// ```ts
|
|
79
148
|
// type __String = (string & {
|
|
80
|
-
//
|
|
81
|
-
//
|
|
82
|
-
//
|
|
83
|
-
//
|
|
149
|
+
// __escapedIdentifier: void;
|
|
150
|
+
// }) | (void & {
|
|
151
|
+
// __escapedIdentifier: void;
|
|
152
|
+
// }) | InternalSymbolName;
|
|
153
|
+
// ```
|
|
84
154
|
//
|
|
85
155
|
// The following check fixes it.
|
|
86
156
|
if (missingBranchType.isIntersection()) {
|
|
@@ -107,72 +177,53 @@ exports.default = (0, util_1.createRule)({
|
|
|
107
177
|
if (lastCase) {
|
|
108
178
|
return fixer.insertTextAfter(lastCase, `\n${fixString}`);
|
|
109
179
|
}
|
|
110
|
-
//
|
|
180
|
+
// There were no existing cases.
|
|
111
181
|
const openingBrace = sourceCode.getTokenAfter(node.discriminant, util_1.isOpeningBraceToken);
|
|
112
182
|
const closingBrace = sourceCode.getTokenAfter(node.discriminant, util_1.isClosingBraceToken);
|
|
113
183
|
return fixer.replaceTextRange([openingBrace.range[0], closingBrace.range[1]], ['{', fixString, `${caseIndent}}`].join('\n'));
|
|
114
184
|
}
|
|
115
|
-
function
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
185
|
+
function checkSwitchUnnecessaryDefaultCase(switchMetadata) {
|
|
186
|
+
if (allowDefaultCaseForExhaustiveSwitch) {
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
const { missingBranchTypes, defaultCase } = switchMetadata;
|
|
190
|
+
if (missingBranchTypes.length === 0 && defaultCase !== undefined) {
|
|
191
|
+
context.report({
|
|
192
|
+
node: defaultCase,
|
|
193
|
+
messageId: 'dangerousDefaultCase',
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
function checkSwitchNoUnionDefaultCase(node, switchMetadata) {
|
|
198
|
+
if (!requireDefaultForNonUnion) {
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
const { isUnion, defaultCase } = switchMetadata;
|
|
202
|
+
if (!isUnion && defaultCase === undefined) {
|
|
133
203
|
context.report({
|
|
134
204
|
node: node.discriminant,
|
|
135
205
|
messageId: 'switchIsNotExhaustive',
|
|
136
206
|
data: {
|
|
137
|
-
missingBranches:
|
|
138
|
-
.map(missingType => tsutils.isTypeFlagSet(missingType, ts.TypeFlags.ESSymbolLike)
|
|
139
|
-
? `typeof ${missingType.getSymbol()?.escapedName}`
|
|
140
|
-
: checker.typeToString(missingType))
|
|
141
|
-
.join(' | '),
|
|
207
|
+
missingBranches: 'default',
|
|
142
208
|
},
|
|
143
209
|
suggest: [
|
|
144
210
|
{
|
|
145
211
|
messageId: 'addMissingCases',
|
|
146
212
|
fix(fixer) {
|
|
147
|
-
return fixSwitch(fixer, node,
|
|
213
|
+
return fixSwitch(fixer, node, [null]);
|
|
148
214
|
},
|
|
149
215
|
},
|
|
150
216
|
],
|
|
151
217
|
});
|
|
152
218
|
}
|
|
153
|
-
else if (requireDefaultForNonUnion) {
|
|
154
|
-
const hasDefault = node.cases.some(switchCase => switchCase.test == null);
|
|
155
|
-
if (!hasDefault) {
|
|
156
|
-
context.report({
|
|
157
|
-
node: node.discriminant,
|
|
158
|
-
messageId: 'switchIsNotExhaustive',
|
|
159
|
-
data: {
|
|
160
|
-
missingBranches: 'default',
|
|
161
|
-
},
|
|
162
|
-
suggest: [
|
|
163
|
-
{
|
|
164
|
-
messageId: 'addMissingCases',
|
|
165
|
-
fix(fixer) {
|
|
166
|
-
return fixSwitch(fixer, node, [null]);
|
|
167
|
-
},
|
|
168
|
-
},
|
|
169
|
-
],
|
|
170
|
-
});
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
219
|
}
|
|
174
220
|
return {
|
|
175
|
-
SwitchStatement
|
|
221
|
+
SwitchStatement(node) {
|
|
222
|
+
const switchMetadata = getSwitchMetadata(node);
|
|
223
|
+
checkSwitchExhaustive(node, switchMetadata);
|
|
224
|
+
checkSwitchUnnecessaryDefaultCase(switchMetadata);
|
|
225
|
+
checkSwitchNoUnionDefaultCase(node, switchMetadata);
|
|
226
|
+
},
|
|
176
227
|
};
|
|
177
228
|
},
|
|
178
229
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"switch-exhaustiveness-check.js","sourceRoot":"","sources":["../../src/rules/switch-exhaustiveness-check.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AACA,wEAAsE;AACtE,sDAAwC;AACxC,+CAAiC;AAEjC,kCAOiB;
|
|
1
|
+
{"version":3,"file":"switch-exhaustiveness-check.js","sourceRoot":"","sources":["../../src/rules/switch-exhaustiveness-check.ts"],"names":[],"mappings":"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"}
|
|
@@ -56,6 +56,8 @@ function getRules(rules, node) {
|
|
|
56
56
|
exports.default = (0, util_1.createRule)({
|
|
57
57
|
name: 'type-annotation-spacing',
|
|
58
58
|
meta: {
|
|
59
|
+
deprecated: true,
|
|
60
|
+
replacedBy: ['@stylistic/ts/type-annotation-spacing'],
|
|
59
61
|
type: 'layout',
|
|
60
62
|
docs: {
|
|
61
63
|
description: 'Require consistent spacing around type annotations',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type-annotation-spacing.js","sourceRoot":"","sources":["../../src/rules/type-annotation-spacing.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"type-annotation-spacing.js","sourceRoot":"","sources":["../../src/rules/type-annotation-spacing.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,51 +29,16 @@ const tsutils = __importStar(require("ts-api-utils"));
|
|
|
29
29
|
const ts = __importStar(require("typescript"));
|
|
30
30
|
const util_1 = require("../util");
|
|
31
31
|
/**
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
!name.startsWith('_') &&
|
|
42
|
-
typeof object[name] === 'function',
|
|
43
|
-
)
|
|
44
|
-
.map(name => {
|
|
45
|
-
try {
|
|
46
|
-
const x = object[name];
|
|
47
|
-
x();
|
|
48
|
-
} catch (e) {
|
|
49
|
-
if (e.message.includes("called on non-object")) {
|
|
50
|
-
return `${namespace}.${name}`;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
});
|
|
54
|
-
}).filter(Boolean);
|
|
55
|
-
* ```
|
|
32
|
+
* Static methods on these globals are either not `this`-aware or supported being
|
|
33
|
+
* called without `this`.
|
|
34
|
+
*
|
|
35
|
+
* - `Promise` is not in the list because it supports subclassing by using `this`
|
|
36
|
+
* - `Array` is in the list because although it supports subclassing, the `this`
|
|
37
|
+
* value defaults to `Array` when unbound
|
|
38
|
+
*
|
|
39
|
+
* This is now a language-design invariant: static methods are never `this`-aware
|
|
40
|
+
* because TC39 wants to make `array.map(Class.method)` work!
|
|
56
41
|
*/
|
|
57
|
-
const nativelyNotBoundMembers = new Set([
|
|
58
|
-
'Promise.all',
|
|
59
|
-
'Promise.race',
|
|
60
|
-
'Promise.resolve',
|
|
61
|
-
'Promise.reject',
|
|
62
|
-
'Promise.allSettled',
|
|
63
|
-
'Object.defineProperties',
|
|
64
|
-
'Object.defineProperty',
|
|
65
|
-
'Reflect.defineProperty',
|
|
66
|
-
'Reflect.deleteProperty',
|
|
67
|
-
'Reflect.get',
|
|
68
|
-
'Reflect.getOwnPropertyDescriptor',
|
|
69
|
-
'Reflect.getPrototypeOf',
|
|
70
|
-
'Reflect.has',
|
|
71
|
-
'Reflect.isExtensible',
|
|
72
|
-
'Reflect.ownKeys',
|
|
73
|
-
'Reflect.preventExtensions',
|
|
74
|
-
'Reflect.set',
|
|
75
|
-
'Reflect.setPrototypeOf',
|
|
76
|
-
]);
|
|
77
42
|
const SUPPORTED_GLOBALS = [
|
|
78
43
|
'Number',
|
|
79
44
|
'Object',
|
|
@@ -83,7 +48,6 @@ const SUPPORTED_GLOBALS = [
|
|
|
83
48
|
'Array',
|
|
84
49
|
'Proxy',
|
|
85
50
|
'Date',
|
|
86
|
-
'Infinity',
|
|
87
51
|
'Atomics',
|
|
88
52
|
'Reflect',
|
|
89
53
|
'console',
|
|
@@ -91,7 +55,7 @@ const SUPPORTED_GLOBALS = [
|
|
|
91
55
|
'JSON',
|
|
92
56
|
'Intl',
|
|
93
57
|
];
|
|
94
|
-
const nativelyBoundMembers = SUPPORTED_GLOBALS.
|
|
58
|
+
const nativelyBoundMembers = new Set(SUPPORTED_GLOBALS.flatMap(namespace => {
|
|
95
59
|
if (!(namespace in global)) {
|
|
96
60
|
// node.js might not have namespaces like Intl depending on compilation options
|
|
97
61
|
// https://nodejs.org/api/intl.html#intl_options_for_building_node_js
|
|
@@ -102,9 +66,7 @@ const nativelyBoundMembers = SUPPORTED_GLOBALS.map(namespace => {
|
|
|
102
66
|
.filter(name => !name.startsWith('_') &&
|
|
103
67
|
typeof object[name] === 'function')
|
|
104
68
|
.map(name => `${namespace}.${name}`);
|
|
105
|
-
})
|
|
106
|
-
.reduce((arr, names) => arr.concat(names), [])
|
|
107
|
-
.filter(name => !nativelyNotBoundMembers.has(name));
|
|
69
|
+
}));
|
|
108
70
|
const isNotImported = (symbol, currentSourceFile) => {
|
|
109
71
|
const { valueDeclaration } = symbol;
|
|
110
72
|
if (!valueDeclaration) {
|
|
@@ -174,7 +136,7 @@ exports.default = (0, util_1.createRule)({
|
|
|
174
136
|
}
|
|
175
137
|
const objectSymbol = services.getSymbolAtLocation(node.object);
|
|
176
138
|
if (objectSymbol &&
|
|
177
|
-
nativelyBoundMembers.
|
|
139
|
+
nativelyBoundMembers.has(getMemberFullName(node)) &&
|
|
178
140
|
isNotImported(objectSymbol, currentSourceFile)) {
|
|
179
141
|
return;
|
|
180
142
|
}
|
|
@@ -193,7 +155,7 @@ exports.default = (0, util_1.createRule)({
|
|
|
193
155
|
property.key.type === utils_1.AST_NODE_TYPES.Identifier) {
|
|
194
156
|
if (notImported &&
|
|
195
157
|
(0, util_1.isIdentifier)(initNode) &&
|
|
196
|
-
nativelyBoundMembers.
|
|
158
|
+
nativelyBoundMembers.has(`${initNode.name}.${property.key.name}`)) {
|
|
197
159
|
return;
|
|
198
160
|
}
|
|
199
161
|
checkMethodAndReport(property.key, initTypes.getProperty(property.key.name));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unbound-method.js","sourceRoot":"","sources":["../../src/rules/unbound-method.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AACA,oDAA0D;AAC1D,wEAAoE;AACpE,sDAAwC;AACxC,+CAAiC;AAEjC,kCAKiB;AAcjB
|
|
1
|
+
{"version":3,"file":"unbound-method.js","sourceRoot":"","sources":["../../src/rules/unbound-method.ts"],"names":[],"mappings":"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"}
|
|
@@ -164,7 +164,7 @@ class Animal {
|
|
|
164
164
|
}
|
|
165
165
|
```
|
|
166
166
|
|
|
167
|
-
###
|
|
167
|
+
### `overrides`
|
|
168
168
|
|
|
169
169
|
There are three ways in which an override can be used.
|
|
170
170
|
|
|
@@ -312,7 +312,7 @@ class Animal {
|
|
|
312
312
|
}
|
|
313
313
|
```
|
|
314
314
|
|
|
315
|
-
###
|
|
315
|
+
### `ignoredMethodNames`
|
|
316
316
|
|
|
317
317
|
If you want to ignore some specific methods, you can do it by specifying method names. Note that this option does not care for the context, and will ignore every method with these names, which could lead to it missing some cases. You should use this sparingly.
|
|
318
318
|
e.g. `[ { ignoredMethodNames: ['specificMethod', 'whateverMethod'] } ]`
|
|
@@ -22,11 +22,6 @@ export function test() {
|
|
|
22
22
|
return;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
// Should indicate that a number is returned
|
|
26
|
-
export default function () {
|
|
27
|
-
return 1;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
25
|
// Should indicate that a string is returned
|
|
31
26
|
export var arrowFn = () => 'test';
|
|
32
27
|
|
|
@@ -45,16 +40,11 @@ export class Test {
|
|
|
45
40
|
### ✅ Correct
|
|
46
41
|
|
|
47
42
|
```ts
|
|
48
|
-
//
|
|
49
|
-
function test() {
|
|
43
|
+
// A function with no return value (void)
|
|
44
|
+
export function test(): void {
|
|
50
45
|
return;
|
|
51
46
|
}
|
|
52
47
|
|
|
53
|
-
// A return value of type number
|
|
54
|
-
export var fn = function (): number {
|
|
55
|
-
return 1;
|
|
56
|
-
};
|
|
57
|
-
|
|
58
48
|
// A return value of type string
|
|
59
49
|
export var arrowFn = (): string => 'test';
|
|
60
50
|
|
|
@@ -62,12 +52,17 @@ export var arrowFn = (): string => 'test';
|
|
|
62
52
|
export var arrowFn = (arg: string): string => `test ${arg}`;
|
|
63
53
|
export var arrowFn = (arg: unknown): string => `test ${arg}`;
|
|
64
54
|
|
|
65
|
-
|
|
66
|
-
class
|
|
67
|
-
method() {
|
|
55
|
+
export class Test {
|
|
56
|
+
// A class method with no return value (void)
|
|
57
|
+
method(): void {
|
|
68
58
|
return;
|
|
69
59
|
}
|
|
70
60
|
}
|
|
61
|
+
|
|
62
|
+
// The function does not apply because it is not an exported function.
|
|
63
|
+
function test() {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
71
66
|
```
|
|
72
67
|
|
|
73
68
|
## Options
|
|
@@ -50,20 +50,9 @@ interface Baz extends Foo, Bar {}
|
|
|
50
50
|
|
|
51
51
|
## Options
|
|
52
52
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
```json
|
|
56
|
-
{
|
|
57
|
-
"@typescript-eslint/no-empty-interface": [
|
|
58
|
-
"error",
|
|
59
|
-
{
|
|
60
|
-
"allowSingleExtends": false
|
|
61
|
-
}
|
|
62
|
-
]
|
|
63
|
-
}
|
|
64
|
-
```
|
|
53
|
+
### `allowSingleExtends`
|
|
65
54
|
|
|
66
|
-
|
|
55
|
+
`allowSingleExtends: true` will silence warnings about extending a single interface without adding additional members
|
|
67
56
|
|
|
68
57
|
## When Not To Use It
|
|
69
58
|
|
|
@@ -94,6 +94,13 @@ function greet(param: Array<string>): Array<string> {}
|
|
|
94
94
|
|
|
95
95
|
## Options
|
|
96
96
|
|
|
97
|
+
### `fixToUnknown`
|
|
98
|
+
|
|
99
|
+
By default, this rule will not provide automatic ESLint _fixes_: only opt-in _suggestions_.
|
|
100
|
+
Switching types to `unknown` is safer but is likely to cause additional type errors.
|
|
101
|
+
|
|
102
|
+
Enabling `{ "fixToUnknown": true }` gives the rule an auto-fixer to replace `: any` with `: unknown`.
|
|
103
|
+
|
|
97
104
|
### `ignoreRestArgs`
|
|
98
105
|
|
|
99
106
|
A boolean to specify if arrays from the rest operator are considered okay. `false` by default.
|
|
@@ -17,6 +17,13 @@ Valid ways of handling a Promise-valued statement include:
|
|
|
17
17
|
- Calling its `.then()` with two arguments
|
|
18
18
|
- Calling its `.catch()` with one argument
|
|
19
19
|
|
|
20
|
+
This rule also reports when an Array containing Promises is created and not properly handled. The main way to resolve this is by using one of the Promise concurrency methods to create a single Promise, then handling that according to the procedure above. These methods include:
|
|
21
|
+
|
|
22
|
+
- `Promise.all()`,
|
|
23
|
+
- `Promise.allSettled()`,
|
|
24
|
+
- `Promise.any()`
|
|
25
|
+
- `Promise.race()`
|
|
26
|
+
|
|
20
27
|
:::tip
|
|
21
28
|
`no-floating-promises` only detects unhandled Promise _statements_.
|
|
22
29
|
See [`no-misused-promises`](./no-misused-promises.md) for detecting code that provides Promises to _logical_ locations such as if statements.
|
|
@@ -40,6 +47,8 @@ returnsPromise().then(() => {});
|
|
|
40
47
|
Promise.reject('value').catch();
|
|
41
48
|
|
|
42
49
|
Promise.reject('value').finally();
|
|
50
|
+
|
|
51
|
+
[1, 2, 3].map(async x => x + 1);
|
|
43
52
|
```
|
|
44
53
|
|
|
45
54
|
### ✅ Correct
|
|
@@ -59,6 +68,8 @@ returnsPromise().then(
|
|
|
59
68
|
Promise.reject('value').catch(() => {});
|
|
60
69
|
|
|
61
70
|
await Promise.reject('value').finally(() => {});
|
|
71
|
+
|
|
72
|
+
await Promise.all([1, 2, 3].map(async x => x + 1));
|
|
62
73
|
```
|
|
63
74
|
|
|
64
75
|
## Options
|
|
@@ -106,3 +117,7 @@ You might consider using `void`s and/or [ESLint disable comments](https://eslint
|
|
|
106
117
|
## Related To
|
|
107
118
|
|
|
108
119
|
- [`no-misused-promises`](./no-misused-promises.md)
|
|
120
|
+
|
|
121
|
+
## Further Reading
|
|
122
|
+
|
|
123
|
+
- ["Using Promises" MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises). Note especially the sections on [Promise rejection events](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises#promise_rejection_events) and [Composition](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises#composition).
|
|
@@ -6,10 +6,14 @@ description: 'Disallow iterating over an array with a for-in loop.'
|
|
|
6
6
|
>
|
|
7
7
|
> See **https://typescript-eslint.io/rules/no-for-in-array** for documentation.
|
|
8
8
|
|
|
9
|
-
A for-in loop (`for (
|
|
10
|
-
While it is legal to use for-in loops with array
|
|
11
|
-
|
|
12
|
-
the array.
|
|
9
|
+
A for-in loop (`for (const i in o)`) iterates over the properties of an Object.
|
|
10
|
+
While it is legal to use for-in loops with array values, it is not common. There are several potential bugs with this:
|
|
11
|
+
|
|
12
|
+
1. It iterates over all enumerable properties, including non-index ones and the entire prototype chain. For example, [`RegExp.prototype.exec`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec) returns an array with additional properties, and `for-in` will iterate over them. Some libraries or even your own code may add additional methods to `Array.prototype` (either as polyfill or as custom methods), and if not done properly, they may be iterated over as well.
|
|
13
|
+
2. It skips holes in the array. While sparse arrays are rare and advised against, they are still possible and your code should be able to handle them.
|
|
14
|
+
3. The "index" is returned as a string, not a number. This can be caught by TypeScript, but can still lead to subtle bugs.
|
|
15
|
+
|
|
16
|
+
You may have confused for-in with for-of, which iterates over the elements of the array. If you actually need the index, use a regular `for` loop or the `forEach` method.
|
|
13
17
|
|
|
14
18
|
## Examples
|
|
15
19
|
|