From 85039167990aee6f800ef88acf8349d8de89a256 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Sat, 15 Nov 2014 11:13:02 +1100 Subject: [PATCH] add `_memberExpressionKeywords` transformer that turns keyword identifiers to computed literals --- lib/6to5/transformation/transform.js | 51 ++++++++++--------- .../_member-expression-keywords.js | 10 ++++ .../_member-expression-keywords/actual.js | 4 ++ .../_member-expression-keywords/expected.js | 4 ++ 4 files changed, 44 insertions(+), 25 deletions(-) create mode 100644 lib/6to5/transformation/transformers/_member-expression-keywords.js create mode 100644 test/fixtures/transformation/misc/_member-expression-keywords/actual.js create mode 100644 test/fixtures/transformation/misc/_member-expression-keywords/expected.js diff --git a/lib/6to5/transformation/transform.js b/lib/6to5/transformation/transform.js index e3da051d6b..216b2987e2 100644 --- a/lib/6to5/transformation/transform.js +++ b/lib/6to5/transformation/transform.js @@ -27,37 +27,38 @@ transform.moduleFormatters = { }; _.each({ - modules: require("./transformers/modules"), - propertyNameShorthand: require("./transformers/property-name-shorthand"), - constants: require("./transformers/constants"), - arrayComprehension: require("./transformers/array-comprehension"), - generatorComprehension: require("./transformers/generator-comprehension"), - arrowFunctions: require("./transformers/arrow-functions"), - classes: require("./transformers/classes"), + modules: require("./transformers/modules"), + propertyNameShorthand: require("./transformers/property-name-shorthand"), + constants: require("./transformers/constants"), + arrayComprehension: require("./transformers/array-comprehension"), + generatorComprehension: require("./transformers/generator-comprehension"), + arrowFunctions: require("./transformers/arrow-functions"), + classes: require("./transformers/classes"), - _propertyLiterals: require("./transformers/_property-literals"), - computedPropertyNames: require("./transformers/computed-property-names"), + _propertyLiterals: require("./transformers/_property-literals"), + computedPropertyNames: require("./transformers/computed-property-names"), - spread: require("./transformers/spread"), - templateLiterals: require("./transformers/template-literals"), - propertyMethodAssignment: require("./transformers/property-method-assignment"), - defaultParameters: require("./transformers/default-parameters"), - restParameters: require("./transformers/rest-parameters"), - destructuring: require("./transformers/destructuring"), - forOf: require("./transformers/for-of"), - letScoping: require("./transformers/let-scoping"), - unicodeRegex: require("./transformers/unicode-regex"), + spread: require("./transformers/spread"), + templateLiterals: require("./transformers/template-literals"), + propertyMethodAssignment: require("./transformers/property-method-assignment"), + defaultParameters: require("./transformers/default-parameters"), + restParameters: require("./transformers/rest-parameters"), + destructuring: require("./transformers/destructuring"), + forOf: require("./transformers/for-of"), + letScoping: require("./transformers/let-scoping"), + unicodeRegex: require("./transformers/unicode-regex"), - react: require("./transformers/react"), + react: require("./transformers/react"), - _aliasFunctions: require("./transformers/_alias-functions"), - _blockHoist: require("./transformers/_block-hoist"), - _declarations: require("./transformers/_declarations"), + _aliasFunctions: require("./transformers/_alias-functions"), + _blockHoist: require("./transformers/_block-hoist"), + _declarations: require("./transformers/_declarations"), - generators: require("./transformers/generators"), - useStrict: require("./transformers/use-strict"), + generators: require("./transformers/generators"), + useStrict: require("./transformers/use-strict"), - _moduleFormatter: require("./transformers/_module-formatter") + _memberExpressionKeywords: require("./transformers/_member-expression-keywords"), + _moduleFormatter: require("./transformers/_module-formatter") }, function (transformer, key) { transform.transformers[key] = new Transformer(key, transformer); }); diff --git a/lib/6to5/transformation/transformers/_member-expression-keywords.js b/lib/6to5/transformation/transformers/_member-expression-keywords.js new file mode 100644 index 0000000000..feaaadaae0 --- /dev/null +++ b/lib/6to5/transformation/transformers/_member-expression-keywords.js @@ -0,0 +1,10 @@ +var esutils = require("esutils"); +var t = require("../../types"); + +exports.MemberExpression = function (node) { + var prop = node.property; + if (t.isIdentifier(prop) && esutils.keyword.isKeywordES6(prop.name, true)) { + node.property = t.literal(prop.name); + node.computed = true; + } +}; diff --git a/test/fixtures/transformation/misc/_member-expression-keywords/actual.js b/test/fixtures/transformation/misc/_member-expression-keywords/actual.js new file mode 100644 index 0000000000..11043640b2 --- /dev/null +++ b/test/fixtures/transformation/misc/_member-expression-keywords/actual.js @@ -0,0 +1,4 @@ +test.catch; +test.catch["foo"]; +test["catch"]; +test["catch"]["foo"]; diff --git a/test/fixtures/transformation/misc/_member-expression-keywords/expected.js b/test/fixtures/transformation/misc/_member-expression-keywords/expected.js new file mode 100644 index 0000000000..055db55491 --- /dev/null +++ b/test/fixtures/transformation/misc/_member-expression-keywords/expected.js @@ -0,0 +1,4 @@ +test["catch"]; +test["catch"]["foo"]; +test["catch"]; +test["catch"]["foo"];