sanex3339
2018-08-08 15:18:01 +03:00
parent 6e569be743
commit df4ac27987
9 changed files with 99 additions and 27 deletions
@@ -55,9 +55,26 @@ export class FunctionTransformer extends AbstractNodeTransformer {
/**
* @param {Node} node
* @param {Node} parentNode
* @returns {boolean}
*/
private static isProhibitedPropertyNode (node: ESTree.Node): node is ESTree.Property & {key: ESTree.Identifier} {
private static isProhibitedIdentifierOfPropertyNode (
node: ESTree.Node,
parentNode: ESTree.Node | null
): node is ESTree.Identifier {
return NodeGuards.isIdentifierNode(node)
&& !!parentNode
&& NodeGuards.isPropertyNode(parentNode)
&& parentNode.key === node;
}
/**
* @param {Node} node
* @returns {boolean}
*/
private static isProhibitedIdentifierOfShorthandPropertyNode (
node: ESTree.Node,
): node is ESTree.Property & {key: ESTree.Identifier} {
return NodeGuards.isPropertyNode(node)
&& node.shorthand
&& NodeGuards.isIdentifierNode(node.key);
@@ -109,9 +126,11 @@ export class FunctionTransformer extends AbstractNodeTransformer {
functionNode.params
.forEach((paramsNode: ESTree.Node) => {
estraverse.traverse(paramsNode, {
enter: (node: ESTree.Node): estraverse.VisitorOption | void => {
if (FunctionTransformer.isProhibitedPropertyNode(node)) {
return estraverse.VisitorOption.Skip;
enter: (node: ESTree.Node, parentNode: ESTree.Node | null): estraverse.VisitorOption | void => {
// Should check with identifier as first argument,
// because prohibited identifier can be easily ignored
if (FunctionTransformer.isProhibitedIdentifierOfPropertyNode(node, parentNode)) {
return;
}
if (NodeGuards.isAssignmentPatternNode(node) && NodeGuards.isIdentifierNode(node.left)) {
@@ -150,10 +169,12 @@ export class FunctionTransformer extends AbstractNodeTransformer {
}
/**
* Should to ignore all identifiers that related to shorthand properties
* Should ignore all shorthand `key` identifiers of the `PropertyNode`
*/
if (FunctionTransformer.isProhibitedPropertyNode(node)) {
if (FunctionTransformer.isProhibitedIdentifierOfShorthandPropertyNode(node)) {
ignoredIdentifierNamesSet.add(node.key.name);
return;
}
if (