@@ -98,7 +98,7 @@ namespace ts.Completions {
9898 interface SymbolOriginInfoObjectLiteralMethod extends SymbolOriginInfo {
9999 importAdder : codefix . ImportAdder ,
100100 insertText : string ,
101- sourceDisplay : SymbolDisplayPart [ ] ,
101+ labelDetails : CompletionEntryLabelDetails ,
102102 isSnippet ?: true ,
103103 }
104104
@@ -706,6 +706,7 @@ namespace ts.Completions {
706706 let source = getSourceFromOrigin ( origin ) ;
707707 let sourceDisplay ;
708708 let hasAction ;
709+ let labelDetails ;
709710
710711 const typeChecker = program . getTypeChecker ( ) ;
711712 const insertQuestionDot = origin && originIsNullableMember ( origin ) ;
@@ -780,7 +781,11 @@ namespace ts.Completions {
780781
781782 if ( origin && originIsObjectLiteralMethod ( origin ) ) {
782783 let importAdder ;
783- ( { insertText, isSnippet, importAdder, sourceDisplay } = origin ) ;
784+ ( { insertText, isSnippet, importAdder, labelDetails } = origin ) ;
785+ if ( ! preferences . useLabelDetailsInCompletionEntries ) {
786+ name = name + labelDetails . detail ;
787+ labelDetails = undefined ;
788+ }
784789 source = CompletionSource . ObjectLiteralMethodSnippet ;
785790 sortText = SortText . SortBelow ( sortText ) ;
786791 if ( importAdder . hasFixes ( ) ) {
@@ -842,6 +847,7 @@ namespace ts.Completions {
842847 insertText,
843848 replacementSpan,
844849 sourceDisplay,
850+ labelDetails,
845851 isSnippet,
846852 isPackageJsonImport : originIsPackageJsonImport ( origin ) || undefined ,
847853 isImportStatementCompletion : ! ! importCompletionNode || undefined ,
@@ -1066,7 +1072,7 @@ namespace ts.Completions {
10661072 options : CompilerOptions ,
10671073 preferences : UserPreferences ,
10681074 formatContext : formatting . FormatContext | undefined ,
1069- ) : { insertText : string , isSnippet ?: true , importAdder : codefix . ImportAdder , sourceDisplay : SymbolDisplayPart [ ] } | undefined {
1075+ ) : { insertText : string , isSnippet ?: true , importAdder : codefix . ImportAdder , labelDetails : CompletionEntryLabelDetails } | undefined {
10701076 const isSnippet = preferences . includeCompletionsWithSnippetText || undefined ;
10711077 let insertText : string = name ;
10721078
@@ -1092,16 +1098,24 @@ namespace ts.Completions {
10921098 insertText = printer . printSnippetList ( ListFormat . CommaDelimited | ListFormat . AllowTrailingComma , factory . createNodeArray ( [ method ] , /*hasTrailingComma*/ true ) , sourceFile ) ;
10931099 }
10941100
1101+ const signaturePrinter = createPrinter ( {
1102+ removeComments : true ,
1103+ module : options . module ,
1104+ target : options . target ,
1105+ omitTrailingSemicolon : true ,
1106+ } ) ;
1107+ // The `labelDetails.detail` will be displayed right beside the method name,
1108+ // so we drop the name (and modifiers) from the signature.
10951109 const methodSignature = factory . createMethodSignature (
1096- method . modifiers ,
1097- method . name ,
1110+ /* modifiers*/ undefined ,
1111+ /* name*/ "" ,
10981112 method . questionToken ,
10991113 method . typeParameters ,
11001114 method . parameters ,
11011115 method . type ) ;
1102- const sourceDisplay = nodeToDisplayParts ( methodSignature , enclosingDeclaration ) ;
1116+ const labelDetails = { detail : signaturePrinter . printNode ( EmitHint . Unspecified , methodSignature , sourceFile ) } ;
11031117
1104- return { isSnippet, insertText, importAdder, sourceDisplay } ;
1118+ return { isSnippet, insertText, importAdder, labelDetails } ;
11051119
11061120 } ;
11071121
0 commit comments