Ensure consistent variable modifiers

'var' is a distinct local or mutable global, 'let' a shared local
This commit is contained in:
dcodeIO
2018-03-13 02:32:10 +01:00
parent 7ee6e1cf7b
commit 23a7db4dc3
33 changed files with 736 additions and 570 deletions

View File

@ -314,7 +314,7 @@ export function serializeNode(node: Node, sb: string[]): void {
}
export function serializeSource(source: Source, sb: string[]): void {
for (var i = 0, k = source.statements.length; i < k; ++i) {
for (let i = 0, k = source.statements.length; i < k; ++i) {
serializeTerminatedStatement(source.statements[i], sb);
}
}
@ -329,11 +329,11 @@ export function serializeTypeNode(node: CommonTypeNode, sb: string[]): void {
var typeNode = <TypeNode>node;
serializeIdentifierExpression(<IdentifierExpression>typeNode.name, sb);
if (typeNode.typeArguments) {
var k = typeNode.typeArguments.length;
if (k) {
let numTypeArguments = typeNode.typeArguments.length;
if (numTypeArguments) {
sb.push("<");
serializeTypeNode(typeNode.typeArguments[0], sb);
for (var i = 1; i < k; ++i) {
for (let i = 1; i < numTypeArguments; ++i) {
sb.push(", ");
serializeTypeNode(typeNode.typeArguments[i], sb);
}
@ -393,10 +393,10 @@ export function serializeIdentifierExpression(node: IdentifierExpression, sb: st
export function serializeArrayLiteralExpression(node: ArrayLiteralExpression, sb: string[]): void {
sb.push("[");
var elements = node.elementExpressions;
var k = elements.length;
if (k) {
var numElements = elements.length;
if (numElements) {
if (elements[0]) serializeExpression(<Expression>elements[0], sb);
for (var i = 1; i < k; ++i) {
for (let i = 1; i < numElements; ++i) {
sb.push(", ");
if (elements[i]) serializeExpression(<Expression>elements[i], sb);
}
@ -450,11 +450,12 @@ export function serializeCallExpression(node: CallExpression, sb: string[]): voi
}
export function serializeCommaExpression(node: CommaExpression, sb: string[]): void {
var k = assert(node.expressions.length);
serializeExpression(node.expressions[0], sb);
for (var i = 1; i < k; ++i) {
var expressions = node.expressions;
var numExpressions = assert(expressions.length);
serializeExpression(expressions[0], sb);
for (let i = 1; i < numExpressions; ++i) {
sb.push(",");
serializeExpression(node.expressions[i], sb);
serializeExpression(expressions[i], sb);
}
}
@ -525,7 +526,8 @@ export function serializeStringLiteral(str: string, sb: string[], singleQuoted:
var off = 0;
var quote = singleQuoted ? "'" : "\"";
sb.push(quote);
for (var i = 0, k = str.length; i < k;) {
var i = 0;
for (let k = str.length; i < k;) {
switch (str.charCodeAt(i)) {
case CharCode.NULL: {
if (i > off) sb.push(str.substring(off, off = i + 1));
@ -680,7 +682,7 @@ function serializeTerminatedStatement(statement: Statement, sb: string[]): void
) {
sb.push(";\n");
} else {
var last = sb[sb.length - 1];
let last = sb[sb.length - 1];
if (last.length && last.charCodeAt(last.length - 1) == CharCode.CLOSEBRACE) {
sb.push("\n");
} else {
@ -690,71 +692,81 @@ function serializeTerminatedStatement(statement: Statement, sb: string[]): void
}
export function serializeBlockStatement(node: BlockStatement, sb: string[]): void {
var statements = node.statements;
sb.push("{\n");
for (var i = 0, k = node.statements.length; i < k; ++i) {
serializeTerminatedStatement(node.statements[i], sb);
for (let i = 0, k = statements.length; i < k; ++i) {
serializeTerminatedStatement(statements[i], sb);
}
sb.push("}");
}
export function serializeBreakStatement(node: BreakStatement, sb: string[]): void {
if (node.label) {
var label = node.label;
if (label) {
sb.push("break ");
serializeIdentifierExpression(node.label, sb);
serializeIdentifierExpression(label, sb);
} else {
sb.push("break");
}
}
export function serializeContinueStatement(node: ContinueStatement, sb: string[]): void {
if (node.label) {
var label = node.label;
if (label) {
sb.push("continue ");
serializeIdentifierExpression(node.label, sb);
serializeIdentifierExpression(label, sb);
} else {
sb.push("continue");
}
}
export function serializeClassDeclaration(node: ClassDeclaration, sb: string[]): void {
var i: i32, k: i32;
if (node.decorators) {
for (i = 0, k = node.decorators.length; i < k; ++i) {
serializeDecorator(node.decorators[i], sb);
var decorators = node.decorators;
if (decorators) {
for (let i = 0, k = decorators.length; i < k; ++i) {
serializeDecorator(decorators[i], sb);
sb.push("\n");
}
}
if (node.modifiers) {
for (i = 0, k = node.modifiers.length; i < k; ++i) {
serializeModifier(node.modifiers[i], sb);
var modifiers = node.modifiers;
if (modifiers) {
for (let i = 0, k = modifiers.length; i < k; ++i) {
serializeModifier(modifiers[i], sb);
sb.push(" ");
}
}
sb.push("class ");
serializeIdentifierExpression(node.name, sb);
if (k = node.typeParameters.length) {
var typeParameters = node.typeParameters;
var numTypeParameters = typeParameters.length;
if (numTypeParameters) {
sb.push("<");
serializeTypeParameter(node.typeParameters[0], sb);
for (i = 1; i < k; ++i) {
serializeTypeParameter(typeParameters[0], sb);
for (let i = 1; i < numTypeParameters; ++i) {
sb.push(", ");
serializeTypeParameter(node.typeParameters[i], sb);
}
sb.push(">");
}
if (node.extendsType) {
var extendsType = node.extendsType;
if (extendsType) {
sb.push(" extends ");
serializeTypeNode(node.extendsType, sb);
serializeTypeNode(extendsType, sb);
}
if (k = node.implementsTypes.length) {
var implementsTypes = node.implementsTypes;
var numImplementsTypes = implementsTypes.length;
if (numImplementsTypes) {
sb.push(" implements ");
serializeTypeNode(node.implementsTypes[0], sb);
for (i = 1; i < k; ++i) {
serializeTypeNode(implementsTypes[0], sb);
for (let i = 1; i < numImplementsTypes; ++i) {
sb.push(", ");
serializeTypeNode(node.implementsTypes[i], sb);
serializeTypeNode(implementsTypes[i], sb);
}
}
sb.push(" {\n");
for (i = 0, k = node.members.length; i < k; ++i) {
serializeTerminatedStatement(node.members[i], sb);
var members = node.members;
for (let i = 0, k = members.length; i < k; ++i) {
serializeTerminatedStatement(members[i], sb);
}
sb.push("}");
}
@ -975,98 +987,110 @@ export function serializeIfStatement(node: IfStatement, sb: string[]): void {
sb.push("if (");
serializeExpression(node.condition, sb);
sb.push(") ");
serializeStatement(node.ifTrue, sb);
if (node.ifTrue.kind != NodeKind.BLOCK) {
var ifTrue = node.ifTrue;
serializeStatement(ifTrue, sb);
if (ifTrue.kind != NodeKind.BLOCK) {
sb.push(";\n");
}
if (node.ifFalse) {
if (node.ifTrue.kind == NodeKind.BLOCK) {
var ifFalse = node.ifFalse;
if (ifFalse) {
if (ifTrue.kind == NodeKind.BLOCK) {
sb.push(" else ");
} else {
sb.push("else ");
}
serializeStatement(node.ifFalse, sb);
serializeStatement(ifFalse, sb);
}
}
export function serializeImportDeclaration(node: ImportDeclaration, sb: string[]): void {
serializeIdentifierExpression(node.externalName, sb);
if (node.externalName.text != node.name.text) {
var externalName = node.externalName;
var name = node.name;
serializeIdentifierExpression(externalName, sb);
if (externalName.text != name.text) {
sb.push(" as ");
serializeIdentifierExpression(node.name, sb);
serializeIdentifierExpression(name, sb);
}
}
export function serializeImportStatement(node: ImportStatement, sb: string[]): void {
sb.push("import ");
if (node.declarations) {
var k = node.declarations.length;
if (k) {
var declarations = node.declarations;
var namespaceName = node.namespaceName;
if (declarations) {
let numDeclarations = declarations.length;
if (numDeclarations) {
sb.push("{\n");
serializeImportDeclaration(node.declarations[0], sb);
for (var i = 1; i < k; ++i) {
serializeImportDeclaration(declarations[0], sb);
for (let i = 1; i < numDeclarations; ++i) {
sb.push(",\n");
serializeImportDeclaration(node.declarations[i], sb);
serializeImportDeclaration(declarations[i], sb);
}
sb.push("\n} from ");
} else {
sb.push("{} from ");
}
} else if (node.namespaceName) {
} else if (namespaceName) {
sb.push("* as ");
serializeIdentifierExpression(node.namespaceName, sb);
serializeIdentifierExpression(namespaceName, sb);
sb.push(" from ");
}
serializeStringLiteralExpression(node.path, sb);
}
export function serializeInterfaceDeclaration(node: InterfaceDeclaration, sb: string[]): void {
var i: i32, k: i32;
if (node.decorators) {
for (i = 0, k = node.decorators.length; i < k; ++i) {
serializeDecorator(node.decorators[i], sb);
var decorators = node.decorators;
if (decorators) {
for (let i = 0, k = decorators.length; i < k; ++i) {
serializeDecorator(decorators[i], sb);
sb.push("\n");
}
}
if (node.modifiers) {
for (i = 0, k = node.modifiers.length; i < k; ++i) {
serializeModifier(node.modifiers[i], sb);
var modifiers = node.modifiers;
if (modifiers) {
for (let i = 0, k = modifiers.length; i < k; ++i) {
serializeModifier(modifiers[i], sb);
sb.push(" ");
}
}
sb.push("interface ");
serializeIdentifierExpression(node.name, sb);
if (k = node.typeParameters.length) {
var typeParameters = node.typeParameters;
var numTypeParameters = typeParameters.length;
if (numTypeParameters) {
sb.push("<");
serializeTypeParameter(node.typeParameters[0], sb);
for (i = 0; i < k; ++i) {
for (let i = 0; i < numTypeParameters; ++i) {
sb.push(", ");
serializeTypeParameter(node.typeParameters[i], sb);
}
sb.push(">");
}
if (node.extendsType) {
var extendsType = node.extendsType;
if (extendsType) {
sb.push(" extends ");
serializeTypeNode(node.extendsType, sb);
serializeTypeNode(extendsType, sb);
}
sb.push(" {\n");
for (i = 0, k = node.members.length; i < k; ++i) {
serializeTerminatedStatement(node.members[i], sb);
var members = node.members;
for (let i = 0, k = members.length; i < k; ++i) {
serializeTerminatedStatement(members[i], sb);
}
sb.push("}");
}
export function serializeMethodDeclaration(node: MethodDeclaration, sb: string[]): void {
var i: i32, k: i32;
if (node.decorators) {
for (i = 0, k = node.decorators.length; i < k; ++i) {
serializeDecorator(node.decorators[i], sb);
var decorators = node.decorators;
if (decorators) {
for (let i = 0, k = decorators.length; i < k; ++i) {
serializeDecorator(decorators[i], sb);
sb.push("\n");
}
}
if (node.modifiers) {
for (i = 0, k = node.modifiers.length; i < k; ++i) {
serializeModifier(node.modifiers[i], sb);
var modifiers = node.modifiers;
if (modifiers) {
for (let i = 0, k = modifiers.length; i < k; ++i) {
serializeModifier(modifiers[i], sb);
sb.push(" ");
}
}
@ -1074,51 +1098,56 @@ export function serializeMethodDeclaration(node: MethodDeclaration, sb: string[]
}
export function serializeNamespaceDeclaration(node: NamespaceDeclaration, sb: string[]): void {
var i: i32, k: i32;
if (node.decorators) {
for (i = 0, k = node.decorators.length; i < k; ++i) {
serializeDecorator(node.decorators[i], sb);
var decorators = node.decorators;
if (decorators) {
for (let i = 0, k = decorators.length; i < k; ++i) {
serializeDecorator(decorators[i], sb);
sb.push("\n");
}
}
if (node.modifiers) {
for (i = 0, k = node.modifiers.length; i < k; ++i) {
serializeModifier(node.modifiers[i], sb);
var modifiers = node.modifiers;
if (modifiers) {
for (let i = 0, k = modifiers.length; i < k; ++i) {
serializeModifier(modifiers[i], sb);
sb.push(" ");
}
}
sb.push("namespace ");
serializeIdentifierExpression(node.name, sb);
sb.push(" {\n");
for (i = 0, k = node.members.length; i < k; ++i) {
serializeTerminatedStatement(node.members[i], sb);
var members = node.members;
for (let i = 0, k = members.length; i < k; ++i) {
serializeTerminatedStatement(members[i], sb);
}
sb.push("}");
}
export function serializeReturnStatement(node: ReturnStatement, sb: string[]): void {
if (node.value) {
var value = node.value;
if (value) {
sb.push("return ");
serializeExpression(node.value, sb);
serializeExpression(value, sb);
} else {
sb.push("return");
}
}
export function serializeSwitchCase(node: SwitchCase, sb: string[]): void {
if (node.label) {
var label = node.label;
if (label) {
sb.push("case ");
serializeExpression(node.label, sb);
serializeExpression(label, sb);
sb.push(":\n");
} else {
sb.push("default:\n");
}
var k = node.statements.length;
if (k) {
serializeTerminatedStatement(node.statements[0], sb);
for (var i = 1; i < k; ++i) {
var statements = node.statements;
var numStatements = statements.length;
if (numStatements) {
serializeTerminatedStatement(statements[0], sb);
for (let i = 1; i < numStatements; ++i) {
sb.push("\n");
serializeTerminatedStatement(node.statements[i], sb);
serializeTerminatedStatement(statements[i], sb);
}
}
}
@ -1127,8 +1156,9 @@ export function serializeSwitchStatement(node: SwitchStatement, sb: string[]): v
sb.push("switch (");
serializeExpression(node.condition, sb);
sb.push(") {\n");
for (var i = 0, k = node.cases.length; i < k; ++i) {
serializeSwitchCase(node.cases[i], sb);
var cases = node.cases;
for (let i = 0, k = cases.length; i < k; ++i) {
serializeSwitchCase(cases[i], sb);
sb.push("\n");
}
sb.push("}");
@ -1141,27 +1171,30 @@ export function serializeThrowStatement(node: ThrowStatement, sb: string[]): voi
}
export function serializeTryStatement(node: TryStatement, sb: string[]): void {
var i: i32, k: i32;
sb.push("try {\n");
for (i = 0, k = node.statements.length; i < k; ++i) {
serializeStatement(node.statements[i], sb);
var statements = node.statements;
for (let i = 0, k = statements.length; i < k; ++i) {
serializeStatement(statements[i], sb);
sb.push(";\n");
}
if (node.catchVariable) {
var catchVariable = node.catchVariable;
if (catchVariable) {
sb.push("} catch (");
serializeIdentifierExpression(node.catchVariable, sb);
serializeIdentifierExpression(catchVariable, sb);
sb.push(") {\n");
if (node.catchStatements) {
for (i = 0, k = node.catchStatements.length; i < k; ++i) {
serializeStatement(node.catchStatements[i], sb);
let catchStatements = node.catchStatements;
if (catchStatements) {
for (let i = 0, k = catchStatements.length; i < k; ++i) {
serializeStatement(catchStatements[i], sb);
sb.push(";\n");
}
}
}
if (node.finallyStatements) {
var finallyStatements = node.finallyStatements;
if (finallyStatements) {
sb.push("} finally {\n");
for (i = 0, k = node.finallyStatements.length; i < k; ++i) {
serializeStatement(node.finallyStatements[i], sb);
for (let i = 0, k = finallyStatements.length; i < k; ++i) {
serializeStatement(finallyStatements[i], sb);
sb.push(";\n");
}
}
@ -1169,28 +1202,32 @@ export function serializeTryStatement(node: TryStatement, sb: string[]): void {
}
export function serializeTypeDeclaration(node: TypeDeclaration, sb: string[]): void {
var i: i32, k: i32;
if (node.decorators) {
for (i = 0, k = node.decorators.length; i < k; ++i) {
serializeDecorator(node.decorators[i], sb);
var decorators = node.decorators;
if (decorators) {
for (let i = 0, k = decorators.length; i < k; ++i) {
serializeDecorator(decorators[i], sb);
sb.push("\n");
}
}
if (node.modifiers) {
for (i = 0, k = node.modifiers.length; i < k; ++i) {
serializeModifier(node.modifiers[i], sb);
var modifiers = node.modifiers;
if (modifiers) {
for (let i = 0, k = modifiers.length; i < k; ++i) {
serializeModifier(modifiers[i], sb);
sb.push(" ");
}
}
sb.push("type ");
serializeIdentifierExpression(node.name, sb);
var typeParameters = node.typeParameters;
if (typeParameters && (k = typeParameters.length)) {
sb.push("<");
for (i = 0; i < k; ++i) {
serializeTypeParameter(typeParameters[i], sb);
if (typeParameters) {
let numTypeParameters = typeParameters.length;
if (numTypeParameters) {
sb.push("<");
for (let i = 0; i < numTypeParameters; ++i) {
serializeTypeParameter(typeParameters[i], sb);
}
sb.push(">");
}
sb.push(">");
}
sb.push(" = ");
serializeTypeNode(node.type, sb);
@ -1198,28 +1235,31 @@ export function serializeTypeDeclaration(node: TypeDeclaration, sb: string[]): v
export function serializeVariableDeclaration(node: VariableDeclaration, sb: string[]): void {
serializeIdentifierExpression(node.name, sb);
if (node.type) {
var type = node.type;
if (type) {
sb.push(": ");
serializeTypeNode(node.type, sb);
serializeTypeNode(type, sb);
}
if (node.initializer) {
var initializer = node.initializer;
if (initializer) {
sb.push(" = ");
serializeExpression(node.initializer, sb);
serializeExpression(initializer, sb);
}
}
export function serializeVariableStatement(node: VariableStatement, sb: string[]): void {
var i: i32, k: i32;
if (node.decorators) {
for (i = 0, k = node.decorators.length; i < k; ++i) {
serializeDecorator(node.decorators[i], sb);
var decorators = node.decorators;
if (decorators) {
for (let i = 0, k = decorators.length; i < k; ++i) {
serializeDecorator(decorators[i], sb);
sb.push("\n");
}
}
var isConst = false, isLet = false;
if (node.modifiers) {
for (i = 0, k = node.modifiers.length; i < k; ++i) {
var modifier = node.modifiers[i];
var modifiers = node.modifiers;
if (modifiers) {
for (let i = 0, k = modifiers.length; i < k; ++i) {
let modifier = modifiers[i];
switch (modifier.modifierKind) {
case ModifierKind.CONST: {
assert(!isLet);
@ -1240,9 +1280,10 @@ export function serializeVariableStatement(node: VariableStatement, sb: string[]
}
}
sb.push(isConst ? "const " : isLet ? "let " : "var ");
k = assert(node.declarations.length);
var declarations = node.declarations;
var numDeclarations = assert(declarations.length);
serializeVariableDeclaration(node.declarations[0], sb);
for (i = 1; i < k; ++i) {
for (let i = 1; i < numDeclarations; ++i) {
sb.push(", ");
serializeVariableDeclaration(node.declarations[i], sb);
}
@ -1260,14 +1301,15 @@ export function serializeWhileStatement(node: WhileStatement, sb: string[]): voi
export function serializeDecorator(node: DecoratorNode, sb: string[]): void {
sb.push("@");
serializeExpression(node.name, sb);
if (node.arguments) {
var args = node.arguments;
if (args) {
sb.push("(");
var k = node.arguments.length;
if (k) {
serializeExpression(node.arguments[0], sb);
for (var i = 1; i < k; ++i) {
let numArgs = args.length;
if (numArgs) {
serializeExpression(args[0], sb);
for (let i = 1; i < numArgs; ++i) {
sb.push(", ");
serializeExpression(node.arguments[i], sb);
serializeExpression(args[i], sb);
}
}
sb.push(")");
@ -1279,21 +1321,24 @@ export function serializeModifier(node: ModifierNode, sb: string[]): void {
}
export function serializeParameter(node: ParameterNode, sb: string[]): void {
if (node.parameterKind == ParameterKind.REST) {
var kind = node.parameterKind;
if (kind == ParameterKind.REST) {
sb.push("...");
}
serializeIdentifierExpression(node.name, sb);
if (node.type) {
if (node.parameterKind == ParameterKind.OPTIONAL && !node.initializer) {
var type = node.type;
var initializer = node.initializer;
if (type) {
if (kind == ParameterKind.OPTIONAL && !initializer) {
sb.push("?: ");
} else {
sb.push(": ");
}
serializeTypeNode(node.type, sb);
serializeTypeNode(type, sb);
}
if (node.initializer) {
if (initializer) {
sb.push(" = ");
serializeExpression(node.initializer, sb);
serializeExpression(initializer, sb);
}
}