@@ -1343,8 +1343,7 @@ namespace ts.server {
13431343 } ) ;
13441344 }
13451345
1346- private getCompletions ( args : protocol . CompletionsRequestArgs , simplifiedResult : boolean ) : ReadonlyArray < protocol . CompletionEntry > | CompletionInfo | undefined {
1347- const prefix = args . prefix || "" ;
1346+ private getCompletions ( args : protocol . CompletionsRequestArgs , kind : protocol . CommandTypes . CompletionInfo | protocol . CommandTypes . Completions | protocol . CommandTypes . CompletionsFull ) : ReadonlyArray < protocol . CompletionEntry > | protocol . CompletionInfo | CompletionInfo | undefined {
13481347 const { file, project } = this . getFileAndProject ( args ) ;
13491348 const scriptInfo = this . projectService . getScriptInfoForNormalizedPath ( file ) ! ;
13501349 const position = this . getPosition ( args , scriptInfo ) ;
@@ -1355,19 +1354,27 @@ namespace ts.server {
13551354 includeExternalModuleExports : args . includeExternalModuleExports ,
13561355 includeInsertTextCompletions : args . includeInsertTextCompletions
13571356 } ) ;
1358- if ( simplifiedResult ) {
1359- return mapDefined < CompletionEntry , protocol . CompletionEntry > ( completions && completions . entries , entry => {
1360- if ( completions ! . isMemberCompletion || startsWith ( entry . name . toLowerCase ( ) , prefix . toLowerCase ( ) ) ) {
1361- const { name, kind, kindModifiers, sortText, insertText, replacementSpan, hasAction, source, isRecommended } = entry ;
1362- const convertedSpan = replacementSpan ? this . toLocationTextSpan ( replacementSpan , scriptInfo ) : undefined ;
1363- // Use `hasAction || undefined` to avoid serializing `false`.
1364- return { name, kind, kindModifiers, sortText, insertText, replacementSpan : convertedSpan , hasAction : hasAction || undefined , source, isRecommended } ;
1365- }
1366- } ) . sort ( ( a , b ) => compareStringsCaseSensitiveUI ( a . name , b . name ) ) ;
1367- }
1368- else {
1369- return completions ;
1370- }
1357+ if ( completions === undefined ) return undefined ;
1358+
1359+ if ( kind === protocol . CommandTypes . CompletionsFull ) return completions ;
1360+
1361+ const prefix = args . prefix || "" ;
1362+ const entries = mapDefined < CompletionEntry , protocol . CompletionEntry > ( completions . entries , entry => {
1363+ if ( completions . isMemberCompletion || startsWith ( entry . name . toLowerCase ( ) , prefix . toLowerCase ( ) ) ) {
1364+ const { name, kind, kindModifiers, sortText, insertText, replacementSpan, hasAction, source, isRecommended } = entry ;
1365+ const convertedSpan = replacementSpan ? this . toLocationTextSpan ( replacementSpan , scriptInfo ) : undefined ;
1366+ // Use `hasAction || undefined` to avoid serializing `false`.
1367+ return { name, kind, kindModifiers, sortText, insertText, replacementSpan : convertedSpan , hasAction : hasAction || undefined , source, isRecommended } ;
1368+ }
1369+ } ) . sort ( ( a , b ) => compareStringsCaseSensitiveUI ( a . name , b . name ) ) ;
1370+
1371+ if ( kind === protocol . CommandTypes . Completions ) return entries ;
1372+
1373+ const res : protocol . CompletionInfo = {
1374+ ...completions ,
1375+ entries,
1376+ } ;
1377+ return res ;
13711378 }
13721379
13731380 private getCompletionEntryDetails ( args : protocol . CompletionDetailsRequestArgs , simplifiedResult : boolean ) : ReadonlyArray < protocol . CompletionEntryDetails > | ReadonlyArray < CompletionEntryDetails > {
@@ -2035,11 +2042,14 @@ namespace ts.server {
20352042 [ CommandNames . FormatRangeFull ] : ( request : protocol . FormatRequest ) => {
20362043 return this . requiredResponse ( this . getFormattingEditsForRangeFull ( request . arguments ) ) ;
20372044 } ,
2045+ [ CommandNames . CompletionInfo ] : ( request : protocol . CompletionsRequest ) => {
2046+ return this . requiredResponse ( this . getCompletions ( request . arguments , CommandNames . CompletionInfo ) ) ;
2047+ } ,
20382048 [ CommandNames . Completions ] : ( request : protocol . CompletionsRequest ) => {
2039- return this . requiredResponse ( this . getCompletions ( request . arguments , /*simplifiedResult*/ true ) ) ;
2049+ return this . requiredResponse ( this . getCompletions ( request . arguments , CommandNames . Completions ) ) ;
20402050 } ,
20412051 [ CommandNames . CompletionsFull ] : ( request : protocol . CompletionsRequest ) => {
2042- return this . requiredResponse ( this . getCompletions ( request . arguments , /*simplifiedResult*/ false ) ) ;
2052+ return this . requiredResponse ( this . getCompletions ( request . arguments , CommandNames . CompletionsFull ) ) ;
20432053 } ,
20442054 [ CommandNames . CompletionDetails ] : ( request : protocol . CompletionDetailsRequest ) => {
20452055 return this . requiredResponse ( this . getCompletionEntryDetails ( request . arguments , /*simplifiedResult*/ true ) ) ;
0 commit comments