Skip to content

Commit

Permalink
no-component-lifecycle-hooks: Do not warn about Glimmer lifecycle hoo…
Browse files Browse the repository at this point in the history
…ks on classic components
  • Loading branch information
Turbo87 committed Dec 29, 2020
1 parent 6513ee9 commit ef8be0f
Show file tree
Hide file tree
Showing 2 changed files with 89 additions and 2 deletions.
12 changes: 10 additions & 2 deletions lib/rules/no-component-lifecycle-hooks.js
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,11 @@ module.exports = {
},

MethodDefinition(node) {
if (isComponentLifecycleHook(node) && isInsideEmberComponent) {
if (
isInsideEmberComponent &&
isComponentLifecycleHook(node) &&
!isGlimmerComponentLifecycleHook(node)
) {
// Classic Ember component using classic component lifecycle hook.
report(context, node);
} else if (
Expand All @@ -87,7 +91,11 @@ module.exports = {
},

Property(node) {
if (isComponentLifecycleHook(node) && isInsideEmberComponent) {
if (
isInsideEmberComponent &&
isComponentLifecycleHook(node) &&
!isGlimmerComponentLifecycleHook(node)
) {
report(context, node.key);
}
},
Expand Down
79 changes: 79 additions & 0 deletions tests/lib/rules/no-component-lifecycle-hooks.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,29 @@ ruleTester.run('no-component-lifecycle-hooks', rule, {
});
`,

// Legitimate classic component lifecycle hook:
`
import Component from '@ember/component';
export default Component.extend({
willDestroy() {},
});
`,
`
import Component from '@ember/component';
export const Component1 = Component.extend({
willDestroy() {},
});
export const Component2 = Component.extend({
willDestroy() {},
});
`,
`
import Component from '@ember/component';
export default class extends Component {
willDestroy() {}
}
`,

// Just an EmberObject:
`
export default EmberObject.extend({
Expand Down Expand Up @@ -124,5 +147,61 @@ ruleTester.run('no-component-lifecycle-hooks', rule, {
},
],
},
{
code: `
import Component from '@ember/component';
export const Component2 = Component.extend({
didDestroyElement() {},
});
export const Component1 = Component.extend({
willDestroy() {},
});
`,
output: null,
errors: [
{
message: ERROR_MESSAGE,
type: 'Identifier',
},
],
},
{
code: `
import Component from "@ember/component";
export const Component1 = Component.extend({
test: computed('', function () {}),
didDestroyElement() {},
});
`,
output: null,
errors: [
{
message: ERROR_MESSAGE,
type: 'Identifier',
},
],
},
{
code: `
import Component from "@glimmer/component";
export default class MyComponent extends Component {
myMethod() {
class FooBarClass {}
}
didDestroyElement() {}
}
`,
output: null,
errors: [
{
message: ERROR_MESSAGE,
type: 'MethodDefinition',
},
],
},
],
});

0 comments on commit ef8be0f

Please sign in to comment.