From f89402b1da27f66e6fa46e16be9194376e2ca2a7 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Tue, 17 Jan 2023 19:38:23 -0800 Subject: [PATCH 01/10] Export isExpression and isExpressionNode --- src/compiler/utilities.ts | 1 - src/compiler/utilitiesPublic.ts | 2 -- tests/baselines/reference/api/tsserverlibrary.d.ts | 6 ++++++ tests/baselines/reference/api/typescript.d.ts | 6 ++++++ 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index dd6376699cb2f..de06520f93fc2 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -2788,7 +2788,6 @@ export function isJSXTagName(node: Node) { return false; } -/** @internal */ export function isExpressionNode(node: Node): boolean { switch (node.kind) { case SyntaxKind.SuperKeyword: diff --git a/src/compiler/utilitiesPublic.ts b/src/compiler/utilitiesPublic.ts index da47384f21edd..a0ca88e7fe961 100644 --- a/src/compiler/utilitiesPublic.ts +++ b/src/compiler/utilitiesPublic.ts @@ -2006,8 +2006,6 @@ export function isLiteralTypeLiteral(node: Node): node is NullLiteral | BooleanL /** * Determines whether a node is an expression based only on its kind. * Use `isExpressionNode` if not in transforms. - * - * @internal */ export function isExpression(node: Node): node is Expression { return isExpressionKind(skipPartiallyEmittedExpressions(node).kind); diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts index 35d7f3eab8a10..c4c596f32b2c6 100644 --- a/tests/baselines/reference/api/tsserverlibrary.d.ts +++ b/tests/baselines/reference/api/tsserverlibrary.d.ts @@ -8806,6 +8806,11 @@ declare namespace ts { function isCallLikeExpression(node: Node): node is CallLikeExpression; function isCallOrNewExpression(node: Node): node is CallExpression | NewExpression; function isTemplateLiteral(node: Node): node is TemplateLiteral; + /** + * Determines whether a node is an expression based only on its kind. + * Use `isExpressionNode` if not in transforms. + */ + function isExpression(node: Node): node is Expression; function isAssertionExpression(node: Node): node is AssertionExpression; function isIterationStatement(node: Node, lookInLabeledStatements: false): node is IterationStatement; function isIterationStatement(node: Node, lookInLabeledStatements: boolean): node is IterationStatement | LabeledStatement; @@ -8827,6 +8832,7 @@ declare namespace ts { parent: ConstructorDeclaration; name: Identifier; }; + function isExpressionNode(node: Node): boolean; function emitModuleKindIsNonNodeESM(moduleKind: ModuleKind): boolean; function createUnparsedSourceFile(text: string): UnparsedSource; function createUnparsedSourceFile(inputFile: InputFiles, type: "js" | "dts", stripInternal?: boolean): UnparsedSource; diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index 6c4dd8cf96b43..6440bd45d0cf3 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -4865,6 +4865,11 @@ declare namespace ts { function isCallLikeExpression(node: Node): node is CallLikeExpression; function isCallOrNewExpression(node: Node): node is CallExpression | NewExpression; function isTemplateLiteral(node: Node): node is TemplateLiteral; + /** + * Determines whether a node is an expression based only on its kind. + * Use `isExpressionNode` if not in transforms. + */ + function isExpression(node: Node): node is Expression; function isAssertionExpression(node: Node): node is AssertionExpression; function isIterationStatement(node: Node, lookInLabeledStatements: false): node is IterationStatement; function isIterationStatement(node: Node, lookInLabeledStatements: boolean): node is IterationStatement | LabeledStatement; @@ -4886,6 +4891,7 @@ declare namespace ts { parent: ConstructorDeclaration; name: Identifier; }; + function isExpressionNode(node: Node): boolean; function emitModuleKindIsNonNodeESM(moduleKind: ModuleKind): boolean; function createUnparsedSourceFile(text: string): UnparsedSource; function createUnparsedSourceFile(inputFile: InputFiles, type: "js" | "dts", stripInternal?: boolean): UnparsedSource; From c3e4d7b5143ecaf1ee9eea0e091bfc5531cc7181 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Wed, 18 Jan 2023 09:33:47 -0800 Subject: [PATCH 02/10] Unexport isExpressionNode, remove reference from isExpression --- src/compiler/utilities.ts | 1 + src/compiler/utilitiesPublic.ts | 1 - tests/baselines/reference/api/tsserverlibrary.d.ts | 2 -- tests/baselines/reference/api/typescript.d.ts | 2 -- 4 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index de06520f93fc2..dd6376699cb2f 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -2788,6 +2788,7 @@ export function isJSXTagName(node: Node) { return false; } +/** @internal */ export function isExpressionNode(node: Node): boolean { switch (node.kind) { case SyntaxKind.SuperKeyword: diff --git a/src/compiler/utilitiesPublic.ts b/src/compiler/utilitiesPublic.ts index a0ca88e7fe961..50c018ddbd56b 100644 --- a/src/compiler/utilitiesPublic.ts +++ b/src/compiler/utilitiesPublic.ts @@ -2005,7 +2005,6 @@ export function isLiteralTypeLiteral(node: Node): node is NullLiteral | BooleanL /** * Determines whether a node is an expression based only on its kind. - * Use `isExpressionNode` if not in transforms. */ export function isExpression(node: Node): node is Expression { return isExpressionKind(skipPartiallyEmittedExpressions(node).kind); diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts index c4c596f32b2c6..d1669e22b71a9 100644 --- a/tests/baselines/reference/api/tsserverlibrary.d.ts +++ b/tests/baselines/reference/api/tsserverlibrary.d.ts @@ -8808,7 +8808,6 @@ declare namespace ts { function isTemplateLiteral(node: Node): node is TemplateLiteral; /** * Determines whether a node is an expression based only on its kind. - * Use `isExpressionNode` if not in transforms. */ function isExpression(node: Node): node is Expression; function isAssertionExpression(node: Node): node is AssertionExpression; @@ -8832,7 +8831,6 @@ declare namespace ts { parent: ConstructorDeclaration; name: Identifier; }; - function isExpressionNode(node: Node): boolean; function emitModuleKindIsNonNodeESM(moduleKind: ModuleKind): boolean; function createUnparsedSourceFile(text: string): UnparsedSource; function createUnparsedSourceFile(inputFile: InputFiles, type: "js" | "dts", stripInternal?: boolean): UnparsedSource; diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index 6440bd45d0cf3..d576632068013 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -4867,7 +4867,6 @@ declare namespace ts { function isTemplateLiteral(node: Node): node is TemplateLiteral; /** * Determines whether a node is an expression based only on its kind. - * Use `isExpressionNode` if not in transforms. */ function isExpression(node: Node): node is Expression; function isAssertionExpression(node: Node): node is AssertionExpression; @@ -4891,7 +4890,6 @@ declare namespace ts { parent: ConstructorDeclaration; name: Identifier; }; - function isExpressionNode(node: Node): boolean; function emitModuleKindIsNonNodeESM(moduleKind: ModuleKind): boolean; function createUnparsedSourceFile(text: string): UnparsedSource; function createUnparsedSourceFile(inputFile: InputFiles, type: "js" | "dts", stripInternal?: boolean): UnparsedSource; From 7e6222a8b6f0fb19aaa40163c9d5493575fd1e71 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Wed, 18 Jan 2023 10:05:03 -0800 Subject: [PATCH 03/10] Export all tests used by visitEachChild --- src/compiler/factory/nodeTests.ts | 7 ------ src/compiler/factory/utilities.ts | 6 ----- src/compiler/utilitiesPublic.ts | 16 +----------- .../reference/api/tsserverlibrary.d.ts | 25 +++++++++++++++++++ tests/baselines/reference/api/typescript.d.ts | 25 +++++++++++++++++++ 5 files changed, 51 insertions(+), 28 deletions(-) diff --git a/src/compiler/factory/nodeTests.ts b/src/compiler/factory/nodeTests.ts index 0d98989d39700..e6ced265aad50 100644 --- a/src/compiler/factory/nodeTests.ts +++ b/src/compiler/factory/nodeTests.ts @@ -291,27 +291,22 @@ export function isAsteriskToken(node: Node): node is AsteriskToken { return node.kind === SyntaxKind.AsteriskToken; } -/** @internal */ export function isExclamationToken(node: Node): node is ExclamationToken { return node.kind === SyntaxKind.ExclamationToken; } -/** @internal */ export function isQuestionToken(node: Node): node is QuestionToken { return node.kind === SyntaxKind.QuestionToken; } -/** @internal */ export function isColonToken(node: Node): node is ColonToken { return node.kind === SyntaxKind.ColonToken; } -/** @internal */ export function isQuestionDotToken(node: Node): node is QuestionDotToken { return node.kind === SyntaxKind.QuestionDotToken; } -/** @internal */ export function isEqualsGreaterThanToken(node: Node): node is EqualsGreaterThanToken { return node.kind === SyntaxKind.EqualsGreaterThanToken; } @@ -338,12 +333,10 @@ export function isAsyncModifier(node: Node): node is AsyncKeyword { return node.kind === SyntaxKind.AsyncKeyword; } -/** @internal */ export function isAssertsKeyword(node: Node): node is AssertsKeyword { return node.kind === SyntaxKind.AssertsKeyword; } -/** @internal */ export function isAwaitKeyword(node: Node): node is AwaitKeyword { return node.kind === SyntaxKind.AwaitKeyword; } diff --git a/src/compiler/factory/utilities.ts b/src/compiler/factory/utilities.ts index 2db193390a873..3516ea7bccdc8 100644 --- a/src/compiler/factory/utilities.ts +++ b/src/compiler/factory/utilities.ts @@ -1134,15 +1134,10 @@ export function canHaveIllegalModifiers(node: Node): node is HasIllegalModifiers /** @internal */ export const isTypeNodeOrTypeParameterDeclaration = or(isTypeNode, isTypeParameterDeclaration) as (node: Node) => node is TypeNode | TypeParameterDeclaration; -/** @internal */ export const isQuestionOrExclamationToken = or(isQuestionToken, isExclamationToken) as (node: Node) => node is QuestionToken | ExclamationToken; -/** @internal */ export const isIdentifierOrThisTypeNode = or(isIdentifier, isThisTypeNode) as (node: Node) => node is Identifier | ThisTypeNode; -/** @internal */ export const isReadonlyKeywordOrPlusOrMinusToken = or(isReadonlyKeyword, isPlusToken, isMinusToken) as (node: Node) => node is ReadonlyKeyword | PlusToken | MinusToken; -/** @internal */ export const isQuestionOrPlusOrMinusToken = or(isQuestionToken, isPlusToken, isMinusToken) as (node: Node) => node is QuestionToken | PlusToken | MinusToken; -/** @internal */ export const isModuleName = or(isIdentifier, isStringLiteral) as (node: Node) => node is ModuleName; /** @internal */ @@ -1250,7 +1245,6 @@ function isBinaryOperator(kind: SyntaxKind): kind is BinaryOperator { || kind === SyntaxKind.CommaToken; } -/** @internal */ export function isBinaryOperatorToken(node: Node): node is BinaryOperatorToken { return isBinaryOperator(node.kind); } diff --git a/src/compiler/utilitiesPublic.ts b/src/compiler/utilitiesPublic.ts index 50c018ddbd56b..098b6f295da21 100644 --- a/src/compiler/utilitiesPublic.ts +++ b/src/compiler/utilitiesPublic.ts @@ -1770,7 +1770,6 @@ export function isAssignmentPattern(node: Node): node is AssignmentPattern { } -/** @internal */ export function isArrayBindingElement(node: Node): node is ArrayBindingElement { const kind = node.kind; return kind === SyntaxKind.BindingElement @@ -1986,10 +1985,6 @@ export function isUnaryExpressionWithWrite(expr: Node): expr is PrefixUnaryExpre } } -/** - * See isExpression; not for use in transforms. - * @internal - */ export function isLiteralTypeLiteral(node: Node): node is NullLiteral | BooleanLiteral | LiteralExpression | PrefixUnaryExpression { node = skipPartiallyEmittedExpressions(node); switch (skipPartiallyEmittedExpressions(node).kind) { @@ -2087,7 +2082,6 @@ export function isForInOrOfStatement(node: Node): node is ForInOrOfStatement { // Element -/** @internal */ export function isConciseBody(node: Node): node is ConciseBody { return isBlock(node) || isExpression(node); @@ -2098,13 +2092,11 @@ export function isFunctionBody(node: Node): node is FunctionBody { return isBlock(node); } -/** @internal */ export function isForInitializer(node: Node): node is ForInitializer { return isVariableDeclarationList(node) || isExpression(node); } -/** @internal */ export function isModuleBody(node: Node): node is ModuleBody { const kind = node.kind; return kind === SyntaxKind.ModuleBlock @@ -2126,7 +2118,6 @@ export function isJSDocNamespaceBody(node: Node): node is JSDocNamespaceBody { || kind === SyntaxKind.ModuleDeclaration; } -/** @internal */ export function isNamedImportBindings(node: Node): node is NamedImportBindings { const kind = node.kind; return kind === SyntaxKind.NamedImports @@ -2352,7 +2343,6 @@ export function isStatementButNotDeclaration(node: Node): node is Statement { return isStatementKindButNotDeclarationKind(node.kind); } -/** @internal */ export function isStatement(node: Node): node is Statement { const kind = node.kind; return isStatementKindButNotDeclarationKind(kind) @@ -2370,6 +2360,7 @@ function isBlockStatement(node: Node): node is Block { return !isFunctionBlock(node); } +// TODO(jakebailey): should we be exporting this function and not isStatement? /** * NOTE: This is similar to `isStatement` but does not access parent pointers. * @@ -2384,7 +2375,6 @@ export function isStatementOrBlock(node: Node): node is Statement | Block { // Module references -/** @internal */ export function isModuleReference(node: Node): node is ModuleReference { const kind = node.kind; return kind === SyntaxKind.ExternalModuleReference @@ -2394,7 +2384,6 @@ export function isModuleReference(node: Node): node is ModuleReference { // JSX -/** @internal */ export function isJsxTagNameExpression(node: Node): node is JsxTagNameExpression { const kind = node.kind; return kind === SyntaxKind.ThisKeyword @@ -2402,7 +2391,6 @@ export function isJsxTagNameExpression(node: Node): node is JsxTagNameExpression || kind === SyntaxKind.PropertyAccessExpression; } -/** @internal */ export function isJsxChild(node: Node): node is JsxChild { const kind = node.kind; return kind === SyntaxKind.JsxElement @@ -2412,14 +2400,12 @@ export function isJsxChild(node: Node): node is JsxChild { || kind === SyntaxKind.JsxFragment; } -/** @internal */ export function isJsxAttributeLike(node: Node): node is JsxAttributeLike { const kind = node.kind; return kind === SyntaxKind.JsxAttribute || kind === SyntaxKind.JsxSpreadAttribute; } -/** @internal */ export function isStringLiteralOrJsxExpression(node: Node): node is StringLiteral | JsxExpression { const kind = node.kind; return kind === SyntaxKind.StringLiteral diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts index d1669e22b71a9..8cbdfa67328d6 100644 --- a/tests/baselines/reference/api/tsserverlibrary.d.ts +++ b/tests/baselines/reference/api/tsserverlibrary.d.ts @@ -8802,10 +8802,12 @@ declare namespace ts { */ function isTypeNode(node: Node): node is TypeNode; function isFunctionOrConstructorTypeNode(node: Node): node is FunctionTypeNode | ConstructorTypeNode; + function isArrayBindingElement(node: Node): node is ArrayBindingElement; function isPropertyAccessOrQualifiedName(node: Node): node is PropertyAccessExpression | QualifiedName; function isCallLikeExpression(node: Node): node is CallLikeExpression; function isCallOrNewExpression(node: Node): node is CallExpression | NewExpression; function isTemplateLiteral(node: Node): node is TemplateLiteral; + function isLiteralTypeLiteral(node: Node): node is NullLiteral | BooleanLiteral | LiteralExpression | PrefixUnaryExpression; /** * Determines whether a node is an expression based only on its kind. */ @@ -8813,6 +8815,16 @@ declare namespace ts { function isAssertionExpression(node: Node): node is AssertionExpression; function isIterationStatement(node: Node, lookInLabeledStatements: false): node is IterationStatement; function isIterationStatement(node: Node, lookInLabeledStatements: boolean): node is IterationStatement | LabeledStatement; + function isConciseBody(node: Node): node is ConciseBody; + function isForInitializer(node: Node): node is ForInitializer; + function isModuleBody(node: Node): node is ModuleBody; + function isNamedImportBindings(node: Node): node is NamedImportBindings; + function isStatement(node: Node): node is Statement; + function isModuleReference(node: Node): node is ModuleReference; + function isJsxTagNameExpression(node: Node): node is JsxTagNameExpression; + function isJsxChild(node: Node): node is JsxChild; + function isJsxAttributeLike(node: Node): node is JsxAttributeLike; + function isStringLiteralOrJsxExpression(node: Node): node is StringLiteral | JsxExpression; function isJsxOpeningLikeElement(node: Node): node is JsxOpeningLikeElement; function isCaseOrDefaultClause(node: Node): node is CaseOrDefaultClause; /** True if node is of a kind that may contain comment text. */ @@ -8925,8 +8937,15 @@ declare namespace ts { function isPlusToken(node: Node): node is PlusToken; function isMinusToken(node: Node): node is MinusToken; function isAsteriskToken(node: Node): node is AsteriskToken; + function isExclamationToken(node: Node): node is ExclamationToken; + function isQuestionToken(node: Node): node is QuestionToken; + function isColonToken(node: Node): node is ColonToken; + function isQuestionDotToken(node: Node): node is QuestionDotToken; + function isEqualsGreaterThanToken(node: Node): node is EqualsGreaterThanToken; function isIdentifier(node: Node): node is Identifier; function isPrivateIdentifier(node: Node): node is PrivateIdentifier; + function isAssertsKeyword(node: Node): node is AssertsKeyword; + function isAwaitKeyword(node: Node): node is AwaitKeyword; function isQualifiedName(node: Node): node is QualifiedName; function isComputedPropertyName(node: Node): node is ComputedPropertyName; function isTypeParameterDeclaration(node: Node): node is TypeParameterDeclaration; @@ -9115,6 +9134,12 @@ declare namespace ts { function isJSDocImplementsTag(node: Node): node is JSDocImplementsTag; function isJSDocSatisfiesTag(node: Node): node is JSDocSatisfiesTag; function isJSDocThrowsTag(node: Node): node is JSDocThrowsTag; + function isBinaryOperatorToken(node: Node): node is BinaryOperatorToken; + const isQuestionOrExclamationToken: (node: Node) => node is QuestionToken | ExclamationToken; + const isIdentifierOrThisTypeNode: (node: Node) => node is Identifier | ThisTypeNode; + const isReadonlyKeywordOrPlusOrMinusToken: (node: Node) => node is ReadonlyKeyword | PlusToken | MinusToken; + const isQuestionOrPlusOrMinusToken: (node: Node) => node is QuestionToken | PlusToken | MinusToken; + const isModuleName: (node: Node) => node is ModuleName; function setTextRange(range: T, location: TextRange | undefined): T; function canHaveModifiers(node: Node): node is HasModifiers; function canHaveDecorators(node: Node): node is HasDecorators; diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index d576632068013..1fcd8acce4c47 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -4861,10 +4861,12 @@ declare namespace ts { */ function isTypeNode(node: Node): node is TypeNode; function isFunctionOrConstructorTypeNode(node: Node): node is FunctionTypeNode | ConstructorTypeNode; + function isArrayBindingElement(node: Node): node is ArrayBindingElement; function isPropertyAccessOrQualifiedName(node: Node): node is PropertyAccessExpression | QualifiedName; function isCallLikeExpression(node: Node): node is CallLikeExpression; function isCallOrNewExpression(node: Node): node is CallExpression | NewExpression; function isTemplateLiteral(node: Node): node is TemplateLiteral; + function isLiteralTypeLiteral(node: Node): node is NullLiteral | BooleanLiteral | LiteralExpression | PrefixUnaryExpression; /** * Determines whether a node is an expression based only on its kind. */ @@ -4872,6 +4874,16 @@ declare namespace ts { function isAssertionExpression(node: Node): node is AssertionExpression; function isIterationStatement(node: Node, lookInLabeledStatements: false): node is IterationStatement; function isIterationStatement(node: Node, lookInLabeledStatements: boolean): node is IterationStatement | LabeledStatement; + function isConciseBody(node: Node): node is ConciseBody; + function isForInitializer(node: Node): node is ForInitializer; + function isModuleBody(node: Node): node is ModuleBody; + function isNamedImportBindings(node: Node): node is NamedImportBindings; + function isStatement(node: Node): node is Statement; + function isModuleReference(node: Node): node is ModuleReference; + function isJsxTagNameExpression(node: Node): node is JsxTagNameExpression; + function isJsxChild(node: Node): node is JsxChild; + function isJsxAttributeLike(node: Node): node is JsxAttributeLike; + function isStringLiteralOrJsxExpression(node: Node): node is StringLiteral | JsxExpression; function isJsxOpeningLikeElement(node: Node): node is JsxOpeningLikeElement; function isCaseOrDefaultClause(node: Node): node is CaseOrDefaultClause; /** True if node is of a kind that may contain comment text. */ @@ -4984,8 +4996,15 @@ declare namespace ts { function isPlusToken(node: Node): node is PlusToken; function isMinusToken(node: Node): node is MinusToken; function isAsteriskToken(node: Node): node is AsteriskToken; + function isExclamationToken(node: Node): node is ExclamationToken; + function isQuestionToken(node: Node): node is QuestionToken; + function isColonToken(node: Node): node is ColonToken; + function isQuestionDotToken(node: Node): node is QuestionDotToken; + function isEqualsGreaterThanToken(node: Node): node is EqualsGreaterThanToken; function isIdentifier(node: Node): node is Identifier; function isPrivateIdentifier(node: Node): node is PrivateIdentifier; + function isAssertsKeyword(node: Node): node is AssertsKeyword; + function isAwaitKeyword(node: Node): node is AwaitKeyword; function isQualifiedName(node: Node): node is QualifiedName; function isComputedPropertyName(node: Node): node is ComputedPropertyName; function isTypeParameterDeclaration(node: Node): node is TypeParameterDeclaration; @@ -5174,6 +5193,12 @@ declare namespace ts { function isJSDocImplementsTag(node: Node): node is JSDocImplementsTag; function isJSDocSatisfiesTag(node: Node): node is JSDocSatisfiesTag; function isJSDocThrowsTag(node: Node): node is JSDocThrowsTag; + function isBinaryOperatorToken(node: Node): node is BinaryOperatorToken; + const isQuestionOrExclamationToken: (node: Node) => node is QuestionToken | ExclamationToken; + const isIdentifierOrThisTypeNode: (node: Node) => node is Identifier | ThisTypeNode; + const isReadonlyKeywordOrPlusOrMinusToken: (node: Node) => node is ReadonlyKeyword | PlusToken | MinusToken; + const isQuestionOrPlusOrMinusToken: (node: Node) => node is QuestionToken | PlusToken | MinusToken; + const isModuleName: (node: Node) => node is ModuleName; function setTextRange(range: T, location: TextRange | undefined): T; function canHaveModifiers(node: Node): node is HasModifiers; function canHaveDecorators(node: Node): node is HasDecorators; From 892953f7c310c83bd8347f071a95becf963b9c2f Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Wed, 18 Jan 2023 10:07:54 -0800 Subject: [PATCH 04/10] Export tests for public types used in transforms --- src/compiler/utilitiesPublic.ts | 2 -- tests/baselines/reference/api/tsserverlibrary.d.ts | 2 ++ tests/baselines/reference/api/typescript.d.ts | 2 ++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/compiler/utilitiesPublic.ts b/src/compiler/utilitiesPublic.ts index 098b6f295da21..f16e5462958ff 100644 --- a/src/compiler/utilitiesPublic.ts +++ b/src/compiler/utilitiesPublic.ts @@ -1793,7 +1793,6 @@ export function isDeclarationBindingElement(bindingElement: BindingOrAssignmentE return false; } -/** @internal */ export function isBindingOrAssignmentElement(node: Node): node is BindingOrAssignmentElement { return isVariableDeclaration(node) || isParameter(node) @@ -1909,7 +1908,6 @@ export function isTemplateLiteral(node: Node): node is TemplateLiteral { || kind === SyntaxKind.NoSubstitutionTemplateLiteral; } -/** @internal */ export function isLeftHandSideExpression(node: Node): node is LeftHandSideExpression { return isLeftHandSideExpressionKind(skipPartiallyEmittedExpressions(node).kind); } diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts index 8cbdfa67328d6..63f063d5a02d8 100644 --- a/tests/baselines/reference/api/tsserverlibrary.d.ts +++ b/tests/baselines/reference/api/tsserverlibrary.d.ts @@ -8803,10 +8803,12 @@ declare namespace ts { function isTypeNode(node: Node): node is TypeNode; function isFunctionOrConstructorTypeNode(node: Node): node is FunctionTypeNode | ConstructorTypeNode; function isArrayBindingElement(node: Node): node is ArrayBindingElement; + function isBindingOrAssignmentElement(node: Node): node is BindingOrAssignmentElement; function isPropertyAccessOrQualifiedName(node: Node): node is PropertyAccessExpression | QualifiedName; function isCallLikeExpression(node: Node): node is CallLikeExpression; function isCallOrNewExpression(node: Node): node is CallExpression | NewExpression; function isTemplateLiteral(node: Node): node is TemplateLiteral; + function isLeftHandSideExpression(node: Node): node is LeftHandSideExpression; function isLiteralTypeLiteral(node: Node): node is NullLiteral | BooleanLiteral | LiteralExpression | PrefixUnaryExpression; /** * Determines whether a node is an expression based only on its kind. diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index 1fcd8acce4c47..2e391be868ce7 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -4862,10 +4862,12 @@ declare namespace ts { function isTypeNode(node: Node): node is TypeNode; function isFunctionOrConstructorTypeNode(node: Node): node is FunctionTypeNode | ConstructorTypeNode; function isArrayBindingElement(node: Node): node is ArrayBindingElement; + function isBindingOrAssignmentElement(node: Node): node is BindingOrAssignmentElement; function isPropertyAccessOrQualifiedName(node: Node): node is PropertyAccessExpression | QualifiedName; function isCallLikeExpression(node: Node): node is CallLikeExpression; function isCallOrNewExpression(node: Node): node is CallExpression | NewExpression; function isTemplateLiteral(node: Node): node is TemplateLiteral; + function isLeftHandSideExpression(node: Node): node is LeftHandSideExpression; function isLiteralTypeLiteral(node: Node): node is NullLiteral | BooleanLiteral | LiteralExpression | PrefixUnaryExpression; /** * Determines whether a node is an expression based only on its kind. From 36aa5bf5d026d8f6f4ed7d4da253a55c50bbeb30 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Wed, 18 Jan 2023 10:23:14 -0800 Subject: [PATCH 05/10] Redo dts file to fix weird union ordering bug --- tests/baselines/reference/api/tsserverlibrary.d.ts | 2 +- tests/baselines/reference/api/typescript.d.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts index 63f063d5a02d8..de5269ae2bca6 100644 --- a/tests/baselines/reference/api/tsserverlibrary.d.ts +++ b/tests/baselines/reference/api/tsserverlibrary.d.ts @@ -9139,7 +9139,7 @@ declare namespace ts { function isBinaryOperatorToken(node: Node): node is BinaryOperatorToken; const isQuestionOrExclamationToken: (node: Node) => node is QuestionToken | ExclamationToken; const isIdentifierOrThisTypeNode: (node: Node) => node is Identifier | ThisTypeNode; - const isReadonlyKeywordOrPlusOrMinusToken: (node: Node) => node is ReadonlyKeyword | PlusToken | MinusToken; + const isReadonlyKeywordOrPlusOrMinusToken: (node: Node) => node is PlusToken | MinusToken | ReadonlyKeyword; const isQuestionOrPlusOrMinusToken: (node: Node) => node is QuestionToken | PlusToken | MinusToken; const isModuleName: (node: Node) => node is ModuleName; function setTextRange(range: T, location: TextRange | undefined): T; diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index 2e391be868ce7..5dfbc22a93dbe 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -5198,7 +5198,7 @@ declare namespace ts { function isBinaryOperatorToken(node: Node): node is BinaryOperatorToken; const isQuestionOrExclamationToken: (node: Node) => node is QuestionToken | ExclamationToken; const isIdentifierOrThisTypeNode: (node: Node) => node is Identifier | ThisTypeNode; - const isReadonlyKeywordOrPlusOrMinusToken: (node: Node) => node is ReadonlyKeyword | PlusToken | MinusToken; + const isReadonlyKeywordOrPlusOrMinusToken: (node: Node) => node is PlusToken | MinusToken | ReadonlyKeyword; const isQuestionOrPlusOrMinusToken: (node: Node) => node is QuestionToken | PlusToken | MinusToken; const isModuleName: (node: Node) => node is ModuleName; function setTextRange(range: T, location: TextRange | undefined): T; From a36bf03fbfb51a59f28cbc631dde64d7d7721659 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Thu, 19 Jan 2023 15:42:42 -0800 Subject: [PATCH 06/10] Export isDeclaration --- src/compiler/utilitiesPublic.ts | 1 - tests/baselines/reference/api/tsserverlibrary.d.ts | 3 ++- tests/baselines/reference/api/typescript.d.ts | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/compiler/utilitiesPublic.ts b/src/compiler/utilitiesPublic.ts index 58e70516f4c57..d1b4ca07a9782 100644 --- a/src/compiler/utilitiesPublic.ts +++ b/src/compiler/utilitiesPublic.ts @@ -2320,7 +2320,6 @@ function isStatementKindButNotDeclarationKind(kind: SyntaxKind) { || kind === SyntaxKind.MergeDeclarationMarker; } -/** @internal */ export function isDeclaration(node: Node): node is NamedDeclaration { if (node.kind === SyntaxKind.TypeParameter) { return (node.parent && node.parent.kind !== SyntaxKind.JSDocTemplateTag) || isInJSFile(node); diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts index 3fd0db2cf1893..e71e514416b95 100644 --- a/tests/baselines/reference/api/tsserverlibrary.d.ts +++ b/tests/baselines/reference/api/tsserverlibrary.d.ts @@ -8881,6 +8881,7 @@ declare namespace ts { function isForInitializer(node: Node): node is ForInitializer; function isModuleBody(node: Node): node is ModuleBody; function isNamedImportBindings(node: Node): node is NamedImportBindings; + function isDeclaration(node: Node): node is NamedDeclaration; function isStatement(node: Node): node is Statement; function isModuleReference(node: Node): node is ModuleReference; function isJsxTagNameExpression(node: Node): node is JsxTagNameExpression; @@ -9199,7 +9200,7 @@ declare namespace ts { function isBinaryOperatorToken(node: Node): node is BinaryOperatorToken; const isQuestionOrExclamationToken: (node: Node) => node is QuestionToken | ExclamationToken; const isIdentifierOrThisTypeNode: (node: Node) => node is Identifier | ThisTypeNode; - const isReadonlyKeywordOrPlusOrMinusToken: (node: Node) => node is PlusToken | MinusToken | ReadonlyKeyword; + const isReadonlyKeywordOrPlusOrMinusToken: (node: Node) => node is ReadonlyKeyword | PlusToken | MinusToken; const isQuestionOrPlusOrMinusToken: (node: Node) => node is QuestionToken | PlusToken | MinusToken; const isModuleName: (node: Node) => node is ModuleName; function setTextRange(range: T, location: TextRange | undefined): T; diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index 6aeaf4451d13c..108b8a42ce811 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -4888,6 +4888,7 @@ declare namespace ts { function isForInitializer(node: Node): node is ForInitializer; function isModuleBody(node: Node): node is ModuleBody; function isNamedImportBindings(node: Node): node is NamedImportBindings; + function isDeclaration(node: Node): node is NamedDeclaration; function isStatement(node: Node): node is Statement; function isModuleReference(node: Node): node is ModuleReference; function isJsxTagNameExpression(node: Node): node is JsxTagNameExpression; @@ -5206,7 +5207,7 @@ declare namespace ts { function isBinaryOperatorToken(node: Node): node is BinaryOperatorToken; const isQuestionOrExclamationToken: (node: Node) => node is QuestionToken | ExclamationToken; const isIdentifierOrThisTypeNode: (node: Node) => node is Identifier | ThisTypeNode; - const isReadonlyKeywordOrPlusOrMinusToken: (node: Node) => node is PlusToken | MinusToken | ReadonlyKeyword; + const isReadonlyKeywordOrPlusOrMinusToken: (node: Node) => node is ReadonlyKeyword | PlusToken | MinusToken; const isQuestionOrPlusOrMinusToken: (node: Node) => node is QuestionToken | PlusToken | MinusToken; const isModuleName: (node: Node) => node is ModuleName; function setTextRange(range: T, location: TextRange | undefined): T; From 1749de456b78a5aea71debb93a270eed9af9b2fc Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Thu, 19 Jan 2023 15:43:05 -0800 Subject: [PATCH 07/10] Remove isTypeNodeOrTypeParameterDeclaration --- src/compiler/factory/utilities.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/compiler/factory/utilities.ts b/src/compiler/factory/utilities.ts index 7c44f65ca9015..ced5ad06fee16 100644 --- a/src/compiler/factory/utilities.ts +++ b/src/compiler/factory/utilities.ts @@ -1160,8 +1160,6 @@ export function canHaveIllegalModifiers(node: Node): node is HasIllegalModifiers || kind === SyntaxKind.NamespaceExportDeclaration; } -/** @internal */ -export const isTypeNodeOrTypeParameterDeclaration = or(isTypeNode, isTypeParameterDeclaration) as (node: Node) => node is TypeNode | TypeParameterDeclaration; export const isQuestionOrExclamationToken = or(isQuestionToken, isExclamationToken) as (node: Node) => node is QuestionToken | ExclamationToken; export const isIdentifierOrThisTypeNode = or(isIdentifier, isThisTypeNode) as (node: Node) => node is Identifier | ThisTypeNode; export const isReadonlyKeywordOrPlusOrMinusToken = or(isReadonlyKeyword, isPlusToken, isMinusToken) as (node: Node) => node is ReadonlyKeyword | PlusToken | MinusToken; From b3290b1f46735795f3e5d7f1514403916341bd61 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Thu, 19 Jan 2023 15:45:40 -0800 Subject: [PATCH 08/10] Remove some from PR review --- src/compiler/factory/utilities.ts | 4 ---- src/compiler/utilitiesPublic.ts | 1 + tests/baselines/reference/api/tsserverlibrary.d.ts | 3 +-- tests/baselines/reference/api/typescript.d.ts | 3 +-- 4 files changed, 3 insertions(+), 8 deletions(-) diff --git a/src/compiler/factory/utilities.ts b/src/compiler/factory/utilities.ts index ced5ad06fee16..4e2b2d5a068e2 100644 --- a/src/compiler/factory/utilities.ts +++ b/src/compiler/factory/utilities.ts @@ -111,8 +111,6 @@ import { isSpreadElement, isStringLiteral, isThisTypeNode, - isTypeNode, - isTypeParameterDeclaration, isVariableDeclarationList, JSDocNamespaceBody, JSDocTypeAssertion, @@ -177,8 +175,6 @@ import { TextRange, ThisTypeNode, Token, - TypeNode, - TypeParameterDeclaration, } from "../_namespaces/ts"; // Compound nodes diff --git a/src/compiler/utilitiesPublic.ts b/src/compiler/utilitiesPublic.ts index d1b4ca07a9782..fc37c4a034b23 100644 --- a/src/compiler/utilitiesPublic.ts +++ b/src/compiler/utilitiesPublic.ts @@ -1794,6 +1794,7 @@ export function isDeclarationBindingElement(bindingElement: BindingOrAssignmentE return false; } +/** @internal */ export function isBindingOrAssignmentElement(node: Node): node is BindingOrAssignmentElement { return isVariableDeclaration(node) || isParameter(node) diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts index e71e514416b95..5c48080db23e4 100644 --- a/tests/baselines/reference/api/tsserverlibrary.d.ts +++ b/tests/baselines/reference/api/tsserverlibrary.d.ts @@ -8863,7 +8863,6 @@ declare namespace ts { function isTypeNode(node: Node): node is TypeNode; function isFunctionOrConstructorTypeNode(node: Node): node is FunctionTypeNode | ConstructorTypeNode; function isArrayBindingElement(node: Node): node is ArrayBindingElement; - function isBindingOrAssignmentElement(node: Node): node is BindingOrAssignmentElement; function isPropertyAccessOrQualifiedName(node: Node): node is PropertyAccessExpression | QualifiedName; function isCallLikeExpression(node: Node): node is CallLikeExpression; function isCallOrNewExpression(node: Node): node is CallExpression | NewExpression; @@ -9198,7 +9197,7 @@ declare namespace ts { function isJSDocSatisfiesTag(node: Node): node is JSDocSatisfiesTag; function isJSDocThrowsTag(node: Node): node is JSDocThrowsTag; function isBinaryOperatorToken(node: Node): node is BinaryOperatorToken; - const isQuestionOrExclamationToken: (node: Node) => node is QuestionToken | ExclamationToken; + const isQuestionOrExclamationToken: (node: Node) => node is ExclamationToken | QuestionToken; const isIdentifierOrThisTypeNode: (node: Node) => node is Identifier | ThisTypeNode; const isReadonlyKeywordOrPlusOrMinusToken: (node: Node) => node is ReadonlyKeyword | PlusToken | MinusToken; const isQuestionOrPlusOrMinusToken: (node: Node) => node is QuestionToken | PlusToken | MinusToken; diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index 108b8a42ce811..677d954bc6456 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -4870,7 +4870,6 @@ declare namespace ts { function isTypeNode(node: Node): node is TypeNode; function isFunctionOrConstructorTypeNode(node: Node): node is FunctionTypeNode | ConstructorTypeNode; function isArrayBindingElement(node: Node): node is ArrayBindingElement; - function isBindingOrAssignmentElement(node: Node): node is BindingOrAssignmentElement; function isPropertyAccessOrQualifiedName(node: Node): node is PropertyAccessExpression | QualifiedName; function isCallLikeExpression(node: Node): node is CallLikeExpression; function isCallOrNewExpression(node: Node): node is CallExpression | NewExpression; @@ -5205,7 +5204,7 @@ declare namespace ts { function isJSDocSatisfiesTag(node: Node): node is JSDocSatisfiesTag; function isJSDocThrowsTag(node: Node): node is JSDocThrowsTag; function isBinaryOperatorToken(node: Node): node is BinaryOperatorToken; - const isQuestionOrExclamationToken: (node: Node) => node is QuestionToken | ExclamationToken; + const isQuestionOrExclamationToken: (node: Node) => node is ExclamationToken | QuestionToken; const isIdentifierOrThisTypeNode: (node: Node) => node is Identifier | ThisTypeNode; const isReadonlyKeywordOrPlusOrMinusToken: (node: Node) => node is ReadonlyKeyword | PlusToken | MinusToken; const isQuestionOrPlusOrMinusToken: (node: Node) => node is QuestionToken | PlusToken | MinusToken; From aeb1055019edd3387847cae1f3271ed2bff6d7ad Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Thu, 19 Jan 2023 15:55:23 -0800 Subject: [PATCH 09/10] Use regular functions --- src/compiler/factory/utilities.ts | 28 ++++++++++++++----- .../reference/api/tsserverlibrary.d.ts | 10 +++---- tests/baselines/reference/api/typescript.d.ts | 10 +++---- 3 files changed, 31 insertions(+), 17 deletions(-) diff --git a/src/compiler/factory/utilities.ts b/src/compiler/factory/utilities.ts index 4e2b2d5a068e2..61cbc7dffc7f5 100644 --- a/src/compiler/factory/utilities.ts +++ b/src/compiler/factory/utilities.ts @@ -141,7 +141,6 @@ import { NumericLiteral, ObjectLiteralElementLike, ObjectLiteralExpression, - or, OuterExpression, OuterExpressionKinds, outFile, @@ -175,6 +174,7 @@ import { TextRange, ThisTypeNode, Token, + TypeNode, } from "../_namespaces/ts"; // Compound nodes @@ -625,7 +625,7 @@ export function isJSDocTypeAssertion(node: Node): node is JSDocTypeAssertion { } /** @internal */ -export function getJSDocTypeAssertionType(node: JSDocTypeAssertion) { +export function getJSDocTypeAssertionType(node: JSDocTypeAssertion): TypeNode { const type = getJSDocType(node); Debug.assertIsDefined(type); return type; @@ -1156,11 +1156,25 @@ export function canHaveIllegalModifiers(node: Node): node is HasIllegalModifiers || kind === SyntaxKind.NamespaceExportDeclaration; } -export const isQuestionOrExclamationToken = or(isQuestionToken, isExclamationToken) as (node: Node) => node is QuestionToken | ExclamationToken; -export const isIdentifierOrThisTypeNode = or(isIdentifier, isThisTypeNode) as (node: Node) => node is Identifier | ThisTypeNode; -export const isReadonlyKeywordOrPlusOrMinusToken = or(isReadonlyKeyword, isPlusToken, isMinusToken) as (node: Node) => node is ReadonlyKeyword | PlusToken | MinusToken; -export const isQuestionOrPlusOrMinusToken = or(isQuestionToken, isPlusToken, isMinusToken) as (node: Node) => node is QuestionToken | PlusToken | MinusToken; -export const isModuleName = or(isIdentifier, isStringLiteral) as (node: Node) => node is ModuleName; +export function isQuestionOrExclamationToken(node: Node): node is QuestionToken | ExclamationToken { + return isQuestionToken(node) || isExclamationToken(node); +} + +export function isIdentifierOrThisTypeNode(node: Node): node is Identifier | ThisTypeNode { + return isIdentifier(node) || isThisTypeNode(node); +} + +export function isReadonlyKeywordOrPlusOrMinusToken(node: Node): node is ReadonlyKeyword | PlusToken | MinusToken { + return isReadonlyKeyword(node) || isPlusToken(node) || isMinusToken(node); +} + +export function isQuestionOrPlusOrMinusToken(node: Node): node is QuestionToken | PlusToken | MinusToken { + return isQuestionToken(node) || isPlusToken(node) || isMinusToken(node); +} + +export function isModuleName(node: Node): node is ModuleName { + return isIdentifier(node) || isStringLiteral(node); +} /** @internal */ export function isLiteralTypeLikeExpression(node: Node): node is NullLiteral | BooleanLiteral | LiteralExpression | PrefixUnaryExpression { diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts index 5c48080db23e4..bcc9d101cd1ef 100644 --- a/tests/baselines/reference/api/tsserverlibrary.d.ts +++ b/tests/baselines/reference/api/tsserverlibrary.d.ts @@ -9196,12 +9196,12 @@ declare namespace ts { function isJSDocImplementsTag(node: Node): node is JSDocImplementsTag; function isJSDocSatisfiesTag(node: Node): node is JSDocSatisfiesTag; function isJSDocThrowsTag(node: Node): node is JSDocThrowsTag; + function isQuestionOrExclamationToken(node: Node): node is QuestionToken | ExclamationToken; + function isIdentifierOrThisTypeNode(node: Node): node is Identifier | ThisTypeNode; + function isReadonlyKeywordOrPlusOrMinusToken(node: Node): node is ReadonlyKeyword | PlusToken | MinusToken; + function isQuestionOrPlusOrMinusToken(node: Node): node is QuestionToken | PlusToken | MinusToken; + function isModuleName(node: Node): node is ModuleName; function isBinaryOperatorToken(node: Node): node is BinaryOperatorToken; - const isQuestionOrExclamationToken: (node: Node) => node is ExclamationToken | QuestionToken; - const isIdentifierOrThisTypeNode: (node: Node) => node is Identifier | ThisTypeNode; - const isReadonlyKeywordOrPlusOrMinusToken: (node: Node) => node is ReadonlyKeyword | PlusToken | MinusToken; - const isQuestionOrPlusOrMinusToken: (node: Node) => node is QuestionToken | PlusToken | MinusToken; - const isModuleName: (node: Node) => node is ModuleName; function setTextRange(range: T, location: TextRange | undefined): T; function canHaveModifiers(node: Node): node is HasModifiers; function canHaveDecorators(node: Node): node is HasDecorators; diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index 677d954bc6456..fba28625edf51 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -5203,12 +5203,12 @@ declare namespace ts { function isJSDocImplementsTag(node: Node): node is JSDocImplementsTag; function isJSDocSatisfiesTag(node: Node): node is JSDocSatisfiesTag; function isJSDocThrowsTag(node: Node): node is JSDocThrowsTag; + function isQuestionOrExclamationToken(node: Node): node is QuestionToken | ExclamationToken; + function isIdentifierOrThisTypeNode(node: Node): node is Identifier | ThisTypeNode; + function isReadonlyKeywordOrPlusOrMinusToken(node: Node): node is ReadonlyKeyword | PlusToken | MinusToken; + function isQuestionOrPlusOrMinusToken(node: Node): node is QuestionToken | PlusToken | MinusToken; + function isModuleName(node: Node): node is ModuleName; function isBinaryOperatorToken(node: Node): node is BinaryOperatorToken; - const isQuestionOrExclamationToken: (node: Node) => node is ExclamationToken | QuestionToken; - const isIdentifierOrThisTypeNode: (node: Node) => node is Identifier | ThisTypeNode; - const isReadonlyKeywordOrPlusOrMinusToken: (node: Node) => node is ReadonlyKeyword | PlusToken | MinusToken; - const isQuestionOrPlusOrMinusToken: (node: Node) => node is QuestionToken | PlusToken | MinusToken; - const isModuleName: (node: Node) => node is ModuleName; function setTextRange(range: T, location: TextRange | undefined): T; function canHaveModifiers(node: Node): node is HasModifiers; function canHaveDecorators(node: Node): node is HasDecorators; From 16a208757870cd4df1ae458d96702cd660f2a40d Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 20 Jan 2023 14:41:38 -0800 Subject: [PATCH 10/10] PR feedback --- src/compiler/utilitiesPublic.ts | 4 ++-- tests/baselines/reference/api/tsserverlibrary.d.ts | 1 - tests/baselines/reference/api/typescript.d.ts | 1 - 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/compiler/utilitiesPublic.ts b/src/compiler/utilitiesPublic.ts index fc37c4a034b23..7f72a045f3518 100644 --- a/src/compiler/utilitiesPublic.ts +++ b/src/compiler/utilitiesPublic.ts @@ -1987,8 +1987,7 @@ export function isUnaryExpressionWithWrite(expr: Node): expr is PrefixUnaryExpre } export function isLiteralTypeLiteral(node: Node): node is NullLiteral | BooleanLiteral | LiteralExpression | PrefixUnaryExpression { - node = skipPartiallyEmittedExpressions(node); - switch (skipPartiallyEmittedExpressions(node).kind) { + switch (node.kind) { case SyntaxKind.NullKeyword: case SyntaxKind.TrueKeyword: case SyntaxKind.FalseKeyword: @@ -2321,6 +2320,7 @@ function isStatementKindButNotDeclarationKind(kind: SyntaxKind) { || kind === SyntaxKind.MergeDeclarationMarker; } +/** @internal */ export function isDeclaration(node: Node): node is NamedDeclaration { if (node.kind === SyntaxKind.TypeParameter) { return (node.parent && node.parent.kind !== SyntaxKind.JSDocTemplateTag) || isInJSFile(node); diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts index bcc9d101cd1ef..323fde3f6a06c 100644 --- a/tests/baselines/reference/api/tsserverlibrary.d.ts +++ b/tests/baselines/reference/api/tsserverlibrary.d.ts @@ -8880,7 +8880,6 @@ declare namespace ts { function isForInitializer(node: Node): node is ForInitializer; function isModuleBody(node: Node): node is ModuleBody; function isNamedImportBindings(node: Node): node is NamedImportBindings; - function isDeclaration(node: Node): node is NamedDeclaration; function isStatement(node: Node): node is Statement; function isModuleReference(node: Node): node is ModuleReference; function isJsxTagNameExpression(node: Node): node is JsxTagNameExpression; diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index fba28625edf51..50189394c5137 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -4887,7 +4887,6 @@ declare namespace ts { function isForInitializer(node: Node): node is ForInitializer; function isModuleBody(node: Node): node is ModuleBody; function isNamedImportBindings(node: Node): node is NamedImportBindings; - function isDeclaration(node: Node): node is NamedDeclaration; function isStatement(node: Node): node is Statement; function isModuleReference(node: Node): node is ModuleReference; function isJsxTagNameExpression(node: Node): node is JsxTagNameExpression;