Merge pull request #24335 from armanio123/FixObjectLiteralExpression

Fix object literal expression
This commit is contained in:
Armando Aguirre 2018-05-22 15:33:01 -07:00 committed by GitHub
commit 4e88e3c6eb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 24 additions and 15 deletions

View File

@ -482,8 +482,10 @@ namespace ts.formatting {
return findFirstNonWhitespaceCharacterAndColumn(startPos, endPos, sourceFile, options).column;
}
function nodeContentIsAlwaysIndented(kind: SyntaxKind): boolean {
switch (kind) {
export function nodeWillIndentChild(settings: FormatCodeSettings | undefined, parent: TextRangeWithKind, child: TextRangeWithKind | undefined, sourceFile: SourceFileLike | undefined, indentByDefault: boolean): boolean {
const childKind = child ? child.kind : SyntaxKind.Unknown;
switch (parent.kind) {
case SyntaxKind.ExpressionStatement:
case SyntaxKind.ClassDeclaration:
case SyntaxKind.ClassExpression:
@ -505,7 +507,6 @@ namespace ts.formatting {
case SyntaxKind.CallExpression:
case SyntaxKind.NewExpression:
case SyntaxKind.VariableStatement:
case SyntaxKind.VariableDeclaration:
case SyntaxKind.ExportAssignment:
case SyntaxKind.ReturnStatement:
case SyntaxKind.ConditionalExpression:
@ -528,24 +529,14 @@ namespace ts.formatting {
case SyntaxKind.NamedImports:
case SyntaxKind.ExportSpecifier:
case SyntaxKind.ImportSpecifier:
case SyntaxKind.PropertyAssignment:
case SyntaxKind.PropertyDeclaration:
return true;
}
return false;
}
export function nodeWillIndentChild(settings: FormatCodeSettings | undefined, parent: TextRangeWithKind, child: TextRangeWithKind | undefined, sourceFile: SourceFileLike | undefined, indentByDefault: boolean): boolean {
const childKind = child ? child.kind : SyntaxKind.Unknown;
switch (parent.kind) {
case SyntaxKind.VariableDeclaration:
case SyntaxKind.PropertyAssignment:
case SyntaxKind.ObjectLiteralExpression:
if (!settings.indentMultiLineObjectLiteralBeginningOnBlankLine && sourceFile && childKind === SyntaxKind.ObjectLiteralExpression) {
return rangeIsOnOneLine(sourceFile, child);
}
break;
return true;
case SyntaxKind.DoStatement:
case SyntaxKind.WhileStatement:
case SyntaxKind.ForInStatement:
@ -604,7 +595,7 @@ namespace ts.formatting {
* @param isNextChild If true, we are judging indent of a hypothetical child *after* this one, not the current child.
*/
export function shouldIndentChildNode(settings: FormatCodeSettings | undefined, parent: TextRangeWithKind, child?: Node, sourceFile?: SourceFileLike, isNextChild = false): boolean {
return (nodeContentIsAlwaysIndented(parent.kind) || nodeWillIndentChild(settings, parent, child, sourceFile, /*indentByDefault*/ false))
return nodeWillIndentChild(settings, parent, child, sourceFile, /*indentByDefault*/ false)
&& !(isNextChild && child && isControlFlowEndingStatement(child.kind, parent));
}

View File

@ -0,0 +1,18 @@
/// <reference path='fourslash.ts'/>
//// var a =
//// {/*1*/}
////
//// var b = {
//// outer:
//// {/*2*/}
//// }
function verifyIndentationAfterNewLine(marker: string, indentation: number): void {
goTo.marker(marker);
edit.insert("\n");
verify.indentationIs(indentation);
}
verifyIndentationAfterNewLine("1", 0);
verifyIndentationAfterNewLine("2", 4);