diff --git a/packages/babel-helper-function-name/src/index.js b/packages/babel-helper-function-name/src/index.js index cbbe8802f6..bdce1f819c 100644 --- a/packages/babel-helper-function-name/src/index.js +++ b/packages/babel-helper-function-name/src/index.js @@ -45,6 +45,26 @@ const visitor = { }, }; +function getNameFromLiteralId(id) { + if (t.isNullLiteral(id)) { + return "null"; + } + + if (t.isRegExpLiteral(id)) { + return `_${id.pattern}_${id.flags}`; + } + + if (t.isTemplateLiteral(id)) { + return id.quasis.map(quasi => quasi.value.raw).join(""); + } + + if (id.value !== undefined) { + return id.value + ""; + } + + return ""; +} + function wrap(state, method, id, scope) { if (state.selfReference) { if (scope.hasBinding(id.name) && !scope.hasGlobal(id.name)) { @@ -168,10 +188,12 @@ export default function({ node, parent, scope, id }, localBinding = false) { let name; if (id && t.isLiteral(id)) { - name = id.value; + name = getNameFromLiteralId(id); } else if (id && t.isIdentifier(id)) { name = id.name; - } else { + } + + if (name === undefined) { return; } diff --git a/packages/babel-plugin-transform-function-name/test/fixtures/issues/7199/input.js b/packages/babel-plugin-transform-function-name/test/fixtures/issues/7199/input.js new file mode 100644 index 0000000000..5b8853bc69 --- /dev/null +++ b/packages/babel-plugin-transform-function-name/test/fixtures/issues/7199/input.js @@ -0,0 +1,8 @@ +const x = { + [null]: function () {}, + [/regex/gi]: function () {}, + [`y`]: function () {}, + [`abc${y}def`]: function () {}, + [0]: function () {}, + [false]: function () {}, +}; diff --git a/packages/babel-plugin-transform-function-name/test/fixtures/issues/7199/options.json b/packages/babel-plugin-transform-function-name/test/fixtures/issues/7199/options.json new file mode 100644 index 0000000000..ab147b5837 --- /dev/null +++ b/packages/babel-plugin-transform-function-name/test/fixtures/issues/7199/options.json @@ -0,0 +1,3 @@ +{ + "plugins": ["external-helpers", "transform-function-name"] +} diff --git a/packages/babel-plugin-transform-function-name/test/fixtures/issues/7199/output.js b/packages/babel-plugin-transform-function-name/test/fixtures/issues/7199/output.js new file mode 100644 index 0000000000..e98993ee80 --- /dev/null +++ b/packages/babel-plugin-transform-function-name/test/fixtures/issues/7199/output.js @@ -0,0 +1,8 @@ +const x = { + [null]: function _null() {}, + [/regex/gi]: function _regex_gi() {}, + [`y`]: function y() {}, + [`abc${y}def`]: function abcdef() {}, + [0]: function _() {}, + [false]: function _false() {} +};