File tree Expand file tree Collapse file tree 3 files changed +65
-0
lines changed
Expand file tree Collapse file tree 3 files changed +65
-0
lines changed Original file line number Diff line number Diff line change @@ -83,6 +83,7 @@ module.exports = {
8383
8484 // Ember Suave and Netguru Rules
8585 'ship-shape/avoid-leaking-state-in-components' : 'error' ,
86+ 'ship-shape/closure-actions' : 'error' ,
8687 'ship-shape/no-direct-property-access' : 'error' ,
8788 'ship-shape/no-empty-attrs' : 'error' ,
8889 'ship-shape/no-observers' : 'error' ,
Original file line number Diff line number Diff line change 1+ 'use strict' ;
2+
3+ var utils = require ( '../../lib/utils/utils' ) ;
4+
5+ //------------------------------------------------------------------------------
6+ // Components - Closure actions
7+ //------------------------------------------------------------------------------
8+
9+ module . exports = function ( context ) {
10+
11+ var message = 'Use closure actions, unless you need bubbling' ;
12+
13+ var report = function ( node ) {
14+ context . report ( node , message ) ;
15+ } ;
16+
17+ return {
18+ MemberExpression : function ( node ) {
19+ var isSendAction = utils . isThisExpression ( node . object ) &&
20+ utils . isIdentifier ( node . property ) &&
21+ node . property . name === 'sendAction' ;
22+
23+ if ( isSendAction ) {
24+ report ( node ) ;
25+ }
26+ }
27+ } ;
28+
29+ } ;
Original file line number Diff line number Diff line change 1+ 'use strict' ;
2+
3+ // ------------------------------------------------------------------------------
4+ // Requirements
5+ // ------------------------------------------------------------------------------
6+
7+ var rule = require ( '../../../lib/rules/closure-actions' ) ;
8+ var RuleTester = require ( 'eslint' ) . RuleTester ;
9+
10+ // ------------------------------------------------------------------------------
11+ // Tests
12+ // ------------------------------------------------------------------------------
13+
14+ var eslintTester = new RuleTester ( ) ;
15+ eslintTester . run ( 'closure-actions' , rule , {
16+ valid : [
17+ {
18+ code : 'export default Component.extend();' ,
19+ parserOptions : { ecmaVersion : 6 , sourceType : "module" } ,
20+ } ,
21+ {
22+ code : 'export default Component.extend({actions: {pushLever() {this.attr.boom();}}});' ,
23+ parserOptions : { ecmaVersion : 6 , sourceType : "module" } ,
24+ }
25+ ] ,
26+ invalid : [
27+ {
28+ code : 'export default Component.extend({actions: {pushLever() {this.sendAction("detonate");}}});' ,
29+ parserOptions : { ecmaVersion : 6 , sourceType : "module" } ,
30+ errors : [ {
31+ message : 'Use closure actions, unless you need bubbling' ,
32+ } ] ,
33+ }
34+ ]
35+ } ) ;
You can’t perform that action at this time.
0 commit comments