@@ -221,11 +221,12 @@ namespace ts.Completions {
221
221
function getStringLiteralCompletionEntriesFromCallExpression ( argumentInfo : SignatureHelp . ArgumentListInfo , typeChecker : TypeChecker ) : CompletionInfo | undefined {
222
222
const candidates : Signature [ ] = [ ] ;
223
223
const entries : CompletionEntry [ ] = [ ] ;
224
+ const uniques = createMap < true > ( ) ;
224
225
225
226
typeChecker . getResolvedSignature ( argumentInfo . invocation , candidates ) ;
226
227
227
228
for ( const candidate of candidates ) {
228
- addStringLiteralCompletionsFromType ( typeChecker . getParameterType ( candidate , argumentInfo . argumentIndex ) , entries , typeChecker ) ;
229
+ addStringLiteralCompletionsFromType ( typeChecker . getParameterType ( candidate , argumentInfo . argumentIndex ) , entries , typeChecker , uniques ) ;
229
230
}
230
231
231
232
if ( entries . length ) {
@@ -258,7 +259,7 @@ namespace ts.Completions {
258
259
return undefined ;
259
260
}
260
261
261
- function addStringLiteralCompletionsFromType ( type : Type , result : Push < CompletionEntry > , typeChecker : TypeChecker ) : void {
262
+ function addStringLiteralCompletionsFromType ( type : Type , result : Push < CompletionEntry > , typeChecker : TypeChecker , uniques = createMap < true > ( ) ) : void {
262
263
if ( type && type . flags & TypeFlags . TypeParameter ) {
263
264
type = typeChecker . getBaseConstraintOfType ( type ) ;
264
265
}
@@ -267,16 +268,20 @@ namespace ts.Completions {
267
268
}
268
269
if ( type . flags & TypeFlags . Union ) {
269
270
for ( const t of ( < UnionType > type ) . types ) {
270
- addStringLiteralCompletionsFromType ( t , result , typeChecker ) ;
271
+ addStringLiteralCompletionsFromType ( t , result , typeChecker , uniques ) ;
271
272
}
272
273
}
273
274
else if ( type . flags & TypeFlags . StringLiteral ) {
274
- result . push ( {
275
- name : ( < LiteralType > type ) . text ,
276
- kindModifiers : ScriptElementKindModifier . none ,
277
- kind : ScriptElementKind . variableElement ,
278
- sortText : "0"
279
- } ) ;
275
+ const name = ( < LiteralType > type ) . text ;
276
+ if ( ! uniques . has ( name ) ) {
277
+ uniques . set ( name , true ) ;
278
+ result . push ( {
279
+ name,
280
+ kindModifiers : ScriptElementKindModifier . none ,
281
+ kind : ScriptElementKind . variableElement ,
282
+ sortText : "0"
283
+ } ) ;
284
+ }
280
285
}
281
286
}
282
287
0 commit comments