@@ -481,7 +481,7 @@ namespace ts.codefix {
481
481
}
482
482
483
483
function single ( ) : Type {
484
- return unifyTypes ( inferTypesFromReferencesSingle ( references ) ) ;
484
+ return combineTypes ( inferTypesFromReferencesSingle ( references ) ) ;
485
485
}
486
486
487
487
function parameters ( declaration : FunctionLike ) : ParameterInference [ ] | undefined {
@@ -517,7 +517,7 @@ namespace ts.codefix {
517
517
const inferred = inferTypesFromReferencesSingle ( getReferences ( parameter . name , program , cancellationToken ) ) ;
518
518
types . push ( ...( isRest ? mapDefined ( inferred , checker . getElementTypeOfArrayType ) : inferred ) ) ;
519
519
}
520
- const type = unifyTypes ( types ) ;
520
+ const type = combineTypes ( types ) ;
521
521
return {
522
522
type : isRest ? checker . createArrayType ( type ) : type ,
523
523
isOptional : isOptional && ! isRest ,
@@ -533,7 +533,7 @@ namespace ts.codefix {
533
533
calculateUsageOfNode ( reference , usage ) ;
534
534
}
535
535
536
- return unifyTypes ( usage . candidateThisTypes || emptyArray ) ;
536
+ return combineTypes ( usage . candidateThisTypes || emptyArray ) ;
537
537
}
538
538
539
539
function inferTypesFromReferencesSingle ( references : readonly Identifier [ ] ) : Type [ ] {
@@ -542,7 +542,7 @@ namespace ts.codefix {
542
542
cancellationToken . throwIfCancellationRequested ( ) ;
543
543
calculateUsageOfNode ( reference , usage ) ;
544
544
}
545
- return inferFromUsage ( usage ) ;
545
+ return inferTypes ( usage ) ;
546
546
}
547
547
548
548
function calculateUsageOfNode ( node : Expression , usage : Usage ) : void {
@@ -819,11 +819,11 @@ namespace ts.codefix {
819
819
return inferences . filter ( i => toRemove . every ( f => ! f ( i ) ) ) ;
820
820
}
821
821
822
- function unifyFromUsage ( usage : Usage ) {
823
- return unifyTypes ( inferFromUsage ( usage ) ) ;
822
+ function combineFromUsage ( usage : Usage ) {
823
+ return combineTypes ( inferTypes ( usage ) ) ;
824
824
}
825
825
826
- function unifyTypes ( inferences : readonly Type [ ] ) : Type {
826
+ function combineTypes ( inferences : readonly Type [ ] ) : Type {
827
827
if ( ! inferences . length ) return checker . getAnyType ( ) ;
828
828
829
829
// 1. string or number individually override string | number
@@ -847,12 +847,12 @@ namespace ts.codefix {
847
847
const anons = good . filter ( i => checker . getObjectFlags ( i ) & ObjectFlags . Anonymous ) as AnonymousType [ ] ;
848
848
if ( anons . length ) {
849
849
good = good . filter ( i => ! ( checker . getObjectFlags ( i ) & ObjectFlags . Anonymous ) ) ;
850
- good . push ( unifyAnonymousTypes ( anons ) ) ;
850
+ good . push ( combineAnonymousTypes ( anons ) ) ;
851
851
}
852
852
return checker . getWidenedType ( checker . getUnionType ( good . map ( checker . getBaseTypeOfLiteralType ) , UnionReduction . Subtype ) ) ;
853
853
}
854
854
855
- function unifyAnonymousTypes ( anons : AnonymousType [ ] ) {
855
+ function combineAnonymousTypes ( anons : AnonymousType [ ] ) {
856
856
if ( anons . length === 1 ) {
857
857
return anons [ 0 ] ;
858
858
}
@@ -893,7 +893,7 @@ namespace ts.codefix {
893
893
numberIndices . length ? checker . createIndexInfo ( checker . getUnionType ( numberIndices ) , numberIndexReadonly ) : undefined ) ;
894
894
}
895
895
896
- function inferFromUsage ( usage : Usage ) : Type [ ] {
896
+ function inferTypes ( usage : Usage ) : Type [ ] {
897
897
const types = [ ] ;
898
898
899
899
if ( usage . isNumber ) {
@@ -906,7 +906,7 @@ namespace ts.codefix {
906
906
types . push ( checker . getUnionType ( [ checker . getStringType ( ) , checker . getNumberType ( ) ] ) ) ;
907
907
}
908
908
if ( usage . numberIndex ) {
909
- types . push ( checker . createArrayType ( unifyFromUsage ( usage . numberIndex ) ) ) ;
909
+ types . push ( checker . createArrayType ( combineFromUsage ( usage . numberIndex ) ) ) ;
910
910
}
911
911
if ( usage . properties && usage . properties . size
912
912
|| usage . calls && usage . calls . length
@@ -926,13 +926,13 @@ namespace ts.codefix {
926
926
if ( usage . properties ) {
927
927
usage . properties . forEach ( ( u , name ) => {
928
928
const symbol = checker . createSymbol ( SymbolFlags . Property , name ) ;
929
- symbol . type = unifyFromUsage ( u ) ;
929
+ symbol . type = combineFromUsage ( u ) ;
930
930
members . set ( name , symbol ) ;
931
931
} ) ;
932
932
}
933
933
const callSignatures : Signature [ ] = usage . calls ? [ getSignatureFromCalls ( usage . calls ) ] : [ ] ;
934
934
const constructSignatures : Signature [ ] = usage . constructs ? [ getSignatureFromCalls ( usage . constructs ) ] : [ ] ;
935
- const stringIndexInfo = usage . stringIndex && checker . createIndexInfo ( unifyFromUsage ( usage . stringIndex ) , /*isReadonly*/ false ) ;
935
+ const stringIndexInfo = usage . stringIndex && checker . createIndexInfo ( combineFromUsage ( usage . stringIndex ) , /*isReadonly*/ false ) ;
936
936
return checker . createAnonymousType ( /*symbol*/ undefined ! , members , callSignatures , constructSignatures , stringIndexInfo , /*numberIndexInfo*/ undefined ) ; // TODO: GH#18217
937
937
}
938
938
@@ -959,7 +959,7 @@ namespace ts.codefix {
959
959
result = result && ! ! sigs . length && checker . isTypeAssignableTo ( source , getFunctionFromCalls ( propUsage . calls ) ) ;
960
960
}
961
961
else {
962
- result = result && checker . isTypeAssignableTo ( source , unifyFromUsage ( propUsage ) ) ;
962
+ result = result && checker . isTypeAssignableTo ( source , combineFromUsage ( propUsage ) ) ;
963
963
}
964
964
} ) ;
965
965
return result ;
@@ -982,17 +982,17 @@ namespace ts.codefix {
982
982
usage . properties . forEach ( ( propUsage , name ) => {
983
983
const genericPropertyType = checker . getTypeOfPropertyOfType ( generic , name as string ) ;
984
984
Debug . assert ( ! ! genericPropertyType , "generic should have all the properties of its reference." ) ;
985
- types . push ( ...infer ( genericPropertyType ! , unifyFromUsage ( propUsage ) , singleTypeParameter ) ) ;
985
+ types . push ( ...inferTypeParameters ( genericPropertyType ! , combineFromUsage ( propUsage ) , singleTypeParameter ) ) ;
986
986
} ) ;
987
- return builtinConstructors [ type . symbol . escapedName as string ] ( unifyTypes ( types ) ) ;
987
+ return builtinConstructors [ type . symbol . escapedName as string ] ( combineTypes ( types ) ) ;
988
988
}
989
989
990
- function infer ( genericType : Type , usageType : Type , typeParameter : Type ) : readonly Type [ ] {
990
+ function inferTypeParameters ( genericType : Type , usageType : Type , typeParameter : Type ) : readonly Type [ ] {
991
991
if ( genericType === typeParameter ) {
992
992
return [ usageType ] ;
993
993
}
994
994
else if ( genericType . flags & TypeFlags . UnionOrIntersection ) {
995
- return flatMap ( ( genericType as UnionOrIntersectionType ) . types , t => infer ( t , usageType , typeParameter ) ) ;
995
+ return flatMap ( ( genericType as UnionOrIntersectionType ) . types , t => inferTypeParameters ( t , usageType , typeParameter ) ) ;
996
996
}
997
997
else if ( getObjectFlags ( genericType ) & ObjectFlags . Reference && getObjectFlags ( usageType ) & ObjectFlags . Reference ) {
998
998
// this is wrong because we need a reference to the targetType to, so we can check that it's also a reference
@@ -1002,7 +1002,7 @@ namespace ts.codefix {
1002
1002
if ( genericArgs && usageArgs ) {
1003
1003
for ( let i = 0 ; i < genericArgs . length ; i ++ ) {
1004
1004
if ( usageArgs [ i ] ) {
1005
- types . push ( ...infer ( genericArgs [ i ] , usageArgs [ i ] , typeParameter ) ) ;
1005
+ types . push ( ...inferTypeParameters ( genericArgs [ i ] , usageArgs [ i ] , typeParameter ) ) ;
1006
1006
}
1007
1007
}
1008
1008
}
@@ -1031,11 +1031,11 @@ namespace ts.codefix {
1031
1031
genericParamType = elementType ;
1032
1032
}
1033
1033
const targetType = ( usageParam as SymbolLinks ) . type || checker . getTypeOfSymbolAtLocation ( usageParam , usageParam . valueDeclaration ) ;
1034
- types . push ( ...infer ( genericParamType , targetType , typeParameter ) ) ;
1034
+ types . push ( ...inferTypeParameters ( genericParamType , targetType , typeParameter ) ) ;
1035
1035
}
1036
1036
const genericReturn = checker . getReturnTypeOfSignature ( genericSig ) ;
1037
1037
const usageReturn = checker . getReturnTypeOfSignature ( usageSig ) ;
1038
- types . push ( ...infer ( genericReturn , usageReturn , typeParameter ) ) ;
1038
+ types . push ( ...inferTypeParameters ( genericReturn , usageReturn , typeParameter ) ) ;
1039
1039
return types ;
1040
1040
}
1041
1041
@@ -1048,13 +1048,13 @@ namespace ts.codefix {
1048
1048
const length = Math . max ( ...calls . map ( c => c . argumentTypes . length ) ) ;
1049
1049
for ( let i = 0 ; i < length ; i ++ ) {
1050
1050
const symbol = checker . createSymbol ( SymbolFlags . FunctionScopedVariable , escapeLeadingUnderscores ( `arg${ i } ` ) ) ;
1051
- symbol . type = unifyTypes ( calls . map ( call => call . argumentTypes [ i ] || checker . getUndefinedType ( ) ) ) ;
1051
+ symbol . type = combineTypes ( calls . map ( call => call . argumentTypes [ i ] || checker . getUndefinedType ( ) ) ) ;
1052
1052
if ( calls . some ( call => call . argumentTypes [ i ] === undefined ) ) {
1053
1053
symbol . flags |= SymbolFlags . Optional ;
1054
1054
}
1055
1055
parameters . push ( symbol ) ;
1056
1056
}
1057
- const returnType = unifyFromUsage ( combineUsages ( calls . map ( call => call . return_ ) ) ) ;
1057
+ const returnType = combineFromUsage ( combineUsages ( calls . map ( call => call . return_ ) ) ) ;
1058
1058
// TODO: GH#18217
1059
1059
return checker . createSignature ( /*declaration*/ undefined ! , /*typeParameters*/ undefined , /*thisParameter*/ undefined , parameters , returnType , /*typePredicate*/ undefined , length , /*hasRestParameter*/ false , /*hasLiteralTypes*/ false ) ;
1060
1060
}
0 commit comments