From 8fb706de00210c031dcd54664a55427f4843f4ce Mon Sep 17 00:00:00 2001 From: xiaopeiyang Date: Wed, 16 Apr 2025 11:03:56 +0800 Subject: [PATCH] Fix bug of Annotations Issue: https://gitee.com/openharmony/third_party_typescript/issues/IC1IRW Signed-off-by: xiaopeiyang Change-Id: I4d30455cab484c5faaa878b1b1456b1f6f45e6f7 --- lib/tsc.js | 25 +++++++++++++------ lib/tsserver.js | 25 +++++++++++++------ lib/tsserverlibrary.d.ts | 2 ++ lib/tsserverlibrary.js | 25 +++++++++++++------ lib/typescript.d.ts | 2 ++ lib/typescript.js | 25 +++++++++++++------ lib/typescriptServices.d.ts | 2 ++ lib/typescriptServices.js | 25 +++++++++++++------ lib/typingsInstaller.js | 25 +++++++++++++------ src/compiler/emitter.ts | 4 +-- src/compiler/factory/nodeTests.ts | 4 +++ src/compiler/transformers/declarations.ts | 6 ++--- src/compiler/transformers/ts.ts | 2 +- src/compiler/utilitiesPublic.ts | 8 +++++- .../reference/api/tsserverlibrary.d.ts | 2 ++ tests/baselines/reference/api/typescript.d.ts | 2 ++ 16 files changed, 129 insertions(+), 55 deletions(-) diff --git a/lib/tsc.js b/lib/tsc.js index 6b8181ca9e..897f168632 100644 --- a/lib/tsc.js +++ b/lib/tsc.js @@ -9923,6 +9923,12 @@ var ts; } } ts.getDecorators = getDecorators; + function getAnnotations(node) { + if (ts.hasAnnotations(node)) { + return ts.filter(node.modifiers, ts.isAnnotation); + } + } + ts.getAnnotations = getAnnotations; function getModifiers(node) { if (ts.hasSyntacticModifier(node, 126975)) { return ts.filter(node.modifiers, isModifier); @@ -10528,7 +10534,7 @@ var ts; } ts.isNamedClassElement = isNamedClassElement; function isModifierLike(node) { - return isModifier(node) || ts.isDecorator(node); + return isModifier(node) || ts.isDecoratorOrAnnotation(node); } ts.isModifierLike = isModifierLike; function isTypeElement(node) { @@ -23899,6 +23905,10 @@ var ts; return node.kind === 168; } ts.isParameter = isParameter; + function isDecoratorOrAnnotation(node) { + return node.kind === 169; + } + ts.isDecoratorOrAnnotation = isDecoratorOrAnnotation; function isDecorator(node) { return node.kind === 169 && node.annotationDeclaration === undefined; } @@ -82736,7 +82746,7 @@ var ts; } } function modifierVisitor(node) { - if (ts.isDecorator(node)) + if (ts.isDecoratorOrAnnotation(node)) return undefined; if (ts.modifierToFlag(node.kind) & 117086) { return undefined; @@ -95214,7 +95224,7 @@ var ts; if (ts.isPrivateIdentifier(input.name)) { return cleanup(undefined); } - var reservedDecorators_1 = ts.getReservedDecoratorsOfStructDeclaration(input, host); + var reservedDecorators_1 = ts.concatenate(ts.getReservedDecoratorsOfStructDeclaration(input, host), ts.getAnnotations(input)); var sig = factory.createMethodDeclaration(ts.concatenateDecoratorsAndModifiers(reservedDecorators_1, ensureModifiers(input)), undefined, input.name, input.questionToken, ts.inEtsStylesContext(input, host) ? undefined : ensureTypeParams(input, input.typeParameters), updateParamsList(input, input.parameters), ensureType(input, input.type), undefined); return cleanup(sig); } @@ -95595,13 +95605,12 @@ var ts; } return factory.updateHeritageClause(clause, ts.visitNodes(factory.createNodeArray(ts.filter(clause.types, function (t) { return ts.isEntityNameExpression(t.expression) || t.expression.kind === 105; })), visitDeclarationSubtree)); })); - var reservedDecorators = ts.getReservedDecoratorsOfEtsFile(input, host); + var reservedDecorators = ts.concatenate(ts.getReservedDecoratorsOfEtsFile(input, host), ts.getAnnotations(input)); return [statement, cleanup(factory.updateClassDeclaration(input, ts.concatenateDecoratorsAndModifiers(reservedDecorators, modifiers), input.name, typeParameters, heritageClauses, members))]; } else { var heritageClauses = transformHeritageClauses(input.heritageClauses); - var reservedDecorators = ts.getReservedDecoratorsOfEtsFile(input, host); - ; + var reservedDecorators = ts.concatenate(ts.getReservedDecoratorsOfEtsFile(input, host), ts.getAnnotations(input)); return cleanup(factory.updateClassDeclaration(input, ts.concatenateDecoratorsAndModifiers(reservedDecorators, modifiers), input.name, typeParameters, heritageClauses, members)); } } @@ -99830,7 +99839,7 @@ var ts; if (ts.every(modifiers, ts.isModifier)) { return emitModifiers(node, modifiers); } - if (ts.every(modifiers, ts.isDecorator)) { + if (ts.every(modifiers, ts.isDecoratorOrAnnotation)) { return emitDecorators(node, modifiers); } onBeforeEmitNodeArray === null || onBeforeEmitNodeArray === void 0 ? void 0 : onBeforeEmitNodeArray(modifiers); @@ -99841,7 +99850,7 @@ var ts; while (start < modifiers.length) { while (pos < modifiers.length) { var modifier = modifiers[pos]; - mode = ts.isDecorator(modifier) ? "decorators" : "modifiers"; + mode = ts.isDecoratorOrAnnotation(modifier) ? "decorators" : "modifiers"; if (lastMode === undefined) { lastMode = mode; } diff --git a/lib/tsserver.js b/lib/tsserver.js index f595331263..5100f28510 100644 --- a/lib/tsserver.js +++ b/lib/tsserver.js @@ -13193,6 +13193,12 @@ var ts; } } ts.getDecorators = getDecorators; + function getAnnotations(node) { + if (ts.hasAnnotations(node)) { + return ts.filter(node.modifiers, ts.isAnnotation); + } + } + ts.getAnnotations = getAnnotations; function getModifiers(node) { if (ts.hasSyntacticModifier(node, 126975 /* ModifierFlags.Modifier */)) { return ts.filter(node.modifiers, isModifier); @@ -13946,7 +13952,7 @@ var ts; ts.isNamedClassElement = isNamedClassElement; // Type members function isModifierLike(node) { - return isModifier(node) || ts.isDecorator(node); + return isModifier(node) || ts.isDecoratorOrAnnotation(node); } ts.isModifierLike = isModifierLike; function isTypeElement(node) { @@ -29754,6 +29760,10 @@ var ts; return node.kind === 168 /* SyntaxKind.Parameter */; } ts.isParameter = isParameter; + function isDecoratorOrAnnotation(node) { + return node.kind === 169 /* SyntaxKind.Decorator */; + } + ts.isDecoratorOrAnnotation = isDecoratorOrAnnotation; function isDecorator(node) { return node.kind === 169 /* SyntaxKind.Decorator */ && node.annotationDeclaration === undefined; } @@ -97908,7 +97918,7 @@ var ts; } } function modifierVisitor(node) { - if (ts.isDecorator(node)) + if (ts.isDecoratorOrAnnotation(node)) return undefined; if (ts.modifierToFlag(node.kind) & 117086 /* ModifierFlags.TypeScriptModifier */) { return undefined; @@ -115388,7 +115398,7 @@ var ts; if (ts.isPrivateIdentifier(input.name)) { return cleanup(/*returnValue*/ undefined); } - var reservedDecorators_1 = ts.getReservedDecoratorsOfStructDeclaration(input, host); + var reservedDecorators_1 = ts.concatenate(ts.getReservedDecoratorsOfStructDeclaration(input, host), ts.getAnnotations(input)); var sig = factory.createMethodDeclaration(ts.concatenateDecoratorsAndModifiers(reservedDecorators_1, ensureModifiers(input)), /*asteriskToken*/ undefined, input.name, input.questionToken, ts.inEtsStylesContext(input, host) ? undefined : ensureTypeParams(input, input.typeParameters), updateParamsList(input, input.parameters), ensureType(input, input.type), /*body*/ undefined); @@ -115810,13 +115820,12 @@ var ts; } return factory.updateHeritageClause(clause, ts.visitNodes(factory.createNodeArray(ts.filter(clause.types, function (t) { return ts.isEntityNameExpression(t.expression) || t.expression.kind === 105 /* SyntaxKind.NullKeyword */; })), visitDeclarationSubtree)); })); - var reservedDecorators = ts.getReservedDecoratorsOfEtsFile(input, host); + var reservedDecorators = ts.concatenate(ts.getReservedDecoratorsOfEtsFile(input, host), ts.getAnnotations(input)); return [statement, cleanup(factory.updateClassDeclaration(input, ts.concatenateDecoratorsAndModifiers(reservedDecorators, modifiers), input.name, typeParameters, heritageClauses, members))]; // TODO: GH#18217 } else { var heritageClauses = transformHeritageClauses(input.heritageClauses); - var reservedDecorators = ts.getReservedDecoratorsOfEtsFile(input, host); - ; + var reservedDecorators = ts.concatenate(ts.getReservedDecoratorsOfEtsFile(input, host), ts.getAnnotations(input)); return cleanup(factory.updateClassDeclaration(input, ts.concatenateDecoratorsAndModifiers(reservedDecorators, modifiers), input.name, typeParameters, heritageClauses, members)); } } @@ -120425,7 +120434,7 @@ var ts; // if all modifier-likes are `Modifier`, simply emit the array as modifiers. return emitModifiers(node, modifiers); } - if (ts.every(modifiers, ts.isDecorator)) { + if (ts.every(modifiers, ts.isDecoratorOrAnnotation)) { // if all modifier-likes are `Decorator`, simply emit the array as decorators. return emitDecorators(node, modifiers); } @@ -120438,7 +120447,7 @@ var ts; while (start < modifiers.length) { while (pos < modifiers.length) { var modifier = modifiers[pos]; - mode = ts.isDecorator(modifier) ? "decorators" : "modifiers"; + mode = ts.isDecoratorOrAnnotation(modifier) ? "decorators" : "modifiers"; if (lastMode === undefined) { lastMode = mode; } diff --git a/lib/tsserverlibrary.d.ts b/lib/tsserverlibrary.d.ts index f6d24576d8..f9cc3adccb 100644 --- a/lib/tsserverlibrary.d.ts +++ b/lib/tsserverlibrary.d.ts @@ -4789,6 +4789,7 @@ declare namespace ts { function getNameOfJSDocTypedef(declaration: JSDocTypedefTag): Identifier | PrivateIdentifier | undefined; function getNameOfDeclaration(declaration: Declaration | Expression | undefined): DeclarationName | undefined; function getDecorators(node: HasDecorators): readonly Decorator[] | undefined; + function getAnnotations(node: HasDecorators): readonly Decorator[] | undefined; function getModifiers(node: HasModifiers): readonly Modifier[] | undefined; function getAllDecorators(node: Node | undefined): readonly Decorator[]; function getIllegalDecorators(node: HasIllegalDecorators): readonly Decorator[] | undefined; @@ -5082,6 +5083,7 @@ declare namespace ts { function isComputedPropertyName(node: Node): node is ComputedPropertyName; function isTypeParameterDeclaration(node: Node): node is TypeParameterDeclaration; function isParameter(node: Node): node is ParameterDeclaration; + function isDecoratorOrAnnotation(node: Node): node is Decorator; function isDecorator(node: Node): node is Decorator; function isAnnotation(node: Node): node is Annotation; function isPropertySignature(node: Node): node is PropertySignature; diff --git a/lib/tsserverlibrary.js b/lib/tsserverlibrary.js index f1503e3e90..3ec453d033 100644 --- a/lib/tsserverlibrary.js +++ b/lib/tsserverlibrary.js @@ -13192,6 +13192,12 @@ var ts; } } ts.getDecorators = getDecorators; + function getAnnotations(node) { + if (ts.hasAnnotations(node)) { + return ts.filter(node.modifiers, ts.isAnnotation); + } + } + ts.getAnnotations = getAnnotations; function getModifiers(node) { if (ts.hasSyntacticModifier(node, 126975 /* ModifierFlags.Modifier */)) { return ts.filter(node.modifiers, isModifier); @@ -13945,7 +13951,7 @@ var ts; ts.isNamedClassElement = isNamedClassElement; // Type members function isModifierLike(node) { - return isModifier(node) || ts.isDecorator(node); + return isModifier(node) || ts.isDecoratorOrAnnotation(node); } ts.isModifierLike = isModifierLike; function isTypeElement(node) { @@ -29753,6 +29759,10 @@ var ts; return node.kind === 168 /* SyntaxKind.Parameter */; } ts.isParameter = isParameter; + function isDecoratorOrAnnotation(node) { + return node.kind === 169 /* SyntaxKind.Decorator */; + } + ts.isDecoratorOrAnnotation = isDecoratorOrAnnotation; function isDecorator(node) { return node.kind === 169 /* SyntaxKind.Decorator */ && node.annotationDeclaration === undefined; } @@ -97907,7 +97917,7 @@ var ts; } } function modifierVisitor(node) { - if (ts.isDecorator(node)) + if (ts.isDecoratorOrAnnotation(node)) return undefined; if (ts.modifierToFlag(node.kind) & 117086 /* ModifierFlags.TypeScriptModifier */) { return undefined; @@ -115387,7 +115397,7 @@ var ts; if (ts.isPrivateIdentifier(input.name)) { return cleanup(/*returnValue*/ undefined); } - var reservedDecorators_1 = ts.getReservedDecoratorsOfStructDeclaration(input, host); + var reservedDecorators_1 = ts.concatenate(ts.getReservedDecoratorsOfStructDeclaration(input, host), ts.getAnnotations(input)); var sig = factory.createMethodDeclaration(ts.concatenateDecoratorsAndModifiers(reservedDecorators_1, ensureModifiers(input)), /*asteriskToken*/ undefined, input.name, input.questionToken, ts.inEtsStylesContext(input, host) ? undefined : ensureTypeParams(input, input.typeParameters), updateParamsList(input, input.parameters), ensureType(input, input.type), /*body*/ undefined); @@ -115809,13 +115819,12 @@ var ts; } return factory.updateHeritageClause(clause, ts.visitNodes(factory.createNodeArray(ts.filter(clause.types, function (t) { return ts.isEntityNameExpression(t.expression) || t.expression.kind === 105 /* SyntaxKind.NullKeyword */; })), visitDeclarationSubtree)); })); - var reservedDecorators = ts.getReservedDecoratorsOfEtsFile(input, host); + var reservedDecorators = ts.concatenate(ts.getReservedDecoratorsOfEtsFile(input, host), ts.getAnnotations(input)); return [statement, cleanup(factory.updateClassDeclaration(input, ts.concatenateDecoratorsAndModifiers(reservedDecorators, modifiers), input.name, typeParameters, heritageClauses, members))]; // TODO: GH#18217 } else { var heritageClauses = transformHeritageClauses(input.heritageClauses); - var reservedDecorators = ts.getReservedDecoratorsOfEtsFile(input, host); - ; + var reservedDecorators = ts.concatenate(ts.getReservedDecoratorsOfEtsFile(input, host), ts.getAnnotations(input)); return cleanup(factory.updateClassDeclaration(input, ts.concatenateDecoratorsAndModifiers(reservedDecorators, modifiers), input.name, typeParameters, heritageClauses, members)); } } @@ -120424,7 +120433,7 @@ var ts; // if all modifier-likes are `Modifier`, simply emit the array as modifiers. return emitModifiers(node, modifiers); } - if (ts.every(modifiers, ts.isDecorator)) { + if (ts.every(modifiers, ts.isDecoratorOrAnnotation)) { // if all modifier-likes are `Decorator`, simply emit the array as decorators. return emitDecorators(node, modifiers); } @@ -120437,7 +120446,7 @@ var ts; while (start < modifiers.length) { while (pos < modifiers.length) { var modifier = modifiers[pos]; - mode = ts.isDecorator(modifier) ? "decorators" : "modifiers"; + mode = ts.isDecoratorOrAnnotation(modifier) ? "decorators" : "modifiers"; if (lastMode === undefined) { lastMode = mode; } diff --git a/lib/typescript.d.ts b/lib/typescript.d.ts index fd13dea264..64cabdd208 100644 --- a/lib/typescript.d.ts +++ b/lib/typescript.d.ts @@ -4789,6 +4789,7 @@ declare namespace ts { function getNameOfJSDocTypedef(declaration: JSDocTypedefTag): Identifier | PrivateIdentifier | undefined; function getNameOfDeclaration(declaration: Declaration | Expression | undefined): DeclarationName | undefined; function getDecorators(node: HasDecorators): readonly Decorator[] | undefined; + function getAnnotations(node: HasDecorators): readonly Decorator[] | undefined; function getModifiers(node: HasModifiers): readonly Modifier[] | undefined; function getAllDecorators(node: Node | undefined): readonly Decorator[]; function getIllegalDecorators(node: HasIllegalDecorators): readonly Decorator[] | undefined; @@ -5082,6 +5083,7 @@ declare namespace ts { function isComputedPropertyName(node: Node): node is ComputedPropertyName; function isTypeParameterDeclaration(node: Node): node is TypeParameterDeclaration; function isParameter(node: Node): node is ParameterDeclaration; + function isDecoratorOrAnnotation(node: Node): node is Decorator; function isDecorator(node: Node): node is Decorator; function isAnnotation(node: Node): node is Annotation; function isPropertySignature(node: Node): node is PropertySignature; diff --git a/lib/typescript.js b/lib/typescript.js index b3b12717bf..d928e6c186 100644 --- a/lib/typescript.js +++ b/lib/typescript.js @@ -13183,6 +13183,12 @@ var ts; } } ts.getDecorators = getDecorators; + function getAnnotations(node) { + if (ts.hasAnnotations(node)) { + return ts.filter(node.modifiers, ts.isAnnotation); + } + } + ts.getAnnotations = getAnnotations; function getModifiers(node) { if (ts.hasSyntacticModifier(node, 126975 /* ModifierFlags.Modifier */)) { return ts.filter(node.modifiers, isModifier); @@ -13936,7 +13942,7 @@ var ts; ts.isNamedClassElement = isNamedClassElement; // Type members function isModifierLike(node) { - return isModifier(node) || ts.isDecorator(node); + return isModifier(node) || ts.isDecoratorOrAnnotation(node); } ts.isModifierLike = isModifierLike; function isTypeElement(node) { @@ -29744,6 +29750,10 @@ var ts; return node.kind === 168 /* SyntaxKind.Parameter */; } ts.isParameter = isParameter; + function isDecoratorOrAnnotation(node) { + return node.kind === 169 /* SyntaxKind.Decorator */; + } + ts.isDecoratorOrAnnotation = isDecoratorOrAnnotation; function isDecorator(node) { return node.kind === 169 /* SyntaxKind.Decorator */ && node.annotationDeclaration === undefined; } @@ -97898,7 +97908,7 @@ var ts; } } function modifierVisitor(node) { - if (ts.isDecorator(node)) + if (ts.isDecoratorOrAnnotation(node)) return undefined; if (ts.modifierToFlag(node.kind) & 117086 /* ModifierFlags.TypeScriptModifier */) { return undefined; @@ -115378,7 +115388,7 @@ var ts; if (ts.isPrivateIdentifier(input.name)) { return cleanup(/*returnValue*/ undefined); } - var reservedDecorators_1 = ts.getReservedDecoratorsOfStructDeclaration(input, host); + var reservedDecorators_1 = ts.concatenate(ts.getReservedDecoratorsOfStructDeclaration(input, host), ts.getAnnotations(input)); var sig = factory.createMethodDeclaration(ts.concatenateDecoratorsAndModifiers(reservedDecorators_1, ensureModifiers(input)), /*asteriskToken*/ undefined, input.name, input.questionToken, ts.inEtsStylesContext(input, host) ? undefined : ensureTypeParams(input, input.typeParameters), updateParamsList(input, input.parameters), ensureType(input, input.type), /*body*/ undefined); @@ -115800,13 +115810,12 @@ var ts; } return factory.updateHeritageClause(clause, ts.visitNodes(factory.createNodeArray(ts.filter(clause.types, function (t) { return ts.isEntityNameExpression(t.expression) || t.expression.kind === 105 /* SyntaxKind.NullKeyword */; })), visitDeclarationSubtree)); })); - var reservedDecorators = ts.getReservedDecoratorsOfEtsFile(input, host); + var reservedDecorators = ts.concatenate(ts.getReservedDecoratorsOfEtsFile(input, host), ts.getAnnotations(input)); return [statement, cleanup(factory.updateClassDeclaration(input, ts.concatenateDecoratorsAndModifiers(reservedDecorators, modifiers), input.name, typeParameters, heritageClauses, members))]; // TODO: GH#18217 } else { var heritageClauses = transformHeritageClauses(input.heritageClauses); - var reservedDecorators = ts.getReservedDecoratorsOfEtsFile(input, host); - ; + var reservedDecorators = ts.concatenate(ts.getReservedDecoratorsOfEtsFile(input, host), ts.getAnnotations(input)); return cleanup(factory.updateClassDeclaration(input, ts.concatenateDecoratorsAndModifiers(reservedDecorators, modifiers), input.name, typeParameters, heritageClauses, members)); } } @@ -120415,7 +120424,7 @@ var ts; // if all modifier-likes are `Modifier`, simply emit the array as modifiers. return emitModifiers(node, modifiers); } - if (ts.every(modifiers, ts.isDecorator)) { + if (ts.every(modifiers, ts.isDecoratorOrAnnotation)) { // if all modifier-likes are `Decorator`, simply emit the array as decorators. return emitDecorators(node, modifiers); } @@ -120428,7 +120437,7 @@ var ts; while (start < modifiers.length) { while (pos < modifiers.length) { var modifier = modifiers[pos]; - mode = ts.isDecorator(modifier) ? "decorators" : "modifiers"; + mode = ts.isDecoratorOrAnnotation(modifier) ? "decorators" : "modifiers"; if (lastMode === undefined) { lastMode = mode; } diff --git a/lib/typescriptServices.d.ts b/lib/typescriptServices.d.ts index b03a7329cf..712fa1a192 100644 --- a/lib/typescriptServices.d.ts +++ b/lib/typescriptServices.d.ts @@ -4789,6 +4789,7 @@ declare namespace ts { function getNameOfJSDocTypedef(declaration: JSDocTypedefTag): Identifier | PrivateIdentifier | undefined; function getNameOfDeclaration(declaration: Declaration | Expression | undefined): DeclarationName | undefined; function getDecorators(node: HasDecorators): readonly Decorator[] | undefined; + function getAnnotations(node: HasDecorators): readonly Decorator[] | undefined; function getModifiers(node: HasModifiers): readonly Modifier[] | undefined; function getAllDecorators(node: Node | undefined): readonly Decorator[]; function getIllegalDecorators(node: HasIllegalDecorators): readonly Decorator[] | undefined; @@ -5082,6 +5083,7 @@ declare namespace ts { function isComputedPropertyName(node: Node): node is ComputedPropertyName; function isTypeParameterDeclaration(node: Node): node is TypeParameterDeclaration; function isParameter(node: Node): node is ParameterDeclaration; + function isDecoratorOrAnnotation(node: Node): node is Decorator; function isDecorator(node: Node): node is Decorator; function isAnnotation(node: Node): node is Annotation; function isPropertySignature(node: Node): node is PropertySignature; diff --git a/lib/typescriptServices.js b/lib/typescriptServices.js index 2c6f5d45c5..6ceb5b441c 100644 --- a/lib/typescriptServices.js +++ b/lib/typescriptServices.js @@ -13183,6 +13183,12 @@ var ts; } } ts.getDecorators = getDecorators; + function getAnnotations(node) { + if (ts.hasAnnotations(node)) { + return ts.filter(node.modifiers, ts.isAnnotation); + } + } + ts.getAnnotations = getAnnotations; function getModifiers(node) { if (ts.hasSyntacticModifier(node, 126975 /* ModifierFlags.Modifier */)) { return ts.filter(node.modifiers, isModifier); @@ -13936,7 +13942,7 @@ var ts; ts.isNamedClassElement = isNamedClassElement; // Type members function isModifierLike(node) { - return isModifier(node) || ts.isDecorator(node); + return isModifier(node) || ts.isDecoratorOrAnnotation(node); } ts.isModifierLike = isModifierLike; function isTypeElement(node) { @@ -29744,6 +29750,10 @@ var ts; return node.kind === 168 /* SyntaxKind.Parameter */; } ts.isParameter = isParameter; + function isDecoratorOrAnnotation(node) { + return node.kind === 169 /* SyntaxKind.Decorator */; + } + ts.isDecoratorOrAnnotation = isDecoratorOrAnnotation; function isDecorator(node) { return node.kind === 169 /* SyntaxKind.Decorator */ && node.annotationDeclaration === undefined; } @@ -97898,7 +97908,7 @@ var ts; } } function modifierVisitor(node) { - if (ts.isDecorator(node)) + if (ts.isDecoratorOrAnnotation(node)) return undefined; if (ts.modifierToFlag(node.kind) & 117086 /* ModifierFlags.TypeScriptModifier */) { return undefined; @@ -115378,7 +115388,7 @@ var ts; if (ts.isPrivateIdentifier(input.name)) { return cleanup(/*returnValue*/ undefined); } - var reservedDecorators_1 = ts.getReservedDecoratorsOfStructDeclaration(input, host); + var reservedDecorators_1 = ts.concatenate(ts.getReservedDecoratorsOfStructDeclaration(input, host), ts.getAnnotations(input)); var sig = factory.createMethodDeclaration(ts.concatenateDecoratorsAndModifiers(reservedDecorators_1, ensureModifiers(input)), /*asteriskToken*/ undefined, input.name, input.questionToken, ts.inEtsStylesContext(input, host) ? undefined : ensureTypeParams(input, input.typeParameters), updateParamsList(input, input.parameters), ensureType(input, input.type), /*body*/ undefined); @@ -115800,13 +115810,12 @@ var ts; } return factory.updateHeritageClause(clause, ts.visitNodes(factory.createNodeArray(ts.filter(clause.types, function (t) { return ts.isEntityNameExpression(t.expression) || t.expression.kind === 105 /* SyntaxKind.NullKeyword */; })), visitDeclarationSubtree)); })); - var reservedDecorators = ts.getReservedDecoratorsOfEtsFile(input, host); + var reservedDecorators = ts.concatenate(ts.getReservedDecoratorsOfEtsFile(input, host), ts.getAnnotations(input)); return [statement, cleanup(factory.updateClassDeclaration(input, ts.concatenateDecoratorsAndModifiers(reservedDecorators, modifiers), input.name, typeParameters, heritageClauses, members))]; // TODO: GH#18217 } else { var heritageClauses = transformHeritageClauses(input.heritageClauses); - var reservedDecorators = ts.getReservedDecoratorsOfEtsFile(input, host); - ; + var reservedDecorators = ts.concatenate(ts.getReservedDecoratorsOfEtsFile(input, host), ts.getAnnotations(input)); return cleanup(factory.updateClassDeclaration(input, ts.concatenateDecoratorsAndModifiers(reservedDecorators, modifiers), input.name, typeParameters, heritageClauses, members)); } } @@ -120415,7 +120424,7 @@ var ts; // if all modifier-likes are `Modifier`, simply emit the array as modifiers. return emitModifiers(node, modifiers); } - if (ts.every(modifiers, ts.isDecorator)) { + if (ts.every(modifiers, ts.isDecoratorOrAnnotation)) { // if all modifier-likes are `Decorator`, simply emit the array as decorators. return emitDecorators(node, modifiers); } @@ -120428,7 +120437,7 @@ var ts; while (start < modifiers.length) { while (pos < modifiers.length) { var modifier = modifiers[pos]; - mode = ts.isDecorator(modifier) ? "decorators" : "modifiers"; + mode = ts.isDecoratorOrAnnotation(modifier) ? "decorators" : "modifiers"; if (lastMode === undefined) { lastMode = mode; } diff --git a/lib/typingsInstaller.js b/lib/typingsInstaller.js index 8ddf991d82..c1969c3f89 100644 --- a/lib/typingsInstaller.js +++ b/lib/typingsInstaller.js @@ -13173,6 +13173,12 @@ var ts; } } ts.getDecorators = getDecorators; + function getAnnotations(node) { + if (ts.hasAnnotations(node)) { + return ts.filter(node.modifiers, ts.isAnnotation); + } + } + ts.getAnnotations = getAnnotations; function getModifiers(node) { if (ts.hasSyntacticModifier(node, 126975 /* ModifierFlags.Modifier */)) { return ts.filter(node.modifiers, isModifier); @@ -13926,7 +13932,7 @@ var ts; ts.isNamedClassElement = isNamedClassElement; // Type members function isModifierLike(node) { - return isModifier(node) || ts.isDecorator(node); + return isModifier(node) || ts.isDecoratorOrAnnotation(node); } ts.isModifierLike = isModifierLike; function isTypeElement(node) { @@ -29734,6 +29740,10 @@ var ts; return node.kind === 168 /* SyntaxKind.Parameter */; } ts.isParameter = isParameter; + function isDecoratorOrAnnotation(node) { + return node.kind === 169 /* SyntaxKind.Decorator */; + } + ts.isDecoratorOrAnnotation = isDecoratorOrAnnotation; function isDecorator(node) { return node.kind === 169 /* SyntaxKind.Decorator */ && node.annotationDeclaration === undefined; } @@ -97888,7 +97898,7 @@ var ts; } } function modifierVisitor(node) { - if (ts.isDecorator(node)) + if (ts.isDecoratorOrAnnotation(node)) return undefined; if (ts.modifierToFlag(node.kind) & 117086 /* ModifierFlags.TypeScriptModifier */) { return undefined; @@ -115368,7 +115378,7 @@ var ts; if (ts.isPrivateIdentifier(input.name)) { return cleanup(/*returnValue*/ undefined); } - var reservedDecorators_1 = ts.getReservedDecoratorsOfStructDeclaration(input, host); + var reservedDecorators_1 = ts.concatenate(ts.getReservedDecoratorsOfStructDeclaration(input, host), ts.getAnnotations(input)); var sig = factory.createMethodDeclaration(ts.concatenateDecoratorsAndModifiers(reservedDecorators_1, ensureModifiers(input)), /*asteriskToken*/ undefined, input.name, input.questionToken, ts.inEtsStylesContext(input, host) ? undefined : ensureTypeParams(input, input.typeParameters), updateParamsList(input, input.parameters), ensureType(input, input.type), /*body*/ undefined); @@ -115790,13 +115800,12 @@ var ts; } return factory.updateHeritageClause(clause, ts.visitNodes(factory.createNodeArray(ts.filter(clause.types, function (t) { return ts.isEntityNameExpression(t.expression) || t.expression.kind === 105 /* SyntaxKind.NullKeyword */; })), visitDeclarationSubtree)); })); - var reservedDecorators = ts.getReservedDecoratorsOfEtsFile(input, host); + var reservedDecorators = ts.concatenate(ts.getReservedDecoratorsOfEtsFile(input, host), ts.getAnnotations(input)); return [statement, cleanup(factory.updateClassDeclaration(input, ts.concatenateDecoratorsAndModifiers(reservedDecorators, modifiers), input.name, typeParameters, heritageClauses, members))]; // TODO: GH#18217 } else { var heritageClauses = transformHeritageClauses(input.heritageClauses); - var reservedDecorators = ts.getReservedDecoratorsOfEtsFile(input, host); - ; + var reservedDecorators = ts.concatenate(ts.getReservedDecoratorsOfEtsFile(input, host), ts.getAnnotations(input)); return cleanup(factory.updateClassDeclaration(input, ts.concatenateDecoratorsAndModifiers(reservedDecorators, modifiers), input.name, typeParameters, heritageClauses, members)); } } @@ -120405,7 +120414,7 @@ var ts; // if all modifier-likes are `Modifier`, simply emit the array as modifiers. return emitModifiers(node, modifiers); } - if (ts.every(modifiers, ts.isDecorator)) { + if (ts.every(modifiers, ts.isDecoratorOrAnnotation)) { // if all modifier-likes are `Decorator`, simply emit the array as decorators. return emitDecorators(node, modifiers); } @@ -120418,7 +120427,7 @@ var ts; while (start < modifiers.length) { while (pos < modifiers.length) { var modifier = modifiers[pos]; - mode = ts.isDecorator(modifier) ? "decorators" : "modifiers"; + mode = ts.isDecoratorOrAnnotation(modifier) ? "decorators" : "modifiers"; if (lastMode === undefined) { lastMode = mode; } diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 0b0e89debd..c83ee0c64f 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -4311,7 +4311,7 @@ namespace ts { return emitModifiers(node, modifiers as NodeArray); } - if (every(modifiers, isDecorator)) { + if (every(modifiers, isDecoratorOrAnnotation)) { // if all modifier-likes are `Decorator`, simply emit the array as decorators. return emitDecorators(node, modifiers as NodeArray); } @@ -4326,7 +4326,7 @@ namespace ts { while (start < modifiers.length) { while (pos < modifiers.length) { const modifier = modifiers[pos]; - mode = isDecorator(modifier) ? "decorators" : "modifiers"; + mode = isDecoratorOrAnnotation(modifier) ? "decorators" : "modifiers"; if (lastMode === undefined) { lastMode = mode; } diff --git a/src/compiler/factory/nodeTests.ts b/src/compiler/factory/nodeTests.ts index d1cdf297d4..5747108f2f 100644 --- a/src/compiler/factory/nodeTests.ts +++ b/src/compiler/factory/nodeTests.ts @@ -175,6 +175,10 @@ namespace ts { return node.kind === SyntaxKind.Parameter; } + export function isDecoratorOrAnnotation(node: Node): node is Decorator { + return node.kind === SyntaxKind.Decorator; + } + export function isDecorator(node: Node): node is Decorator { return node.kind === SyntaxKind.Decorator && (node as Decorator).annotationDeclaration === undefined; } diff --git a/src/compiler/transformers/declarations.ts b/src/compiler/transformers/declarations.ts index c6534d90f5..7a70d6a373 100644 --- a/src/compiler/transformers/declarations.ts +++ b/src/compiler/transformers/declarations.ts @@ -964,7 +964,7 @@ namespace ts { if (isPrivateIdentifier(input.name)) { return cleanup(/*returnValue*/ undefined); } - let reservedDecorators = getReservedDecoratorsOfStructDeclaration(input, host); + let reservedDecorators = concatenate(getReservedDecoratorsOfStructDeclaration(input, host), getAnnotations(input)); const sig = factory.createMethodDeclaration( concatenateDecoratorsAndModifiers(reservedDecorators, ensureModifiers(input)), @@ -1540,7 +1540,7 @@ namespace ts { } return factory.updateHeritageClause(clause, visitNodes(factory.createNodeArray(filter(clause.types, t => isEntityNameExpression(t.expression) || t.expression.kind === SyntaxKind.NullKeyword)), visitDeclarationSubtree)); })); - let reservedDecorators = getReservedDecoratorsOfEtsFile(input, host); + let reservedDecorators = concatenate(getReservedDecoratorsOfEtsFile(input, host), getAnnotations(input)); return [statement, cleanup(factory.updateClassDeclaration( input, @@ -1553,7 +1553,7 @@ namespace ts { } else { const heritageClauses = transformHeritageClauses(input.heritageClauses); - let reservedDecorators = getReservedDecoratorsOfEtsFile(input, host);; + let reservedDecorators = concatenate(getReservedDecoratorsOfEtsFile(input, host), getAnnotations(input)); return cleanup(factory.updateClassDeclaration( input, diff --git a/src/compiler/transformers/ts.ts b/src/compiler/transformers/ts.ts index 5f70a357c8..00e461e3e8 100644 --- a/src/compiler/transformers/ts.ts +++ b/src/compiler/transformers/ts.ts @@ -363,7 +363,7 @@ namespace ts { } function modifierVisitor(node: Node): VisitResult { - if (isDecorator(node)) return undefined; + if (isDecoratorOrAnnotation(node)) return undefined; if (modifierToFlag(node.kind) & ModifierFlags.TypeScriptModifier) { return undefined; } diff --git a/src/compiler/utilitiesPublic.ts b/src/compiler/utilitiesPublic.ts index 7ac4421775..5ebf86e127 100644 --- a/src/compiler/utilitiesPublic.ts +++ b/src/compiler/utilitiesPublic.ts @@ -651,6 +651,12 @@ namespace ts { } } + export function getAnnotations(node: HasDecorators): readonly Decorator[] | undefined { + if (hasAnnotations(node)) { + return filter(node.modifiers, isAnnotation); + } + } + export function getModifiers(node: HasModifiers): readonly Modifier[] | undefined { if (hasSyntacticModifier(node, ModifierFlags.Modifier)) { return filter(node.modifiers, isModifier); @@ -1421,7 +1427,7 @@ namespace ts { // Type members export function isModifierLike(node: Node): node is ModifierLike { - return isModifier(node) || isDecorator(node); + return isModifier(node) || isDecoratorOrAnnotation(node); } export function isTypeElement(node: Node): node is TypeElement { diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts index f6d24576d8..f9cc3adccb 100644 --- a/tests/baselines/reference/api/tsserverlibrary.d.ts +++ b/tests/baselines/reference/api/tsserverlibrary.d.ts @@ -4789,6 +4789,7 @@ declare namespace ts { function getNameOfJSDocTypedef(declaration: JSDocTypedefTag): Identifier | PrivateIdentifier | undefined; function getNameOfDeclaration(declaration: Declaration | Expression | undefined): DeclarationName | undefined; function getDecorators(node: HasDecorators): readonly Decorator[] | undefined; + function getAnnotations(node: HasDecorators): readonly Decorator[] | undefined; function getModifiers(node: HasModifiers): readonly Modifier[] | undefined; function getAllDecorators(node: Node | undefined): readonly Decorator[]; function getIllegalDecorators(node: HasIllegalDecorators): readonly Decorator[] | undefined; @@ -5082,6 +5083,7 @@ declare namespace ts { function isComputedPropertyName(node: Node): node is ComputedPropertyName; function isTypeParameterDeclaration(node: Node): node is TypeParameterDeclaration; function isParameter(node: Node): node is ParameterDeclaration; + function isDecoratorOrAnnotation(node: Node): node is Decorator; function isDecorator(node: Node): node is Decorator; function isAnnotation(node: Node): node is Annotation; function isPropertySignature(node: Node): node is PropertySignature; diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index fd13dea264..64cabdd208 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -4789,6 +4789,7 @@ declare namespace ts { function getNameOfJSDocTypedef(declaration: JSDocTypedefTag): Identifier | PrivateIdentifier | undefined; function getNameOfDeclaration(declaration: Declaration | Expression | undefined): DeclarationName | undefined; function getDecorators(node: HasDecorators): readonly Decorator[] | undefined; + function getAnnotations(node: HasDecorators): readonly Decorator[] | undefined; function getModifiers(node: HasModifiers): readonly Modifier[] | undefined; function getAllDecorators(node: Node | undefined): readonly Decorator[]; function getIllegalDecorators(node: HasIllegalDecorators): readonly Decorator[] | undefined; @@ -5082,6 +5083,7 @@ declare namespace ts { function isComputedPropertyName(node: Node): node is ComputedPropertyName; function isTypeParameterDeclaration(node: Node): node is TypeParameterDeclaration; function isParameter(node: Node): node is ParameterDeclaration; + function isDecoratorOrAnnotation(node: Node): node is Decorator; function isDecorator(node: Node): node is Decorator; function isAnnotation(node: Node): node is Annotation; function isPropertySignature(node: Node): node is PropertySignature; -- Gitee