Skip to content

Commit 35d76b0

Browse files
authored
Export more Node tests for use in public API (#52284)
1 parent e474b3d commit 35d76b0

File tree

5 files changed

+82
-46
lines changed

5 files changed

+82
-46
lines changed

src/compiler/factory/nodeTests.ts

-7
Original file line numberDiff line numberDiff line change
@@ -292,27 +292,22 @@ export function isAsteriskToken(node: Node): node is AsteriskToken {
292292
return node.kind === SyntaxKind.AsteriskToken;
293293
}
294294

295-
/** @internal */
296295
export function isExclamationToken(node: Node): node is ExclamationToken {
297296
return node.kind === SyntaxKind.ExclamationToken;
298297
}
299298

300-
/** @internal */
301299
export function isQuestionToken(node: Node): node is QuestionToken {
302300
return node.kind === SyntaxKind.QuestionToken;
303301
}
304302

305-
/** @internal */
306303
export function isColonToken(node: Node): node is ColonToken {
307304
return node.kind === SyntaxKind.ColonToken;
308305
}
309306

310-
/** @internal */
311307
export function isQuestionDotToken(node: Node): node is QuestionDotToken {
312308
return node.kind === SyntaxKind.QuestionDotToken;
313309
}
314310

315-
/** @internal */
316311
export function isEqualsGreaterThanToken(node: Node): node is EqualsGreaterThanToken {
317312
return node.kind === SyntaxKind.EqualsGreaterThanToken;
318313
}
@@ -344,12 +339,10 @@ export function isAsyncModifier(node: Node): node is AsyncKeyword {
344339
return node.kind === SyntaxKind.AsyncKeyword;
345340
}
346341

347-
/** @internal */
348342
export function isAssertsKeyword(node: Node): node is AssertsKeyword {
349343
return node.kind === SyntaxKind.AssertsKeyword;
350344
}
351345

352-
/** @internal */
353346
export function isAwaitKeyword(node: Node): node is AwaitKeyword {
354347
return node.kind === SyntaxKind.AwaitKeyword;
355348
}

src/compiler/factory/utilities.ts

+20-18
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,6 @@ import {
111111
isSpreadElement,
112112
isStringLiteral,
113113
isThisTypeNode,
114-
isTypeNode,
115-
isTypeParameterDeclaration,
116114
isVariableDeclarationList,
117115
JSDocNamespaceBody,
118116
JSDocTypeAssertion,
@@ -143,7 +141,6 @@ import {
143141
NumericLiteral,
144142
ObjectLiteralElementLike,
145143
ObjectLiteralExpression,
146-
or,
147144
OuterExpression,
148145
OuterExpressionKinds,
149146
outFile,
@@ -178,7 +175,6 @@ import {
178175
ThisTypeNode,
179176
Token,
180177
TypeNode,
181-
TypeParameterDeclaration,
182178
} from "../_namespaces/ts";
183179

184180
// Compound nodes
@@ -629,7 +625,7 @@ export function isJSDocTypeAssertion(node: Node): node is JSDocTypeAssertion {
629625
}
630626

631627
/** @internal */
632-
export function getJSDocTypeAssertionType(node: JSDocTypeAssertion) {
628+
export function getJSDocTypeAssertionType(node: JSDocTypeAssertion): TypeNode {
633629
const type = getJSDocType(node);
634630
Debug.assertIsDefined(type);
635631
return type;
@@ -1160,18 +1156,25 @@ export function canHaveIllegalModifiers(node: Node): node is HasIllegalModifiers
11601156
|| kind === SyntaxKind.NamespaceExportDeclaration;
11611157
}
11621158

1163-
/** @internal */
1164-
export const isTypeNodeOrTypeParameterDeclaration = or(isTypeNode, isTypeParameterDeclaration) as (node: Node) => node is TypeNode | TypeParameterDeclaration;
1165-
/** @internal */
1166-
export const isQuestionOrExclamationToken = or(isQuestionToken, isExclamationToken) as (node: Node) => node is QuestionToken | ExclamationToken;
1167-
/** @internal */
1168-
export const isIdentifierOrThisTypeNode = or(isIdentifier, isThisTypeNode) as (node: Node) => node is Identifier | ThisTypeNode;
1169-
/** @internal */
1170-
export const isReadonlyKeywordOrPlusOrMinusToken = or(isReadonlyKeyword, isPlusToken, isMinusToken) as (node: Node) => node is ReadonlyKeyword | PlusToken | MinusToken;
1171-
/** @internal */
1172-
export const isQuestionOrPlusOrMinusToken = or(isQuestionToken, isPlusToken, isMinusToken) as (node: Node) => node is QuestionToken | PlusToken | MinusToken;
1173-
/** @internal */
1174-
export const isModuleName = or(isIdentifier, isStringLiteral) as (node: Node) => node is ModuleName;
1159+
export function isQuestionOrExclamationToken(node: Node): node is QuestionToken | ExclamationToken {
1160+
return isQuestionToken(node) || isExclamationToken(node);
1161+
}
1162+
1163+
export function isIdentifierOrThisTypeNode(node: Node): node is Identifier | ThisTypeNode {
1164+
return isIdentifier(node) || isThisTypeNode(node);
1165+
}
1166+
1167+
export function isReadonlyKeywordOrPlusOrMinusToken(node: Node): node is ReadonlyKeyword | PlusToken | MinusToken {
1168+
return isReadonlyKeyword(node) || isPlusToken(node) || isMinusToken(node);
1169+
}
1170+
1171+
export function isQuestionOrPlusOrMinusToken(node: Node): node is QuestionToken | PlusToken | MinusToken {
1172+
return isQuestionToken(node) || isPlusToken(node) || isMinusToken(node);
1173+
}
1174+
1175+
export function isModuleName(node: Node): node is ModuleName {
1176+
return isIdentifier(node) || isStringLiteral(node);
1177+
}
11751178

11761179
/** @internal */
11771180
export function isLiteralTypeLikeExpression(node: Node): node is NullLiteral | BooleanLiteral | LiteralExpression | PrefixUnaryExpression {
@@ -1278,7 +1281,6 @@ function isBinaryOperator(kind: SyntaxKind): kind is BinaryOperator {
12781281
|| kind === SyntaxKind.CommaToken;
12791282
}
12801283

1281-
/** @internal */
12821284
export function isBinaryOperatorToken(node: Node): node is BinaryOperatorToken {
12831285
return isBinaryOperator(node.kind);
12841286
}

src/compiler/utilitiesPublic.ts

+2-21
Original file line numberDiff line numberDiff line change
@@ -1790,7 +1790,6 @@ export function isAssignmentPattern(node: Node): node is AssignmentPattern {
17901790
}
17911791

17921792

1793-
/** @internal */
17941793
export function isArrayBindingElement(node: Node): node is ArrayBindingElement {
17951794
const kind = node.kind;
17961795
return kind === SyntaxKind.BindingElement
@@ -1930,7 +1929,6 @@ export function isTemplateLiteral(node: Node): node is TemplateLiteral {
19301929
|| kind === SyntaxKind.NoSubstitutionTemplateLiteral;
19311930
}
19321931

1933-
/** @internal */
19341932
export function isLeftHandSideExpression(node: Node): node is LeftHandSideExpression {
19351933
return isLeftHandSideExpressionKind(skipPartiallyEmittedExpressions(node).kind);
19361934
}
@@ -2007,13 +2005,8 @@ export function isUnaryExpressionWithWrite(expr: Node): expr is PrefixUnaryExpre
20072005
}
20082006
}
20092007

2010-
/**
2011-
* See isExpression; not for use in transforms.
2012-
* @internal
2013-
*/
20142008
export function isLiteralTypeLiteral(node: Node): node is NullLiteral | BooleanLiteral | LiteralExpression | PrefixUnaryExpression {
2015-
node = skipPartiallyEmittedExpressions(node);
2016-
switch (skipPartiallyEmittedExpressions(node).kind) {
2009+
switch (node.kind) {
20172010
case SyntaxKind.NullKeyword:
20182011
case SyntaxKind.TrueKeyword:
20192012
case SyntaxKind.FalseKeyword:
@@ -2026,9 +2019,6 @@ export function isLiteralTypeLiteral(node: Node): node is NullLiteral | BooleanL
20262019

20272020
/**
20282021
* Determines whether a node is an expression based only on its kind.
2029-
* Use `isExpressionNode` if not in transforms.
2030-
*
2031-
* @internal
20322022
*/
20332023
export function isExpression(node: Node): node is Expression {
20342024
return isExpressionKind(skipPartiallyEmittedExpressions(node).kind);
@@ -2111,7 +2101,6 @@ export function isForInOrOfStatement(node: Node): node is ForInOrOfStatement {
21112101

21122102
// Element
21132103

2114-
/** @internal */
21152104
export function isConciseBody(node: Node): node is ConciseBody {
21162105
return isBlock(node)
21172106
|| isExpression(node);
@@ -2122,13 +2111,11 @@ export function isFunctionBody(node: Node): node is FunctionBody {
21222111
return isBlock(node);
21232112
}
21242113

2125-
/** @internal */
21262114
export function isForInitializer(node: Node): node is ForInitializer {
21272115
return isVariableDeclarationList(node)
21282116
|| isExpression(node);
21292117
}
21302118

2131-
/** @internal */
21322119
export function isModuleBody(node: Node): node is ModuleBody {
21332120
const kind = node.kind;
21342121
return kind === SyntaxKind.ModuleBlock
@@ -2150,7 +2137,6 @@ export function isJSDocNamespaceBody(node: Node): node is JSDocNamespaceBody {
21502137
|| kind === SyntaxKind.ModuleDeclaration;
21512138
}
21522139

2153-
/** @internal */
21542140
export function isNamedImportBindings(node: Node): node is NamedImportBindings {
21552141
const kind = node.kind;
21562142
return kind === SyntaxKind.NamedImports
@@ -2376,7 +2362,6 @@ export function isStatementButNotDeclaration(node: Node): node is Statement {
23762362
return isStatementKindButNotDeclarationKind(node.kind);
23772363
}
23782364

2379-
/** @internal */
23802365
export function isStatement(node: Node): node is Statement {
23812366
const kind = node.kind;
23822367
return isStatementKindButNotDeclarationKind(kind)
@@ -2394,6 +2379,7 @@ function isBlockStatement(node: Node): node is Block {
23942379
return !isFunctionBlock(node);
23952380
}
23962381

2382+
// TODO(jakebailey): should we be exporting this function and not isStatement?
23972383
/**
23982384
* NOTE: This is similar to `isStatement` but does not access parent pointers.
23992385
*
@@ -2408,7 +2394,6 @@ export function isStatementOrBlock(node: Node): node is Statement | Block {
24082394

24092395
// Module references
24102396

2411-
/** @internal */
24122397
export function isModuleReference(node: Node): node is ModuleReference {
24132398
const kind = node.kind;
24142399
return kind === SyntaxKind.ExternalModuleReference
@@ -2418,15 +2403,13 @@ export function isModuleReference(node: Node): node is ModuleReference {
24182403

24192404
// JSX
24202405

2421-
/** @internal */
24222406
export function isJsxTagNameExpression(node: Node): node is JsxTagNameExpression {
24232407
const kind = node.kind;
24242408
return kind === SyntaxKind.ThisKeyword
24252409
|| kind === SyntaxKind.Identifier
24262410
|| kind === SyntaxKind.PropertyAccessExpression;
24272411
}
24282412

2429-
/** @internal */
24302413
export function isJsxChild(node: Node): node is JsxChild {
24312414
const kind = node.kind;
24322415
return kind === SyntaxKind.JsxElement
@@ -2436,14 +2419,12 @@ export function isJsxChild(node: Node): node is JsxChild {
24362419
|| kind === SyntaxKind.JsxFragment;
24372420
}
24382421

2439-
/** @internal */
24402422
export function isJsxAttributeLike(node: Node): node is JsxAttributeLike {
24412423
const kind = node.kind;
24422424
return kind === SyntaxKind.JsxAttribute
24432425
|| kind === SyntaxKind.JsxSpreadAttribute;
24442426
}
24452427

2446-
/** @internal */
24472428
export function isStringLiteralOrJsxExpression(node: Node): node is StringLiteral | JsxExpression {
24482429
const kind = node.kind;
24492430
return kind === SyntaxKind.StringLiteral

tests/baselines/reference/api/tsserverlibrary.d.ts

+30
Original file line numberDiff line numberDiff line change
@@ -8640,13 +8640,30 @@ declare namespace ts {
86408640
*/
86418641
function isTypeNode(node: Node): node is TypeNode;
86428642
function isFunctionOrConstructorTypeNode(node: Node): node is FunctionTypeNode | ConstructorTypeNode;
8643+
function isArrayBindingElement(node: Node): node is ArrayBindingElement;
86438644
function isPropertyAccessOrQualifiedName(node: Node): node is PropertyAccessExpression | QualifiedName;
86448645
function isCallLikeExpression(node: Node): node is CallLikeExpression;
86458646
function isCallOrNewExpression(node: Node): node is CallExpression | NewExpression;
86468647
function isTemplateLiteral(node: Node): node is TemplateLiteral;
8648+
function isLeftHandSideExpression(node: Node): node is LeftHandSideExpression;
8649+
function isLiteralTypeLiteral(node: Node): node is NullLiteral | BooleanLiteral | LiteralExpression | PrefixUnaryExpression;
8650+
/**
8651+
* Determines whether a node is an expression based only on its kind.
8652+
*/
8653+
function isExpression(node: Node): node is Expression;
86478654
function isAssertionExpression(node: Node): node is AssertionExpression;
86488655
function isIterationStatement(node: Node, lookInLabeledStatements: false): node is IterationStatement;
86498656
function isIterationStatement(node: Node, lookInLabeledStatements: boolean): node is IterationStatement | LabeledStatement;
8657+
function isConciseBody(node: Node): node is ConciseBody;
8658+
function isForInitializer(node: Node): node is ForInitializer;
8659+
function isModuleBody(node: Node): node is ModuleBody;
8660+
function isNamedImportBindings(node: Node): node is NamedImportBindings;
8661+
function isStatement(node: Node): node is Statement;
8662+
function isModuleReference(node: Node): node is ModuleReference;
8663+
function isJsxTagNameExpression(node: Node): node is JsxTagNameExpression;
8664+
function isJsxChild(node: Node): node is JsxChild;
8665+
function isJsxAttributeLike(node: Node): node is JsxAttributeLike;
8666+
function isStringLiteralOrJsxExpression(node: Node): node is StringLiteral | JsxExpression;
86508667
function isJsxOpeningLikeElement(node: Node): node is JsxOpeningLikeElement;
86518668
function isCaseOrDefaultClause(node: Node): node is CaseOrDefaultClause;
86528669
/** True if node is of a kind that may contain comment text. */
@@ -8765,8 +8782,15 @@ declare namespace ts {
87658782
function isPlusToken(node: Node): node is PlusToken;
87668783
function isMinusToken(node: Node): node is MinusToken;
87678784
function isAsteriskToken(node: Node): node is AsteriskToken;
8785+
function isExclamationToken(node: Node): node is ExclamationToken;
8786+
function isQuestionToken(node: Node): node is QuestionToken;
8787+
function isColonToken(node: Node): node is ColonToken;
8788+
function isQuestionDotToken(node: Node): node is QuestionDotToken;
8789+
function isEqualsGreaterThanToken(node: Node): node is EqualsGreaterThanToken;
87688790
function isIdentifier(node: Node): node is Identifier;
87698791
function isPrivateIdentifier(node: Node): node is PrivateIdentifier;
8792+
function isAssertsKeyword(node: Node): node is AssertsKeyword;
8793+
function isAwaitKeyword(node: Node): node is AwaitKeyword;
87708794
function isQualifiedName(node: Node): node is QualifiedName;
87718795
function isComputedPropertyName(node: Node): node is ComputedPropertyName;
87728796
function isTypeParameterDeclaration(node: Node): node is TypeParameterDeclaration;
@@ -8957,6 +8981,12 @@ declare namespace ts {
89578981
function isJSDocImplementsTag(node: Node): node is JSDocImplementsTag;
89588982
function isJSDocSatisfiesTag(node: Node): node is JSDocSatisfiesTag;
89598983
function isJSDocThrowsTag(node: Node): node is JSDocThrowsTag;
8984+
function isQuestionOrExclamationToken(node: Node): node is QuestionToken | ExclamationToken;
8985+
function isIdentifierOrThisTypeNode(node: Node): node is Identifier | ThisTypeNode;
8986+
function isReadonlyKeywordOrPlusOrMinusToken(node: Node): node is ReadonlyKeyword | PlusToken | MinusToken;
8987+
function isQuestionOrPlusOrMinusToken(node: Node): node is QuestionToken | PlusToken | MinusToken;
8988+
function isModuleName(node: Node): node is ModuleName;
8989+
function isBinaryOperatorToken(node: Node): node is BinaryOperatorToken;
89608990
function setTextRange<T extends TextRange>(range: T, location: TextRange | undefined): T;
89618991
function canHaveModifiers(node: Node): node is HasModifiers;
89628992
function canHaveDecorators(node: Node): node is HasDecorators;

tests/baselines/reference/api/typescript.d.ts

+30
Original file line numberDiff line numberDiff line change
@@ -4661,13 +4661,30 @@ declare namespace ts {
46614661
*/
46624662
function isTypeNode(node: Node): node is TypeNode;
46634663
function isFunctionOrConstructorTypeNode(node: Node): node is FunctionTypeNode | ConstructorTypeNode;
4664+
function isArrayBindingElement(node: Node): node is ArrayBindingElement;
46644665
function isPropertyAccessOrQualifiedName(node: Node): node is PropertyAccessExpression | QualifiedName;
46654666
function isCallLikeExpression(node: Node): node is CallLikeExpression;
46664667
function isCallOrNewExpression(node: Node): node is CallExpression | NewExpression;
46674668
function isTemplateLiteral(node: Node): node is TemplateLiteral;
4669+
function isLeftHandSideExpression(node: Node): node is LeftHandSideExpression;
4670+
function isLiteralTypeLiteral(node: Node): node is NullLiteral | BooleanLiteral | LiteralExpression | PrefixUnaryExpression;
4671+
/**
4672+
* Determines whether a node is an expression based only on its kind.
4673+
*/
4674+
function isExpression(node: Node): node is Expression;
46684675
function isAssertionExpression(node: Node): node is AssertionExpression;
46694676
function isIterationStatement(node: Node, lookInLabeledStatements: false): node is IterationStatement;
46704677
function isIterationStatement(node: Node, lookInLabeledStatements: boolean): node is IterationStatement | LabeledStatement;
4678+
function isConciseBody(node: Node): node is ConciseBody;
4679+
function isForInitializer(node: Node): node is ForInitializer;
4680+
function isModuleBody(node: Node): node is ModuleBody;
4681+
function isNamedImportBindings(node: Node): node is NamedImportBindings;
4682+
function isStatement(node: Node): node is Statement;
4683+
function isModuleReference(node: Node): node is ModuleReference;
4684+
function isJsxTagNameExpression(node: Node): node is JsxTagNameExpression;
4685+
function isJsxChild(node: Node): node is JsxChild;
4686+
function isJsxAttributeLike(node: Node): node is JsxAttributeLike;
4687+
function isStringLiteralOrJsxExpression(node: Node): node is StringLiteral | JsxExpression;
46714688
function isJsxOpeningLikeElement(node: Node): node is JsxOpeningLikeElement;
46724689
function isCaseOrDefaultClause(node: Node): node is CaseOrDefaultClause;
46734690
/** True if node is of a kind that may contain comment text. */
@@ -4786,8 +4803,15 @@ declare namespace ts {
47864803
function isPlusToken(node: Node): node is PlusToken;
47874804
function isMinusToken(node: Node): node is MinusToken;
47884805
function isAsteriskToken(node: Node): node is AsteriskToken;
4806+
function isExclamationToken(node: Node): node is ExclamationToken;
4807+
function isQuestionToken(node: Node): node is QuestionToken;
4808+
function isColonToken(node: Node): node is ColonToken;
4809+
function isQuestionDotToken(node: Node): node is QuestionDotToken;
4810+
function isEqualsGreaterThanToken(node: Node): node is EqualsGreaterThanToken;
47894811
function isIdentifier(node: Node): node is Identifier;
47904812
function isPrivateIdentifier(node: Node): node is PrivateIdentifier;
4813+
function isAssertsKeyword(node: Node): node is AssertsKeyword;
4814+
function isAwaitKeyword(node: Node): node is AwaitKeyword;
47914815
function isQualifiedName(node: Node): node is QualifiedName;
47924816
function isComputedPropertyName(node: Node): node is ComputedPropertyName;
47934817
function isTypeParameterDeclaration(node: Node): node is TypeParameterDeclaration;
@@ -4978,6 +5002,12 @@ declare namespace ts {
49785002
function isJSDocImplementsTag(node: Node): node is JSDocImplementsTag;
49795003
function isJSDocSatisfiesTag(node: Node): node is JSDocSatisfiesTag;
49805004
function isJSDocThrowsTag(node: Node): node is JSDocThrowsTag;
5005+
function isQuestionOrExclamationToken(node: Node): node is QuestionToken | ExclamationToken;
5006+
function isIdentifierOrThisTypeNode(node: Node): node is Identifier | ThisTypeNode;
5007+
function isReadonlyKeywordOrPlusOrMinusToken(node: Node): node is ReadonlyKeyword | PlusToken | MinusToken;
5008+
function isQuestionOrPlusOrMinusToken(node: Node): node is QuestionToken | PlusToken | MinusToken;
5009+
function isModuleName(node: Node): node is ModuleName;
5010+
function isBinaryOperatorToken(node: Node): node is BinaryOperatorToken;
49815011
function setTextRange<T extends TextRange>(range: T, location: TextRange | undefined): T;
49825012
function canHaveModifiers(node: Node): node is HasModifiers;
49835013
function canHaveDecorators(node: Node): node is HasDecorators;

0 commit comments

Comments
 (0)