Skip to content

Commit 4673d61

Browse files
committed
Make declaration emitter call resolver.isOptionalParameter
1 parent 40d6c7f commit 4673d61

File tree

8 files changed

+53
-20
lines changed

8 files changed

+53
-20
lines changed

src/compiler/checker.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,8 @@ namespace ts {
9191
getExportsOfModule: getExportsOfModuleAsArray,
9292

9393
getJsxElementAttributesType,
94-
getJsxIntrinsicTagNames
94+
getJsxIntrinsicTagNames,
95+
isOptionalParameter
9596
};
9697

9798
let unknownSymbol = createSymbol(SymbolFlags.Property | SymbolFlags.Transient, "unknown");
@@ -14402,6 +14403,7 @@ namespace ts {
1440214403
getBlockScopedVariableId,
1440314404
getReferencedValueDeclaration,
1440414405
getTypeReferenceSerializationKind,
14406+
isOptionalParameter
1440514407
};
1440614408
}
1440714409

src/compiler/declarationEmitter.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1371,7 +1371,7 @@ namespace ts {
13711371
else {
13721372
writeTextOfNode(currentSourceFile, node.name);
13731373
}
1374-
if (node.initializer || hasQuestionToken(node)) {
1374+
if (resolver.isOptionalParameter(node)) {
13751375
write("?");
13761376
}
13771377
decreaseIndent();

src/compiler/types.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1431,6 +1431,7 @@ namespace ts {
14311431

14321432
getJsxElementAttributesType(elementNode: JsxOpeningLikeElement): Type;
14331433
getJsxIntrinsicTagNames(): Symbol[];
1434+
isOptionalParameter(node: ParameterDeclaration): boolean;
14341435

14351436
// Should not be called directly. Should only be accessed through the Program instance.
14361437
/* @internal */ getDiagnostics(sourceFile?: SourceFile, cancellationToken?: CancellationToken): Diagnostic[];
@@ -1574,7 +1575,8 @@ namespace ts {
15741575
getConstantValue(node: EnumMember | PropertyAccessExpression | ElementAccessExpression): number;
15751576
getBlockScopedVariableId(node: Identifier): number;
15761577
getReferencedValueDeclaration(reference: Identifier): Declaration;
1577-
getTypeReferenceSerializationKind(node: TypeReferenceNode): TypeReferenceSerializationKind;
1578+
getTypeReferenceSerializationKind(node: TypeReferenceNode): TypeReferenceSerializationKind;
1579+
isOptionalParameter(node: ParameterDeclaration): boolean;
15781580
}
15791581

15801582
export const enum SymbolFlags {

src/services/signatureHelp.ts

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -569,15 +569,7 @@ namespace ts.SignatureHelp {
569569
prefixDisplayParts.push(punctuationPart(SyntaxKind.OpenParenToken));
570570

571571
let parameters = candidateSignature.parameters;
572-
if (parameters.length > 0) {
573-
signatureHelpParameters = [];
574-
for (let i = 0; i < parameters.length; i++) {
575-
signatureHelpParameters.push(createSignatureHelpParameterAtIndex(candidateSignature, i));
576-
}
577-
}
578-
else {
579-
signatureHelpParameters = emptyArray;
580-
}
572+
signatureHelpParameters = parameters.length > 0 ? map(parameters, createSignatureHelpParameterForParameter) : emptyArray;
581573
suffixDisplayParts.push(punctuationPart(SyntaxKind.CloseParenToken));
582574
}
583575

@@ -615,21 +607,15 @@ namespace ts.SignatureHelp {
615607
argumentCount
616608
};
617609

618-
function createSignatureHelpParameterAtIndex(signature: Signature, parameterIndex: number): SignatureHelpParameter {
619-
let parameter = signature.parameters[parameterIndex];
610+
function createSignatureHelpParameterForParameter(parameter: Symbol): SignatureHelpParameter {
620611
let displayParts = mapToDisplayParts(writer =>
621612
typeChecker.getSymbolDisplayBuilder().buildParameterDisplay(parameter, writer, invocation));
622613

623-
let parameterDeclaration = <ParameterDeclaration>parameter.valueDeclaration;
624-
let isOptional =
625-
hasQuestionToken(parameterDeclaration) ||
626-
parameterDeclaration.initializer && parameterIndex >= signature.minArgumentCount;
627-
628614
return {
629615
name: parameter.name,
630616
documentation: parameter.getDocumentationComment(),
631617
displayParts,
632-
isOptional
618+
isOptional: typeChecker.isOptionalParameter(<ParameterDeclaration>parameter.valueDeclaration)
633619
};
634620
}
635621

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
//// [requiredInitializedParameter4.ts]
2+
class C1 {
3+
method(a = 0, b) { }
4+
}
5+
6+
//// [requiredInitializedParameter4.js]
7+
var C1 = (function () {
8+
function C1() {
9+
}
10+
C1.prototype.method = function (a, b) {
11+
if (a === void 0) { a = 0; }
12+
};
13+
return C1;
14+
})();
15+
16+
17+
//// [requiredInitializedParameter4.d.ts]
18+
declare class C1 {
19+
method(a: number, b: any): void;
20+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
=== tests/cases/compiler/requiredInitializedParameter4.ts ===
2+
class C1 {
3+
>C1 : Symbol(C1, Decl(requiredInitializedParameter4.ts, 0, 0))
4+
5+
method(a = 0, b) { }
6+
>method : Symbol(method, Decl(requiredInitializedParameter4.ts, 0, 10))
7+
>a : Symbol(a, Decl(requiredInitializedParameter4.ts, 1, 11))
8+
>b : Symbol(b, Decl(requiredInitializedParameter4.ts, 1, 17))
9+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
=== tests/cases/compiler/requiredInitializedParameter4.ts ===
2+
class C1 {
3+
>C1 : C1
4+
5+
method(a = 0, b) { }
6+
>method : (a: number, b: any) => void
7+
>a : number
8+
>0 : number
9+
>b : any
10+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
//@declaration: true
2+
class C1 {
3+
method(a = 0, b) { }
4+
}

0 commit comments

Comments
 (0)