Skip to content

Commit

Permalink
fix(46589): omit ? in method signature completion for optional methods
Browse files Browse the repository at this point in the history
  • Loading branch information
a-tarasyuk committed Oct 29, 2021
1 parent 9b1ba8f commit 6bb521f
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 5 deletions.
7 changes: 3 additions & 4 deletions src/services/codefixes/helpers.ts
Expand Up @@ -63,7 +63,6 @@ namespace ts.codefix {
const visibilityModifier = createVisibilityModifier(getEffectiveModifierFlags(declaration));
const modifiers = visibilityModifier ? factory.createNodeArray([visibilityModifier]) : undefined;
const type = checker.getWidenedType(checker.getTypeOfSymbolAtLocation(symbol, enclosingDeclaration));
const optional = !!(symbol.flags & SymbolFlags.Optional);
const ambient = !!(enclosingDeclaration.flags & NodeFlags.Ambient) || isAmbient;
const quotePreference = getQuotePreference(sourceFile, preferences);

Expand All @@ -83,7 +82,7 @@ namespace ts.codefix {
/*decorators*/ undefined,
modifiers,
name,
optional ? factory.createToken(SyntaxKind.QuestionToken) : undefined,
/*questionOrExclamationToken*/ undefined,
typeNode,
/*initializer*/ undefined));
break;
Expand Down Expand Up @@ -158,14 +157,14 @@ namespace ts.codefix {
}
else {
Debug.assert(declarations.length === signatures.length, "Declarations and signatures should match count");
addClassElement(createMethodImplementingSignatures(checker, context, enclosingDeclaration, signatures, name, optional, modifiers, quotePreference, body));
addClassElement(createMethodImplementingSignatures(checker, context, enclosingDeclaration, signatures, name, /*optional*/ false, modifiers, quotePreference, body));
}
}
break;
}

function outputMethod(quotePreference: QuotePreference, signature: Signature, modifiers: NodeArray<Modifier> | undefined, name: PropertyName, body?: Block): void {
const method = createSignatureDeclarationFromSignature(SyntaxKind.MethodDeclaration, context, quotePreference, signature, body, name, modifiers, optional, enclosingDeclaration, importAdder);
const method = createSignatureDeclarationFromSignature(SyntaxKind.MethodDeclaration, context, quotePreference, signature, body, name, modifiers, /*optional*/ false, enclosingDeclaration, importAdder);
if (method) addClassElement(method);
}
}
Expand Down
3 changes: 2 additions & 1 deletion src/services/completions.ts
Expand Up @@ -888,7 +888,7 @@ namespace ts.Completions {
node => {
let requiredModifiers = ModifierFlags.None;
if (isAbstract) {
requiredModifiers |= ModifierFlags.Abstract;
requiredModifiers |= ModifierFlags.Abstract;
}
if (isClassElement(node)
&& checker.getMemberOverrideModifierStatus(classLikeDeclaration, node) === MemberOverrideStatus.NeedsOverride) {
Expand Down Expand Up @@ -3882,5 +3882,6 @@ namespace ts.Completions {
}
return charCode;
}

}

44 changes: 44 additions & 0 deletions tests/cases/fourslash/completionsOverridingMethod8.ts
@@ -0,0 +1,44 @@
/// <reference path="fourslash.ts" />

// @Filename: a.ts
// @newline: LF

////interface IFoo {
//// a?: number;
//// b?(x: number): void;
////}
////class Foo implements IFoo {
//// /**/
////}

verify.completions({
marker: "",
isNewIdentifierLocation: true,
preferences: {
includeCompletionsWithInsertText: true,
includeCompletionsWithSnippetText: false,
includeCompletionsWithClassMemberSnippets: true,
},
includes: [
{
name: "a",
sortText: completion.SortText.LocationPriority,
replacementSpan: {
fileName: "",
pos: 0,
end: 0,
},
insertText: "a: number;\n"
},
{
name: "b",
sortText: completion.SortText.LocationPriority,
replacementSpan: {
fileName: "",
pos: 0,
end: 0,
},
insertText: "b(x: number): void {\n}\n"
},
],
});

0 comments on commit 6bb521f

Please sign in to comment.