Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 27fe2df

Browse filesBrowse files
author
Arthur Ozga
committed
some missed token bugs
1 parent e02ac17 commit 27fe2df
Copy full SHA for 27fe2df

9 files changed

+34-36Lines changed: 34 additions & 36 deletions

File tree

Expand file treeCollapse file tree
Open diff view settings
Filter options
Expand file treeCollapse file tree
Open diff view settings
Collapse file

‎src/compiler/checker.ts‎

Copy file name to clipboardExpand all lines: src/compiler/checker.ts
+4-7Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2361,7 +2361,7 @@ namespace ts {
23612361
return createArrayTypeNode(elementType);
23622362
}
23632363
else if (type.target.objectFlags & ObjectFlags.Tuple) {
2364-
return createTupleTypeNode(mapToTypeNodeArray(typeArguments.slice(0, getTypeReferenceArity(type))));
2364+
return createTupleTypeNode(typeArguments.length > 0 ? mapToTypeNodeArray(typeArguments.slice(0, getTypeReferenceArity(type))) : undefined);
23652365
}
23662366
else {
23672367
// TODO: handle type parameters in qualified names...
@@ -2406,7 +2406,7 @@ namespace ts {
24062406
entityName = nameIdentifier;
24072407
}
24082408
const typeParameterCount = (type.target.typeParameters || emptyArray).length;
2409-
const typeArgumentNodes = mapToTypeNodeArray(typeArguments.slice(i, typeParameterCount - i));
2409+
const typeArgumentNodes = mapToTypeNodeArray(typeArguments.length > 0 ? typeArguments.slice(i, typeParameterCount - i) : undefined);
24102410
return createTypeReferenceNode(entityName, typeArgumentNodes);
24112411
}
24122412
}
@@ -2478,7 +2478,8 @@ namespace ts {
24782478
, /*dotDotDotToken*/ undefined
24792479
, name
24802480
, /*questionToken*/ undefined
2481-
, stringTypeNode);
2481+
, stringTypeNode
2482+
, /*initializer*/ undefined);
24822483
const typeNode = createTypeNode(indexInfo.type);
24832484
return createIndexSignatureDeclaration(
24842485
[indexingParameter]
@@ -7261,10 +7262,6 @@ namespace ts {
72617262
}
72627263
}
72637264

7264-
// export function synthesizeTypeNode(type: Type, enclosingDeclaration: Node): TypeNode {
7265-
// throw new Error("Not implemented" + enclosingDeclaration);
7266-
// }
7267-
72687265
function instantiateList<T>(items: T[], mapper: TypeMapper, instantiator: (item: T, mapper: TypeMapper) => T): T[] {
72697266
if (items && items.length) {
72707267
const result: T[] = [];
Collapse file

‎src/compiler/factory.ts‎

Copy file name to clipboardExpand all lines: src/compiler/factory.ts
+5-4Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -355,8 +355,6 @@ namespace ts {
355355

356356
export function createIndexSignatureDeclaration(parameters: ParameterDeclaration[], type: TypeNode, decorators: Decorator[] | undefined, modifiers: Modifier[] | undefined): IndexSignatureDeclaration {
357357
const indexSignature = createSynthesizedNode(SyntaxKind.IndexSignature) as IndexSignatureDeclaration;
358-
// indexSignature.name = asName(name);
359-
// type parameters
360358
indexSignature.parameters = asNodeArray(parameters);
361359
indexSignature.type = type;
362360
indexSignature.decorators = asNodeArray(decorators);
@@ -373,6 +371,8 @@ namespace ts {
373371
: node;
374372
}
375373

374+
// Signature elements
375+
376376
export function createParameter(decorators: Decorator[] | undefined, modifiers: Modifier[] | undefined, dotDotDotToken: DotDotDotToken | undefined, name: string | BindingName, questionToken?: QuestionToken, type?: TypeNode, initializer?: Expression) {
377377
const node = <ParameterDeclaration>createSynthesizedNode(SyntaxKind.Parameter);
378378
node.decorators = asNodeArray(decorators);
@@ -385,11 +385,12 @@ namespace ts {
385385
return node;
386386
}
387387

388-
export function updateParameter(node: ParameterDeclaration, decorators: Decorator[] | undefined, modifiers: Modifier[] | undefined, dotDotDotToken: DotDotDotToken | undefined, name: BindingName, type: TypeNode | undefined, initializer: Expression | undefined) {
388+
export function updateParameter(node: ParameterDeclaration, decorators: Decorator[] | undefined, modifiers: Modifier[] | undefined, dotDotDotToken: DotDotDotToken | undefined, name: string | BindingName, questionToken: QuestionToken | undefined, type: TypeNode | undefined, initializer: Expression | undefined) {
389389
return node.decorators !== decorators
390390
|| node.modifiers !== modifiers
391391
|| node.dotDotDotToken !== dotDotDotToken
392392
|| node.name !== name
393+
|| node.questionToken !== questionToken
393394
|| node.type !== type
394395
|| node.initializer !== initializer
395396
? updateNode(createParameter(decorators, modifiers, dotDotDotToken, name, node.questionToken, type, initializer), node)
@@ -438,7 +439,7 @@ namespace ts {
438439
node.asteriskToken = asteriskToken;
439440
node.name = asName(name);
440441
node.typeParameters = asNodeArray(typeParameters);
441-
node.parameters = createNodeArray(parameters);
442+
node.parameters = asNodeArray(parameters);
442443
node.type = type;
443444
node.body = body;
444445
return node;
Collapse file

‎src/compiler/transformers/esnext.ts‎

Copy file name to clipboardExpand all lines: src/compiler/transformers/esnext.ts
+1Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -475,6 +475,7 @@ namespace ts {
475475
/*modifiers*/ undefined,
476476
node.dotDotDotToken,
477477
getGeneratedNameForNode(node),
478+
node.questionToken,
478479
/*type*/ undefined,
479480
visitNode(node.initializer, visitor, isExpression)
480481
);
Collapse file

‎src/compiler/types.ts‎

Copy file name to clipboardExpand all lines: src/compiler/types.ts
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -895,7 +895,7 @@ namespace ts {
895895
exprName: EntityName;
896896
}
897897

898-
/** A TypeLiteral is the declaration node for an anonymous symbol. */
898+
// A TypeLiteral is the declaration node for an anonymous symbol.
899899
export interface TypeLiteralNode extends TypeNode, Declaration {
900900
kind: SyntaxKind.TypeLiteral;
901901
members: NodeArray<TypeElement>;
Collapse file

‎src/compiler/visitor.ts‎

Copy file name to clipboardExpand all lines: src/compiler/visitor.ts
+1Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,7 @@ namespace ts {
272272
nodesVisitor((<ParameterDeclaration>node).modifiers, visitor, isModifier),
273273
(<ParameterDeclaration>node).dotDotDotToken,
274274
visitNode((<ParameterDeclaration>node).name, visitor, isBindingName),
275+
visitNode((<ParameterDeclaration>node).questionToken, visitor, isToken),
275276
visitNode((<ParameterDeclaration>node).type, visitor, isTypeNode),
276277
visitNode((<ParameterDeclaration>node).initializer, visitor, isExpression));
277278

Collapse file

‎src/services/codefixes/fixAddMissingMember.ts‎

Copy file name to clipboardExpand all lines: src/services/codefixes/fixAddMissingMember.ts
+2-1Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,8 @@ namespace ts.codefix {
6161
, /*dotDotDotToken*/ undefined
6262
, "x"
6363
, /*questionToken*/ undefined
64-
, stringTypeNode);
64+
, stringTypeNode
65+
, /*initializer*/ undefined);
6566
const indexSignature = createIndexSignatureDeclaration(
6667
[indexingParameter]
6768
, typeNode
Collapse file

‎src/services/codefixes/helpers.ts‎

Copy file name to clipboardExpand all lines: src/services/codefixes/helpers.ts
+18-21Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ namespace ts.codefix {
126126
}
127127
else {
128128
Debug.assert(declarations.length === signatures.length);
129-
const methodImplementingSignatures = createMethodImplementingSignatures(signatures, enclosingDeclaration, name, modifiers);
129+
const methodImplementingSignatures = createMethodImplementingSignatures(signatures, name, modifiers);
130130
signatureDeclarations.push(methodImplementingSignatures);
131131
}
132132
return signatureDeclarations;
@@ -135,11 +135,8 @@ namespace ts.codefix {
135135
}
136136
}
137137

138-
// TODO: infer types of arguments?
139-
function createMethodImplementingSignatures(signatures: Signature[], enclosingDeclaration: ClassLikeDeclaration, name: string, modifiers: Modifier[] | undefined): MethodDeclaration {
140-
const newMethodDeclaration = createNode(SyntaxKind.CallSignature) as SignatureDeclaration;
141-
newMethodDeclaration.parent = enclosingDeclaration;
142-
newMethodDeclaration.name = signatures[0].getDeclaration().name;
138+
function createMethodImplementingSignatures(signatures: Signature[], name: string, modifiers: Modifier[] | undefined): MethodDeclaration {
139+
Debug.assert(signatures && signatures.length > 0);
143140

144141
let maxNonRestArgs = -1;
145142
let maxArgsIndex = 0;
@@ -157,46 +154,45 @@ namespace ts.codefix {
157154
}
158155
const maxArgsParameterSymbolNames = signatures[maxArgsIndex].getParameters().map(symbol => symbol.getName());
159156

160-
const parameters = createNodeArray<ParameterDeclaration>();
157+
const parameters: ParameterDeclaration[] = [];
161158
for (let i = 0; i < maxNonRestArgs; i++) {
159+
const anyType = createKeywordTypeNode(SyntaxKind.AnyKeyword);
162160
const newParameter = createParameter(
163161
/*decorators*/ undefined
164162
, /*modifiers*/ undefined
165163
, /*dotDotDotToken*/ undefined
166164
, maxArgsParameterSymbolNames[i]
167165
, /*questionToken*/ i >= minArgumentCount ? createToken(SyntaxKind.QuestionToken) : undefined
168-
, /*type*/ undefined
166+
, anyType
169167
, /*initializer*/ undefined);
170168
parameters.push(newParameter);
171169
}
172170

173171
if (hasRestParameter) {
172+
const anyType = createKeywordTypeNode(SyntaxKind.AnyKeyword);
174173
const restParameter = createParameter(
175174
/*decorators*/ undefined
176175
, /*modifiers*/ undefined
177176
, createToken(SyntaxKind.DotDotDotToken)
178177
, maxArgsParameterSymbolNames[maxNonRestArgs] || "rest"
179178
, /*questionToken*/ maxNonRestArgs >= minArgumentCount ? createToken(SyntaxKind.QuestionToken) : undefined
180-
, /*type*/ undefined
179+
, anyType
181180
, /*initializer*/ undefined);
182181
parameters.push(restParameter);
183182
}
184183

185-
return createMethod(
186-
/*decorators*/ undefined
187-
, modifiers
188-
, /*asteriskToken*/ undefined
184+
return createStubbedMethod(
185+
modifiers
189186
, name
190187
, /*typeParameters*/undefined
191188
, parameters
192-
, /*type*/ undefined
193-
, /*body*/undefined);
189+
, /*returnType*/ undefined);
194190
}
195191

196-
export function createStubbedMethod(modifiers: Modifier[], name: string, typeParameters: TypeParameterDeclaration[] | undefined, parameters: ParameterDeclaration[], returnType?: TypeNode) {
192+
export function createStubbedMethod(modifiers: Modifier[], name: string, typeParameters: TypeParameterDeclaration[] | undefined, parameters: ParameterDeclaration[], returnType: TypeNode | undefined) {
197193
return createMethod(
198194
/*decorators*/undefined
199-
, /*modifiers*/modifiers
195+
, modifiers
200196
, /*asteriskToken*/undefined
201197
, name
202198
, typeParameters
@@ -231,12 +227,13 @@ namespace ts.codefix {
231227
const parameterTypeNode = checker.createTypeNode(parameterType);
232228
// TODO: deep cloning of decorators/any node.
233229
const parameterNode = createParameter(
234-
parameterDeclaration.decorators && parameterDeclaration.decorators.map(getSynthesizedClone)
235-
, parameterDeclaration.modifiers && parameterDeclaration.modifiers.map(getSynthesizedClone)
230+
parameterDeclaration.decorators && parameterDeclaration.decorators.map(getSynthesizedDeepClone)
231+
, parameterDeclaration.modifiers && parameterDeclaration.modifiers.map(getSynthesizedDeepClone)
236232
, parameterDeclaration.dotDotDotToken && createToken(SyntaxKind.DotDotDotToken)
237-
, parameterDeclaration.name
233+
, getSynthesizedDeepClone(parameterDeclaration.name)
238234
, parameterDeclaration.questionToken && createToken(SyntaxKind.QuestionToken)
239-
, parameterTypeNode);
235+
, parameterTypeNode
236+
, /*initializer*/ undefined);
240237
return parameterNode;
241238
}
242239

Collapse file

‎src/services/textChanges.ts‎

Copy file name to clipboardExpand all lines: src/services/textChanges.ts
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -360,7 +360,7 @@ namespace ts.textChanges {
360360
return visited;
361361
}
362362
// clone nodearray if necessary
363-
const nodeArray = visited === nodes ? createNodeArray(visited) : visited;
363+
const nodeArray = visited === nodes ? createNodeArray(visited.slice(0)) : visited;
364364
nodeArray.pos = getPos(nodes);
365365
nodeArray.end = getEnd(nodes);
366366
return nodeArray;
Collapse file

‎tests/cases/fourslash/codeFixClassExtendAbstractGetterSetter.ts‎

Copy file name to clipboardExpand all lines: tests/cases/fourslash/codeFixClassExtendAbstractGetterSetter.ts
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,4 @@ verify.rangeAfterCodeFix(`
2828
e: this;
2929
f: A;
3030
g: string;
31-
`);
31+
`);

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.