Removed redundant template literal return statement fix

This commit is contained in:
sanex3339
2018-03-25 23:48:50 +03:00
parent 3ea05aa0e1
commit e2604000bf
2 changed files with 1 additions and 63 deletions
+1 -1
View File
File diff suppressed because one or more lines are too long
@@ -1,12 +1,8 @@
import { inject, injectable, } from 'inversify';
import { ServiceIdentifiers } from '../../container/ServiceIdentifiers';
import * as estraverse from 'estraverse';
import * as ESTree from 'estree';
import { TNodeWithScope } from '../../types/node/TNodeWithScope';
import { TStatement } from '../../types/node/TStatement';
import { IOptions } from '../../interfaces/options/IOptions';
import { IRandomGenerator } from '../../interfaces/utils/IRandomGenerator';
import { IVisitor } from '../../interfaces/node-transformers/IVisitor';
@@ -16,7 +12,6 @@ import { TransformationStage } from '../../enums/node-transformers/Transformatio
import { AbstractNodeTransformer } from '../AbstractNodeTransformer';
import { NodeFactory } from '../../node/NodeFactory';
import { NodeGuards } from '../../node/NodeGuards';
import { NodeUtils } from '../../node/NodeUtils';
/**
* Transform ES2015 template literals to ES5
@@ -51,11 +46,6 @@ export class TemplateLiteralTransformer extends AbstractNodeTransformer {
switch (transformationStage) {
case TransformationStage.Converting:
return {
enter: (node: ESTree.Node, parentNode: ESTree.Node | null) => {
if (parentNode && NodeGuards.isReturnStatementNode(node) && node.argument === null) {
return this.fixEsprimaReturnStatementTemplateLiteralNode(node);
}
},
leave: (node: ESTree.Node, parentNode: ESTree.Node | null) => {
if (parentNode && NodeGuards.isTemplateLiteralNode(node)) {
return this.transformNode(node, parentNode);
@@ -119,56 +109,4 @@ export class TemplateLiteralTransformer extends AbstractNodeTransformer {
return nodes[0];
}
/**
* @param {ReturnStatement} returnStatementNode
* @returns {Node | VisitorOption}
*/
private fixEsprimaReturnStatementTemplateLiteralNode (returnStatementNode: ESTree.ReturnStatement): ESTree.Node | void {
const scopeNode: TNodeWithScope = NodeUtils.getScopeOfNode(returnStatementNode);
const scopeBody: TStatement[] = !NodeGuards.isSwitchCaseNode(scopeNode)
? scopeNode.body
: scopeNode.consequent;
const indexInScope: number = scopeBody.indexOf(returnStatementNode);
// in incorrect AST-tree return statement node should be penultimate
if (indexInScope !== scopeBody.length - 2) {
return;
}
const nextSiblingStatementNode: TStatement | null = scopeBody[indexInScope + 1];
if (!nextSiblingStatementNode || !NodeGuards.isExpressionStatementNode(nextSiblingStatementNode)) {
return;
}
let isSiblingStatementHasTemplateLiteralNode: boolean = false;
estraverse.traverse(nextSiblingStatementNode, {
enter: (node: ESTree.Node, parentNode: ESTree.Node | null): void | estraverse.VisitorOption => {
if (!NodeGuards.isTemplateLiteralNode(node)) {
return;
}
isSiblingStatementHasTemplateLiteralNode = true;
return estraverse.VisitorOption.Break;
}
});
if (!isSiblingStatementHasTemplateLiteralNode) {
return;
}
returnStatementNode.argument = nextSiblingStatementNode.expression;
scopeBody.pop();
if (!NodeGuards.isSwitchCaseNode(scopeNode)) {
scopeNode.body = [...scopeBody];
} else {
scopeNode.consequent = <ESTree.Statement[]>[...scopeBody];
}
return returnStatementNode;
}
}