Skip to content

Commit 9e8670c

Browse files
Morlayfkling
authored andcommitted
add ES6 default import support
1 parent 55c1511 commit 9e8670c

File tree

4 files changed

+54
-1
lines changed

4 files changed

+54
-1
lines changed

src/resolver/__tests__/findExportedReactCreateClassCall-test.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,4 +130,37 @@ describe('React documentation parser', () => {
130130
expect(parse(source)).toBeDefined();
131131
});
132132

133+
it('finds React.createClass in default exported and default import', () => {
134+
var source = [
135+
'import React from "React"',
136+
'var Component = React.createClass({});',
137+
'export default React.createClass({});'
138+
].join('\n');
139+
140+
expect(parse(source)).toBeDefined();
141+
142+
source = [
143+
'import React, { createElement } from "React"',
144+
'export default React.createClass({});'
145+
].join('\n');
146+
147+
expect(parse(source)).toBeDefined();
148+
});
149+
150+
it('finds React.createClass in variable exported and default import', () => {
151+
var source = [
152+
'import React from "React"',
153+
'export var Component = React.createClass({});'
154+
].join('\n');
155+
156+
expect(parse(source)).toBeDefined();
157+
158+
source = [
159+
'import React, { createElement } from "React"',
160+
'export var Component = React.createClass({});'
161+
].join('\n');
162+
163+
expect(parse(source)).toBeDefined();
164+
});
165+
133166
});

src/utils/__tests__/resolveToModule-test.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,4 +59,19 @@ describe('resolveToModule', () => {
5959
].join('\n'));
6060
expect(resolveToModule(path)).toBe('Foo');
6161
});
62+
63+
it('resolves ImportDefaultSpecifier', () => {
64+
var path = parse([
65+
'import foo from "Foo";',
66+
'foo;'
67+
].join('\n'));
68+
expect(resolveToModule(path)).toBe('Foo');
69+
70+
path = parse([
71+
'import foo, {createElement} from "Foo";',
72+
'foo;'
73+
].join('\n'));
74+
expect(resolveToModule(path)).toBe('Foo');
75+
});
76+
6277
});

src/utils/resolveToModule.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ function resolveToModule(path: NodePath): ?string {
4141
return resolveToModule(valuePath);
4242
}
4343
break;
44+
case types.ImportDeclaration.name:
45+
return node.source.value;
46+
break;
4447
case types.MemberExpression.name:
4548
while (path && types.MemberExpression.check(path.node)) {
4649
path = path.get('object');

src/utils/resolveToValue.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,9 @@ function resolveToValue(path: NodePath): NodePath {
6666
if (bindings.length > 0) {
6767
var resultPath = scope.getBindings()[node.name][0];
6868
var parentPath = resultPath.parent;
69-
if (types.VariableDeclarator.check(parentPath.node)) {
69+
if (types.ImportDefaultSpecifier.check(parentPath.node)){
70+
return parentPath.parent;
71+
} else if (types.VariableDeclarator.check(parentPath.node)) {
7072
resultPath = parentPath.get('init');
7173
} else if (types.Property.check(parentPath.node)) {
7274
// must be inside a pattern

0 commit comments

Comments
 (0)