Skip to content

Commit 9e4f3f4

Browse files
jquensedanez
authored andcommitted
Fix handling of exported classes without id (#273)
* Update normalizeClassDefinition.js * add test
1 parent 6a192c0 commit 9e4f3f4

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

src/utils/__tests__/normalizeClassDefinition-test.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,21 @@ describe('normalizeClassDefinition', () => {
3333
expect(classProperty.static).toBe(true);
3434
});
3535

36+
it('should not fail on classes without ids', () => {
37+
var classDefinition = parse(`
38+
export default class extends React.Component {
39+
static propTypes = 42;
40+
}
41+
`).get('body', 0, 'declaration')
42+
43+
normalizeClassDefinition(classDefinition);
44+
var {node: {body: {body: [classProperty]}}} = classDefinition;
45+
expect(classProperty).toBeDefined();
46+
expect(classProperty.key.name).toBe('propTypes');
47+
expect(classProperty.value.value).toBe(42);
48+
expect(classProperty.static).toBe(true);
49+
});
50+
3651
it('finds assignments to class expressions', () => {
3752
var classDefinition = parse(`
3853
var Foo = class {};

src/utils/normalizeClassDefinition.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,10 @@ export default function normalizeClassDefinition(
4040
): void {
4141
var variableName;
4242
if (types.ClassDeclaration.check(classDefinition.node)) {
43-
variableName = classDefinition.node.id.name;
43+
// Class declarations don't have an id, e.g.: `export default class extends React.Component {}`
44+
if (classDefinition.node.id) {
45+
variableName = classDefinition.node.id.name;
46+
}
4447
} else if (types.ClassExpression.check(classDefinition.node)) {
4548
var {parentPath} = classDefinition;
4649
while (parentPath.node !== classDefinition.scope.node &&

0 commit comments

Comments
 (0)