mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-06-14 07:02:44 -05:00
Merge branch 'generateFactoryMethods' into generateTransformMethods
This commit is contained in:
@@ -545,6 +545,7 @@ function generateFactory(outputFile: string) {
|
||||
writer.writeLine();
|
||||
writer.increaseIndent();
|
||||
writeCreateAndUpdateFunctions();
|
||||
writeCloneFunction();
|
||||
writer.decreaseIndent();
|
||||
writer.write(`}`);
|
||||
writer.writeLine();
|
||||
@@ -581,31 +582,21 @@ function generateFactory(outputFile: string) {
|
||||
|
||||
writer.write(`export function create${syntaxNode.kindName}(`);
|
||||
|
||||
let first = true;
|
||||
for (let member of syntaxNode.members) {
|
||||
if (!first) {
|
||||
writer.write(`, `);
|
||||
|
||||
|
||||
}
|
||||
else {
|
||||
first = false;
|
||||
}
|
||||
|
||||
let type =
|
||||
member.isNodeArray ? `Array<${member.elementTypeName}>` :
|
||||
member.isModifiersArray ? `Array<Node>` :
|
||||
member.typeName;
|
||||
|
||||
writer.write(`${member.paramName}?: ${type}`);
|
||||
writer.write(`${member.paramName}?: ${type}, `);
|
||||
}
|
||||
|
||||
writer.write(`): ${syntaxNode.typeName} {`);
|
||||
writer.write(`location?: TextRange, flags?: NodeFlags): ${syntaxNode.typeName} {`);
|
||||
writer.writeLine();
|
||||
|
||||
writer.increaseIndent();
|
||||
if (syntaxNode.members.length) {
|
||||
writer.write(`let node = createNode<${syntaxNode.typeName}>(SyntaxKind.${syntaxNode.kindName});`);
|
||||
writer.write(`let node = createNode<${syntaxNode.typeName}>(SyntaxKind.${syntaxNode.kindName}, location, flags);`);
|
||||
writer.writeLine();
|
||||
if (syntaxNode.members.length > 1) {
|
||||
writer.write(`if (arguments.length) {`);
|
||||
@@ -637,7 +628,7 @@ function generateFactory(outputFile: string) {
|
||||
writer.writeLine();
|
||||
}
|
||||
else {
|
||||
writer.write(`return createNode<${syntaxNode.typeName}>(SyntaxKind.${syntaxNode.kindName});`);
|
||||
writer.write(`return createNode<${syntaxNode.typeName}>(SyntaxKind.${syntaxNode.kindName}, location, flags);`);
|
||||
writer.writeLine();
|
||||
}
|
||||
|
||||
@@ -734,6 +725,58 @@ function generateFactory(outputFile: string) {
|
||||
writer.writeLine();
|
||||
}
|
||||
|
||||
function writeCloneFunction() {
|
||||
writer.write(`export function cloneNode<TNode extends Node>(node: TNode): TNode;`);
|
||||
writer.writeLine();
|
||||
|
||||
writer.write(`export function cloneNode(node: Node): Node {`);
|
||||
writer.writeLine();
|
||||
writer.increaseIndent();
|
||||
|
||||
writer.write(`if (!node) {`);
|
||||
writer.writeLine();
|
||||
writer.increaseIndent();
|
||||
|
||||
writer.write(`return node;`);
|
||||
writer.writeLine();
|
||||
|
||||
writer.decreaseIndent();
|
||||
writer.write(`}`);
|
||||
writer.writeLine();
|
||||
|
||||
writer.write(`switch (node.kind) {`);
|
||||
writer.writeLine();
|
||||
writer.increaseIndent();
|
||||
|
||||
for (let syntaxNode of syntax) {
|
||||
if (!syntaxNode.options.create) {
|
||||
continue;
|
||||
}
|
||||
|
||||
writer.write(`case SyntaxKind.${syntaxNode.kindName}:`);
|
||||
writer.writeLine();
|
||||
writer.increaseIndent();
|
||||
|
||||
writer.write(`return factory.create${syntaxNode.kindName}(`);
|
||||
for (let member of syntaxNode.members) {
|
||||
writer.write(`(<${syntaxNode.typeName}>node).${member.propertyName}, `);
|
||||
}
|
||||
|
||||
writer.write(`/*location*/ undefined, node.flags);`);
|
||||
writer.writeLine();
|
||||
|
||||
writer.decreaseIndent();
|
||||
}
|
||||
|
||||
writer.decreaseIndent();
|
||||
writer.write(`}`);
|
||||
writer.writeLine();
|
||||
|
||||
writer.decreaseIndent();
|
||||
writer.write(`}`);
|
||||
writer.writeLine();
|
||||
}
|
||||
|
||||
function writeUpdateFunction(syntaxNode: SyntaxNode) {
|
||||
if (!syntaxNode.options.update || !hasChildNodes(syntaxNode)) {
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user