Skip to content

Commit 8365d9f

Browse files
author
Chris Garrett
authored
[BUGFIX] Ignore chained class definitions (#179)
Before this change, class definitions that were chained like so: ```js export default EmberObject.extend({}).reopenClass({}); ``` Would become: ```js export default class Foo {}.reopenClass({}); ``` Which is not valid JS. These are a relatively uncommon type of class definition, so this PR adds them to our ignore list and spits out an error.
1 parent 8970e54 commit 8365d9f

3 files changed

Lines changed: 11 additions & 0 deletions

File tree

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import EmberObject from '@ember/object';
2+
3+
export default EmberObject.extend({}).reopenClass({});
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import EmberObject from '@ember/object';
2+
3+
export default EmberObject.extend({}).reopenClass({});

transforms/helpers/parse-helper.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,11 @@ function replaceEmberObjectExpressions(j, root, filePath, options = {}) {
208208
);
209209

210210
const errors = hasValidProps(j, eoProps, options);
211+
212+
if (get(eoCallExpression, 'parentPath.value.type') === 'MemberExpression') {
213+
errors.push('class has chained definition (e.g. EmberObject.extend().reopenClass();');
214+
}
215+
211216
if (errors.length) {
212217
logger.warn(`[${filePath}]: FAILURE \nValidation errors: \n\t${errors.join('\n\t')}`);
213218
return;

0 commit comments

Comments
 (0)