Skip to content

Commit a73bf31

Browse files
committed
Fixes CR feedback
1 parent 48acb48 commit a73bf31

File tree

1 file changed

+44
-47
lines changed

1 file changed

+44
-47
lines changed

src/compiler/checker.ts

+44-47
Original file line numberDiff line numberDiff line change
@@ -1349,24 +1349,30 @@ module ts {
13491349
writer.writeSpace(" ");
13501350
}
13511351

1352-
function getWriteResult<T, U>(info: T, enclosingDeclaration: Node, flags: U, buildDisplay: (info: T, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: U) => void): string {
1352+
function symbolToString(symbol: Symbol, enclosingDeclaration?: Node, meaning?: SymbolFlags): string {
13531353
let writer = getSingleLineStringWriter();
1354-
buildDisplay(info, writer, enclosingDeclaration, flags);
1354+
getSymbolDisplayBuilder().buildSymbolDisplay(symbol, writer, enclosingDeclaration, meaning);
13551355
let result = writer.string();
13561356
releaseStringWriter(writer);
1357-
return result;
1358-
}
13591357

1360-
function symbolToString(symbol: Symbol, enclosingDeclaration?: Node, meaning?: SymbolFlags): string {
1361-
return getWriteResult(symbol, enclosingDeclaration, meaning, getSymbolDisplayBuilder().buildSymbolDisplay);
1358+
return result;
13621359
}
13631360

13641361
function signatureToString(signature: Signature, enclosingDeclaration?: Node, flags?: TypeFormatFlags): string {
1365-
return getWriteResult(signature, enclosingDeclaration, flags, getSymbolDisplayBuilder().buildSignatureDisplay);
1362+
let writer = getSingleLineStringWriter();
1363+
getSymbolDisplayBuilder().buildSignatureDisplay(signature, writer, enclosingDeclaration, flags);
1364+
let result = writer.string();
1365+
releaseStringWriter(writer);
1366+
1367+
return result;
13661368
}
13671369

13681370
function typeToString(type: Type, enclosingDeclaration?: Node, flags?: TypeFormatFlags): string {
1369-
let result = getWriteResult(type, enclosingDeclaration, flags, getSymbolDisplayBuilder().buildTypeDisplay);
1371+
let writer = getSingleLineStringWriter();
1372+
getSymbolDisplayBuilder().buildTypeDisplay(type, writer, enclosingDeclaration, flags);
1373+
let result = writer.string();
1374+
releaseStringWriter(writer);
1375+
13701376
let maxLength = compilerOptions.noErrorTruncation || flags & TypeFormatFlags.NoTruncation ? undefined : 100;
13711377
if (maxLength && result.length >= maxLength) {
13721378
result = result.substr(0, maxLength - "...".length) + "...";
@@ -3234,17 +3240,16 @@ module ts {
32343240
if (classType) {
32353241
returnType = classType;
32363242
}
3237-
else if (declaration.type && declaration.type.kind === SyntaxKind.TypePredicate) {
3238-
returnType = booleanType;
3239-
let typePredicateNode = <TypePredicateNode>declaration.type;
3240-
typePredicate = {
3241-
parameterName: typePredicateNode.parameterName ? typePredicateNode.parameterName.text : undefined,
3242-
parameterIndex: typePredicateNode.parameterName ? getTypePredicateParameterIndex(declaration.parameters, typePredicateNode.parameterName) : undefined,
3243-
type: getTypeFromTypeNode(typePredicateNode.type)
3244-
};
3245-
}
32463243
else if (declaration.type) {
32473244
returnType = getTypeFromTypeNode(declaration.type);
3245+
if (declaration.type.kind === SyntaxKind.TypePredicate) {
3246+
let typePredicateNode = <TypePredicateNode>declaration.type;
3247+
typePredicate = {
3248+
parameterName: typePredicateNode.parameterName ? typePredicateNode.parameterName.text : undefined,
3249+
parameterIndex: typePredicateNode.parameterName ? getTypePredicateParameterIndex(declaration.parameters, typePredicateNode.parameterName) : undefined,
3250+
type: getTypeFromTypeNode(typePredicateNode.type)
3251+
};
3252+
}
32483253
}
32493254
else {
32503255
// TypeScript 1.0 spec (April 2014):
@@ -3850,6 +3855,8 @@ module ts {
38503855
return getTypeFromStringLiteral(<StringLiteral>node);
38513856
case SyntaxKind.TypeReference:
38523857
return getTypeFromTypeReferenceOrExpressionWithTypeArguments(<TypeReferenceNode>node);
3858+
case SyntaxKind.TypePredicate:
3859+
return booleanType;
38533860
case SyntaxKind.ExpressionWithTypeArguments:
38543861
return getTypeFromTypeReferenceOrExpressionWithTypeArguments(<ExpressionWithTypeArguments>node);
38553862
case SyntaxKind.TypeQuery:
@@ -4654,16 +4661,18 @@ module ts {
46544661
}
46554662

46564663
if (source.typePredicate && target.typePredicate) {
4657-
let hasDifferentParamaterIndex = source.typePredicate.parameterIndex !== target.typePredicate.parameterIndex;
4664+
let hasDifferentParameterIndex = source.typePredicate.parameterIndex !== target.typePredicate.parameterIndex;
46584665
let hasDifferentTypes: boolean;
4659-
if (hasDifferentParamaterIndex || (hasDifferentTypes = !isTypeIdenticalTo(source.typePredicate.type, target.typePredicate.type))) {
4666+
if (hasDifferentParameterIndex ||
4667+
(hasDifferentTypes = !isTypeIdenticalTo(source.typePredicate.type, target.typePredicate.type))) {
4668+
46604669
if (reportErrors) {
46614670
let sourceParamText = source.typePredicate.parameterName;
46624671
let targetParamText = target.typePredicate.parameterName;
46634672
let sourceTypeText = typeToString(source.typePredicate.type);
46644673
let targetTypeText = typeToString(target.typePredicate.type);
46654674

4666-
if (hasDifferentParamaterIndex) {
4675+
if (hasDifferentParameterIndex) {
46674676
reportError(Diagnostics.Parameter_0_is_not_in_the_same_position_as_parameter_1,
46684677
sourceParamText,
46694678
targetParamText);
@@ -5651,34 +5660,21 @@ module ts {
56515660
return originalType;
56525661
}
56535662

5654-
function shouldNarrowTypeByTypePredicate(signature: Signature, expr: CallExpression): boolean {
5655-
if (!signature.typePredicate) {
5656-
return false;
5657-
}
5658-
if (expr.arguments &&
5659-
expr.arguments[signature.typePredicate.parameterIndex] &&
5660-
getSymbolAtLocation(expr.arguments[signature.typePredicate.parameterIndex]) === symbol) {
5661-
5662-
return true;
5663-
}
5664-
return false;
5665-
}
5666-
56675663
function narrowTypeByTypePredicate(type: Type, expr: CallExpression, assumeTrue: boolean): Type {
56685664
if (type.flags & TypeFlags.Any) {
56695665
return type;
56705666
}
56715667
let signature = getResolvedSignature(expr);
5672-
if (!assumeTrue) {
5673-
if (type.flags & TypeFlags.Union &&
5674-
signature.typePredicate &&
5675-
getSymbolAtLocation(expr.arguments[signature.typePredicate.parameterIndex]) === symbol) {
56765668

5677-
return getUnionType(filter((<UnionType>type).types, t => !isTypeSubtypeOf(t, signature.typePredicate.type)));
5669+
if (signature.typePredicate &&
5670+
getSymbolAtLocation(expr.arguments[signature.typePredicate.parameterIndex]) === symbol) {
5671+
5672+
if (!assumeTrue) {
5673+
if (type.flags & TypeFlags.Union) {
5674+
return getUnionType(filter((<UnionType>type).types, t => !isTypeSubtypeOf(t, signature.typePredicate.type)));
5675+
}
5676+
return type;
56785677
}
5679-
return type;
5680-
}
5681-
if (shouldNarrowTypeByTypePredicate(signature, expr)) {
56825678
return getOptionalNarrowedType(type, signature.typePredicate.type);
56835679
}
56845680
return type;
@@ -8624,19 +8620,20 @@ module ts {
86248620
if (node.type) {
86258621
if (node.type.kind === SyntaxKind.TypePredicate) {
86268622
let typePredicate = getSignatureFromDeclaration(node).typePredicate;
8627-
if ((<TypePredicateNode>node.type).type.kind === SyntaxKind.TypePredicate) {
8628-
error((<TypePredicateNode>node.type).type,
8623+
let typePredicateNode = <TypePredicateNode>node.type;
8624+
if (typePredicateNode.type.kind === SyntaxKind.TypePredicate) {
8625+
error(typePredicateNode.type,
86298626
Diagnostics.Cannot_define_type_predicate_0_as_a_type_to_a_type_predicate,
8630-
getTextOfNode((<TypePredicateNode>node.type).type));
8627+
getTextOfNode(typePredicateNode.type));
86318628
}
86328629
else {
86338630
if (typePredicate.parameterIndex >= 0) {
86348631
checkTypeAssignableTo(typePredicate.type,
86358632
getTypeAtLocation(node.parameters[typePredicate.parameterIndex]),
8636-
(<TypePredicateNode>node.type).type);
8633+
typePredicateNode.type);
86378634
}
8638-
else if ((<TypePredicateNode>node.type).parameterName) {
8639-
error((<TypePredicateNode>node.type).parameterName,
8635+
else if (typePredicateNode.parameterName) {
8636+
error(typePredicateNode.parameterName,
86408637
Diagnostics.Cannot_find_parameter_0,
86418638
typePredicate.parameterName);
86428639
}

0 commit comments

Comments
 (0)