@@ -99,7 +99,10 @@ module ts {
99
99
getFullyQualifiedName : getFullyQualifiedName ,
100
100
getResolvedSignature : getResolvedSignature ,
101
101
getEnumMemberValue : getEnumMemberValue ,
102
- isValidPropertyAccess : isValidPropertyAccess
102
+ isValidPropertyAccess : isValidPropertyAccess ,
103
+ getSignatureFromDeclaration : getSignatureFromDeclaration ,
104
+ writeSignature : writeSignature ,
105
+ isImplementationOfOverload : isImplementationOfOverload
103
106
} ;
104
107
105
108
var undefinedSymbol = createSymbol ( SymbolFlags . Property | SymbolFlags . Transient , "undefined" ) ;
@@ -1055,11 +1058,10 @@ module ts {
1055
1058
return result ;
1056
1059
}
1057
1060
1058
- function writeType ( type : Type , writer : SymbolWriter , enclosingDeclaration ?: Node , flags ?: TypeFormatFlags ) {
1059
- var typeStack : Type [ ] ;
1060
- return writeType ( type , /*allowFunctionOrConstructorTypeLiteral*/ true ) ;
1061
+ function writeType ( type : Type , writer : SymbolWriter , enclosingDeclaration ?: Node , flags ?: TypeFormatFlags , typeStack ?: Type [ ] ) {
1062
+ return writeType ( type , flags | TypeFormatFlags . WriteArrowStyleSignature ) ;
1061
1063
1062
- function writeType ( type : Type , allowFunctionOrConstructorTypeLiteral : boolean ) {
1064
+ function writeType ( type : Type , flags : TypeFormatFlags ) {
1063
1065
if ( type . flags & TypeFlags . Intrinsic ) {
1064
1066
writer . writeKind ( ( < IntrinsicType > type ) . intrinsicName , SymbolDisplayPartKind . keyword ) ;
1065
1067
}
@@ -1073,7 +1075,7 @@ module ts {
1073
1075
writeTupleType ( < TupleType > type ) ;
1074
1076
}
1075
1077
else if ( type . flags & TypeFlags . Anonymous ) {
1076
- writeAnonymousType ( < ObjectType > type , allowFunctionOrConstructorTypeLiteral ) ;
1078
+ writeAnonymousType ( < ObjectType > type , flags ) ;
1077
1079
}
1078
1080
else if ( type . flags & TypeFlags . StringLiteral ) {
1079
1081
writer . writeKind ( ( < StringLiteralType > type ) . text , SymbolDisplayPartKind . stringLiteral ) ;
@@ -1095,15 +1097,15 @@ module ts {
1095
1097
writePunctuation ( writer , SyntaxKind . CommaToken ) ;
1096
1098
writeSpace ( writer ) ;
1097
1099
}
1098
- writeType ( types [ i ] , /*allowFunctionOrConstructorTypeLiteral*/ true ) ;
1100
+ writeType ( types [ i ] , flags | TypeFormatFlags . WriteArrowStyleSignature ) ;
1099
1101
}
1100
1102
}
1101
1103
1102
1104
function writeTypeReference ( type : TypeReference ) {
1103
1105
if ( type . target === globalArrayType && ! ( flags & TypeFormatFlags . WriteArrayAsGenericType ) ) {
1104
1106
// If we are writing array element type the arrow style signatures are not allowed as
1105
1107
// we need to surround it by curlies, e.g. { (): T; }[]; as () => T[] would mean something different
1106
- writeType ( type . typeArguments [ 0 ] , /*allowFunctionOrConstructorTypeLiteral*/ false ) ;
1108
+ writeType ( type . typeArguments [ 0 ] , flags & ~ TypeFormatFlags . WriteArrowStyleSignature ) ;
1107
1109
writePunctuation ( writer , SyntaxKind . OpenBracketToken ) ;
1108
1110
writePunctuation ( writer , SyntaxKind . CloseBracketToken ) ;
1109
1111
}
@@ -1121,7 +1123,7 @@ module ts {
1121
1123
writePunctuation ( writer , SyntaxKind . CloseBracketToken ) ;
1122
1124
}
1123
1125
1124
- function writeAnonymousType ( type : ObjectType , allowFunctionOrConstructorTypeLiteral : boolean ) {
1126
+ function writeAnonymousType ( type : ObjectType , flags : TypeFormatFlags ) {
1125
1127
// Always use 'typeof T' for type of class, enum, and module objects
1126
1128
if ( type . symbol && type . symbol . flags & ( SymbolFlags . Class | SymbolFlags . Enum | SymbolFlags . ValueModule ) ) {
1127
1129
writeTypeofSymbol ( type ) ;
@@ -1139,7 +1141,7 @@ module ts {
1139
1141
typeStack = [ ] ;
1140
1142
}
1141
1143
typeStack . push ( type ) ;
1142
- writeLiteralType ( type , allowFunctionOrConstructorTypeLiteral ) ;
1144
+ writeLiteralType ( type , flags ) ;
1143
1145
typeStack . pop ( ) ;
1144
1146
}
1145
1147
@@ -1167,7 +1169,7 @@ module ts {
1167
1169
writeSymbol ( type . symbol , writer , enclosingDeclaration , SymbolFlags . Value ) ;
1168
1170
}
1169
1171
1170
- function writeLiteralType ( type : ObjectType , allowFunctionOrConstructorTypeLiteral : boolean ) {
1172
+ function writeLiteralType ( type : ObjectType , flags : TypeFormatFlags ) {
1171
1173
var resolved = resolveObjectTypeMembers ( type ) ;
1172
1174
if ( ! resolved . properties . length && ! resolved . stringIndexType && ! resolved . numberIndexType ) {
1173
1175
if ( ! resolved . callSignatures . length && ! resolved . constructSignatures . length ) {
@@ -1176,15 +1178,15 @@ module ts {
1176
1178
return ;
1177
1179
}
1178
1180
1179
- if ( allowFunctionOrConstructorTypeLiteral ) {
1181
+ if ( flags & TypeFormatFlags . WriteArrowStyleSignature ) {
1180
1182
if ( resolved . callSignatures . length === 1 && ! resolved . constructSignatures . length ) {
1181
- writeSignature ( resolved . callSignatures [ 0 ] , shouldTypeBeAllowStyleTypeLiteral ( ) ) ;
1183
+ writeSignature ( resolved . callSignatures [ 0 ] , writer , enclosingDeclaration , flags , typeStack ) ;
1182
1184
return ;
1183
1185
}
1184
1186
if ( resolved . constructSignatures . length === 1 && ! resolved . callSignatures . length ) {
1185
1187
writeKeyword ( writer , SyntaxKind . NewKeyword ) ;
1186
1188
writeSpace ( writer ) ;
1187
- writeSignature ( resolved . constructSignatures [ 0 ] , shouldTypeBeAllowStyleTypeLiteral ( ) ) ;
1189
+ writeSignature ( resolved . constructSignatures [ 0 ] , writer , enclosingDeclaration , flags , typeStack ) ;
1188
1190
return ;
1189
1191
}
1190
1192
}
@@ -1194,15 +1196,15 @@ module ts {
1194
1196
writer . writeLine ( ) ;
1195
1197
writer . increaseIndent ( ) ;
1196
1198
for ( var i = 0 ; i < resolved . callSignatures . length ; i ++ ) {
1197
- writeSignature ( resolved . callSignatures [ i ] ) ;
1199
+ writeSignature ( resolved . callSignatures [ i ] , writer , enclosingDeclaration , flags & ~ TypeFormatFlags . WriteArrowStyleSignature , typeStack ) ;
1198
1200
writePunctuation ( writer , SyntaxKind . SemicolonToken ) ;
1199
1201
writer . writeLine ( ) ;
1200
1202
}
1201
1203
for ( var i = 0 ; i < resolved . constructSignatures . length ; i ++ ) {
1202
1204
writeKeyword ( writer , SyntaxKind . NewKeyword ) ;
1203
1205
writeSpace ( writer ) ;
1204
1206
1205
- writeSignature ( resolved . constructSignatures [ i ] ) ;
1207
+ writeSignature ( resolved . constructSignatures [ i ] , writer , enclosingDeclaration , flags & ~ TypeFormatFlags . WriteArrowStyleSignature , typeStack ) ;
1206
1208
writePunctuation ( writer , SyntaxKind . SemicolonToken ) ;
1207
1209
writer . writeLine ( ) ;
1208
1210
}
@@ -1216,7 +1218,7 @@ module ts {
1216
1218
writePunctuation ( writer , SyntaxKind . CloseBracketToken ) ;
1217
1219
writePunctuation ( writer , SyntaxKind . ColonToken ) ;
1218
1220
writeSpace ( writer ) ;
1219
- writeType ( resolved . stringIndexType , /*allowFunctionOrConstructorTypeLiteral*/ true ) ;
1221
+ writeType ( resolved . stringIndexType , flags | TypeFormatFlags . WriteArrowStyleSignature ) ;
1220
1222
writePunctuation ( writer , SyntaxKind . SemicolonToken ) ;
1221
1223
writer . writeLine ( ) ;
1222
1224
}
@@ -1230,7 +1232,7 @@ module ts {
1230
1232
writePunctuation ( writer , SyntaxKind . CloseBracketToken ) ;
1231
1233
writePunctuation ( writer , SyntaxKind . ColonToken ) ;
1232
1234
writeSpace ( writer ) ;
1233
- writeType ( resolved . numberIndexType , /*allowFunctionOrConstructorTypeLiteral*/ true ) ;
1235
+ writeType ( resolved . numberIndexType , flags | TypeFormatFlags . WriteArrowStyleSignature ) ;
1234
1236
writePunctuation ( writer , SyntaxKind . SemicolonToken ) ;
1235
1237
writer . writeLine ( ) ;
1236
1238
}
@@ -1244,7 +1246,7 @@ module ts {
1244
1246
if ( isOptionalProperty ( p ) ) {
1245
1247
writePunctuation ( writer , SyntaxKind . QuestionToken ) ;
1246
1248
}
1247
- writeSignature ( signatures [ j ] ) ;
1249
+ writeSignature ( signatures [ j ] , writer , enclosingDeclaration , flags & ~ TypeFormatFlags . WriteArrowStyleSignature , typeStack ) ;
1248
1250
writePunctuation ( writer , SyntaxKind . SemicolonToken ) ;
1249
1251
writer . writeLine ( ) ;
1250
1252
}
@@ -1256,72 +1258,67 @@ module ts {
1256
1258
}
1257
1259
writePunctuation ( writer , SyntaxKind . ColonToken ) ;
1258
1260
writeSpace ( writer ) ;
1259
- writeType ( t , /*allowFunctionOrConstructorTypeLiteral*/ true ) ;
1261
+ writeType ( t , flags | TypeFormatFlags . WriteArrowStyleSignature ) ;
1260
1262
writePunctuation ( writer , SyntaxKind . SemicolonToken ) ;
1261
1263
writer . writeLine ( ) ;
1262
1264
}
1263
1265
}
1264
1266
writer . decreaseIndent ( ) ;
1265
1267
writePunctuation ( writer , SyntaxKind . CloseBraceToken ) ;
1266
-
1267
- function shouldTypeBeAllowStyleTypeLiteral ( ) {
1268
- return ! typeStack || typeStack . length !== 1 || typeStack [ 0 ] !== type || // If this is not a top level type we are writing, arrowStyle is ok
1269
- ! ( flags & TypeFormatFlags . NoArrowStyleTopLevelSignature ) ;
1270
- }
1271
1268
}
1269
+ }
1272
1270
1273
- function writeSignature ( signature : Signature , arrowStyle ?: boolean ) {
1274
- if ( signature . typeParameters ) {
1275
- writePunctuation ( writer , SyntaxKind . LessThanToken ) ;
1276
- for ( var i = 0 ; i < signature . typeParameters . length ; i ++ ) {
1277
- if ( i > 0 ) {
1278
- writePunctuation ( writer , SyntaxKind . CommaToken ) ;
1279
- writeSpace ( writer ) ;
1280
- }
1281
- var tp = signature . typeParameters [ i ] ;
1282
- writeSymbol ( tp . symbol , writer ) ;
1283
- var constraint = getConstraintOfTypeParameter ( tp ) ;
1284
- if ( constraint ) {
1285
- writeSpace ( writer ) ;
1286
- writeKeyword ( writer , SyntaxKind . ExtendsKeyword ) ;
1287
- writeSpace ( writer ) ;
1288
- writeType ( constraint , /*allowFunctionOrConstructorTypeLiteral*/ true ) ;
1289
- }
1290
- }
1291
- writePunctuation ( writer , SyntaxKind . GreaterThanToken ) ;
1292
- }
1293
- writePunctuation ( writer , SyntaxKind . OpenParenToken ) ;
1294
- for ( var i = 0 ; i < signature . parameters . length ; i ++ ) {
1271
+ function writeSignature ( signature : Signature , writer : SymbolWriter , enclosingDeclaration ?: Node , flags ?: TypeFormatFlags , typeStack ?: Type [ ] ) {
1272
+ if ( signature . typeParameters ) {
1273
+ writePunctuation ( writer , SyntaxKind . LessThanToken ) ;
1274
+ for ( var i = 0 ; i < signature . typeParameters . length ; i ++ ) {
1295
1275
if ( i > 0 ) {
1296
1276
writePunctuation ( writer , SyntaxKind . CommaToken ) ;
1297
1277
writeSpace ( writer ) ;
1298
1278
}
1299
- var p = signature . parameters [ i ] ;
1300
- if ( getDeclarationFlagsFromSymbol ( p ) & NodeFlags . Rest ) {
1301
- writePunctuation ( writer , SyntaxKind . DotDotDotToken ) ;
1302
- }
1303
- writeSymbol ( p , writer ) ;
1304
- if ( p . valueDeclaration . flags & NodeFlags . QuestionMark || ( < VariableDeclaration > p . valueDeclaration ) . initializer ) {
1305
- writePunctuation ( writer , SyntaxKind . QuestionToken ) ;
1279
+ var tp = signature . typeParameters [ i ] ;
1280
+ writeSymbol ( tp . symbol , writer ) ;
1281
+ var constraint = getConstraintOfTypeParameter ( tp ) ;
1282
+ if ( constraint ) {
1283
+ writeSpace ( writer ) ;
1284
+ writeKeyword ( writer , SyntaxKind . ExtendsKeyword ) ;
1285
+ writeSpace ( writer ) ;
1286
+ writeType ( constraint , writer , enclosingDeclaration , flags , typeStack ) ;
1306
1287
}
1307
- writePunctuation ( writer , SyntaxKind . ColonToken ) ;
1308
- writeSpace ( writer ) ;
1309
-
1310
- writeType ( getTypeOfSymbol ( p ) , /*allowFunctionOrConstructorTypeLiteral*/ true ) ;
1311
1288
}
1312
-
1313
- writePunctuation ( writer , SyntaxKind . CloseParenToken ) ;
1314
- if ( arrowStyle ) {
1289
+ writePunctuation ( writer , SyntaxKind . GreaterThanToken ) ;
1290
+ }
1291
+ writePunctuation ( writer , SyntaxKind . OpenParenToken ) ;
1292
+ for ( var i = 0 ; i < signature . parameters . length ; i ++ ) {
1293
+ if ( i > 0 ) {
1294
+ writePunctuation ( writer , SyntaxKind . CommaToken ) ;
1315
1295
writeSpace ( writer ) ;
1316
- writePunctuation ( writer , SyntaxKind . EqualsGreaterThanToken ) ;
1317
1296
}
1318
- else {
1319
- writePunctuation ( writer , SyntaxKind . ColonToken ) ;
1297
+ var p = signature . parameters [ i ] ;
1298
+ if ( getDeclarationFlagsFromSymbol ( p ) & NodeFlags . Rest ) {
1299
+ writePunctuation ( writer , SyntaxKind . DotDotDotToken ) ;
1320
1300
}
1301
+ writeSymbol ( p , writer ) ;
1302
+ if ( p . valueDeclaration . flags & NodeFlags . QuestionMark || ( < VariableDeclaration > p . valueDeclaration ) . initializer ) {
1303
+ writePunctuation ( writer , SyntaxKind . QuestionToken ) ;
1304
+ }
1305
+ writePunctuation ( writer , SyntaxKind . ColonToken ) ;
1321
1306
writeSpace ( writer ) ;
1322
1307
1323
- writeType ( getReturnTypeOfSignature ( signature ) , /*allowFunctionOrConstructorTypeLiteral*/ true ) ;
1308
+ writeType ( getTypeOfSymbol ( p ) , writer , enclosingDeclaration , flags , typeStack ) ;
1309
+ }
1310
+
1311
+ writePunctuation ( writer , SyntaxKind . CloseParenToken ) ;
1312
+ if ( flags & TypeFormatFlags . WriteArrowStyleSignature ) {
1313
+ writeSpace ( writer ) ;
1314
+ writePunctuation ( writer , SyntaxKind . EqualsGreaterThanToken ) ;
1324
1315
}
1316
+ else {
1317
+ writePunctuation ( writer , SyntaxKind . ColonToken ) ;
1318
+ }
1319
+ writeSpace ( writer ) ;
1320
+
1321
+ writeType ( getReturnTypeOfSignature ( signature ) , writer , enclosingDeclaration , flags , typeStack ) ;
1325
1322
}
1326
1323
1327
1324
function isDeclarationVisible ( node : Declaration ) : boolean {
0 commit comments