Skip to content

Commit 5371c6d

Browse files
bebrawpvasek
authored andcommitted
feat(parser): Support styled components through convention
If the parser detects a styled component, it will use filename instead of StyledComponentClass. This gives basic support for Styled Components in the parser.
1 parent d7c0d9c commit 5371c6d

File tree

3 files changed

+23
-0
lines changed

3 files changed

+23
-0
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import * as React from 'react';
2+
3+
export interface StyledComponentClassProps {
4+
/** myProp description */
5+
myProp: string;
6+
}
7+
8+
/** Stateless description */
9+
const StyledComponentClass: React.SFC<StyledComponentClassProps> = props => (
10+
<div>My Property = {props.myProp}</div>
11+
);
12+
13+
// If we had a styled component, it would emit StyledComponentClass
14+
// by default.
15+
export default StyledComponentClass;

src/__tests__/parser.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -532,6 +532,13 @@ describe('parser', () => {
532532
assert.equal(parsed.displayName, 'StatelessDisplayNameDefaultExport');
533533
});
534534

535+
it('should be taken from filename for styled components', () => {
536+
const [parsed] = parse(
537+
fixturePath('StatelessDisplayNameStyledComponent')
538+
);
539+
assert.equal(parsed.displayName, 'StatelessDisplayNameStyledComponent');
540+
});
541+
535542
it('should be taken from stateful component `displayName` property (using default export)', () => {
536543
const [parsed] = parse(fixturePath('StatefulDisplayNameDefaultExport'));
537544
assert.equal(parsed.displayName, 'StatefulDisplayNameDefaultExport');

src/parser.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -665,6 +665,7 @@ function computeComponentName(exp: ts.Symbol, source: ts.SourceFile) {
665665
if (
666666
exportName === 'default' ||
667667
exportName === '__function' ||
668+
exportName === 'StyledComponentClass' ||
668669
exportName === 'StatelessComponent'
669670
) {
670671
// Default export for a file: named after file

0 commit comments

Comments
 (0)