mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-06-13 22:00:59 -05:00
Automatic line wrapping in factory.generated.ts
This commit is contained in:
@@ -785,7 +785,7 @@ function discover() {
|
||||
}
|
||||
|
||||
function generate(outputFile: string) {
|
||||
writer = createTextWriter(host.getNewLine());
|
||||
writer = createLineWrappingTextWriter(host.getNewLine(), columnWrap);
|
||||
writer.write(`// <auto-generated />`);
|
||||
writer.writeLine();
|
||||
writer.write(`/// <reference path="parser.ts" />`);
|
||||
@@ -826,46 +826,26 @@ function writeIsNodeFunctions() {
|
||||
function writeCreateFunction(syntaxNode: SyntaxNode) {
|
||||
writer.write(`export function create${syntaxNode.kindText}(`);
|
||||
|
||||
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.param}?: Array<${member.elementType}>` :
|
||||
member.isModifiersArray ? `${member.param}?: Array<Node>` :
|
||||
`${member.param}?: ${member.type}`;
|
||||
|
||||
if (writer.getColumn() >= columnWrap - paramText.length) {
|
||||
writer.writeLine();
|
||||
if (!indented) {
|
||||
indented = true;
|
||||
writer.increaseIndent();
|
||||
}
|
||||
else {
|
||||
first = false;
|
||||
}
|
||||
|
||||
let type =
|
||||
member.isNodeArray ? `Array<${member.elementType}>` :
|
||||
member.isModifiersArray ? `Array<Node>` :
|
||||
member.type;
|
||||
|
||||
writer.write(paramText);
|
||||
writer.write(`${member.param}?: ${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) {
|
||||
writer.write(`let node = createNode<${syntaxNode.typeName}>(SyntaxKind.${syntaxNode.kindText});`);
|
||||
@@ -927,46 +907,22 @@ function writeUpdateFunction(syntaxNode: SyntaxNode) {
|
||||
|
||||
writer.write(`export function update${syntaxNode.kindText}(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 type =
|
||||
member.isNodeArray ? `Array<${member.elementType}>` :
|
||||
member.isModifiersArray ? `Array<Node>` :
|
||||
member.type;
|
||||
|
||||
let paramText =
|
||||
member.isNodeArray ? `${member.param}: Array<${member.elementType}>` :
|
||||
member.isModifiersArray ? `${member.param}: Array<Node>` :
|
||||
`${member.param}: ${member.type}`;
|
||||
|
||||
if (writer.getColumn() >= columnWrap - paramText.length) {
|
||||
writer.writeLine();
|
||||
if (!indented) {
|
||||
indented = true;
|
||||
writer.increaseIndent();
|
||||
}
|
||||
}
|
||||
|
||||
writer.write(paramText);
|
||||
writer.write(`, ${member.param}: ${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();
|
||||
|
||||
@@ -984,25 +940,11 @@ function writeUpdateFunction(syntaxNode: SyntaxNode) {
|
||||
writer.write(` || `);
|
||||
}
|
||||
|
||||
let conditionText = `${member.param} !== node.${member.property}`;
|
||||
if (writer.getColumn() >= columnWrap - conditionText.length) {
|
||||
writer.writeLine();
|
||||
if (!indented) {
|
||||
indented = true;
|
||||
writer.increaseIndent();
|
||||
}
|
||||
}
|
||||
|
||||
writer.write(conditionText);
|
||||
writer.write(`${member.param} !== node.${member.property}`);
|
||||
}
|
||||
|
||||
writer.write(`) {`);
|
||||
writer.writeLine();
|
||||
if (indented) {
|
||||
writer.decreaseIndent();
|
||||
indented = false;
|
||||
}
|
||||
|
||||
writer.increaseIndent();
|
||||
|
||||
writer.write(`let newNode = create${syntaxNode.kindText}(`);
|
||||
@@ -1109,4 +1051,25 @@ function getCompilerOptions() {
|
||||
options.noResolve = true;
|
||||
options.noLib = true;
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user