Skip to content

Commit b1f2db7

Browse files
committed
fix(46589): omit ? in method signature completion for optional methods
1 parent 9b1ba8f commit b1f2db7

File tree

3 files changed

+49
-5
lines changed

3 files changed

+49
-5
lines changed

src/services/codefixes/helpers.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@ namespace ts.codefix {
6363
const visibilityModifier = createVisibilityModifier(getEffectiveModifierFlags(declaration));
6464
const modifiers = visibilityModifier ? factory.createNodeArray([visibilityModifier]) : undefined;
6565
const type = checker.getWidenedType(checker.getTypeOfSymbolAtLocation(symbol, enclosingDeclaration));
66-
const optional = !!(symbol.flags & SymbolFlags.Optional);
6766
const ambient = !!(enclosingDeclaration.flags & NodeFlags.Ambient) || isAmbient;
6867
const quotePreference = getQuotePreference(sourceFile, preferences);
6968

@@ -83,7 +82,7 @@ namespace ts.codefix {
8382
/*decorators*/ undefined,
8483
modifiers,
8584
name,
86-
optional ? factory.createToken(SyntaxKind.QuestionToken) : undefined,
85+
/*questionOrExclamationToken*/ undefined,
8786
typeNode,
8887
/*initializer*/ undefined));
8988
break;
@@ -158,14 +157,14 @@ namespace ts.codefix {
158157
}
159158
else {
160159
Debug.assert(declarations.length === signatures.length, "Declarations and signatures should match count");
161-
addClassElement(createMethodImplementingSignatures(checker, context, enclosingDeclaration, signatures, name, optional, modifiers, quotePreference, body));
160+
addClassElement(createMethodImplementingSignatures(checker, context, enclosingDeclaration, signatures, name, /*optional*/ false, modifiers, quotePreference, body));
162161
}
163162
}
164163
break;
165164
}
166165

167166
function outputMethod(quotePreference: QuotePreference, signature: Signature, modifiers: NodeArray<Modifier> | undefined, name: PropertyName, body?: Block): void {
168-
const method = createSignatureDeclarationFromSignature(SyntaxKind.MethodDeclaration, context, quotePreference, signature, body, name, modifiers, optional, enclosingDeclaration, importAdder);
167+
const method = createSignatureDeclarationFromSignature(SyntaxKind.MethodDeclaration, context, quotePreference, signature, body, name, modifiers, /*optional*/ false, enclosingDeclaration, importAdder);
169168
if (method) addClassElement(method);
170169
}
171170
}

src/services/completions.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -888,7 +888,7 @@ namespace ts.Completions {
888888
node => {
889889
let requiredModifiers = ModifierFlags.None;
890890
if (isAbstract) {
891-
requiredModifiers |= ModifierFlags.Abstract;
891+
requiredModifiers |= ModifierFlags.Abstract;
892892
}
893893
if (isClassElement(node)
894894
&& checker.getMemberOverrideModifierStatus(classLikeDeclaration, node) === MemberOverrideStatus.NeedsOverride) {
@@ -3882,5 +3882,6 @@ namespace ts.Completions {
38823882
}
38833883
return charCode;
38843884
}
3885+
38853886
}
38863887

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/// <reference path="fourslash.ts" />
2+
3+
// @Filename: a.ts
4+
// @newline: LF
5+
6+
////interface IFoo {
7+
//// a?: number;
8+
//// b?(x: number): void;
9+
////}
10+
////class Foo implements IFoo {
11+
//// /**/
12+
////}
13+
14+
verify.completions({
15+
marker: "",
16+
isNewIdentifierLocation: true,
17+
preferences: {
18+
includeCompletionsWithInsertText: true,
19+
includeCompletionsWithSnippetText: false,
20+
includeCompletionsWithClassMemberSnippets: true,
21+
},
22+
includes: [
23+
{
24+
name: "a",
25+
sortText: completion.SortText.LocationPriority,
26+
replacementSpan: {
27+
fileName: "",
28+
pos: 0,
29+
end: 0,
30+
},
31+
insertText: "a: number;\n"
32+
},
33+
{
34+
name: "b",
35+
sortText: completion.SortText.LocationPriority,
36+
replacementSpan: {
37+
fileName: "",
38+
pos: 0,
39+
end: 0,
40+
},
41+
insertText: "b(x: number): void {\n}\n"
42+
},
43+
],
44+
});

0 commit comments

Comments
 (0)