Skip to content

Commit d9b68e9

Browse files
author
Arthur Ozga
committed
Type Literal and Binding Name formatting
1 parent b00aea5 commit d9b68e9

File tree

3 files changed

+29
-7
lines changed

3 files changed

+29
-7
lines changed

src/compiler/checker.ts

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2602,7 +2602,8 @@ namespace ts {
26022602
context.inObjectTypeLiteral = true;
26032603
const members = createTypeNodesFromResolvedType(resolved);
26042604
context.inObjectTypeLiteral = saveInObjectTypeLiteral;
2605-
return createTypeLiteralNode(members);
2605+
const typeLiteralNode = createTypeLiteralNode(members);
2606+
return setEmitFlags(typeLiteralNode, EmitFlags.ToStringFormatting);
26062607
}
26072608

26082609
function shouldAddParenthesisAroundFunctionType(callSignature: Signature, context: NodeBuilderContext) {
@@ -2811,8 +2812,14 @@ namespace ts {
28112812
const parameterDeclaration = <ParameterDeclaration>getDeclarationOfKind(parameterSymbol, SyntaxKind.Parameter);
28122813
const parameterType = getTypeOfSymbol(parameterSymbol);
28132814
const parameterTypeNode = typeToTypeNodeHelper(parameterType, context);
2814-
const name = getDeepSynthesizedClone(parameterDeclaration.name);
2815-
2815+
let name: BindingName;
2816+
if (parameterDeclaration.name.kind === SyntaxKind.Identifier) {
2817+
name = getSynthesizedClone(parameterDeclaration.name);
2818+
}
2819+
else {
2820+
Debug.assert(parameterDeclaration.name.kind === SyntaxKind.ArrayBindingPattern || parameterDeclaration.name.kind === SyntaxKind.ObjectBindingPattern);
2821+
name = cloneBindingName(parameterDeclaration.name);
2822+
}
28162823
let questionToken: Token<SyntaxKind.QuestionToken> | undefined;
28172824
let initializer: Expression | undefined;
28182825
if (isOptionalParameter(parameterDeclaration)) {
@@ -2833,6 +2840,18 @@ namespace ts {
28332840
parameterTypeNode,
28342841
initializer);
28352842
return parameterNode;
2843+
2844+
function cloneBindingName(node: BindingName): BindingName {
2845+
return <BindingName>elideInitializerAndSetEmitFlags(node);
2846+
function elideInitializerAndSetEmitFlags(node: Node): Node {
2847+
const visited = visitEachChild(node, elideInitializerAndSetEmitFlags, nullTransformationContext, /*nodesVisitor*/ undefined, elideInitializerAndSetEmitFlags);
2848+
const clone = nodeIsSynthesized(visited) ? visited : getSynthesizedClone(visited);
2849+
if (clone.kind === SyntaxKind.BindingElement) {
2850+
(<BindingElement>clone).initializer = undefined;
2851+
}
2852+
return setEmitFlags(clone, EmitFlags.ToStringFormatting);
2853+
}
2854+
}
28362855
}
28372856

28382857
// TODO: add meaning: SymbolFlags argument.

src/compiler/emitter.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -956,7 +956,7 @@ namespace ts {
956956
function emitTypeLiteral(node: TypeLiteralNode) {
957957
write("{");
958958
if (node.members.length > 0) {
959-
emitList(node, node.members, ListFormat.SingleLineTypeLiteralMembers);
959+
emitList(node, node.members, getEmitFlags(node) & EmitFlags.ToStringFormatting ? ListFormat.SingleLineTypeLiteralMembers : ListFormat.MultiLineTypeLiteralMembers);
960960
}
961961
write("}");
962962
}
@@ -1037,7 +1037,7 @@ namespace ts {
10371037
}
10381038
else {
10391039
write("{");
1040-
emitList(node, elements, ListFormat.ObjectBindingPatternElements);
1040+
emitList(node, elements, getEmitFlags(node) & EmitFlags.ToStringFormatting ? ListFormat.ObjectBindingPatternElements : ListFormat.ObjectBindingPatternElementsWithSpaceBetweenBraces);
10411041
write("}");
10421042
}
10431043
}
@@ -2948,13 +2948,14 @@ namespace ts {
29482948
// Precomputed Formats
29492949
Modifiers = SingleLine | SpaceBetweenSiblings,
29502950
HeritageClauses = SingleLine | SpaceBetweenSiblings,
2951-
SingleLineTypeLiteralMembers = SingleLine | SpaceBetweenBraces | SpaceBetweenSiblings | Indented, // MultiLine | Indented,
2951+
SingleLineTypeLiteralMembers = SingleLine | SpaceBetweenBraces | SpaceBetweenSiblings | Indented,
29522952
MultiLineTypeLiteralMembers = MultiLine | Indented,
29532953

29542954
TupleTypeElements = CommaDelimited | SpaceBetweenSiblings | SingleLine | Indented,
29552955
UnionTypeConstituents = BarDelimited | SpaceBetweenSiblings | SingleLine,
29562956
IntersectionTypeConstituents = AmpersandDelimited | SpaceBetweenSiblings | SingleLine,
2957-
ObjectBindingPatternElements = SingleLine | AllowTrailingComma | SpaceBetweenBraces | CommaDelimited | SpaceBetweenSiblings,
2957+
ObjectBindingPatternElements = SingleLine | AllowTrailingComma | CommaDelimited | SpaceBetweenSiblings,
2958+
ObjectBindingPatternElementsWithSpaceBetweenBraces = SingleLine | AllowTrailingComma | SpaceBetweenBraces | CommaDelimited | SpaceBetweenSiblings,
29582959
ArrayBindingPatternElements = SingleLine | AllowTrailingComma | CommaDelimited | SpaceBetweenSiblings,
29592960
ObjectLiteralExpressionProperties = PreserveLines | CommaDelimited | SpaceBetweenSiblings | SpaceBetweenBraces | Indented | Braces,
29602961
ArrayLiteralExpressionElements = PreserveLines | CommaDelimited | SpaceBetweenSiblings | AllowTrailingComma | Indented | SquareBrackets,

src/compiler/types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3943,6 +3943,7 @@ namespace ts {
39433943
}
39443944

39453945
export const enum EmitFlags {
3946+
None = 0,
39463947
SingleLine = 1 << 0, // The contents of this node should be emitted on a single line.
39473948
AdviseOnEmitNode = 1 << 1, // The printer should invoke the onEmitNode callback when printing this node.
39483949
NoSubstitution = 1 << 2, // Disables further substitution of an expression.
@@ -3969,6 +3970,7 @@ namespace ts {
39693970
NoHoisting = 1 << 20, // Do not hoist this declaration in --module system
39703971
HasEndOfDeclarationMarker = 1 << 21, // Declaration has an associated NotEmittedStatement to mark the end of the declaration
39713972
Iterator = 1 << 22, // The expression to a `yield*` should be treated as an Iterator when down-leveling, not an Iterable.
3973+
ToStringFormatting = 1 << 23
39723974
}
39733975

39743976
export interface EmitHelper {

0 commit comments

Comments
 (0)