@@ -15,6 +15,66 @@ export const createRule = ESLintUtils.RuleCreator(name => {
15
15
return `${ REPO_URL } /blob/v${ version } /docs/rules/${ ruleName } .md` ;
16
16
} ) ;
17
17
18
+ interface JestExpectIdentifier extends TSESTree . Identifier {
19
+ name : 'expect' ;
20
+ }
21
+
22
+ /**
23
+ * Checks if the given `node` is considered a {@link JestExpectIdentifier}.
24
+ *
25
+ * A `node` is considered to be as such if it is of type `Identifier`,
26
+ * and `name`d `"expect"`.
27
+ *
28
+ * @param {Node } node
29
+ *
30
+ * @return {node is JestExpectIdentifier }
31
+ */
32
+ const isExpectIdentifier = (
33
+ node : TSESTree . Node ,
34
+ ) : node is JestExpectIdentifier =>
35
+ node . type === AST_NODE_TYPES . Identifier && node . name === 'expect' ;
36
+
37
+ // represents "expect()" specifically
38
+ interface JestExpectCallExpression extends TSESTree . CallExpression {
39
+ callee : JestExpectIdentifier ;
40
+ }
41
+
42
+ // represents expect usage like "expect().toBe" & "expect().not.toBe"
43
+ interface JestExpectCallMemberExpression extends TSESTree . MemberExpression {
44
+ object : JestExpectCallMemberExpression | JestExpectCallExpression ;
45
+ property : TSESTree . Identifier ;
46
+ }
47
+
48
+ // represents expect usage like "expect.anything" & "expect.hasAssertions"
49
+ interface JestExpectNamespaceMemberExpression
50
+ extends TSESTree . MemberExpression {
51
+ object : JestExpectIdentifier ;
52
+ property : TSESTree . Identifier ;
53
+ }
54
+
55
+ /**
56
+ * Checks if the given `node` is a {@link JestExpectCallExpression}.
57
+ *
58
+ * @param {Node } node
59
+ *
60
+ * @return {node is JestExpectCallExpression }
61
+ */
62
+ const isExpectCall = ( node : TSESTree . Node ) : node is JestExpectCallExpression =>
63
+ node . type === AST_NODE_TYPES . CallExpression &&
64
+ isExpectIdentifier ( node . callee ) ;
65
+
66
+ interface JestExpectCallWithParent extends JestExpectCallExpression {
67
+ parent : JestExpectCallMemberExpression ;
68
+ }
69
+
70
+ export const isExpectCallWithParent = (
71
+ node : TSESTree . Node ,
72
+ ) : node is JestExpectCallWithParent =>
73
+ isExpectCall ( node ) &&
74
+ node . parent !== undefined &&
75
+ node . parent . type === AST_NODE_TYPES . MemberExpression &&
76
+ node . parent . property . type === AST_NODE_TYPES . Identifier ;
77
+
18
78
export enum DescribeAlias {
19
79
'describe' = 'describe' ,
20
80
'fdescribe' = 'fdescribe' ,
0 commit comments