@@ -4,6 +4,18 @@ var createAvaRule = require('../create-ava-rule');
4
4
// This rule makes heavy use of eslints code path analysis
5
5
// See: http://eslint.org/docs/developer-guide/code-path-analysis.html
6
6
7
+ function isEndExpression ( node ) {
8
+ // returns true if this node represents a call to `t.end(...)`
9
+ return (
10
+ node . type === 'CallExpression' &&
11
+ node . callee . type === 'MemberExpression' &&
12
+ node . callee . object . type === 'Identifier' &&
13
+ node . callee . object . name === 't' &&
14
+ node . callee . property . type === 'Identifier' &&
15
+ node . callee . property . name === 'end'
16
+ ) ;
17
+ }
18
+
7
19
module . exports = function ( context ) {
8
20
var ava = createAvaRule ( ) ;
9
21
var segmentInfoMap = Object . create ( null ) ;
@@ -13,12 +25,14 @@ module.exports = function (context) {
13
25
function segmentStart ( segment ) {
14
26
// A new CodePathSegment has started, create an "info" object to track this segments state.
15
27
segmentInfoStack . push ( currentSegmentInfo ) ;
28
+
16
29
currentSegmentInfo = {
17
30
ended : false ,
18
31
prev : segment . prevSegments . map ( function ( prevSegment ) {
19
32
return segmentInfoMap [ prevSegment . id ] ;
20
33
} )
21
34
} ;
35
+
22
36
segmentInfoMap [ segment . id ] = currentSegmentInfo ;
23
37
}
24
38
@@ -49,7 +63,11 @@ module.exports = function (context) {
49
63
// unset ended state to avoid generating lots of errors
50
64
info . ended = false ;
51
65
} ) ;
52
- context . report ( node , 'No statements following a call to t.end().' ) ;
66
+
67
+ context . report ( {
68
+ node : node ,
69
+ message : 'No statements following a call to `t.end()`.'
70
+ } ) ;
53
71
}
54
72
}
55
73
@@ -66,27 +84,14 @@ module.exports = function (context) {
66
84
ForInStatement : checkStatement ,
67
85
ForOfStatement : checkStatement ,
68
86
ReturnStatement : function ( node ) {
69
- // empty return statements are OK even after `t.end`, only check it if there is an argument.
87
+ // empty return statements are OK even after `t.end`,
88
+ // only check it if there is an argument
70
89
if ( node . argument ) {
71
90
checkStatement ( node ) ;
72
91
}
73
92
} ,
74
-
75
93
onCodePathSegmentStart : segmentStart ,
76
94
onCodePathSegmentEnd : segmentEnd ,
77
-
78
95
CallExpression : checkForEndExpression
79
96
} ) ;
80
97
} ;
81
-
82
- function isEndExpression ( node ) {
83
- // returns true if this node represents a call to `t.end(...)`
84
- return (
85
- node . type === 'CallExpression' &&
86
- node . callee . type === 'MemberExpression' &&
87
- node . callee . object . type === 'Identifier' &&
88
- node . callee . object . name === 't' &&
89
- node . callee . property . type === 'Identifier' &&
90
- node . callee . property . name === 'end'
91
- ) ;
92
- }
0 commit comments