Skip to content

Commit c0c1117

Browse files
committed
fix emit synthetic trailing comments
1 parent 92b9668 commit c0c1117

7 files changed

Lines changed: 42 additions & 39 deletions

internal/checker/nodebuilderimpl.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2543,7 +2543,7 @@ func (b *NodeBuilderImpl) createTypeNodesFromResolvedType(resolvedType *Structur
25432543
if b.checkTruncationLength() {
25442544
if b.ctx.flags&nodebuilder.FlagsNoTruncation != 0 {
25452545
elem := b.f.NewNotEmittedTypeElement()
2546-
return b.f.NewNodeList([]*ast.TypeElement{b.e.AddSyntheticLeadingComment(elem, ast.KindMultiLineCommentTrivia, "elided", false /*hasTrailingNewLine*/)})
2546+
return b.f.NewNodeList([]*ast.TypeElement{b.e.AddSyntheticTrailingComment(elem, ast.KindMultiLineCommentTrivia, "elided", false /*hasTrailingNewLine*/)})
25472547
}
25482548
return b.f.NewNodeList([]*ast.Node{b.f.NewPropertySignatureDeclaration(nil, b.f.NewIdentifier("..."), nil, nil, nil)})
25492549
}
@@ -2585,7 +2585,7 @@ func (b *NodeBuilderImpl) createTypeNodesFromResolvedType(resolvedType *Structur
25852585
}
25862586
if b.checkTruncationLength() && (i+2 < len(properties)-1) {
25872587
if b.ctx.flags&nodebuilder.FlagsNoTruncation != 0 {
2588-
typeElements[len(typeElements)-1] = b.e.AddSyntheticLeadingComment(typeElements[len(typeElements)-1], ast.KindMultiLineCommentTrivia, fmt.Sprintf("... %d more elided ...", len(properties)-i), false /*hasTrailingNewLine*/)
2588+
typeElements[len(typeElements)-1] = b.e.AddSyntheticTrailingComment(typeElements[len(typeElements)-1], ast.KindMultiLineCommentTrivia, fmt.Sprintf("... %d more elided ...", len(properties)-i), false /*hasTrailingNewLine*/)
25892589
} else {
25902590
text := fmt.Sprintf("... %d more ...", len(properties)-i)
25912591
typeElements = append(typeElements, b.f.NewPropertySignatureDeclaration(nil, b.f.NewIdentifier(text), nil, nil, nil))

internal/fourslash/_scripts/failingTests.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ TestCodeFixClassImplementInterfaceAutoImports
4242
TestCodeFixClassImplementInterfaceAutoImports_typeOnly
4343
TestCodeFixClassImplementInterfaceAutoImportsReExports
4444
TestCodeFixClassImplementInterfaceNoTruncation
45-
TestCodeFixClassImplementInterfaceNoTruncationProperties
4645
TestCodeFixMissingTypeAnnotationOnExports11
4746
TestCodeFixMissingTypeAnnotationOnExports16
4847
TestCodeFixMissingTypeAnnotationOnExports23_heritage_formatting

internal/ls/codeactions_missingmemberfixer.go

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,12 @@ func NewMissingMemberFixer(changeTracker *change.Tracker, program *compiler.Prog
4343
}
4444
}
4545

46+
func (f *MissingMemberFixer) createNodeBuilder() (*checker.NodeBuilder, map[*ast.IdentifierNode]*ast.Symbol) {
47+
idToSymbol := make(map[*ast.IdentifierNode]*ast.Symbol)
48+
nodeBuilder := checker.NewNodeBuilderEx(f.Checker, f.ChangeTracker.EmitContext, idToSymbol)
49+
return nodeBuilder, idToSymbol
50+
}
51+
4652
func (f *MissingMemberFixer) createMemberFromSymbol(symbol *ast.Symbol, enclosingDeclaration *ast.Node, sourceFile *ast.SourceFile, body *ast.FunctionBody, preserveOptional PreserveOptionalFlags) []*ast.Node {
4753
declarations := symbol.Declarations
4854
declaration := core.FirstOrNil(declarations)
@@ -63,23 +69,19 @@ func (f *MissingMemberFixer) createMemberFromSymbol(symbol *ast.Symbol, enclosin
6369
}
6470

6571
t := f.Checker.GetTypeOfSymbolAtLocation(symbol, enclosingDeclaration)
72+
nodeBuilder, idToSymbol := f.createNodeBuilder()
6673
var nodes []*ast.Node
6774

6875
switch kind {
6976
case ast.KindPropertySignature, ast.KindPropertyDeclaration:
70-
idToSymbol := make(map[*ast.IdentifierNode]*ast.Symbol)
71-
builder := checker.NewNodeBuilderEx(f.Checker, f.ChangeTracker.EmitContext, idToSymbol)
72-
typeNode := f.importTypeNode(builder.TypeToTypeNode(t, enclosingDeclaration, flags, nodebuilder.InternalFlagsNone, nil), idToSymbol)
77+
typeNode := f.createTypeNode(t, enclosingDeclaration, flags, nodeBuilder, idToSymbol)
7378
var questionToken *ast.TokenNode
7479
if optional && preserveOptional&PreserveOptionalFlagsProperty != 0 {
7580
questionToken = f.ChangeTracker.NodeFactory.NewToken(ast.KindQuestionToken)
7681
}
7782
return append(nodes, f.ChangeTracker.NodeFactory.NewPropertyDeclaration(modifiers, createPropertyName(f.ChangeTracker.NodeFactory, declarationName, quotePreference), questionToken, typeNode, nil /*initializer*/))
7883

7984
case ast.KindGetAccessor, ast.KindSetAccessor:
80-
idToSymbol := make(map[*ast.IdentifierNode]*ast.Symbol)
81-
builder := checker.NewNodeBuilderEx(f.Checker, f.ChangeTracker.EmitContext, idToSymbol)
82-
typeNode := f.importTypeNode(builder.TypeToTypeNode(t, enclosingDeclaration, flags, nodebuilder.InternalFlagsNone, nil), idToSymbol)
8385
accessors := ast.GetAllAccessorDeclarations(symbol.Declarations, declaration)
8486
var orderedAccessors []*ast.Node
8587
if accessors.SecondAccessor == nil {
@@ -93,7 +95,7 @@ func (f *MissingMemberFixer) createMemberFromSymbol(symbol *ast.Symbol, enclosin
9395
nodes = append(nodes,
9496
f.ChangeTracker.NodeFactory.NewGetAccessorDeclaration(
9597
modifiers, createPropertyName(f.ChangeTracker.NodeFactory, declarationName, quotePreference),
96-
nil /*typeParameters*/, nil /*parameters*/, f.ChangeTracker.NodeFactory.DeepCloneNode(typeNode), nil /*fullSignature*/, f.createBody(body, ambient, quotePreference)),
98+
nil /*typeParameters*/, nil /*parameters*/, f.createTypeNode(t, enclosingDeclaration, flags, nodeBuilder, idToSymbol), nil /*fullSignature*/, f.createBody(body, ambient, quotePreference)),
9799
)
98100
}
99101

@@ -105,7 +107,7 @@ func (f *MissingMemberFixer) createMemberFromSymbol(symbol *ast.Symbol, enclosin
105107

106108
nodes = append(nodes, f.ChangeTracker.NodeFactory.NewSetAccessorDeclaration(
107109
modifiers, createPropertyName(f.ChangeTracker.NodeFactory, declarationName, quotePreference),
108-
nil /*typeParameters*/, createDummyParameters(f.ChangeTracker.NodeFactory, 1, []string{parameter.Name().Text()}, []*ast.TypeNode{typeNode}, 1, ast.IsInJSFile(enclosingDeclaration)),
110+
nil /*typeParameters*/, createDummyParameters(f.ChangeTracker.NodeFactory, 1, []string{parameter.Name().Text()}, []*ast.TypeNode{f.createTypeNode(t, enclosingDeclaration, flags, nodeBuilder, idToSymbol)}, 1, ast.IsInJSFile(enclosingDeclaration)),
109111
nil /*type*/, nil /*fullSignature*/, f.createBody(body, ambient, quotePreference)),
110112
)
111113
}
@@ -159,6 +161,10 @@ func (f *MissingMemberFixer) createMemberFromSymbol(symbol *ast.Symbol, enclosin
159161
return nil
160162
}
161163

164+
func (f *MissingMemberFixer) createTypeNode(t *checker.Type, enclosingDeclaration *ast.Node, flags nodebuilder.Flags, nodeBuilder *checker.NodeBuilder, idToSymbol map[*ast.IdentifierNode]*ast.Symbol) *ast.TypeNode {
165+
return f.importTypeNode(nodeBuilder.TypeToTypeNode(t, enclosingDeclaration, flags, nodebuilder.InternalFlagsNone, nil /*tracker*/), idToSymbol)
166+
}
167+
162168
func (f *MissingMemberFixer) createModifiers(symbol *ast.Symbol, declaration *ast.Node) *ast.ModifierList {
163169
modifierFlags := ast.ModifierFlagsNone
164170
if declaration != nil {
@@ -192,9 +198,8 @@ func (f *MissingMemberFixer) createSignatureDeclarationFromSignature(signature *
192198
flags |= nodebuilder.FlagsUseSingleQuotesForStringLiteralType
193199
}
194200

195-
idToSymbol := make(map[*ast.IdentifierNode]*ast.Symbol)
196-
builder := checker.NewNodeBuilderEx(f.Checker, f.ChangeTracker.EmitContext, idToSymbol)
197-
signatureDeclaration := builder.SignatureToSignatureDeclaration(signature, kind, enclosingDeclaration, flags, nodebuilder.InternalFlagsAllowUnresolvedNames, nil /*tracker*/)
201+
nodeBuilder, idToSymbol := f.createNodeBuilder()
202+
signatureDeclaration := nodeBuilder.SignatureToSignatureDeclaration(signature, kind, enclosingDeclaration, flags, nodebuilder.InternalFlagsAllowUnresolvedNames, nil /*tracker*/)
198203
if signatureDeclaration == nil {
199204
return nil
200205
}
@@ -288,6 +293,7 @@ func (f *MissingMemberFixer) createSignatureDeclarationFromSignatures(signatures
288293
return nil
289294
}
290295

296+
nodeBuilder, idToSymbol := f.createNodeBuilder()
291297
maxArgsSignature := signatures[0]
292298
minArgumentCount := signatures[0].MinArgumentCount()
293299

@@ -331,12 +337,12 @@ func (f *MissingMemberFixer) createSignatureDeclarationFromSignatures(signatures
331337

332338
return f.ChangeTracker.NodeFactory.NewMethodDeclaration(
333339
modifiers, nil /*asteriskToken*/, methodName, core.IfElse(optional, f.ChangeTracker.NodeFactory.NewToken(ast.KindQuestionToken), nil),
334-
nil /*typeParameters*/, parameters, f.getReturnTypeFromSignatures(signatures, enclosingDeclaration),
340+
nil /*typeParameters*/, parameters, f.getReturnTypeFromSignatures(signatures, enclosingDeclaration, nodeBuilder, idToSymbol),
335341
nil /*fullSignature*/, f.createBody(body, false /*ambient*/, quotePreference),
336342
)
337343
}
338344

339-
func (f *MissingMemberFixer) getReturnTypeFromSignatures(signatures []*checker.Signature, enclosingDeclaration *ast.Node) *ast.TypeNode {
345+
func (f *MissingMemberFixer) getReturnTypeFromSignatures(signatures []*checker.Signature, enclosingDeclaration *ast.Node, nodeBuilder *checker.NodeBuilder, idToSymbol map[*ast.IdentifierNode]*ast.Symbol) *ast.TypeNode {
340346
if len(signatures) == 0 {
341347
return nil
342348
}
@@ -347,9 +353,7 @@ func (f *MissingMemberFixer) getReturnTypeFromSignatures(signatures []*checker.S
347353
}
348354

349355
unionType := f.Checker.GetUnionType(returnTypes)
350-
idToSymbol := make(map[*ast.IdentifierNode]*ast.Symbol)
351-
builder := checker.NewNodeBuilderEx(f.Checker, f.ChangeTracker.EmitContext, idToSymbol)
352-
return f.importTypeNode(builder.TypeToTypeNode(unionType, enclosingDeclaration, nodebuilder.FlagsNoTruncation, nodebuilder.InternalFlagsAllowUnresolvedNames, nil /*typeArguments*/), idToSymbol)
356+
return f.importTypeNode(nodeBuilder.TypeToTypeNode(unionType, enclosingDeclaration, nodebuilder.FlagsNoTruncation, nodebuilder.InternalFlagsAllowUnresolvedNames, nil /*typeArguments*/), idToSymbol)
353357
}
354358

355359
func (f *MissingMemberFixer) importTypeNode(typeNode *ast.TypeNode, idToSymbol map[*ast.IdentifierNode]*ast.Symbol) *ast.TypeNode {

testdata/baselines/reference/submodule/compiler/declarationEmitPrivatePromiseLikeInterface.js

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

testdata/baselines/reference/submodule/compiler/declarationEmitPrivatePromiseLikeInterface.js.diff

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5333,14 +5333,14 @@
53335333
+ };
53345334
+ };
53355335
+ catch<TResult_5 = never>(onrejected?: ((reason: any) => TResult_5 | PromiseLike</*elided*/ any>) | /*... 1 more elided ...*/ any | undefined): Omit</*elided*/ any> & {
5336-
+ /*elided*/
5336+
+ /*elided*/
53375337
+ };
53385338
+ };
53395339
+ };
53405340
+ };
53415341
+ };
53425342
+ catch<TResult_2 = never>(onrejected?: ((reason: any) => TResult_2 | PromiseLike</*elided*/ any>) | /*... 1 more elided ...*/ any | undefined): Omit</*elided*/ any> & {
5343-
+ /*elided*/
5343+
+ /*elided*/
53445344
+ };
53455345
+ };
53465346
+ };
@@ -10669,14 +10669,14 @@
1066910669
+ };
1067010670
+ };
1067110671
+ catch<TResult_5 = never>(onrejected?: ((reason: any) => TResult_5 | PromiseLike</*elided*/ any>) | /*... 1 more elided ...*/ any | undefined): Omit</*elided*/ any> & {
10672-
+ /*elided*/
10672+
+ /*elided*/
1067310673
+ };
1067410674
+ };
1067510675
+ };
1067610676
+ };
1067710677
+ };
1067810678
+ catch<TResult_2 = never>(onrejected?: ((reason: any) => TResult_2 | PromiseLike</*elided*/ any>) | /*... 1 more elided ...*/ any | undefined): Omit</*elided*/ any> & {
10679-
+ /*elided*/
10679+
+ /*elided*/
1068010680
+ };
1068110681
+ };
1068210682
+ };
@@ -16005,14 +16005,14 @@
1600516005
+ };
1600616006
+ };
1600716007
+ catch<TResult_5 = never>(onrejected?: ((reason: any) => TResult_5 | PromiseLike</*elided*/ any>) | /*... 1 more elided ...*/ any | undefined): Omit</*elided*/ any> & {
16008-
+ /*elided*/
16008+
+ /*elided*/
1600916009
+ };
1601016010
+ };
1601116011
+ };
1601216012
+ };
1601316013
+ };
1601416014
+ catch<TResult_2 = never>(onrejected?: ((reason: any) => TResult_2 | PromiseLike</*elided*/ any>) | /*... 1 more elided ...*/ any | undefined): Omit</*elided*/ any> & {
16015-
+ /*elided*/
16015+
+ /*elided*/
1601616016
+ };
1601716017
+ };
1601816018
+ };

testdata/baselines/reference/submodule/compiler/hugeDeclarationOutputGetsTruncatedWithError.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99682,7 +99682,7 @@ export declare const c: {
9968299682
zy: "fq.zy";
9968399683
zz: "fq.zz";
9968499684
};
99685-
/*... 527 more elided ...*/ fr: {
99685+
fr: {
9968699686
aa: "fr.aa";
9968799687
ab: "fr.ab";
9968899688
ac: "fr.ac";
@@ -100237,10 +100237,10 @@ export declare const c: {
100237100237
vf: "fr.vf";
100238100238
vg: "fr.vg";
100239100239
vh: "fr.vh";
100240-
/*... 120 more elided ...*/ vi: "fr.vi";
100240+
vi: "fr.vi"; /*... 120 more elided ...*/
100241100241
zz: "fr.zz";
100242-
};
100242+
}; /*... 527 more elided ...*/
100243100243
zz: {
100244-
/*elided*/
100244+
/*elided*/
100245100245
};
100246100246
};

testdata/baselines/reference/submodule/compiler/hugeDeclarationOutputGetsTruncatedWithError.js.diff

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99674,7 +99674,7 @@
9967499674
+ zy: "fq.zy";
9967599675
+ zz: "fq.zz";
9967699676
+ };
99677-
+ /*... 527 more elided ...*/ fr: {
99677+
+ fr: {
9967899678
+ aa: "fr.aa";
9967999679
+ ab: "fr.ab";
9968099680
+ ac: "fr.ac";
@@ -100229,10 +100229,10 @@
100229100229
+ vf: "fr.vf";
100230100230
+ vg: "fr.vg";
100231100231
+ vh: "fr.vh";
100232-
+ /*... 120 more elided ...*/ vi: "fr.vi";
100232+
+ vi: "fr.vi"; /*... 120 more elided ...*/
100233100233
+ zz: "fr.zz";
100234-
+ };
100234+
+ }; /*... 527 more elided ...*/
100235100235
+ zz: {
100236-
+ /*elided*/
100236+
+ /*elided*/
100237100237
+ };
100238100238
+};

0 commit comments

Comments
 (0)