From 9734ee248f0859f9beaaabde7c7f69ef1dc847bc Mon Sep 17 00:00:00 2001 From: Reyad Attiyat Date: Thu, 13 Jul 2017 09:32:08 -0500 Subject: [PATCH] Fix: Use name 'this' in JSXMemberExpression (fixes #337) --- lib/convert.js | 3 + .../jsx/member-expression-this.src.js | 1 + tests/lib/__snapshots__/jsx.js.snap | 240 +++++++++++++++++- 3 files changed, 241 insertions(+), 3 deletions(-) diff --git a/lib/convert.js b/lib/convert.js index f17782b..9451998 100644 --- a/lib/convert.js +++ b/lib/convert.js @@ -297,6 +297,9 @@ module.exports = function convert(config) { // Assign the appropriate types tagNameToken.object.type = (isNestedMemberExpression) ? AST_NODE_TYPES.JSXMemberExpression : AST_NODE_TYPES.JSXIdentifier; tagNameToken.property.type = AST_NODE_TYPES.JSXIdentifier; + if (tagName.expression.kind === SyntaxKind.ThisKeyword) { + tagNameToken.object.name = "this"; + } } else { tagNameToken.type = AST_NODE_TYPES.JSXIdentifier; tagNameToken.name = tagNameToken.value; diff --git a/tests/fixtures/jsx/member-expression-this.src.js b/tests/fixtures/jsx/member-expression-this.src.js index f3bd61b..a9ab134 100644 --- a/tests/fixtures/jsx/member-expression-this.src.js +++ b/tests/fixtures/jsx/member-expression-this.src.js @@ -1 +1,2 @@ ; +; diff --git a/tests/lib/__snapshots__/jsx.js.snap b/tests/lib/__snapshots__/jsx.js.snap index b7baabd..c18fea7 100644 --- a/tests/lib/__snapshots__/jsx.js.snap +++ b/tests/lib/__snapshots__/jsx.js.snap @@ -5504,11 +5504,119 @@ Object { ], "type": "ExpressionStatement", }, + Object { + "expression": Object { + "children": Array [], + "closingElement": null, + "loc": Object { + "end": Object { + "column": 18, + "line": 2, + }, + "start": Object { + "column": 0, + "line": 2, + }, + }, + "openingElement": Object { + "attributes": Array [], + "loc": Object { + "end": Object { + "column": 18, + "line": 2, + }, + "start": Object { + "column": 0, + "line": 2, + }, + }, + "name": Object { + "loc": Object { + "end": Object { + "column": 15, + "line": 2, + }, + "start": Object { + "column": 1, + "line": 2, + }, + }, + "object": Object { + "loc": Object { + "end": Object { + "column": 5, + "line": 2, + }, + "start": Object { + "column": 1, + "line": 2, + }, + }, + "name": "this", + "range": Array [ + 27, + 31, + ], + "type": "JSXIdentifier", + }, + "property": Object { + "loc": Object { + "end": Object { + "column": 15, + "line": 2, + }, + "start": Object { + "column": 6, + "line": 2, + }, + }, + "name": "Component", + "range": Array [ + 32, + 41, + ], + "type": "JSXIdentifier", + }, + "range": Array [ + 27, + 41, + ], + "type": "JSXMemberExpression", + }, + "range": Array [ + 26, + 44, + ], + "selfClosing": true, + "type": "JSXOpeningElement", + }, + "range": Array [ + 26, + 44, + ], + "type": "JSXElement", + }, + "loc": Object { + "end": Object { + "column": 19, + "line": 2, + }, + "start": Object { + "column": 0, + "line": 2, + }, + }, + "range": Array [ + 26, + 45, + ], + "type": "ExpressionStatement", + }, ], "loc": Object { "end": Object { - "column": 25, - "line": 1, + "column": 19, + "line": 2, }, "start": Object { "column": 0, @@ -5517,7 +5625,7 @@ Object { }, "range": Array [ 0, - 25, + 45, ], "sourceType": "script", "tokens": Array [ @@ -5683,6 +5791,132 @@ Object { "type": "Punctuator", "value": ";", }, + Object { + "loc": Object { + "end": Object { + "column": 1, + "line": 2, + }, + "start": Object { + "column": 0, + "line": 2, + }, + }, + "range": Array [ + 26, + 27, + ], + "type": "Punctuator", + "value": "<", + }, + Object { + "loc": Object { + "end": Object { + "column": 5, + "line": 2, + }, + "start": Object { + "column": 1, + "line": 2, + }, + }, + "range": Array [ + 27, + 31, + ], + "type": "Keyword", + "value": "this", + }, + Object { + "loc": Object { + "end": Object { + "column": 6, + "line": 2, + }, + "start": Object { + "column": 5, + "line": 2, + }, + }, + "range": Array [ + 31, + 32, + ], + "type": "Punctuator", + "value": ".", + }, + Object { + "loc": Object { + "end": Object { + "column": 15, + "line": 2, + }, + "start": Object { + "column": 6, + "line": 2, + }, + }, + "range": Array [ + 32, + 41, + ], + "type": "JSXIdentifier", + "value": "Component", + }, + Object { + "loc": Object { + "end": Object { + "column": 17, + "line": 2, + }, + "start": Object { + "column": 16, + "line": 2, + }, + }, + "range": Array [ + 42, + 43, + ], + "type": "Punctuator", + "value": "/", + }, + Object { + "loc": Object { + "end": Object { + "column": 18, + "line": 2, + }, + "start": Object { + "column": 17, + "line": 2, + }, + }, + "range": Array [ + 43, + 44, + ], + "type": "Punctuator", + "value": ">", + }, + Object { + "loc": Object { + "end": Object { + "column": 19, + "line": 2, + }, + "start": Object { + "column": 18, + "line": 2, + }, + }, + "range": Array [ + 44, + 45, + ], + "type": "Punctuator", + "value": ";", + }, ], "type": "Program", }