@vitest/eslint-plugin 1.1.13 → 1.1.15
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/README.md +1 -0
- package/dist/index.cjs +72 -31
- package/dist/index.mjs +72 -31
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -206,6 +206,7 @@ export default [
|
|
|
206
206
|
| [valid-describe-callback](docs/rules/valid-describe-callback.md) | enforce valid describe callback | ✅ | 🌐 | | | |
|
|
207
207
|
| [valid-expect](docs/rules/valid-expect.md) | enforce valid `expect()` usage | ✅ | 🌐 | 🔧 | | |
|
|
208
208
|
| [valid-title](docs/rules/valid-title.md) | enforce valid titles | ✅ | 🌐 | 🔧 | | |
|
|
209
|
+
| [valid-expect-in-promise](docs/rules/valid-expect-in-promise.md) | require promises that have expectations in their chain to be valid | | 🌐 | | | |
|
|
209
210
|
|
|
210
211
|
<!-- end auto-generated rules list -->
|
|
211
212
|
|
package/dist/index.cjs
CHANGED
|
@@ -23,7 +23,7 @@ function _interopNamespaceCompat(e) {
|
|
|
23
23
|
const path__namespace = /*#__PURE__*/_interopNamespaceCompat(path);
|
|
24
24
|
const ts__default = /*#__PURE__*/_interopDefaultCompat(ts);
|
|
25
25
|
|
|
26
|
-
const version = "1.1.
|
|
26
|
+
const version = "1.1.14";
|
|
27
27
|
|
|
28
28
|
function createEslintRule(rule) {
|
|
29
29
|
const createRule = utils.ESLintUtils.RuleCreator(
|
|
@@ -3377,6 +3377,19 @@ const paramsLocation = (params) => {
|
|
|
3377
3377
|
end: last.loc.end
|
|
3378
3378
|
};
|
|
3379
3379
|
};
|
|
3380
|
+
const hasNonEachMembersAndParams = (vitestFnCall, functionExpression) => {
|
|
3381
|
+
return vitestFnCall.members.every((s) => getAccessorValue(s) !== "each") && functionExpression.params.length;
|
|
3382
|
+
};
|
|
3383
|
+
const reportUnexpectedReturnInDescribe = (blockStatement, context) => {
|
|
3384
|
+
blockStatement.body.forEach((node) => {
|
|
3385
|
+
if (node.type !== utils.AST_NODE_TYPES.ReturnStatement)
|
|
3386
|
+
return;
|
|
3387
|
+
context.report({
|
|
3388
|
+
messageId: "unexpectedReturnInDescribe",
|
|
3389
|
+
node
|
|
3390
|
+
});
|
|
3391
|
+
});
|
|
3392
|
+
};
|
|
3380
3393
|
const validDescribeCallback = createEslintRule({
|
|
3381
3394
|
name: RULE_NAME$i,
|
|
3382
3395
|
meta: {
|
|
@@ -3408,42 +3421,53 @@ const validDescribeCallback = createEslintRule({
|
|
|
3408
3421
|
loc: node.loc
|
|
3409
3422
|
});
|
|
3410
3423
|
}
|
|
3411
|
-
const [,
|
|
3412
|
-
if (!
|
|
3424
|
+
const [, arg2, arg3] = node.arguments;
|
|
3425
|
+
if (!arg2) {
|
|
3413
3426
|
context.report({
|
|
3414
3427
|
messageId: "nameAndCallback",
|
|
3415
3428
|
loc: paramsLocation(node.arguments)
|
|
3416
3429
|
});
|
|
3417
3430
|
return;
|
|
3418
3431
|
}
|
|
3419
|
-
if (!isFunction(
|
|
3432
|
+
if (!isFunction(arg2)) {
|
|
3433
|
+
if (arg3 && isFunction(arg3)) {
|
|
3434
|
+
if (hasNonEachMembersAndParams(vitestFnCall, arg3)) {
|
|
3435
|
+
context.report({
|
|
3436
|
+
messageId: "unexpectedDescribeArgument",
|
|
3437
|
+
node: arg3
|
|
3438
|
+
});
|
|
3439
|
+
}
|
|
3440
|
+
if (arg3.body.type === utils.AST_NODE_TYPES.CallExpression) {
|
|
3441
|
+
context.report({
|
|
3442
|
+
messageId: "unexpectedReturnInDescribe",
|
|
3443
|
+
node: arg3
|
|
3444
|
+
});
|
|
3445
|
+
}
|
|
3446
|
+
if (arg3.body.type === utils.AST_NODE_TYPES.BlockStatement) {
|
|
3447
|
+
reportUnexpectedReturnInDescribe(arg3.body, context);
|
|
3448
|
+
}
|
|
3449
|
+
return;
|
|
3450
|
+
}
|
|
3420
3451
|
context.report({
|
|
3421
3452
|
messageId: "secondArgumentMustBeFunction",
|
|
3422
3453
|
loc: paramsLocation(node.arguments)
|
|
3423
3454
|
});
|
|
3424
3455
|
return;
|
|
3425
3456
|
}
|
|
3426
|
-
if (vitestFnCall
|
|
3457
|
+
if (hasNonEachMembersAndParams(vitestFnCall, arg2)) {
|
|
3427
3458
|
context.report({
|
|
3428
3459
|
messageId: "unexpectedDescribeArgument",
|
|
3429
|
-
node:
|
|
3460
|
+
node: arg2
|
|
3430
3461
|
});
|
|
3431
3462
|
}
|
|
3432
|
-
if (
|
|
3463
|
+
if (arg2.body.type === utils.AST_NODE_TYPES.CallExpression) {
|
|
3433
3464
|
context.report({
|
|
3434
3465
|
messageId: "unexpectedReturnInDescribe",
|
|
3435
|
-
node:
|
|
3466
|
+
node: arg2
|
|
3436
3467
|
});
|
|
3437
3468
|
}
|
|
3438
|
-
if (
|
|
3439
|
-
|
|
3440
|
-
if (node2.type === utils.AST_NODE_TYPES.ReturnStatement) {
|
|
3441
|
-
context.report({
|
|
3442
|
-
messageId: "unexpectedReturnInDescribe",
|
|
3443
|
-
node: node2
|
|
3444
|
-
});
|
|
3445
|
-
}
|
|
3446
|
-
});
|
|
3469
|
+
if (arg2.body.type === utils.AST_NODE_TYPES.BlockStatement) {
|
|
3470
|
+
reportUnexpectedReturnInDescribe(arg2.body, context);
|
|
3447
3471
|
}
|
|
3448
3472
|
}
|
|
3449
3473
|
};
|
|
@@ -4188,13 +4212,14 @@ var StatementType = /* @__PURE__ */ ((StatementType2) => {
|
|
|
4188
4212
|
StatementType2[StatementType2["BeforeEachToken"] = 4] = "BeforeEachToken";
|
|
4189
4213
|
StatementType2[StatementType2["DescribeToken"] = 5] = "DescribeToken";
|
|
4190
4214
|
StatementType2[StatementType2["ExpectToken"] = 6] = "ExpectToken";
|
|
4191
|
-
StatementType2[StatementType2["
|
|
4192
|
-
StatementType2[StatementType2["
|
|
4193
|
-
StatementType2[StatementType2["
|
|
4194
|
-
StatementType2[StatementType2["
|
|
4195
|
-
StatementType2[StatementType2["
|
|
4196
|
-
StatementType2[StatementType2["
|
|
4197
|
-
StatementType2[StatementType2["
|
|
4215
|
+
StatementType2[StatementType2["ExpectTypeOfToken"] = 7] = "ExpectTypeOfToken";
|
|
4216
|
+
StatementType2[StatementType2["FdescribeToken"] = 8] = "FdescribeToken";
|
|
4217
|
+
StatementType2[StatementType2["FitToken"] = 9] = "FitToken";
|
|
4218
|
+
StatementType2[StatementType2["ItToken"] = 10] = "ItToken";
|
|
4219
|
+
StatementType2[StatementType2["TestToken"] = 11] = "TestToken";
|
|
4220
|
+
StatementType2[StatementType2["XdescribeToken"] = 12] = "XdescribeToken";
|
|
4221
|
+
StatementType2[StatementType2["XitToken"] = 13] = "XitToken";
|
|
4222
|
+
StatementType2[StatementType2["XtestToken"] = 14] = "XtestToken";
|
|
4198
4223
|
return StatementType2;
|
|
4199
4224
|
})(StatementType || {});
|
|
4200
4225
|
const paddingAlwaysTester = (prevNode, nextNode, paddingContext) => {
|
|
@@ -4281,13 +4306,14 @@ const statementTesters = {
|
|
|
4281
4306
|
[4 /* BeforeEachToken */]: createTokenTester("beforeEach"),
|
|
4282
4307
|
[5 /* DescribeToken */]: createTokenTester("describe"),
|
|
4283
4308
|
[6 /* ExpectToken */]: createTokenTester("expect"),
|
|
4284
|
-
[7 /*
|
|
4285
|
-
[8 /*
|
|
4286
|
-
[9 /*
|
|
4287
|
-
[10 /*
|
|
4288
|
-
[11 /*
|
|
4289
|
-
[12 /*
|
|
4290
|
-
[13 /*
|
|
4309
|
+
[7 /* ExpectTypeOfToken */]: createTokenTester("expectTypeOf"),
|
|
4310
|
+
[8 /* FdescribeToken */]: createTokenTester("fdescribe"),
|
|
4311
|
+
[9 /* FitToken */]: createTokenTester("fit"),
|
|
4312
|
+
[10 /* ItToken */]: createTokenTester("it"),
|
|
4313
|
+
[11 /* TestToken */]: createTokenTester("test"),
|
|
4314
|
+
[12 /* XdescribeToken */]: createTokenTester("xdescribe"),
|
|
4315
|
+
[13 /* XitToken */]: createTokenTester("xit"),
|
|
4316
|
+
[14 /* XtestToken */]: createTokenTester("xtest")
|
|
4291
4317
|
};
|
|
4292
4318
|
const nodeMatchesType = (node, statementType, paddingContext) => {
|
|
4293
4319
|
let innerStatementNode = node;
|
|
@@ -4469,6 +4495,21 @@ const config$1 = [
|
|
|
4469
4495
|
paddingType: PaddingType.Any,
|
|
4470
4496
|
prevStatementType: StatementType.ExpectToken,
|
|
4471
4497
|
nextStatementType: StatementType.ExpectToken
|
|
4498
|
+
},
|
|
4499
|
+
{
|
|
4500
|
+
paddingType: PaddingType.Always,
|
|
4501
|
+
prevStatementType: StatementType.Any,
|
|
4502
|
+
nextStatementType: StatementType.ExpectTypeOfToken
|
|
4503
|
+
},
|
|
4504
|
+
{
|
|
4505
|
+
paddingType: PaddingType.Always,
|
|
4506
|
+
prevStatementType: StatementType.ExpectTypeOfToken,
|
|
4507
|
+
nextStatementType: StatementType.Any
|
|
4508
|
+
},
|
|
4509
|
+
{
|
|
4510
|
+
paddingType: PaddingType.Any,
|
|
4511
|
+
prevStatementType: StatementType.ExpectTypeOfToken,
|
|
4512
|
+
nextStatementType: StatementType.ExpectTypeOfToken
|
|
4472
4513
|
}
|
|
4473
4514
|
];
|
|
4474
4515
|
const paddingAroundExpectGroups = createPaddingRule(
|
package/dist/index.mjs
CHANGED
|
@@ -4,7 +4,7 @@ import { isAbsolute, posix } from 'node:path';
|
|
|
4
4
|
import ts from 'typescript';
|
|
5
5
|
import { createRequire } from 'node:module';
|
|
6
6
|
|
|
7
|
-
const version = "1.1.
|
|
7
|
+
const version = "1.1.14";
|
|
8
8
|
|
|
9
9
|
function createEslintRule(rule) {
|
|
10
10
|
const createRule = ESLintUtils.RuleCreator(
|
|
@@ -3358,6 +3358,19 @@ const paramsLocation = (params) => {
|
|
|
3358
3358
|
end: last.loc.end
|
|
3359
3359
|
};
|
|
3360
3360
|
};
|
|
3361
|
+
const hasNonEachMembersAndParams = (vitestFnCall, functionExpression) => {
|
|
3362
|
+
return vitestFnCall.members.every((s) => getAccessorValue(s) !== "each") && functionExpression.params.length;
|
|
3363
|
+
};
|
|
3364
|
+
const reportUnexpectedReturnInDescribe = (blockStatement, context) => {
|
|
3365
|
+
blockStatement.body.forEach((node) => {
|
|
3366
|
+
if (node.type !== AST_NODE_TYPES.ReturnStatement)
|
|
3367
|
+
return;
|
|
3368
|
+
context.report({
|
|
3369
|
+
messageId: "unexpectedReturnInDescribe",
|
|
3370
|
+
node
|
|
3371
|
+
});
|
|
3372
|
+
});
|
|
3373
|
+
};
|
|
3361
3374
|
const validDescribeCallback = createEslintRule({
|
|
3362
3375
|
name: RULE_NAME$i,
|
|
3363
3376
|
meta: {
|
|
@@ -3389,42 +3402,53 @@ const validDescribeCallback = createEslintRule({
|
|
|
3389
3402
|
loc: node.loc
|
|
3390
3403
|
});
|
|
3391
3404
|
}
|
|
3392
|
-
const [,
|
|
3393
|
-
if (!
|
|
3405
|
+
const [, arg2, arg3] = node.arguments;
|
|
3406
|
+
if (!arg2) {
|
|
3394
3407
|
context.report({
|
|
3395
3408
|
messageId: "nameAndCallback",
|
|
3396
3409
|
loc: paramsLocation(node.arguments)
|
|
3397
3410
|
});
|
|
3398
3411
|
return;
|
|
3399
3412
|
}
|
|
3400
|
-
if (!isFunction(
|
|
3413
|
+
if (!isFunction(arg2)) {
|
|
3414
|
+
if (arg3 && isFunction(arg3)) {
|
|
3415
|
+
if (hasNonEachMembersAndParams(vitestFnCall, arg3)) {
|
|
3416
|
+
context.report({
|
|
3417
|
+
messageId: "unexpectedDescribeArgument",
|
|
3418
|
+
node: arg3
|
|
3419
|
+
});
|
|
3420
|
+
}
|
|
3421
|
+
if (arg3.body.type === AST_NODE_TYPES.CallExpression) {
|
|
3422
|
+
context.report({
|
|
3423
|
+
messageId: "unexpectedReturnInDescribe",
|
|
3424
|
+
node: arg3
|
|
3425
|
+
});
|
|
3426
|
+
}
|
|
3427
|
+
if (arg3.body.type === AST_NODE_TYPES.BlockStatement) {
|
|
3428
|
+
reportUnexpectedReturnInDescribe(arg3.body, context);
|
|
3429
|
+
}
|
|
3430
|
+
return;
|
|
3431
|
+
}
|
|
3401
3432
|
context.report({
|
|
3402
3433
|
messageId: "secondArgumentMustBeFunction",
|
|
3403
3434
|
loc: paramsLocation(node.arguments)
|
|
3404
3435
|
});
|
|
3405
3436
|
return;
|
|
3406
3437
|
}
|
|
3407
|
-
if (vitestFnCall
|
|
3438
|
+
if (hasNonEachMembersAndParams(vitestFnCall, arg2)) {
|
|
3408
3439
|
context.report({
|
|
3409
3440
|
messageId: "unexpectedDescribeArgument",
|
|
3410
|
-
node:
|
|
3441
|
+
node: arg2
|
|
3411
3442
|
});
|
|
3412
3443
|
}
|
|
3413
|
-
if (
|
|
3444
|
+
if (arg2.body.type === AST_NODE_TYPES.CallExpression) {
|
|
3414
3445
|
context.report({
|
|
3415
3446
|
messageId: "unexpectedReturnInDescribe",
|
|
3416
|
-
node:
|
|
3447
|
+
node: arg2
|
|
3417
3448
|
});
|
|
3418
3449
|
}
|
|
3419
|
-
if (
|
|
3420
|
-
|
|
3421
|
-
if (node2.type === AST_NODE_TYPES.ReturnStatement) {
|
|
3422
|
-
context.report({
|
|
3423
|
-
messageId: "unexpectedReturnInDescribe",
|
|
3424
|
-
node: node2
|
|
3425
|
-
});
|
|
3426
|
-
}
|
|
3427
|
-
});
|
|
3450
|
+
if (arg2.body.type === AST_NODE_TYPES.BlockStatement) {
|
|
3451
|
+
reportUnexpectedReturnInDescribe(arg2.body, context);
|
|
3428
3452
|
}
|
|
3429
3453
|
}
|
|
3430
3454
|
};
|
|
@@ -4169,13 +4193,14 @@ var StatementType = /* @__PURE__ */ ((StatementType2) => {
|
|
|
4169
4193
|
StatementType2[StatementType2["BeforeEachToken"] = 4] = "BeforeEachToken";
|
|
4170
4194
|
StatementType2[StatementType2["DescribeToken"] = 5] = "DescribeToken";
|
|
4171
4195
|
StatementType2[StatementType2["ExpectToken"] = 6] = "ExpectToken";
|
|
4172
|
-
StatementType2[StatementType2["
|
|
4173
|
-
StatementType2[StatementType2["
|
|
4174
|
-
StatementType2[StatementType2["
|
|
4175
|
-
StatementType2[StatementType2["
|
|
4176
|
-
StatementType2[StatementType2["
|
|
4177
|
-
StatementType2[StatementType2["
|
|
4178
|
-
StatementType2[StatementType2["
|
|
4196
|
+
StatementType2[StatementType2["ExpectTypeOfToken"] = 7] = "ExpectTypeOfToken";
|
|
4197
|
+
StatementType2[StatementType2["FdescribeToken"] = 8] = "FdescribeToken";
|
|
4198
|
+
StatementType2[StatementType2["FitToken"] = 9] = "FitToken";
|
|
4199
|
+
StatementType2[StatementType2["ItToken"] = 10] = "ItToken";
|
|
4200
|
+
StatementType2[StatementType2["TestToken"] = 11] = "TestToken";
|
|
4201
|
+
StatementType2[StatementType2["XdescribeToken"] = 12] = "XdescribeToken";
|
|
4202
|
+
StatementType2[StatementType2["XitToken"] = 13] = "XitToken";
|
|
4203
|
+
StatementType2[StatementType2["XtestToken"] = 14] = "XtestToken";
|
|
4179
4204
|
return StatementType2;
|
|
4180
4205
|
})(StatementType || {});
|
|
4181
4206
|
const paddingAlwaysTester = (prevNode, nextNode, paddingContext) => {
|
|
@@ -4262,13 +4287,14 @@ const statementTesters = {
|
|
|
4262
4287
|
[4 /* BeforeEachToken */]: createTokenTester("beforeEach"),
|
|
4263
4288
|
[5 /* DescribeToken */]: createTokenTester("describe"),
|
|
4264
4289
|
[6 /* ExpectToken */]: createTokenTester("expect"),
|
|
4265
|
-
[7 /*
|
|
4266
|
-
[8 /*
|
|
4267
|
-
[9 /*
|
|
4268
|
-
[10 /*
|
|
4269
|
-
[11 /*
|
|
4270
|
-
[12 /*
|
|
4271
|
-
[13 /*
|
|
4290
|
+
[7 /* ExpectTypeOfToken */]: createTokenTester("expectTypeOf"),
|
|
4291
|
+
[8 /* FdescribeToken */]: createTokenTester("fdescribe"),
|
|
4292
|
+
[9 /* FitToken */]: createTokenTester("fit"),
|
|
4293
|
+
[10 /* ItToken */]: createTokenTester("it"),
|
|
4294
|
+
[11 /* TestToken */]: createTokenTester("test"),
|
|
4295
|
+
[12 /* XdescribeToken */]: createTokenTester("xdescribe"),
|
|
4296
|
+
[13 /* XitToken */]: createTokenTester("xit"),
|
|
4297
|
+
[14 /* XtestToken */]: createTokenTester("xtest")
|
|
4272
4298
|
};
|
|
4273
4299
|
const nodeMatchesType = (node, statementType, paddingContext) => {
|
|
4274
4300
|
let innerStatementNode = node;
|
|
@@ -4450,6 +4476,21 @@ const config$1 = [
|
|
|
4450
4476
|
paddingType: PaddingType.Any,
|
|
4451
4477
|
prevStatementType: StatementType.ExpectToken,
|
|
4452
4478
|
nextStatementType: StatementType.ExpectToken
|
|
4479
|
+
},
|
|
4480
|
+
{
|
|
4481
|
+
paddingType: PaddingType.Always,
|
|
4482
|
+
prevStatementType: StatementType.Any,
|
|
4483
|
+
nextStatementType: StatementType.ExpectTypeOfToken
|
|
4484
|
+
},
|
|
4485
|
+
{
|
|
4486
|
+
paddingType: PaddingType.Always,
|
|
4487
|
+
prevStatementType: StatementType.ExpectTypeOfToken,
|
|
4488
|
+
nextStatementType: StatementType.Any
|
|
4489
|
+
},
|
|
4490
|
+
{
|
|
4491
|
+
paddingType: PaddingType.Any,
|
|
4492
|
+
prevStatementType: StatementType.ExpectTypeOfToken,
|
|
4493
|
+
nextStatementType: StatementType.ExpectTypeOfToken
|
|
4453
4494
|
}
|
|
4454
4495
|
];
|
|
4455
4496
|
const paddingAroundExpectGroups = createPaddingRule(
|