1 | 'use strict';
|
2 |
|
3 | const {
|
4 | getDocsUrl,
|
5 | expectCase,
|
6 | expectNotCase,
|
7 | expectResolveCase,
|
8 | expectRejectCase,
|
9 | method,
|
10 | } = require('./util');
|
11 |
|
12 | module.exports = {
|
13 | meta: {
|
14 | docs: {
|
15 | url: getDocsUrl(__filename),
|
16 | },
|
17 | fixable: 'code',
|
18 | },
|
19 | create(context) {
|
20 | return {
|
21 | CallExpression(node) {
|
22 | if (
|
23 | !(
|
24 | expectNotCase(node) ||
|
25 | expectResolveCase(node) ||
|
26 | expectRejectCase(node)
|
27 | ) &&
|
28 | expectCase(node) &&
|
29 | (method(node).name === 'toBe' || method(node).name === 'toEqual') &&
|
30 | node.arguments[0].property &&
|
31 | node.arguments[0].property.name === 'length'
|
32 | ) {
|
33 | const propertyDot = context
|
34 | .getSourceCode()
|
35 | .getFirstTokenBetween(
|
36 | node.arguments[0].object,
|
37 | node.arguments[0].property,
|
38 | token => token.value === '.'
|
39 | );
|
40 | context.report({
|
41 | fix(fixer) {
|
42 | return [
|
43 | fixer.remove(propertyDot),
|
44 | fixer.remove(node.arguments[0].property),
|
45 | fixer.replaceText(method(node), 'toHaveLength'),
|
46 | ];
|
47 | },
|
48 | message: 'Use toHaveLength() instead',
|
49 | node: method(node),
|
50 | });
|
51 | }
|
52 | },
|
53 | };
|
54 | },
|
55 | };
|