Skip to content

Commit c59c7ec

Browse files
committed
Convert some asserts to type guards
1 parent 0a0653e commit c59c7ec

File tree

11 files changed

+37
-37
lines changed

11 files changed

+37
-37
lines changed

src/compiler/binder.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2507,9 +2507,9 @@ namespace ts {
25072507
return action(e, lookupSymbolForPropertyAccess(e));
25082508
}
25092509
else {
2510-
const s = getJSInitializerSymbol(forEachIdentifierInEntityName(e.expression, action))!;
2511-
Debug.assert(!!s && !!s.exports);
2512-
return action(e.name, s.exports!.get(e.name.escapedText));
2510+
const s = getJSInitializerSymbol(forEachIdentifierInEntityName(e.expression, action));
2511+
if (!s || !s.exports) return Debug.fail();
2512+
return action(e.name, s.exports.get(e.name.escapedText));
25132513
}
25142514
}
25152515

src/compiler/builderState.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -210,8 +210,8 @@ namespace ts.BuilderState {
210210
return false;
211211
}
212212

213-
const info = state.fileInfos.get(sourceFile.path)!;
214-
Debug.assert(!!info);
213+
const info = state.fileInfos.get(sourceFile.path);
214+
if (!info) return Debug.fail();
215215

216216
const prevSignature = info.signature;
217217
let latestSignature: string;

src/compiler/checker.ts

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,8 @@ namespace ts {
101101
},
102102
getSymbolsOfParameterPropertyDeclaration: (parameterIn, parameterName) => {
103103
const parameter = getParseTreeNode(parameterIn, isParameter);
104-
Debug.assert(parameter !== undefined, "Cannot get symbols of a synthetic parameter that cannot be resolved to a parse-tree node.");
105-
return getSymbolsOfParameterPropertyDeclaration(parameter!, escapeLeadingUnderscores(parameterName));
104+
if (parameter === undefined) return Debug.fail("Cannot get symbols of a synthetic parameter that cannot be resolved to a parse-tree node.");
105+
return getSymbolsOfParameterPropertyDeclaration(parameter, escapeLeadingUnderscores(parameterName));
106106
},
107107
getDeclaredTypeOfSymbol,
108108
getPropertiesOfType,
@@ -229,8 +229,8 @@ namespace ts {
229229
const links = getSymbolLinks(symbol);
230230
if (!links.immediateTarget) {
231231
const node = getDeclarationOfAliasSymbol(symbol);
232-
Debug.assert(!!node);
233-
links.immediateTarget = getTargetOfAliasDeclaration(node!, /*dontRecursivelyResolve*/ true);
232+
if (!node) return Debug.fail();
233+
links.immediateTarget = getTargetOfAliasDeclaration(node, /*dontRecursivelyResolve*/ true);
234234
}
235235

236236
return links.immediateTarget;
@@ -1994,8 +1994,8 @@ namespace ts {
19941994
const links = getSymbolLinks(symbol);
19951995
if (!links.target) {
19961996
links.target = resolvingSymbol;
1997-
const node = getDeclarationOfAliasSymbol(symbol)!;
1998-
Debug.assert(!!node);
1997+
const node = getDeclarationOfAliasSymbol(symbol);
1998+
if (!node) return Debug.fail();
19991999
const target = getTargetOfAliasDeclaration(node);
20002000
if (links.target === resolvingSymbol) {
20012001
links.target = target || unknownSymbol;
@@ -2030,8 +2030,8 @@ namespace ts {
20302030
const links = getSymbolLinks(symbol);
20312031
if (!links.referenced) {
20322032
links.referenced = true;
2033-
const node = getDeclarationOfAliasSymbol(symbol)!;
2034-
Debug.assert(!!node);
2033+
const node = getDeclarationOfAliasSymbol(symbol);
2034+
if (!node) return Debug.fail();
20352035
if (node.kind === SyntaxKind.ExportAssignment) {
20362036
// export default <symbol>
20372037
checkExpressionCached((<ExportAssignment>node).expression);
@@ -2928,11 +2928,11 @@ namespace ts {
29282928

29292929
function typeToString(type: Type, enclosingDeclaration?: Node, flags: TypeFormatFlags = TypeFormatFlags.AllowUniqueESSymbolType, writer: EmitTextWriter = createTextWriter("")): string {
29302930
const typeNode = nodeBuilder.typeToTypeNode(type, enclosingDeclaration, toNodeBuilderFlags(flags) | NodeBuilderFlags.IgnoreErrors, writer);
2931-
Debug.assert(typeNode !== undefined, "should always get typenode");
2931+
if (typeNode === undefined) return Debug.fail("should always get typenode");
29322932
const options = { removeComments: true };
29332933
const printer = createPrinter(options);
29342934
const sourceFile = enclosingDeclaration && getSourceFileOfNode(enclosingDeclaration);
2935-
printer.writeNode(EmitHint.Unspecified, typeNode!, /*sourceFile*/ sourceFile, writer);
2935+
printer.writeNode(EmitHint.Unspecified, typeNode, /*sourceFile*/ sourceFile, writer);
29362936
const result = writer.getText();
29372937

29382938
const maxLength = compilerOptions.noErrorTruncation || flags & TypeFormatFlags.NoTruncation ? undefined : 100;
@@ -10278,8 +10278,8 @@ namespace ts {
1027810278
// We know *exactly* where things went wrong when comparing the types.
1027910279
// Use this property as the error node as this will be more helpful in
1028010280
// reasoning about what went wrong.
10281-
Debug.assert(!!errorNode);
10282-
if (isJsxAttributes(errorNode!) || isJsxOpeningLikeElement(errorNode!)) {
10281+
if (!errorNode) return Debug.fail();
10282+
if (isJsxAttributes(errorNode) || isJsxOpeningLikeElement(errorNode)) {
1028310283
// JsxAttributes has an object-literal flag and undergo same type-assignablity check as normal object-literal.
1028410284
// However, using an object-literal error message will be very confusing to the users so we give different a message.
1028510285
reportError(Diagnostics.Property_0_does_not_exist_on_type_1, symbolToString(prop), typeToString(target));
@@ -21703,8 +21703,8 @@ namespace ts {
2170321703
const thenFunction = getTypeOfPropertyOfType(type, "then" as __String);
2170421704
if (thenFunction && getSignaturesOfType(thenFunction, SignatureKind.Call).length > 0) {
2170521705
if (errorNode) {
21706-
Debug.assert(!!diagnosticMessage);
21707-
error(errorNode, diagnosticMessage!);
21706+
if (!diagnosticMessage) return Debug.fail();
21707+
error(errorNode, diagnosticMessage);
2170821708
}
2170921709
return undefined;
2171021710
}

src/compiler/core.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2952,8 +2952,8 @@ namespace ts {
29522952
}
29532953

29542954
export function assertDefined<T>(value: T | null | undefined, message?: string): T {
2955-
assert(value !== undefined && value !== null, message);
2956-
return value!;
2955+
if (value === undefined || value === null) return fail(message);
2956+
return value;
29572957
}
29582958

29592959
export function assertEachDefined<T, A extends ReadonlyArray<T>>(value: A, message?: string): A {

src/compiler/factory.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3761,15 +3761,15 @@ namespace ts {
37613761
}
37623762

37633763
export function convertFunctionDeclarationToExpression(node: FunctionDeclaration) {
3764-
Debug.assert(!!node.body);
3764+
if (!node.body) return Debug.fail();
37653765
const updated = createFunctionExpression(
37663766
node.modifiers,
37673767
node.asteriskToken,
37683768
node.name,
37693769
node.typeParameters,
37703770
node.parameters,
37713771
node.type,
3772-
node.body! // TODO: GH#18217
3772+
node.body
37733773
);
37743774
setOriginalNode(updated, node);
37753775
setTextRange(updated, node);

src/compiler/transformers/generators.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2041,14 +2041,14 @@ namespace ts {
20412041
*/
20422042
function endBlock(): CodeBlock {
20432043
const block = peekBlock();
2044-
Debug.assert(block !== undefined, "beginBlock was never called.");
2044+
if (block === undefined) return Debug.fail("beginBlock was never called.");
20452045

20462046
const index = blockActions!.length;
20472047
blockActions![index] = BlockAction.Close;
20482048
blockOffsets![index] = operations ? operations.length : 0;
2049-
blocks![index] = block!;
2049+
blocks![index] = block;
20502050
blockStack!.pop();
2051-
return block!;
2051+
return block;
20522052
}
20532053

20542054
/**

src/services/findAllReferences.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -920,8 +920,8 @@ namespace ts.FindAllReferences.Core {
920920
if (!(referenceLocation === propertyName && state.options.isForRename)) {
921921
const exportKind = referenceLocation.originalKeywordKind === SyntaxKind.DefaultKeyword ? ExportKind.Default : ExportKind.Named;
922922
const exportInfo = getExportInfo(referenceSymbol, exportKind, state.checker);
923-
Debug.assert(!!exportInfo);
924-
searchForImportsOfExport(referenceLocation, referenceSymbol, exportInfo!, state);
923+
if (!exportInfo) return Debug.fail();
924+
searchForImportsOfExport(referenceLocation, referenceSymbol, exportInfo, state);
925925
}
926926

927927
// At `export { x } from "foo"`, also search for the imported symbol `"foo".x`.

src/services/refactors/extractSymbol.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1277,8 +1277,8 @@ namespace ts.refactor.extractSymbol {
12771277
prevMember = member;
12781278
}
12791279

1280-
Debug.assert(prevMember !== undefined); // If the loop didn't return, then it did set prevMember.
1281-
return prevMember!;
1280+
if (prevMember === undefined) return Debug.fail(); // If the loop didn't return, then it did set prevMember.
1281+
return prevMember;
12821282
}
12831283

12841284
function getNodeToInsertConstantBefore(node: Node, scope: Scope): Statement {

src/services/services.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2093,16 +2093,16 @@ namespace ts {
20932093
descriptor = descriptors[i];
20942094
}
20952095
}
2096-
Debug.assert(descriptor !== undefined);
2096+
if (descriptor === undefined) return Debug.fail();
20972097

20982098
// We don't want to match something like 'TODOBY', so we make sure a non
20992099
// letter/digit follows the match.
2100-
if (isLetterOrDigit(fileContents.charCodeAt(matchPosition + descriptor!.text.length))) {
2100+
if (isLetterOrDigit(fileContents.charCodeAt(matchPosition + descriptor.text.length))) {
21012101
continue;
21022102
}
21032103

21042104
const message = matchArray[2];
2105-
result.push({ descriptor: descriptor!, message, position: matchPosition });
2105+
result.push({ descriptor, message, position: matchPosition });
21062106
}
21072107
}
21082108

src/services/symbolDisplay.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -330,8 +330,8 @@ namespace ts.SymbolDisplay {
330330
else {
331331
// Method/function type parameter
332332
const decl = getDeclarationOfKind(symbol, SyntaxKind.TypeParameter);
333-
Debug.assert(decl !== undefined);
334-
const declaration = decl!.parent;
333+
if (decl === undefined) return Debug.fail();
334+
const declaration = decl.parent;
335335

336336
if (declaration) {
337337
if (isFunctionLikeKind(declaration.kind)) {

src/services/transpile.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,9 +106,9 @@ namespace ts {
106106
// Emit
107107
program.emit(/*targetSourceFile*/ undefined, /*writeFile*/ undefined, /*cancellationToken*/ undefined, /*emitOnlyDtsFiles*/ undefined, transpileOptions.transformers);
108108

109-
Debug.assert(outputText !== undefined, "Output generation failed");
109+
if (outputText === undefined) return Debug.fail("Output generation failed");
110110

111-
return { outputText: outputText!, diagnostics, sourceMapText };
111+
return { outputText, diagnostics, sourceMapText };
112112
}
113113

114114
/*

0 commit comments

Comments
 (0)