Skip to content

Commit 2d2fa74

Browse files
authored
Merge pull request #41 from seanjohnson08/master
Do not throw errors for custom events (only lifecycle hooks)
2 parents 1f36646 + 8b81d7b commit 2d2fa74

File tree

2 files changed

+28
-13
lines changed

2 files changed

+28
-13
lines changed

lib/rules/no-lifecycle-events.js

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,23 @@ const { collectObjectPatternBindings } = require('../utils/destructed-binding');
88
const { getEmberImportBinding } = require('../utils/imports');
99

1010
const MESSAGE = 'Do not use events for lifecycle hooks. Please use the actual hooks instead: https://github.com/chadhietala/ember-best-practices/blob/master/guides/rules/no-lifecycle-events.md';
11+
// TODO: Pull these from somewhere?
12+
const LIFECYCLE_HOOKS = [
13+
'didDestroyElement',
14+
'didInsertElement',
15+
'didReceiveAttrs',
16+
'didReceiveAttrs',
17+
'didRender',
18+
'didRender',
19+
'didUpdate',
20+
'didUpdateAttrs',
21+
'init',
22+
'willClearRender',
23+
'willDestroyElement',
24+
'willRender',
25+
'willRender',
26+
'willUpdate'
27+
];
1128

1229
function isOn(node) {
1330
return node.name === 'on';
@@ -17,6 +34,10 @@ function isEmber(node) {
1734
return node.name === 'Ember';
1835
}
1936

37+
function isLifecycleHook(argument) {
38+
return LIFECYCLE_HOOKS.includes(argument.value);
39+
}
40+
2041
module.exports = {
2142
docs: {
2243
description: 'Disallow use of lifecycle events using `.on()`',
@@ -43,16 +64,6 @@ module.exports = {
4364
}
4465
},
4566

46-
ImportDeclaration(node) {
47-
if (node.source.value === '@ember/object/evented') {
48-
node.specifiers.forEach((specifier) => {
49-
if (isOn(specifier.imported)) {
50-
context.report(node, MESSAGE);
51-
}
52-
});
53-
}
54-
},
55-
5667
ImportDefaultSpecifier(node) {
5768
emberImportBinding = getEmberImportBinding(node);
5869
},
@@ -64,14 +75,15 @@ module.exports = {
6475
},
6576

6677
MemberExpression(node) {
67-
if (isEmber(node.object) && isOn(node.property)) {
78+
if (isEmber(node.object) && isOn(node.property) && isLifecycleHook(node.parent.arguments[0])) {
6879
context.report(node, MESSAGE);
6980
}
7081
},
7182

7283
CallExpression(node) {
7384
if (isOn(node.callee)) {
74-
if (destructedBindings.includes(node.callee.name)) {
85+
86+
if (isLifecycleHook(node.arguments[0]) || destructedBindings.includes(node.callee.name)) {
7587
context.report(node, MESSAGE);
7688
}
7789
}

tests/lib/rules/no-lifecycle-events.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,10 @@ ruleTester.run('no-lifecycle-events', rule, {
1212
this.$().on('focus', () => {
1313
alert('sss');
1414
});
15-
}
15+
},
16+
myCustomEvent: Ember.on('customEvent', function() {
17+
alert('sj08');
18+
})
1619
});`,
1720
parserOptions: {
1821
ecmaVersion: 6,

0 commit comments

Comments
 (0)