Skip to content

Commit 5bbee4b

Browse files
Add no-observers rule
1 parent 7862cd8 commit 5bbee4b

File tree

3 files changed

+66
-3
lines changed

3 files changed

+66
-3
lines changed

config/recommended.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,13 +83,14 @@ module.exports = {
8383

8484
// Ember Suave and Netguru Rules
8585
'ship-shape/avoid-leaking-state-in-components': 'error',
86-
'ship-shape/order-in-components': 'error',
87-
'ship-shape/order-in-controllers': 'error',
88-
'ship-shape/order-in-models': 'error',
8986
'ship-shape/no-direct-property-access': 'error',
9087
'ship-shape/no-empty-attrs': 'error',
88+
'ship-shape/no-observers': 'error',
9189
'ship-shape/no-on-calls-in-components': 'error',
9290
'ship-shape/no-side-effects': 'error',
91+
'ship-shape/order-in-components': 'error',
92+
'ship-shape/order-in-controllers': 'error',
93+
'ship-shape/order-in-models': 'error',
9394
'ship-shape/prefer-destructuring': 'error',
9495
'ship-shape/query-params-on-top': 'error',
9596
'ship-shape/require-access-in-comments': 'error',

lib/rules/no-observers.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
'use strict';
2+
3+
var ember = require('../../lib/utils/ember');
4+
5+
//------------------------------------------------------------------------------
6+
// General rule - Don't use observers
7+
//------------------------------------------------------------------------------
8+
9+
module.exports = function(context) {
10+
11+
var message = 'Don\'t use observers if possible';
12+
13+
var report = function(node) {
14+
context.report(node, message);
15+
};
16+
17+
return {
18+
CallExpression: function(node) {
19+
var callee = node.callee;
20+
21+
if(ember.isModule(node, 'observer')) {
22+
report(node);
23+
}
24+
}
25+
};
26+
27+
};

tests/lib/rules/no-observers.js

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
'use strict';
2+
3+
// ------------------------------------------------------------------------------
4+
// Requirements
5+
// ------------------------------------------------------------------------------
6+
7+
var rule = require('../../../lib/rules/no-observers');
8+
var RuleTester = require('eslint').RuleTester;
9+
10+
// ------------------------------------------------------------------------------
11+
// Tests
12+
// ------------------------------------------------------------------------------
13+
14+
var eslintTester = new RuleTester();
15+
eslintTester.run('no-observers', rule, {
16+
valid: [
17+
{
18+
code: 'export default Controller.extend();',
19+
parserOptions: {ecmaVersion: 6, sourceType: "module"},
20+
},
21+
{
22+
code: 'export default Controller.extend({actions: {},});',
23+
parserOptions: {ecmaVersion: 6, sourceType: "module"},
24+
}
25+
],
26+
invalid: [
27+
{
28+
code: 'Ember.observer("text", function() {});',
29+
parserOptions: {ecmaVersion: 6, sourceType: "module"},
30+
errors: [{
31+
message: 'Don\'t use observers if possible',
32+
}],
33+
}
34+
]
35+
});

0 commit comments

Comments
 (0)