tsc-ts 0.0.10 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/tsc-ts.js +70 -1
- package/dist/api/compiler/ast-utilities.d.ts +19 -1
- package/dist/api/compiler/ast-utilities.js +180 -95
- package/dist/api/compiler/ast.d.ts +20 -15
- package/dist/api/compiler/ast.js +1023 -995
- package/dist/api/compiler/astnav.js +15 -15
- package/dist/api/compiler/binder-utilities.js +186 -186
- package/dist/api/compiler/binder.js +290 -263
- package/dist/api/compiler/character-codes.js +2 -2
- package/dist/api/compiler/checker-calls.js +173 -123
- package/dist/api/compiler/checker-classes.d.ts +14 -3
- package/dist/api/compiler/checker-classes.js +134 -90
- package/dist/api/compiler/checker-contextual.js +64 -61
- package/dist/api/compiler/checker-declaration-order.js +79 -79
- package/dist/api/compiler/checker-declarations.d.ts +1 -0
- package/dist/api/compiler/checker-declarations.js +160 -136
- package/dist/api/compiler/checker-declared-types.js +67 -65
- package/dist/api/compiler/checker-decorators.js +77 -77
- package/dist/api/compiler/checker-deprecation.d.ts +8 -3
- package/dist/api/compiler/checker-deprecation.js +76 -55
- package/dist/api/compiler/checker-destructuring.js +47 -45
- package/dist/api/compiler/checker-elaboration.js +24 -24
- package/dist/api/compiler/checker-emit-helpers.js +4 -4
- package/dist/api/compiler/checker-emit-resolver.d.ts +4 -2
- package/dist/api/compiler/checker-emit-resolver.js +25 -13
- package/dist/api/compiler/checker-evaluator.js +9 -9
- package/dist/api/compiler/checker-expressions.js +244 -211
- package/dist/api/compiler/checker-functions.js +113 -107
- package/dist/api/compiler/checker-generated-code.d.ts +0 -11
- package/dist/api/compiler/checker-generated-code.js +28 -52
- package/dist/api/compiler/checker-grammar.d.ts +1 -0
- package/dist/api/compiler/checker-grammar.js +469 -438
- package/dist/api/compiler/checker-heritage.js +91 -93
- package/dist/api/compiler/checker-inference.d.ts +77 -5
- package/dist/api/compiler/checker-inference.js +487 -113
- package/dist/api/compiler/checker-iteration.d.ts +0 -10
- package/dist/api/compiler/checker-iteration.js +35 -52
- package/dist/api/compiler/checker-javascript.js +14 -14
- package/dist/api/compiler/checker-jsdoc.d.ts +8 -10
- package/dist/api/compiler/checker-jsdoc.js +67 -58
- package/dist/api/compiler/checker-jsx.js +105 -88
- package/dist/api/compiler/checker-members.d.ts +9 -2
- package/dist/api/compiler/checker-members.js +210 -74
- package/dist/api/compiler/checker-modules.d.ts +15 -6
- package/dist/api/compiler/checker-modules.js +469 -309
- package/dist/api/compiler/checker-narrowing.js +273 -189
- package/dist/api/compiler/checker-object-literals.js +25 -22
- package/dist/api/compiler/checker-operators.js +126 -118
- package/dist/api/compiler/checker-overloads.js +27 -27
- package/dist/api/compiler/checker-property-access.js +59 -55
- package/dist/api/compiler/checker-services.d.ts +1 -0
- package/dist/api/compiler/checker-services.js +222 -210
- package/dist/api/compiler/checker-signatures.js +65 -49
- package/dist/api/compiler/checker-source-file.d.ts +5 -0
- package/dist/api/compiler/checker-source-file.js +154 -130
- package/dist/api/compiler/checker-statements.js +33 -32
- package/dist/api/compiler/checker-super.js +50 -50
- package/dist/api/compiler/checker-symbol-types.js +109 -93
- package/dist/api/compiler/checker-symbols.d.ts +13 -1
- package/dist/api/compiler/checker-symbols.js +264 -149
- package/dist/api/compiler/checker-type-factory.d.ts +5 -0
- package/dist/api/compiler/checker-type-factory.js +137 -34
- package/dist/api/compiler/checker-type-nodes.d.ts +1 -0
- package/dist/api/compiler/checker-type-nodes.js +179 -141
- package/dist/api/compiler/checker-type-operators.d.ts +2 -0
- package/dist/api/compiler/checker-type-operators.js +110 -63
- package/dist/api/compiler/checker-types.d.ts +80 -3
- package/dist/api/compiler/checker-types.js +121 -2
- package/dist/api/compiler/checker-unused.js +114 -118
- package/dist/api/compiler/checker-utilities.js +11 -11
- package/dist/api/compiler/checker.d.ts +93 -31
- package/dist/api/compiler/checker.js +143 -35
- package/dist/api/compiler/command-line.d.ts +1 -3
- package/dist/api/compiler/command-line.js +47 -44
- package/dist/api/compiler/compile-program.d.ts +19 -4
- package/dist/api/compiler/compile-program.js +45 -26
- package/dist/api/compiler/diagnostic-messages.d.ts +1849 -1774
- package/dist/api/compiler/diagnostic-messages.js +128 -122
- package/dist/api/compiler/diagnostics.js +7 -7
- package/dist/api/compiler/emitter.d.ts +7 -1
- package/dist/api/compiler/emitter.js +53 -11
- package/dist/api/compiler/file-include.d.ts +2 -1
- package/dist/api/compiler/file-include.js +11 -7
- package/dist/api/compiler/file-loader.d.ts +10 -0
- package/dist/api/compiler/file-loader.js +138 -41
- package/dist/api/compiler/instantiation.d.ts +7 -0
- package/dist/api/compiler/instantiation.js +101 -49
- package/dist/api/compiler/jsdoc.js +23 -23
- package/dist/api/compiler/link-tables.d.ts +48 -18
- package/dist/api/compiler/link-tables.js +80 -37
- package/dist/api/compiler/locales/cs-CZ.d.ts +1 -1
- package/dist/api/compiler/locales/cs-CZ.js +1 -1
- package/dist/api/compiler/locales/de-DE.d.ts +1 -1
- package/dist/api/compiler/locales/de-DE.js +1 -1
- package/dist/api/compiler/locales/es-ES.d.ts +1 -1
- package/dist/api/compiler/locales/es-ES.js +1 -1
- package/dist/api/compiler/locales/fr-FR.d.ts +1 -1
- package/dist/api/compiler/locales/fr-FR.js +1 -1
- package/dist/api/compiler/locales/it-IT.d.ts +1 -1
- package/dist/api/compiler/locales/it-IT.js +1 -1
- package/dist/api/compiler/locales/ja-JP.d.ts +1 -1
- package/dist/api/compiler/locales/ja-JP.js +1 -1
- package/dist/api/compiler/locales/ko-KR.d.ts +1 -1
- package/dist/api/compiler/locales/ko-KR.js +1 -1
- package/dist/api/compiler/locales/pl-PL.d.ts +1 -1
- package/dist/api/compiler/locales/pl-PL.js +1 -1
- package/dist/api/compiler/locales/pt-BR.d.ts +1 -1
- package/dist/api/compiler/locales/pt-BR.js +1 -1
- package/dist/api/compiler/locales/ru-RU.d.ts +1 -1
- package/dist/api/compiler/locales/ru-RU.js +1 -1
- package/dist/api/compiler/locales/tr-TR.d.ts +1 -1
- package/dist/api/compiler/locales/tr-TR.js +1 -1
- package/dist/api/compiler/locales/zh-CN.d.ts +1 -1
- package/dist/api/compiler/locales/zh-CN.js +1 -1
- package/dist/api/compiler/locales/zh-TW.d.ts +1 -1
- package/dist/api/compiler/locales/zh-TW.js +1 -1
- package/dist/api/compiler/module-resolution-types.js +6 -6
- package/dist/api/compiler/module-resolution.d.ts +10 -1
- package/dist/api/compiler/module-resolution.js +115 -84
- package/dist/api/compiler/module-specifiers.d.ts +15 -0
- package/dist/api/compiler/module-specifiers.js +24 -18
- package/dist/api/compiler/name-resolver.js +74 -65
- package/dist/api/compiler/node-builder-names.d.ts +11 -3
- package/dist/api/compiler/node-builder-names.js +210 -90
- package/dist/api/compiler/node-builder-pseudo.js +29 -31
- package/dist/api/compiler/node-builder-reuse.js +23 -22
- package/dist/api/compiler/node-builder.d.ts +18 -1
- package/dist/api/compiler/node-builder.js +191 -102
- package/dist/api/compiler/option-declarations.d.ts +2 -6
- package/dist/api/compiler/option-declarations.js +315 -375
- package/dist/api/compiler/options.d.ts +15 -33
- package/dist/api/compiler/options.js +21 -54
- package/dist/api/compiler/output-paths.d.ts +4 -1
- package/dist/api/compiler/output-paths.js +6 -11
- package/dist/api/compiler/package-json.d.ts +3 -3
- package/dist/api/compiler/package-json.js +11 -10
- package/dist/api/compiler/parser.d.ts +40 -19
- package/dist/api/compiler/parser.js +308 -216
- package/dist/api/compiler/path.d.ts +9 -0
- package/dist/api/compiler/path.js +20 -3
- package/dist/api/compiler/printer/emit-context.d.ts +3 -1
- package/dist/api/compiler/printer/emit-context.js +16 -1
- package/dist/api/compiler/printer/factory-base.d.ts +2 -2
- package/dist/api/compiler/printer/factory-base.js +7 -3
- package/dist/api/compiler/printer/factory.js +3 -1
- package/dist/api/compiler/printer/helpers.js +10 -1
- package/dist/api/compiler/printer/name-generator.d.ts +1 -1
- package/dist/api/compiler/printer/name-generator.js +35 -16
- package/dist/api/compiler/printer/printer.d.ts +1 -0
- package/dist/api/compiler/printer/printer.js +303 -281
- package/dist/api/compiler/printer/utilities.js +149 -147
- package/dist/api/compiler/program-checker.d.ts +8 -2
- package/dist/api/compiler/program-checker.js +84 -34
- package/dist/api/compiler/program-utilities.d.ts +3 -1
- package/dist/api/compiler/program-utilities.js +28 -15
- package/dist/api/compiler/program.d.ts +2 -0
- package/dist/api/compiler/program.js +69 -57
- package/dist/api/compiler/pseudo-bigint.d.ts +2 -0
- package/dist/api/compiler/pseudo-bigint.js +18 -0
- package/dist/api/compiler/regexp-checker.d.ts +1 -1
- package/dist/api/compiler/regexp-checker.js +93 -76
- package/dist/api/compiler/relations.d.ts +27 -4
- package/dist/api/compiler/relations.js +337 -180
- package/dist/api/compiler/reparser.js +60 -56
- package/dist/api/compiler/scanner.d.ts +19 -2
- package/dist/api/compiler/scanner.js +123 -108
- package/dist/api/compiler/shared-results.d.ts +463 -0
- package/dist/api/compiler/shared-results.js +2128 -0
- package/dist/api/compiler/sourcemap.js +2 -2
- package/dist/api/compiler/symbol-accessibility.js +87 -74
- package/dist/api/compiler/symbol.d.ts +22 -13
- package/dist/api/compiler/symbol.js +15 -1
- package/dist/api/compiler/syntax-kind.d.ts +198 -197
- package/dist/api/compiler/transformers/alias-references.js +247 -139
- package/dist/api/compiler/transformers/async-utilities.js +25 -25
- package/dist/api/compiler/transformers/async.d.ts +0 -1
- package/dist/api/compiler/transformers/async.js +64 -77
- package/dist/api/compiler/transformers/class-fields.d.ts +1 -0
- package/dist/api/compiler/transformers/class-fields.js +81 -78
- package/dist/api/compiler/transformers/commonjs-module.js +18 -15
- package/dist/api/compiler/transformers/const-enum-inliner.js +1 -1
- package/dist/api/compiler/transformers/declarations-diagnostics.js +247 -244
- package/dist/api/compiler/transformers/declarations-pseudo.js +100 -100
- package/dist/api/compiler/transformers/declarations-resolver.d.ts +0 -3
- package/dist/api/compiler/transformers/declarations-syntactic.d.ts +1 -2
- package/dist/api/compiler/transformers/declarations-syntactic.js +134 -156
- package/dist/api/compiler/transformers/declarations-tracker.js +18 -18
- package/dist/api/compiler/transformers/declarations.d.ts +4 -1
- package/dist/api/compiler/transformers/declarations.js +305 -238
- package/dist/api/compiler/transformers/decorator-metadata.d.ts +1 -1
- package/dist/api/compiler/transformers/decorator-metadata.js +53 -45
- package/dist/api/compiler/transformers/decorator-utilities.js +24 -24
- package/dist/api/compiler/transformers/destructuring.js +19 -18
- package/dist/api/compiler/transformers/emit-resolver.js +1 -1
- package/dist/api/compiler/transformers/es-decorators.js +55 -55
- package/dist/api/compiler/transformers/external-module-info.js +3 -3
- package/dist/api/compiler/transformers/for-await.js +25 -25
- package/dist/api/compiler/transformers/import-elision.js +14 -14
- package/dist/api/compiler/transformers/jsx.js +12 -12
- package/dist/api/compiler/transformers/legacy-decorators.js +17 -17
- package/dist/api/compiler/transformers/module.js +8 -8
- package/dist/api/compiler/transformers/named-evaluation.js +4 -4
- package/dist/api/compiler/transformers/object-rest-spread.js +20 -20
- package/dist/api/compiler/transformers/optional-chain.js +10 -10
- package/dist/api/compiler/transformers/reference-resolver.d.ts +12 -1
- package/dist/api/compiler/transformers/reference-resolver.js +131 -69
- package/dist/api/compiler/transformers/runtime-syntax.js +35 -31
- package/dist/api/compiler/transformers/subtree-facts.js +47 -47
- package/dist/api/compiler/transformers/syntax-facts.js +56 -58
- package/dist/api/compiler/transformers/type-eraser.js +73 -66
- package/dist/api/compiler/transformers/type-serialization.js +24 -24
- package/dist/api/compiler/transformers/using.js +12 -12
- package/dist/api/compiler/transformers/utilities.js +77 -77
- package/dist/api/compiler/transformers/visitor-base.js +172 -172
- package/dist/api/compiler/transformers/visitor-hooks.js +6 -2
- package/dist/api/compiler/tsconfig.d.ts +10 -2
- package/dist/api/compiler/tsconfig.js +136 -48
- package/dist/api/compiler/type-printer.js +40 -3
- package/dist/api/compiler/types.d.ts +2 -1
- package/dist/api/library/ast.generated.d.ts +42 -39
- package/dist/api/library/ast.generated.js +1 -1
- package/dist/api/library/compiler-options.generated.d.ts +111 -100
- package/dist/api/library/compiler-options.generated.js +1 -1
- package/dist/api/library/disk.js +12 -1
- package/dist/api/library/enums.generated.d.ts +206 -206
- package/dist/api/library/enums.generated.js +206 -206
- package/dist/api/library/nodes.js +26 -26
- package/package.json +9 -9
- package/src/compiler/ast-utilities.ts +99 -7
- package/src/compiler/ast.ts +55 -26
- package/src/compiler/binder.ts +39 -4
- package/src/compiler/character-codes.ts +2 -2
- package/src/compiler/checker-calls.ts +76 -8
- package/src/compiler/checker-classes.ts +78 -24
- package/src/compiler/checker-contextual.ts +6 -1
- package/src/compiler/checker-declarations.ts +31 -4
- package/src/compiler/checker-declared-types.ts +8 -5
- package/src/compiler/checker-decorators.ts +1 -1
- package/src/compiler/checker-deprecation.ts +29 -8
- package/src/compiler/checker-destructuring.ts +10 -3
- package/src/compiler/checker-emit-helpers.ts +1 -0
- package/src/compiler/checker-emit-resolver.ts +16 -6
- package/src/compiler/checker-expressions.ts +79 -46
- package/src/compiler/checker-functions.ts +21 -6
- package/src/compiler/checker-generated-code.ts +2 -22
- package/src/compiler/checker-grammar.ts +133 -60
- package/src/compiler/checker-heritage.ts +22 -21
- package/src/compiler/checker-inference.ts +514 -87
- package/src/compiler/checker-iteration.ts +18 -31
- package/src/compiler/checker-javascript.ts +1 -1
- package/src/compiler/checker-jsdoc.ts +50 -27
- package/src/compiler/checker-jsx.ts +26 -4
- package/src/compiler/checker-members.ts +197 -55
- package/src/compiler/checker-modules.ts +332 -65
- package/src/compiler/checker-narrowing.ts +98 -19
- package/src/compiler/checker-object-literals.ts +3 -0
- package/src/compiler/checker-operators.ts +11 -4
- package/src/compiler/checker-property-access.ts +7 -2
- package/src/compiler/checker-services.ts +39 -12
- package/src/compiler/checker-signatures.ts +15 -1
- package/src/compiler/checker-source-file.ts +39 -13
- package/src/compiler/checker-statements.ts +3 -2
- package/src/compiler/checker-symbol-types.ts +29 -6
- package/src/compiler/checker-symbols.ts +158 -15
- package/src/compiler/checker-type-factory.ts +120 -21
- package/src/compiler/checker-type-nodes.ts +46 -3
- package/src/compiler/checker-type-operators.ts +83 -26
- package/src/compiler/checker-types.ts +147 -4
- package/src/compiler/checker-unused.ts +9 -14
- package/src/compiler/checker.ts +168 -41
- package/src/compiler/command-line.ts +28 -28
- package/src/compiler/compile-program.ts +51 -25
- package/src/compiler/decoder.ts +13 -4
- package/src/compiler/diagnostic-messages.ts +1973 -1892
- package/src/compiler/emitter.ts +57 -8
- package/src/compiler/encoder.ts +23 -8
- package/src/compiler/file-include.ts +9 -3
- package/src/compiler/file-loader.ts +139 -32
- package/src/compiler/help.ts +10 -14
- package/src/compiler/incremental.ts +86 -18
- package/src/compiler/init.ts +2 -7
- package/src/compiler/instantiation.ts +77 -22
- package/src/compiler/jsdoc.ts +3 -1
- package/src/compiler/link-tables.ts +82 -37
- package/src/compiler/locales/cs-CZ.ts +1 -1
- package/src/compiler/locales/de-DE.ts +1 -1
- package/src/compiler/locales/es-ES.ts +1 -1
- package/src/compiler/locales/fr-FR.ts +1 -1
- package/src/compiler/locales/it-IT.ts +1 -1
- package/src/compiler/locales/ja-JP.ts +1 -1
- package/src/compiler/locales/ko-KR.ts +1 -1
- package/src/compiler/locales/pl-PL.ts +1 -1
- package/src/compiler/locales/pt-BR.ts +1 -1
- package/src/compiler/locales/ru-RU.ts +1 -1
- package/src/compiler/locales/tr-TR.ts +1 -1
- package/src/compiler/locales/zh-CN.ts +1 -1
- package/src/compiler/locales/zh-TW.ts +1 -1
- package/src/compiler/module-resolution.ts +44 -8
- package/src/compiler/module-specifiers.ts +62 -20
- package/src/compiler/name-resolver.ts +9 -1
- package/src/compiler/node-builder-names.ts +236 -54
- package/src/compiler/node-builder-pseudo.ts +4 -7
- package/src/compiler/node-builder-reuse.ts +5 -4
- package/src/compiler/node-builder.ts +130 -31
- package/src/compiler/option-declarations.ts +33 -103
- package/src/compiler/options.ts +23 -62
- package/src/compiler/output-paths.ts +5 -18
- package/src/compiler/package-entrypoints.ts +345 -0
- package/src/compiler/package-json.ts +4 -4
- package/src/compiler/parallel-check.ts +197 -8
- package/src/compiler/parallel-emit.ts +1 -1
- package/src/compiler/parser.ts +156 -39
- package/src/compiler/path.ts +22 -2
- package/src/compiler/printer/emit-context.ts +16 -0
- package/src/compiler/printer/factory-base.ts +10 -3
- package/src/compiler/printer/factory.ts +4 -1
- package/src/compiler/printer/helpers.ts +10 -1
- package/src/compiler/printer/name-generator.ts +24 -2
- package/src/compiler/printer/printer.ts +35 -14
- package/src/compiler/printer/utilities.ts +8 -2
- package/src/compiler/program-checker.ts +53 -5
- package/src/compiler/program-utilities.ts +23 -10
- package/src/compiler/program.ts +13 -1
- package/src/compiler/pseudo-bigint.ts +17 -0
- package/src/compiler/regexp-checker.ts +63 -30
- package/src/compiler/relations.ts +233 -77
- package/src/compiler/reparser.ts +7 -2
- package/src/compiler/scanner.ts +109 -79
- package/src/compiler/shared-results.ts +2414 -0
- package/src/compiler/show-config.ts +18 -1
- package/src/compiler/sourcemap.ts +2 -2
- package/src/compiler/symbol-accessibility.ts +26 -3
- package/src/compiler/symbol.ts +31 -14
- package/src/compiler/syntax-kind.ts +188 -187
- package/src/compiler/thread-entry.ts +19 -2
- package/src/compiler/transformers/alias-references.ts +123 -4
- package/src/compiler/transformers/async.ts +2 -17
- package/src/compiler/transformers/class-fields.ts +13 -12
- package/src/compiler/transformers/commonjs-module.ts +11 -7
- package/src/compiler/transformers/declarations-diagnostics.ts +5 -3
- package/src/compiler/transformers/declarations-pseudo.ts +2 -4
- package/src/compiler/transformers/declarations-resolver.ts +0 -3
- package/src/compiler/transformers/declarations-syntactic.ts +1 -21
- package/src/compiler/transformers/declarations.ts +134 -48
- package/src/compiler/transformers/decorator-metadata.ts +9 -1
- package/src/compiler/transformers/destructuring.ts +4 -3
- package/src/compiler/transformers/external-module-info.ts +1 -1
- package/src/compiler/transformers/jsx.ts +2 -1
- package/src/compiler/transformers/reference-resolver.ts +83 -19
- package/src/compiler/transformers/runtime-syntax.ts +6 -1
- package/src/compiler/transformers/syntax-facts.ts +2 -7
- package/src/compiler/transformers/type-eraser.ts +10 -1
- package/src/compiler/transformers/type-serialization.ts +3 -2
- package/src/compiler/transformers/visitor-base.ts +2 -1
- package/src/compiler/transformers/visitor-hooks.ts +9 -4
- package/src/compiler/tsc-build.ts +3 -0
- package/src/compiler/tsc-cli.ts +2 -0
- package/src/compiler/tsc-compile.ts +7 -2
- package/src/compiler/tsc-watch.ts +74 -45
- package/src/compiler/tsconfig.ts +176 -19
- package/src/compiler/type-printer.ts +36 -2
- package/src/compiler/types.ts +2 -1
- package/src/library/ast.generated.ts +57 -41
- package/src/library/compiler-options.generated.ts +117 -103
- package/src/library/disk.ts +10 -1
- package/src/library/enums.generated.ts +196 -196
|
@@ -31,12 +31,12 @@ export function checkDecorators(c, node) {
|
|
|
31
31
|
checkDecoratorEmitHelpers(c, node);
|
|
32
32
|
checkDecoratorMetadataImports(c, node);
|
|
33
33
|
for (const modifier of getModifiers(node).nodes)
|
|
34
|
-
if (modifier.kind ===
|
|
34
|
+
if (modifier.kind === 172 /* SyntaxKind.Decorator */)
|
|
35
35
|
checkDecorator(c, modifier);
|
|
36
36
|
}
|
|
37
37
|
function firstDecorator(node) {
|
|
38
38
|
for (const modifier of getModifiers(node).nodes)
|
|
39
|
-
if (modifier.kind ===
|
|
39
|
+
if (modifier.kind === 172 /* SyntaxKind.Decorator */)
|
|
40
40
|
return modifier;
|
|
41
41
|
return undefined;
|
|
42
42
|
}
|
|
@@ -47,24 +47,24 @@ function checkDecoratorEmitHelpers(c, node) {
|
|
|
47
47
|
return;
|
|
48
48
|
if (c.legacyDecorators) {
|
|
49
49
|
checkExternalEmitHelpers(c, decorator, 2 /* ExternalEmitHelpers.Decorate */);
|
|
50
|
-
if (node.kind ===
|
|
50
|
+
if (node.kind === 171 /* SyntaxKind.Parameter */)
|
|
51
51
|
checkExternalEmitHelpers(c, decorator, 8 /* ExternalEmitHelpers.Param */);
|
|
52
52
|
}
|
|
53
53
|
else if (c.languageVersion < ScriptTarget.ESNext) {
|
|
54
54
|
checkExternalEmitHelpers(c, decorator, 2 /* ExternalEmitHelpers.ESDecorateAndRunInitializers */);
|
|
55
|
-
if (node.kind ===
|
|
55
|
+
if (node.kind === 265 /* SyntaxKind.ClassDeclaration */) {
|
|
56
56
|
if (getName(node) === undefined || getFirstTransformableStaticClassElement(c, node) !== undefined)
|
|
57
57
|
checkExternalEmitHelpers(c, decorator, 65536 /* ExternalEmitHelpers.SetFunctionName */);
|
|
58
58
|
}
|
|
59
|
-
else if (node.kind !==
|
|
59
|
+
else if (node.kind !== 233 /* SyntaxKind.ClassExpression */) {
|
|
60
60
|
const name = getName(node);
|
|
61
61
|
if (name.kind === 80 /* SyntaxKind.PrivateIdentifier */ &&
|
|
62
|
-
(node.kind ===
|
|
63
|
-
node.kind ===
|
|
64
|
-
node.kind ===
|
|
62
|
+
(node.kind === 176 /* SyntaxKind.MethodDeclaration */ ||
|
|
63
|
+
node.kind === 179 /* SyntaxKind.GetAccessor */ ||
|
|
64
|
+
node.kind === 180 /* SyntaxKind.SetAccessor */ ||
|
|
65
65
|
isAutoAccessorPropertyDeclaration(node)))
|
|
66
66
|
checkExternalEmitHelpers(c, decorator, 65536 /* ExternalEmitHelpers.SetFunctionName */);
|
|
67
|
-
if (name.kind ===
|
|
67
|
+
if (name.kind === 169 /* SyntaxKind.ComputedPropertyName */)
|
|
68
68
|
checkExternalEmitHelpers(c, decorator, 131072 /* ExternalEmitHelpers.PropKey */);
|
|
69
69
|
}
|
|
70
70
|
}
|
|
@@ -87,12 +87,12 @@ export function getFirstTransformableStaticClassElement(c, node) {
|
|
|
87
87
|
classElementOrClassElementParameterIsDecorated(false, member, node))
|
|
88
88
|
return firstDecorator(node) ?? node;
|
|
89
89
|
if (willTransformPrivateElementsOrClassStaticBlocks) {
|
|
90
|
-
if (member.kind ===
|
|
90
|
+
if (member.kind === 177 /* SyntaxKind.ClassStaticBlockDeclaration */)
|
|
91
91
|
return member;
|
|
92
92
|
if (isStatic(member) &&
|
|
93
93
|
(isPrivateIdentifierClassElementDeclaration(member) ||
|
|
94
94
|
(willTransformInitializers &&
|
|
95
|
-
member.kind ===
|
|
95
|
+
member.kind === 174 /* SyntaxKind.PropertyDeclaration */ &&
|
|
96
96
|
getInitializer(member) !== undefined)))
|
|
97
97
|
return member;
|
|
98
98
|
}
|
|
@@ -108,35 +108,35 @@ function checkDecoratorMetadataImports(c, node) {
|
|
|
108
108
|
const options = c.compilerOptions;
|
|
109
109
|
if (options.emitDecoratorMetadata !== true || options.verbatimModuleSyntax === true)
|
|
110
110
|
return;
|
|
111
|
-
if ((node.flags & 8388608 /* NodeFlags.Ambient */) !== 0 && node.kind !==
|
|
111
|
+
if ((node.flags & 8388608 /* NodeFlags.Ambient */) !== 0 && node.kind !== 174 /* SyntaxKind.PropertyDeclaration */)
|
|
112
112
|
return;
|
|
113
113
|
checkExternalEmitHelpers(c, firstDecorator(node), 4 /* ExternalEmitHelpers.Metadata */);
|
|
114
114
|
if (!c.isolatedModules || getEmitModuleKind(options) < ModuleKind.ES2015)
|
|
115
115
|
return;
|
|
116
116
|
switch (node.kind) {
|
|
117
|
-
case
|
|
117
|
+
case 265 /* SyntaxKind.ClassDeclaration */: {
|
|
118
118
|
const constructor = getFirstConstructorWithBody(node);
|
|
119
119
|
if (constructor !== undefined)
|
|
120
120
|
for (const p of getParameters(constructor).nodes)
|
|
121
121
|
checkMetadataTypeImport(c, parameterTypeNode(p));
|
|
122
122
|
break;
|
|
123
123
|
}
|
|
124
|
-
case
|
|
125
|
-
case
|
|
126
|
-
const otherKind = node.kind ===
|
|
124
|
+
case 179 /* SyntaxKind.GetAccessor */:
|
|
125
|
+
case 180 /* SyntaxKind.SetAccessor */: {
|
|
126
|
+
const otherKind = node.kind === 179 /* SyntaxKind.GetAccessor */ ? 180 /* SyntaxKind.SetAccessor */ : 179 /* SyntaxKind.GetAccessor */;
|
|
127
127
|
const otherAccessor = getDeclarationOfKind(getSymbolOfDeclaration(c, node), otherKind);
|
|
128
128
|
checkMetadataTypeImport(c, getAnnotatedAccessorTypeNode(node) ?? getAnnotatedAccessorTypeNode(otherAccessor));
|
|
129
129
|
break;
|
|
130
130
|
}
|
|
131
|
-
case
|
|
131
|
+
case 176 /* SyntaxKind.MethodDeclaration */:
|
|
132
132
|
for (const p of getParameters(node).nodes)
|
|
133
133
|
checkMetadataTypeImport(c, parameterTypeNode(p));
|
|
134
134
|
checkMetadataTypeImport(c, getType(node));
|
|
135
135
|
break;
|
|
136
|
-
case
|
|
136
|
+
case 174 /* SyntaxKind.PropertyDeclaration */:
|
|
137
137
|
checkMetadataTypeImport(c, getType(node));
|
|
138
138
|
break;
|
|
139
|
-
case
|
|
139
|
+
case 171 /* SyntaxKind.Parameter */: {
|
|
140
140
|
checkMetadataTypeImport(c, parameterTypeNode(node));
|
|
141
141
|
const signature = node.parent;
|
|
142
142
|
for (const p of getParameters(signature).nodes)
|
|
@@ -153,7 +153,7 @@ function parameterTypeNode(node) {
|
|
|
153
153
|
}
|
|
154
154
|
function checkMetadataTypeImport(c, typeNode) {
|
|
155
155
|
const typeName = entityNameForDecoratorMetadata(c, typeNode);
|
|
156
|
-
if (typeName === undefined || (typeName.kind !== 79 /* SyntaxKind.Identifier */ && typeName.kind !==
|
|
156
|
+
if (typeName === undefined || (typeName.kind !== 79 /* SyntaxKind.Identifier */ && typeName.kind !== 168 /* SyntaxKind.QualifiedName */))
|
|
157
157
|
return;
|
|
158
158
|
const rootName = getFirstIdentifier(typeName);
|
|
159
159
|
const meaning = (typeName.kind === 79 /* SyntaxKind.Identifier */ ? 788968 /* SymbolFlags.Type */ : 1920 /* SymbolFlags.Namespace */) | 2097152 /* SymbolFlags.Alias */;
|
|
@@ -172,19 +172,19 @@ function entityNameForDecoratorMetadata(c, node) {
|
|
|
172
172
|
if (node === undefined)
|
|
173
173
|
return undefined;
|
|
174
174
|
switch (node.kind) {
|
|
175
|
-
case
|
|
175
|
+
case 195 /* SyntaxKind.IntersectionType */:
|
|
176
176
|
return entityNameForDecoratorMetadataFromTypes(c, node.types.nodes);
|
|
177
|
-
case
|
|
177
|
+
case 194 /* SyntaxKind.UnionType */:
|
|
178
178
|
return entityNameForDecoratorMetadataFromTypes(c, node.types.nodes);
|
|
179
|
-
case
|
|
179
|
+
case 196 /* SyntaxKind.ConditionalType */:
|
|
180
180
|
return entityNameForDecoratorMetadataFromTypes(c, [
|
|
181
181
|
node.trueType,
|
|
182
182
|
node.falseType,
|
|
183
183
|
]);
|
|
184
|
-
case
|
|
185
|
-
case
|
|
184
|
+
case 198 /* SyntaxKind.ParenthesizedType */:
|
|
185
|
+
case 204 /* SyntaxKind.NamedTupleMember */:
|
|
186
186
|
return entityNameForDecoratorMetadata(c, getType(node));
|
|
187
|
-
case
|
|
187
|
+
case 185 /* SyntaxKind.TypeReference */:
|
|
188
188
|
return node.typeName;
|
|
189
189
|
}
|
|
190
190
|
return undefined;
|
|
@@ -196,7 +196,7 @@ function entityNameForDecoratorMetadataFromTypes(c, types) {
|
|
|
196
196
|
if (typeNode.kind === 146 /* SyntaxKind.NeverKeyword */)
|
|
197
197
|
continue;
|
|
198
198
|
if (!c.strictNullChecks &&
|
|
199
|
-
((typeNode.kind ===
|
|
199
|
+
((typeNode.kind === 203 /* SyntaxKind.LiteralType */ &&
|
|
200
200
|
typeNode.literal.kind === 105 /* SyntaxKind.NullKeyword */) ||
|
|
201
201
|
typeNode.kind === 157 /* SyntaxKind.UndefinedKeyword */))
|
|
202
202
|
continue;
|
|
@@ -226,7 +226,7 @@ function checkDecorator(c, node) {
|
|
|
226
226
|
if (expectedReturnType === undefined)
|
|
227
227
|
return;
|
|
228
228
|
const parent = node.parent;
|
|
229
|
-
const headMessage = parent.kind ===
|
|
229
|
+
const headMessage = parent.kind === 171 /* SyntaxKind.Parameter */ || (parent.kind === 174 /* SyntaxKind.PropertyDeclaration */ && c.legacyDecorators)
|
|
230
230
|
? 220 /* Diagnostics.Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any */
|
|
231
231
|
: 219 /* Diagnostics.Decorator_function_return_type_0_is_not_assignable_to_type_1 */;
|
|
232
232
|
checkTypeAssignableTo(c, returnType, expectedReturnType, node.expression, headMessage);
|
|
@@ -236,7 +236,7 @@ export function hasDecorators(node) {
|
|
|
236
236
|
if (modifiers === undefined)
|
|
237
237
|
return false;
|
|
238
238
|
for (const modifier of modifiers.nodes)
|
|
239
|
-
if (modifier.kind ===
|
|
239
|
+
if (modifier.kind === 172 /* SyntaxKind.Decorator */)
|
|
240
240
|
return true;
|
|
241
241
|
return false;
|
|
242
242
|
}
|
|
@@ -247,30 +247,30 @@ export function nodeCanBeDecorated(legacy, node, parent, grandparent) {
|
|
|
247
247
|
if (legacy && name !== undefined && name.kind === 80 /* SyntaxKind.PrivateIdentifier */)
|
|
248
248
|
return false;
|
|
249
249
|
switch (node.kind) {
|
|
250
|
-
case
|
|
250
|
+
case 265 /* SyntaxKind.ClassDeclaration */:
|
|
251
251
|
return true;
|
|
252
|
-
case
|
|
252
|
+
case 233 /* SyntaxKind.ClassExpression */:
|
|
253
253
|
return !legacy;
|
|
254
|
-
case
|
|
254
|
+
case 174 /* SyntaxKind.PropertyDeclaration */:
|
|
255
255
|
return (parent !== undefined &&
|
|
256
256
|
(legacy
|
|
257
|
-
? parent.kind ===
|
|
257
|
+
? parent.kind === 265 /* SyntaxKind.ClassDeclaration */
|
|
258
258
|
: isClassLike(parent) && !hasSyntacticModifier(node, 64 /* ModifierFlags.Abstract */ | 128 /* ModifierFlags.Ambient */)));
|
|
259
|
-
case
|
|
260
|
-
case
|
|
261
|
-
case
|
|
259
|
+
case 179 /* SyntaxKind.GetAccessor */:
|
|
260
|
+
case 180 /* SyntaxKind.SetAccessor */:
|
|
261
|
+
case 176 /* SyntaxKind.MethodDeclaration */:
|
|
262
262
|
return (parent !== undefined &&
|
|
263
263
|
getBody(node) !== undefined &&
|
|
264
|
-
(legacy ? parent.kind ===
|
|
265
|
-
case
|
|
264
|
+
(legacy ? parent.kind === 265 /* SyntaxKind.ClassDeclaration */ : isClassLike(parent)));
|
|
265
|
+
case 171 /* SyntaxKind.Parameter */:
|
|
266
266
|
if (!legacy || parent === undefined || getBody(parent) === undefined)
|
|
267
267
|
return false;
|
|
268
|
-
return ((parent.kind ===
|
|
269
|
-
parent.kind ===
|
|
270
|
-
parent.kind ===
|
|
268
|
+
return ((parent.kind === 178 /* SyntaxKind.Constructor */ ||
|
|
269
|
+
parent.kind === 176 /* SyntaxKind.MethodDeclaration */ ||
|
|
270
|
+
parent.kind === 180 /* SyntaxKind.SetAccessor */) &&
|
|
271
271
|
getThisParameter(parent) !== node &&
|
|
272
272
|
grandparent !== undefined &&
|
|
273
|
-
grandparent.kind ===
|
|
273
|
+
grandparent.kind === 265 /* SyntaxKind.ClassDeclaration */);
|
|
274
274
|
}
|
|
275
275
|
return false;
|
|
276
276
|
}
|
|
@@ -292,12 +292,12 @@ export function getUncalledDecoratorText(node) {
|
|
|
292
292
|
/** The head message of errors resolving a decorator as a call. */
|
|
293
293
|
export function getDiagnosticHeadMessageForDecoratorResolution(node) {
|
|
294
294
|
switch (node.parent.kind) {
|
|
295
|
-
case
|
|
296
|
-
case
|
|
295
|
+
case 265 /* SyntaxKind.ClassDeclaration */:
|
|
296
|
+
case 233 /* SyntaxKind.ClassExpression */:
|
|
297
297
|
return 188 /* Diagnostics.Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression */;
|
|
298
|
-
case
|
|
298
|
+
case 171 /* SyntaxKind.Parameter */:
|
|
299
299
|
return 189 /* Diagnostics.Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression */;
|
|
300
|
-
case
|
|
300
|
+
case 174 /* SyntaxKind.PropertyDeclaration */:
|
|
301
301
|
return 190 /* Diagnostics.Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression */;
|
|
302
302
|
}
|
|
303
303
|
return 191 /* Diagnostics.Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression */;
|
|
@@ -307,16 +307,16 @@ export function getDecoratorArgumentCount(c, node, signature) {
|
|
|
307
307
|
if (!c.legacyDecorators)
|
|
308
308
|
return Math.min(Math.max(getParameterCount(c, signature), 1), 2);
|
|
309
309
|
switch (node.parent.kind) {
|
|
310
|
-
case
|
|
311
|
-
case
|
|
310
|
+
case 265 /* SyntaxKind.ClassDeclaration */:
|
|
311
|
+
case 233 /* SyntaxKind.ClassExpression */:
|
|
312
312
|
return 1;
|
|
313
|
-
case
|
|
313
|
+
case 174 /* SyntaxKind.PropertyDeclaration */:
|
|
314
314
|
return hasSyntacticModifier(node.parent, 512 /* ModifierFlags.Accessor */) ? 3 : 2;
|
|
315
|
-
case
|
|
316
|
-
case
|
|
317
|
-
case
|
|
315
|
+
case 176 /* SyntaxKind.MethodDeclaration */:
|
|
316
|
+
case 179 /* SyntaxKind.GetAccessor */:
|
|
317
|
+
case 180 /* SyntaxKind.SetAccessor */:
|
|
318
318
|
// Decorators with only two parameters get only two arguments.
|
|
319
|
-
return signature
|
|
319
|
+
return getParameterCount(c, signature) <= 2 ? 2 : 3;
|
|
320
320
|
}
|
|
321
321
|
return 3;
|
|
322
322
|
}
|
|
@@ -347,17 +347,17 @@ export function getDecoratorCallSignature(c, decorator) {
|
|
|
347
347
|
}
|
|
348
348
|
function getLegacyDecoratorCallSignature(c, node) {
|
|
349
349
|
switch (node.kind) {
|
|
350
|
-
case
|
|
351
|
-
case
|
|
350
|
+
case 265 /* SyntaxKind.ClassDeclaration */:
|
|
351
|
+
case 233 /* SyntaxKind.ClassExpression */: {
|
|
352
352
|
// The target of a class decorator is the constructor side of the class.
|
|
353
353
|
const targetType = getTypeOfSymbol(c, getSymbolOfDeclaration(c, node));
|
|
354
354
|
const targetParam = newParameter(c, 'target', targetType);
|
|
355
355
|
return newCallSignature(c, [targetParam], getUnionType(c, [targetType, c.voidType]));
|
|
356
356
|
}
|
|
357
|
-
case
|
|
357
|
+
case 171 /* SyntaxKind.Parameter */: {
|
|
358
358
|
const fn = node.parent;
|
|
359
|
-
if (fn.kind !==
|
|
360
|
-
!(fn.kind ===
|
|
359
|
+
if (fn.kind !== 178 /* SyntaxKind.Constructor */ &&
|
|
360
|
+
!(fn.kind === 176 /* SyntaxKind.MethodDeclaration */ || (fn.kind === 180 /* SyntaxKind.SetAccessor */ && isClassLike(fn.parent))))
|
|
361
361
|
return undefined;
|
|
362
362
|
const thisParameter = getThisParameter(fn);
|
|
363
363
|
if (thisParameter === node)
|
|
@@ -366,7 +366,7 @@ function getLegacyDecoratorCallSignature(c, node) {
|
|
|
366
366
|
// A parameter decorator gets the target, the property key and the parameter index.
|
|
367
367
|
let targetType;
|
|
368
368
|
let keyType;
|
|
369
|
-
if (fn.kind ===
|
|
369
|
+
if (fn.kind === 178 /* SyntaxKind.Constructor */) {
|
|
370
370
|
targetType = getTypeOfSymbol(c, getSymbolOfDeclaration(c, fn.parent));
|
|
371
371
|
keyType = c.undefinedType;
|
|
372
372
|
}
|
|
@@ -381,16 +381,16 @@ function getLegacyDecoratorCallSignature(c, node) {
|
|
|
381
381
|
newParameter(c, 'parameterIndex', indexType),
|
|
382
382
|
], c.voidType);
|
|
383
383
|
}
|
|
384
|
-
case
|
|
385
|
-
case
|
|
386
|
-
case
|
|
387
|
-
case
|
|
384
|
+
case 176 /* SyntaxKind.MethodDeclaration */:
|
|
385
|
+
case 179 /* SyntaxKind.GetAccessor */:
|
|
386
|
+
case 180 /* SyntaxKind.SetAccessor */:
|
|
387
|
+
case 174 /* SyntaxKind.PropertyDeclaration */: {
|
|
388
388
|
if (!isClassLike(node.parent))
|
|
389
389
|
return undefined;
|
|
390
390
|
// Method and accessor decorators get two or three arguments, property decorators two.
|
|
391
391
|
const targetParam = newParameter(c, 'target', getParentTypeOfClassElement(c, node));
|
|
392
392
|
const keyParam = newParameter(c, 'propertyKey', getClassElementPropertyKeyType(c, node));
|
|
393
|
-
const isProperty = node.kind ===
|
|
393
|
+
const isProperty = node.kind === 174 /* SyntaxKind.PropertyDeclaration */;
|
|
394
394
|
const returnType = isProperty ? c.voidType : newTypedPropertyDescriptorType(c, getTypeOfDeclaration(c, node));
|
|
395
395
|
if (!isProperty || hasSyntacticModifier(node, 512 /* ModifierFlags.Accessor */)) {
|
|
396
396
|
const descriptorType = newTypedPropertyDescriptorType(c, getTypeOfDeclaration(c, node));
|
|
@@ -407,31 +407,31 @@ function getLegacyDecoratorCallSignature(c, node) {
|
|
|
407
407
|
// details of the decorated element. It may return a replacement for the target.
|
|
408
408
|
function getESDecoratorCallSignature(c, node) {
|
|
409
409
|
switch (node.kind) {
|
|
410
|
-
case
|
|
411
|
-
case
|
|
410
|
+
case 265 /* SyntaxKind.ClassDeclaration */:
|
|
411
|
+
case 233 /* SyntaxKind.ClassExpression */: {
|
|
412
412
|
const targetType = getTypeOfSymbol(c, getSymbolOfDeclaration(c, node));
|
|
413
413
|
const contextType = tryCreateTypeReference(c, getGlobalClassDecoratorContextType(c), [targetType]);
|
|
414
414
|
return newESDecoratorCallSignature(c, targetType, contextType, targetType);
|
|
415
415
|
}
|
|
416
|
-
case
|
|
417
|
-
case
|
|
418
|
-
case
|
|
416
|
+
case 176 /* SyntaxKind.MethodDeclaration */:
|
|
417
|
+
case 179 /* SyntaxKind.GetAccessor */:
|
|
418
|
+
case 180 /* SyntaxKind.SetAccessor */: {
|
|
419
419
|
if (!isClassLike(node.parent))
|
|
420
420
|
return undefined;
|
|
421
|
-
const valueType = node.kind ===
|
|
421
|
+
const valueType = node.kind === 176 /* SyntaxKind.MethodDeclaration */
|
|
422
422
|
? getOrCreateTypeFromSignature(c, getSignatureFromDeclaration(c, node))
|
|
423
423
|
: getTypeOfDeclaration(c, node);
|
|
424
424
|
const thisType = getThisTypeOfClassElement(c, node);
|
|
425
425
|
// Getters are decorated as `() => value` and setters as `(value) => void`.
|
|
426
|
-
const targetType = node.kind ===
|
|
426
|
+
const targetType = node.kind === 179 /* SyntaxKind.GetAccessor */
|
|
427
427
|
? newFunctionType(c, [], valueType)
|
|
428
|
-
: node.kind ===
|
|
428
|
+
: node.kind === 180 /* SyntaxKind.SetAccessor */
|
|
429
429
|
? newFunctionType(c, [newParameter(c, 'value', valueType)], c.voidType)
|
|
430
430
|
: valueType;
|
|
431
431
|
const contextType = newClassMemberDecoratorContextTypeForNode(c, node, thisType, valueType);
|
|
432
432
|
return newESDecoratorCallSignature(c, targetType, contextType, targetType);
|
|
433
433
|
}
|
|
434
|
-
case
|
|
434
|
+
case 174 /* SyntaxKind.PropertyDeclaration */: {
|
|
435
435
|
if (!isClassLike(node.parent))
|
|
436
436
|
return undefined;
|
|
437
437
|
const valueType = getTypeOfDeclaration(c, node);
|
|
@@ -464,13 +464,13 @@ function newClassMemberDecoratorContextTypeForNode(c, node, thisType, valueType)
|
|
|
464
464
|
: (getLiteralTypeFromPropertyName(c, name) ?? c.neverType);
|
|
465
465
|
let globalType;
|
|
466
466
|
switch (node.kind) {
|
|
467
|
-
case
|
|
467
|
+
case 176 /* SyntaxKind.MethodDeclaration */:
|
|
468
468
|
globalType = getGlobalClassMethodDecoratorContextType(c);
|
|
469
469
|
break;
|
|
470
|
-
case
|
|
470
|
+
case 179 /* SyntaxKind.GetAccessor */:
|
|
471
471
|
globalType = getGlobalClassGetterDecoratorContextType(c);
|
|
472
472
|
break;
|
|
473
|
-
case
|
|
473
|
+
case 180 /* SyntaxKind.SetAccessor */:
|
|
474
474
|
globalType = getGlobalClassSetterDecoratorContextType(c);
|
|
475
475
|
break;
|
|
476
476
|
default:
|
|
@@ -512,7 +512,7 @@ function getClassElementPropertyKeyType(c, element) {
|
|
|
512
512
|
case 8 /* SyntaxKind.NumericLiteral */:
|
|
513
513
|
case 10 /* SyntaxKind.StringLiteral */:
|
|
514
514
|
return getStringLiteralType(c, getText(name));
|
|
515
|
-
case
|
|
515
|
+
case 169 /* SyntaxKind.ComputedPropertyName */: {
|
|
516
516
|
const nameType = checkComputedPropertyName(c, name);
|
|
517
517
|
return isTypeAssignableToKind(c, nameType, 16896 /* TypeFlags.ESSymbolLike */) ? nameType : c.stringType;
|
|
518
518
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type Node, type SourceFile } from './ast.js';
|
|
2
2
|
import { type Checker } from './checker.js';
|
|
3
3
|
import { type Signature, type Type } from './checker-types.js';
|
|
4
4
|
import { type Diagnostic } from './diagnostics.js';
|
|
@@ -29,5 +29,10 @@ export declare function checkDeprecatedIndexedAccess(c: Checker, accessNode: Nod
|
|
|
29
29
|
export declare function checkDeprecatedTypeReference(c: Checker, node: Node, type: Type): void;
|
|
30
30
|
/** Reports an import specifier importing a deprecated declaration. */
|
|
31
31
|
export declare function checkDeprecatedImportSpecifier(c: Checker, node: Node, symbol: Symbol): void;
|
|
32
|
-
/** Reports
|
|
33
|
-
export declare function
|
|
32
|
+
/** Reports the deprecated properties the checked object literals of `file` set (`checkContextualDeprecations`). */
|
|
33
|
+
export declare function checkObjectLiteralDeprecations(c: Checker, file: SourceFile): void;
|
|
34
|
+
/**
|
|
35
|
+
* Reports the members of an object literal or the attributes of a JSX element that set a deprecated
|
|
36
|
+
* property of its contextual type. Deferred, so the contextual type of the final check is used.
|
|
37
|
+
*/
|
|
38
|
+
export declare function checkContextualDeprecations(c: Checker, node: Node): void;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Deprecation suggestions: uses of declarations marked `@deprecated` in JSDoc report
|
|
2
2
|
// `'X' is deprecated.` with the tag as related information.
|
|
3
|
-
import { JSDoc, JSDocDeprecatedTag, getExpression, getName, getTagName, getText, } from './ast.js';
|
|
3
|
+
import { JSDoc, JSDocDeprecatedTag, getExpression, getName, getProperties, getTagName, getText, } from './ast.js';
|
|
4
4
|
import { isTypeDeclaration } from './ast-utilities.js';
|
|
5
5
|
import { isAccessExpression, getCombinedNodeFlags, getSourceFileOfNode, skipParentheses } from './binder-utilities.js';
|
|
6
6
|
import { createDiagnosticForNode } from './checker.js';
|
|
@@ -11,6 +11,7 @@ import { hasMatchingArgument } from './checker-narrowing.js';
|
|
|
11
11
|
import { entityNameToString } from './checker-expressions.js';
|
|
12
12
|
import { isErrorType } from './checker-type-factory.js';
|
|
13
13
|
import { getPropertyOfType } from './checker-members.js';
|
|
14
|
+
import { getApparentTypeOfContextualType } from './checker-contextual.js';
|
|
14
15
|
import { signatureToString } from './type-printer.js';
|
|
15
16
|
import { declarationAt, declarationCount, getDeclarations } from './symbol.js';
|
|
16
17
|
/** Whether `declaration`, or the statement it belongs to, has a `@deprecated` JSDoc tag. */
|
|
@@ -60,14 +61,14 @@ function everyDeprecatedDeclaration(symbol) {
|
|
|
60
61
|
return true;
|
|
61
62
|
}
|
|
62
63
|
export function addDeprecatedSuggestion(c, location, declarations, deprecatedEntity) {
|
|
63
|
-
const diagnostic = createDiagnosticForNode(location,
|
|
64
|
+
const diagnostic = createDiagnosticForNode(location, 1486 /* Diagnostics.X_0_is_deprecated */, [deprecatedEntity]);
|
|
64
65
|
return addDeprecatedSuggestionWorker(c, declarations, diagnostic);
|
|
65
66
|
}
|
|
66
67
|
function addDeprecatedSuggestionWorker(c, declarations, diagnostic) {
|
|
67
68
|
for (const declaration of declarations) {
|
|
68
69
|
const deprecatedTag = getJSDocDeprecatedTag(declaration);
|
|
69
70
|
if (deprecatedTag !== undefined) {
|
|
70
|
-
diagnostic.addRelatedInfo(createDiagnosticForNode(deprecatedTag,
|
|
71
|
+
diagnostic.addRelatedInfo(createDiagnosticForNode(deprecatedTag, 937 /* Diagnostics.The_declaration_was_marked_as_deprecated_here */, []));
|
|
71
72
|
break;
|
|
72
73
|
}
|
|
73
74
|
}
|
|
@@ -84,41 +85,41 @@ export function checkDeprecatedSignature(c, signature, node) {
|
|
|
84
85
|
const name = tryGetPropertyAccessOrIdentifierToString(getInvokedExpression(node));
|
|
85
86
|
const signatureString = signatureToString(c, signature);
|
|
86
87
|
const diagnostic = name !== ''
|
|
87
|
-
? createDiagnosticForNode(getDeprecatedSuggestionNode(node),
|
|
88
|
+
? createDiagnosticForNode(getDeprecatedSuggestionNode(node), 1488 /* Diagnostics.The_signature_0_of_1_is_deprecated */, [
|
|
88
89
|
signatureString,
|
|
89
90
|
name,
|
|
90
91
|
])
|
|
91
|
-
: createDiagnosticForNode(getDeprecatedSuggestionNode(node),
|
|
92
|
+
: createDiagnosticForNode(getDeprecatedSuggestionNode(node), 1486 /* Diagnostics.X_0_is_deprecated */, [signatureString]);
|
|
92
93
|
addDeprecatedSuggestionWorker(c, [declaration], diagnostic);
|
|
93
94
|
}
|
|
94
95
|
function getInvokedExpression(node) {
|
|
95
96
|
switch (node.kind) {
|
|
96
|
-
case
|
|
97
|
+
case 217 /* SyntaxKind.TaggedTemplateExpression */:
|
|
97
98
|
return node.tag;
|
|
98
|
-
case
|
|
99
|
-
case
|
|
99
|
+
case 288 /* SyntaxKind.JsxOpeningElement */:
|
|
100
|
+
case 287 /* SyntaxKind.JsxSelfClosingElement */:
|
|
100
101
|
return getTagName(node);
|
|
101
|
-
case
|
|
102
|
+
case 228 /* SyntaxKind.BinaryExpression */:
|
|
102
103
|
return node.right;
|
|
103
|
-
case
|
|
104
|
+
case 291 /* SyntaxKind.JsxOpeningFragment */:
|
|
104
105
|
return node;
|
|
105
106
|
}
|
|
106
107
|
return getExpression(node);
|
|
107
108
|
}
|
|
108
109
|
function tryGetPropertyAccessOrIdentifierToString(expr) {
|
|
109
110
|
switch (expr.kind) {
|
|
110
|
-
case
|
|
111
|
+
case 213 /* SyntaxKind.PropertyAccessExpression */: {
|
|
111
112
|
const base = tryGetPropertyAccessOrIdentifierToString(getExpression(expr));
|
|
112
113
|
return base !== '' ? base + '.' + entityNameToString(getName(expr)) : '';
|
|
113
114
|
}
|
|
114
|
-
case
|
|
115
|
+
case 214 /* SyntaxKind.ElementAccessExpression */: {
|
|
115
116
|
const base = tryGetPropertyAccessOrIdentifierToString(getExpression(expr));
|
|
116
117
|
const argument = expr.argumentExpression;
|
|
117
118
|
return base !== '' && isPropertyNameLiteral(argument) ? base + '.' + getText(argument) : '';
|
|
118
119
|
}
|
|
119
120
|
case 79 /* SyntaxKind.Identifier */:
|
|
120
121
|
return getText(expr);
|
|
121
|
-
case
|
|
122
|
+
case 297 /* SyntaxKind.JsxNamespacedName */: {
|
|
122
123
|
const name = expr;
|
|
123
124
|
return getText(name.namespace) + ':' + getText(name.name);
|
|
124
125
|
}
|
|
@@ -141,22 +142,22 @@ function isPropertyNameLiteral(node) {
|
|
|
141
142
|
export function getDeprecatedSuggestionNode(node) {
|
|
142
143
|
const current = skipParentheses(node);
|
|
143
144
|
switch (current.kind) {
|
|
144
|
-
case
|
|
145
|
-
case
|
|
146
|
-
case
|
|
145
|
+
case 215 /* SyntaxKind.CallExpression */:
|
|
146
|
+
case 172 /* SyntaxKind.Decorator */:
|
|
147
|
+
case 216 /* SyntaxKind.NewExpression */:
|
|
147
148
|
return getDeprecatedSuggestionNode(getExpression(current));
|
|
148
|
-
case
|
|
149
|
+
case 217 /* SyntaxKind.TaggedTemplateExpression */:
|
|
149
150
|
return getDeprecatedSuggestionNode(current.tag);
|
|
150
|
-
case
|
|
151
|
-
case
|
|
151
|
+
case 288 /* SyntaxKind.JsxOpeningElement */:
|
|
152
|
+
case 287 /* SyntaxKind.JsxSelfClosingElement */:
|
|
152
153
|
return getDeprecatedSuggestionNode(getTagName(current));
|
|
153
|
-
case
|
|
154
|
+
case 214 /* SyntaxKind.ElementAccessExpression */:
|
|
154
155
|
return current.argumentExpression;
|
|
155
|
-
case
|
|
156
|
+
case 213 /* SyntaxKind.PropertyAccessExpression */:
|
|
156
157
|
return getName(current);
|
|
157
|
-
case
|
|
158
|
+
case 185 /* SyntaxKind.TypeReference */: {
|
|
158
159
|
const typeName = current.typeName;
|
|
159
|
-
if (typeName.kind ===
|
|
160
|
+
if (typeName.kind === 168 /* SyntaxKind.QualifiedName */)
|
|
160
161
|
return typeName.right;
|
|
161
162
|
}
|
|
162
163
|
}
|
|
@@ -175,7 +176,7 @@ function isUncalledFunctionReference(c, node, symbol) {
|
|
|
175
176
|
if (parent === undefined)
|
|
176
177
|
parent = node.parent;
|
|
177
178
|
if (isCallLikeExpression(parent))
|
|
178
|
-
return ((parent.kind ===
|
|
179
|
+
return ((parent.kind === 215 /* SyntaxKind.CallExpression */ || parent.kind === 216 /* SyntaxKind.NewExpression */) &&
|
|
179
180
|
node.kind === 79 /* SyntaxKind.Identifier */ &&
|
|
180
181
|
hasMatchingArgument(c, parent, node));
|
|
181
182
|
for (const d of getDeclarations(symbol))
|
|
@@ -185,35 +186,35 @@ function isUncalledFunctionReference(c, node, symbol) {
|
|
|
185
186
|
}
|
|
186
187
|
function isCallLikeExpression(node) {
|
|
187
188
|
switch (node.kind) {
|
|
188
|
-
case
|
|
189
|
-
case
|
|
190
|
-
case
|
|
191
|
-
case
|
|
192
|
-
case
|
|
193
|
-
case
|
|
194
|
-
case
|
|
189
|
+
case 288 /* SyntaxKind.JsxOpeningElement */:
|
|
190
|
+
case 287 /* SyntaxKind.JsxSelfClosingElement */:
|
|
191
|
+
case 291 /* SyntaxKind.JsxOpeningFragment */:
|
|
192
|
+
case 215 /* SyntaxKind.CallExpression */:
|
|
193
|
+
case 216 /* SyntaxKind.NewExpression */:
|
|
194
|
+
case 217 /* SyntaxKind.TaggedTemplateExpression */:
|
|
195
|
+
case 172 /* SyntaxKind.Decorator */:
|
|
195
196
|
return true;
|
|
196
|
-
case
|
|
197
|
+
case 228 /* SyntaxKind.BinaryExpression */:
|
|
197
198
|
return node.operatorToken.kind === 103 /* SyntaxKind.InstanceOfKeyword */;
|
|
198
199
|
}
|
|
199
200
|
return false;
|
|
200
201
|
}
|
|
201
202
|
function isFunctionLikeKind(kind) {
|
|
202
203
|
switch (kind) {
|
|
203
|
-
case
|
|
204
|
-
case
|
|
205
|
-
case
|
|
206
|
-
case
|
|
207
|
-
case
|
|
208
|
-
case
|
|
209
|
-
case
|
|
210
|
-
case
|
|
211
|
-
case
|
|
212
|
-
case
|
|
213
|
-
case
|
|
214
|
-
case
|
|
215
|
-
case
|
|
216
|
-
case
|
|
204
|
+
case 264 /* SyntaxKind.FunctionDeclaration */:
|
|
205
|
+
case 176 /* SyntaxKind.MethodDeclaration */:
|
|
206
|
+
case 178 /* SyntaxKind.Constructor */:
|
|
207
|
+
case 179 /* SyntaxKind.GetAccessor */:
|
|
208
|
+
case 180 /* SyntaxKind.SetAccessor */:
|
|
209
|
+
case 220 /* SyntaxKind.FunctionExpression */:
|
|
210
|
+
case 221 /* SyntaxKind.ArrowFunction */:
|
|
211
|
+
case 175 /* SyntaxKind.MethodSignature */:
|
|
212
|
+
case 181 /* SyntaxKind.CallSignature */:
|
|
213
|
+
case 319 /* SyntaxKind.JSDocSignature */:
|
|
214
|
+
case 182 /* SyntaxKind.ConstructSignature */:
|
|
215
|
+
case 183 /* SyntaxKind.IndexSignature */:
|
|
216
|
+
case 186 /* SyntaxKind.FunctionType */:
|
|
217
|
+
case 187 /* SyntaxKind.ConstructorType */:
|
|
217
218
|
return true;
|
|
218
219
|
}
|
|
219
220
|
return false;
|
|
@@ -276,9 +277,9 @@ export function checkDeprecatedIndexSignature(c, right, declaration) {
|
|
|
276
277
|
export function checkDeprecatedIndexedAccess(c, accessNode, prop, propName) {
|
|
277
278
|
if (declarationCount(prop) === 0 || !isDeprecatedSymbol(c, prop) || !isUncalledFunctionReference(c, accessNode, prop))
|
|
278
279
|
return;
|
|
279
|
-
const deprecatedNode = accessNode.kind ===
|
|
280
|
+
const deprecatedNode = accessNode.kind === 214 /* SyntaxKind.ElementAccessExpression */
|
|
280
281
|
? accessNode.argumentExpression
|
|
281
|
-
: accessNode.kind ===
|
|
282
|
+
: accessNode.kind === 201 /* SyntaxKind.IndexedAccessType */
|
|
282
283
|
? accessNode.indexType
|
|
283
284
|
: accessNode;
|
|
284
285
|
addDeprecatedSuggestion(c, deprecatedNode, getDeclarations(prop), propName);
|
|
@@ -304,12 +305,32 @@ export function checkDeprecatedImportSpecifier(c, node, symbol) {
|
|
|
304
305
|
if (isDeprecatedSymbol(c, targetSymbol) && declarationCount(targetSymbol) !== 0)
|
|
305
306
|
addDeprecatedSuggestion(c, node, getDeclarations(targetSymbol), targetSymbol.name);
|
|
306
307
|
}
|
|
307
|
-
/** Reports
|
|
308
|
-
export function
|
|
309
|
-
const
|
|
310
|
-
if (
|
|
308
|
+
/** Reports the deprecated properties the checked object literals of `file` set (`checkContextualDeprecations`). */
|
|
309
|
+
export function checkObjectLiteralDeprecations(c, file) {
|
|
310
|
+
const pending = c.objectLiteralsForDeprecations.get(file);
|
|
311
|
+
if (pending === undefined)
|
|
311
312
|
return;
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
313
|
+
c.objectLiteralsForDeprecations.delete(file);
|
|
314
|
+
for (const node of pending)
|
|
315
|
+
checkContextualDeprecations(c, node);
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* Reports the members of an object literal or the attributes of a JSX element that set a deprecated
|
|
319
|
+
* property of its contextual type. Deferred, so the contextual type of the final check is used.
|
|
320
|
+
*/
|
|
321
|
+
export function checkContextualDeprecations(c, node) {
|
|
322
|
+
const contextualType = getApparentTypeOfContextualType(c, node);
|
|
323
|
+
if (contextualType === undefined)
|
|
324
|
+
return;
|
|
325
|
+
for (const property of getProperties(node).nodes) {
|
|
326
|
+
const name = getName(property);
|
|
327
|
+
if (name === undefined || name.kind === 169 /* SyntaxKind.ComputedPropertyName */)
|
|
328
|
+
continue;
|
|
329
|
+
const text = name.kind === 297 /* SyntaxKind.JsxNamespacedName */
|
|
330
|
+
? name.namespace.text + ':' + name.name.text
|
|
331
|
+
: getText(name);
|
|
332
|
+
const prop = getPropertyOfType(c, contextualType, text);
|
|
333
|
+
if (prop !== undefined && declarationCount(prop) !== 0 && isDeprecatedSymbol(c, prop))
|
|
334
|
+
addDeprecatedSuggestion(c, name, getDeclarations(prop), text);
|
|
335
|
+
}
|
|
315
336
|
}
|