mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-06-17 12:19:32 -05:00
Merge branch 'generateFactoryMethods' into generateTransformMethods
This commit is contained in:
@@ -531,7 +531,7 @@ function discover() {
|
||||
}
|
||||
|
||||
function generateFactory(outputFile: string) {
|
||||
let writer = createTextWriter(host.getNewLine());
|
||||
let writer = createLineWrappingTextWriter(host.getNewLine(), columnWrap);
|
||||
writer.write(`// <auto-generated />`);
|
||||
writer.writeLine();
|
||||
writer.write(`/// <reference path="parser.ts" />`);
|
||||
@@ -581,45 +581,27 @@ function generateFactory(outputFile: string) {
|
||||
|
||||
writer.write(`export function create${syntaxNode.kindName}(`);
|
||||
|
||||
let indented = false;
|
||||
for (let i = 0; i < syntaxNode.members.length; ++i) {
|
||||
if (i > 0) {
|
||||
let first = true;
|
||||
for (let member of syntaxNode.members) {
|
||||
if (!first) {
|
||||
writer.write(`, `);
|
||||
|
||||
|
||||
}
|
||||
|
||||
let member = syntaxNode.members[i];
|
||||
let paramText =
|
||||
member.isNodeArray ? `${member.paramName}?: Array<${member.elementTypeName}>` :
|
||||
member.isModifiersArray ? `${member.paramName}?: Array<Node>` :
|
||||
`${member.paramName}?: ${member.typeName}`;
|
||||
|
||||
if (writer.getColumn() >= columnWrap - paramText.length) {
|
||||
writer.writeLine();
|
||||
if (!indented) {
|
||||
indented = true;
|
||||
writer.increaseIndent();
|
||||
}
|
||||
else {
|
||||
first = false;
|
||||
}
|
||||
|
||||
let type =
|
||||
member.isNodeArray ? `Array<${member.elementTypeName}>` :
|
||||
member.isModifiersArray ? `Array<Node>` :
|
||||
member.typeName;
|
||||
|
||||
writer.write(paramText);
|
||||
writer.write(`${member.paramName}?: ${type}`);
|
||||
}
|
||||
|
||||
let returnTypeText = `): ${syntaxNode.typeName} {`;
|
||||
|
||||
if (writer.getColumn() >= columnWrap - returnTypeText.length) {
|
||||
writer.writeLine();
|
||||
if (!indented) {
|
||||
indented = true;
|
||||
writer.increaseIndent();
|
||||
}
|
||||
}
|
||||
|
||||
writer.write(returnTypeText);
|
||||
writer.write(`): ${syntaxNode.typeName} {`);
|
||||
writer.writeLine();
|
||||
if (indented) {
|
||||
writer.decreaseIndent();
|
||||
indented = false;
|
||||
}
|
||||
|
||||
writer.increaseIndent();
|
||||
if (syntaxNode.members.length) {
|
||||
@@ -759,46 +741,23 @@ function generateFactory(outputFile: string) {
|
||||
|
||||
writer.write(`export function update${syntaxNode.kindName}(node: ${syntaxNode.typeName}`);
|
||||
|
||||
let indented = false;
|
||||
for (let i = 0; i < syntaxNode.members.length; ++i) {
|
||||
let member = syntaxNode.members[i];
|
||||
if (member.isFactoryParam) {
|
||||
continue;
|
||||
}
|
||||
|
||||
writer.write(`, `);
|
||||
|
||||
let paramText =
|
||||
member.isNodeArray ? `${member.paramName}: Array<${member.elementTypeName}>` :
|
||||
member.isModifiersArray ? `${member.paramName}: Array<Node>` :
|
||||
`${member.paramName}: ${member.typeName}`;
|
||||
|
||||
if (writer.getColumn() >= columnWrap - paramText.length) {
|
||||
writer.writeLine();
|
||||
if (!indented) {
|
||||
indented = true;
|
||||
writer.increaseIndent();
|
||||
}
|
||||
}
|
||||
|
||||
writer.write(paramText);
|
||||
}
|
||||
|
||||
let returnTypeText = `): ${syntaxNode.typeName} {`;
|
||||
if (writer.getColumn() >= columnWrap - returnTypeText.length) {
|
||||
writer.writeLine();
|
||||
if (!indented) {
|
||||
indented = true;
|
||||
writer.increaseIndent();
|
||||
}
|
||||
|
||||
let type =
|
||||
member.isNodeArray ? `Array<${member.elementTypeName}>` :
|
||||
member.isModifiersArray ? `Array<Node>` :
|
||||
member.typeName;
|
||||
|
||||
writer.write(`, ${member.paramName}: ${type}`);
|
||||
}
|
||||
|
||||
writer.write(returnTypeText);
|
||||
writer.write(`): ${syntaxNode.typeName} {`);
|
||||
writer.writeLine();
|
||||
if (indented) {
|
||||
writer.decreaseIndent();
|
||||
indented = false;
|
||||
}
|
||||
|
||||
writer.increaseIndent();
|
||||
|
||||
@@ -816,25 +775,13 @@ function generateFactory(outputFile: string) {
|
||||
writer.write(` || `);
|
||||
}
|
||||
|
||||
let conditionText = `${member.paramName} !== node.${member.propertyName}`;
|
||||
if (writer.getColumn() >= columnWrap - conditionText.length) {
|
||||
writer.writeLine();
|
||||
if (!indented) {
|
||||
indented = true;
|
||||
writer.increaseIndent();
|
||||
}
|
||||
}
|
||||
|
||||
writer.write(conditionText);
|
||||
writer.write(`${member.paramName} !== node.${member.propertyName}`);
|
||||
}
|
||||
|
||||
|
||||
writer.write(`) {`);
|
||||
writer.writeLine();
|
||||
if (indented) {
|
||||
writer.decreaseIndent();
|
||||
indented = false;
|
||||
}
|
||||
|
||||
|
||||
writer.increaseIndent();
|
||||
|
||||
writer.write(`let newNode = create${syntaxNode.kindName}(`);
|
||||
@@ -1342,6 +1289,27 @@ function getCompilerOptions() {
|
||||
return options;
|
||||
}
|
||||
|
||||
function createLineWrappingTextWriter(newLine: string, maxWidth: number): EmitTextWriter {
|
||||
let writer = createTextWriter(newLine);
|
||||
let noWrap = false;
|
||||
let baseWrite = writer.write;
|
||||
writer.write = writeWrap;
|
||||
return writer;
|
||||
|
||||
function writeWrap(text: string) {
|
||||
let textTrimRight = text.replace(/\s+$/, '');
|
||||
if (writer.getColumn() + textTrimRight.length > maxWidth) {
|
||||
writer.writeLine();
|
||||
writer.increaseIndent();
|
||||
baseWrite(text.replace(/^\s+/, ''));
|
||||
writer.decreaseIndent();
|
||||
}
|
||||
else {
|
||||
baseWrite(text);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function getSymbol(symbols: SymbolTable, name: string, meaning: SymbolFlags) {
|
||||
if (symbols && meaning && hasProperty(symbols, name)) {
|
||||
let symbol = symbols[name];
|
||||
|
||||
Reference in New Issue
Block a user