diff --git a/lib/tsc.js b/lib/tsc.js index 6b8181ca9e483b14535154afc5848ac9742a4f41..897f168632bebc6b4b1ae3e0e3efe87902431129 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 f59533126395a34a5cf54ddcb9bd6b1230d954c1..5100f28510655c60ee5945e1a17f42fe80035790 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 f6d24576d82d96fbab9b562528a665fda51fc13c..f9cc3adccbc9f24d2f64ea3d6dcc5a1fe9a60832 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 f1503e3e90ac77e64947ad5257b3f2d4f83bcef3..3ec453d033dfb4b2c8d0d9f84051e77e10bb90ff 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 fd13dea264ad5201e316114cf9ac8257b5d54e63..64cabdd208cde96120173441ab4526a8685aa91b 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 b3b12717bf1e73f4c8f72e68f250f7804f7591d8..d928e6c186cd6f24158d052310f0c48a821ad19e 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 b03a7329cf0277b6cb911e956066e4a488f25e99..712fa1a1927f89d3522633bd455e6108fc90edf4 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 2c6f5d45c5c63463034907982265d1dbbe88da86..6ceb5b441c080a3105a367bae88c069f270e378d 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 8ddf991d82482c29bc14b0ee134954dda788e953..c1969c3f89705a4aef70cb77b8a3d55375a8507d 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 0b0e89debdd293e8c7313b37ff258ea75f1839e3..c83ee0c64f04e20ef59d8852480dac9e7fe077d0 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 d1cdf297d4c75830465f0776e99e08a122f3346e..5747108f2f39d4ffc0e92b1f1b5c027cb9327a04 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 c6534d90f5faa713a1e6917ee9946cafc0f80e60..7a70d6a3731a56c8d7ed4d68ec9e4a27d3bad3fd 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 5f70a357c8cd9c722c648d8cfd042c14b0aedb6e..00e461e3e8600cc365fc4d04867e9986c677e760 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 7ac44217752ec632815b1cbf2b0f0e48ba142173..5ebf86e12786352809f328d445bc1e5bd93d5403 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 f6d24576d82d96fbab9b562528a665fda51fc13c..f9cc3adccbc9f24d2f64ea3d6dcc5a1fe9a60832 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 fd13dea264ad5201e316114cf9ac8257b5d54e63..64cabdd208cde96120173441ab4526a8685aa91b 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;