From 27203547939e77fc64be53a191d54d0fb15c29df Mon Sep 17 00:00:00 2001 From: Athena Yao Date: Wed, 21 Mar 2018 21:21:44 -0700 Subject: [PATCH 1/5] Add test for defaultProps --- .../other-static-members/input.tsx | 8 ++++++++ .../other-static-members/output.tsx | 10 ++++++++++ 2 files changed, 18 insertions(+) create mode 100644 test/react-remove-static-prop-types-member-transform/other-static-members/input.tsx create mode 100644 test/react-remove-static-prop-types-member-transform/other-static-members/output.tsx diff --git a/test/react-remove-static-prop-types-member-transform/other-static-members/input.tsx b/test/react-remove-static-prop-types-member-transform/other-static-members/input.tsx new file mode 100644 index 0000000..ed98022 --- /dev/null +++ b/test/react-remove-static-prop-types-member-transform/other-static-members/input.tsx @@ -0,0 +1,8 @@ +class SomeComponent extends React.Component<{ + foo: number; +}, { + bar: string; +}> { + static propTypes = { foo: React.PropTypes.string }; + static defaultProps = { foo: 'bar' }; +} diff --git a/test/react-remove-static-prop-types-member-transform/other-static-members/output.tsx b/test/react-remove-static-prop-types-member-transform/other-static-members/output.tsx new file mode 100644 index 0000000..c37607e --- /dev/null +++ b/test/react-remove-static-prop-types-member-transform/other-static-members/output.tsx @@ -0,0 +1,10 @@ +class SomeComponent extends React.Component< + { + foo: number, + }, + { + bar: string, + }, +> { + static defaultProps = { foo: 'bar' }; +} From 95f6b0e8a2af0e9502724d5cc6de8a935d4bddea Mon Sep 17 00:00:00 2001 From: Athena Yao Date: Wed, 21 Mar 2018 21:48:20 -0700 Subject: [PATCH 2/5] Check if the name == "propTypes", not != " propTypes" --- src/helpers/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/helpers/index.ts b/src/helpers/index.ts index 1018c5d..177fba6 100644 --- a/src/helpers/index.ts +++ b/src/helpers/index.ts @@ -97,7 +97,8 @@ export function hasStaticModifier(classMember: ts.ClassElement) { */ export function isPropTypesMember(classMember: ts.ClassElement, sourceFile: ts.SourceFile) { try { - return classMember.name !== undefined && classMember.name.getFullText(sourceFile) !== 'propTypes'; + const name = classMember.name !== undefined && classMember.name.getFullText(sourceFile).trim(); + return name === 'propTypes'; } catch (e) { return false; } From fc3860b8983c14a05039c3d34c00a01895dfb200 Mon Sep 17 00:00:00 2001 From: Athena Yao Date: Wed, 21 Mar 2018 21:49:24 -0700 Subject: [PATCH 3/5] More ways of getting the class member name (hacky) --- src/helpers/index.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/helpers/index.ts b/src/helpers/index.ts index 177fba6..9b93710 100644 --- a/src/helpers/index.ts +++ b/src/helpers/index.ts @@ -97,7 +97,13 @@ export function hasStaticModifier(classMember: ts.ClassElement) { */ export function isPropTypesMember(classMember: ts.ClassElement, sourceFile: ts.SourceFile) { try { - const name = classMember.name !== undefined && classMember.name.getFullText(sourceFile).trim(); + const getFullTextName = + classMember.name !== undefined ? classMember.name.getFullText(sourceFile).trim() : undefined; + const escapedTextName = + classMember.name !== undefined && 'escapedText' in classMember.name + ? classMember.name.escapedText + : undefined; + const name = getFullTextName || escapedTextName; return name === 'propTypes'; } catch (e) { return false; From 724fc61d009f20dbc636d4af86ac0c8a9b5c9cb4 Mon Sep 17 00:00:00 2001 From: Athena Yao Date: Thu, 22 Mar 2018 17:21:56 -0700 Subject: [PATCH 4/5] Check if we're an identifier; if we are we can just always use name.escapedText --- src/helpers/index.ts | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/helpers/index.ts b/src/helpers/index.ts index 9b93710..ab8aae8 100644 --- a/src/helpers/index.ts +++ b/src/helpers/index.ts @@ -97,13 +97,10 @@ export function hasStaticModifier(classMember: ts.ClassElement) { */ export function isPropTypesMember(classMember: ts.ClassElement, sourceFile: ts.SourceFile) { try { - const getFullTextName = - classMember.name !== undefined ? classMember.name.getFullText(sourceFile).trim() : undefined; - const escapedTextName = - classMember.name !== undefined && 'escapedText' in classMember.name + const name = + classMember.name !== undefined && classMember.name.kind === ts.SyntaxKind.Identifier ? classMember.name.escapedText - : undefined; - const name = getFullTextName || escapedTextName; + : null; return name === 'propTypes'; } catch (e) { return false; From b64d46469fb922effd142cf43ac0d3e0b069935d Mon Sep 17 00:00:00 2001 From: Athena Yao Date: Tue, 27 Mar 2018 22:40:43 -0700 Subject: [PATCH 5/5] Use ts.isIdentifier helper function instead of direct comparison on .kind --- src/helpers/index.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/helpers/index.ts b/src/helpers/index.ts index ab8aae8..04a2c29 100644 --- a/src/helpers/index.ts +++ b/src/helpers/index.ts @@ -98,9 +98,7 @@ export function hasStaticModifier(classMember: ts.ClassElement) { export function isPropTypesMember(classMember: ts.ClassElement, sourceFile: ts.SourceFile) { try { const name = - classMember.name !== undefined && classMember.name.kind === ts.SyntaxKind.Identifier - ? classMember.name.escapedText - : null; + classMember.name !== undefined && ts.isIdentifier(classMember.name) ? classMember.name.escapedText : null; return name === 'propTypes'; } catch (e) { return false;