tsc-ts 0.0.9 → 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 +2 -2
- 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 +22 -15
- package/dist/api/compiler/ast.js +1026 -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 +178 -124
- 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 +472 -440
- 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 -107
- 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 +212 -75
- 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 +145 -36
- 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 +104 -31
- package/dist/api/compiler/checker.js +181 -33
- 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 +42 -3
- package/dist/api/compiler/compile-program.js +139 -27
- package/dist/api/compiler/diagnostic-messages.d.ts +1849 -1774
- package/dist/api/compiler/diagnostic-messages.js +128 -122
- package/dist/api/compiler/diagnostics.d.ts +22 -0
- package/dist/api/compiler/diagnostics.js +93 -11
- 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 +21 -1
- package/dist/api/compiler/file-loader.js +201 -48
- 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/parallel-parse.d.ts +3 -2
- package/dist/api/compiler/parallel-parse.js +17 -5
- 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 +5 -1
- package/dist/api/compiler/printer/emit-context.js +20 -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 +49 -2
- package/dist/api/compiler/printer/printer.js +539 -293
- package/dist/api/compiler/printer/utilities.js +149 -147
- package/dist/api/compiler/program-checker.d.ts +12 -2
- package/dist/api/compiler/program-checker.js +88 -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 +4 -6
- package/dist/api/compiler/program.js +74 -87
- 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 +347 -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 +23 -14
- package/dist/api/compiler/symbol.js +23 -11
- 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 +58 -26
- package/src/compiler/binder.ts +39 -4
- package/src/compiler/character-codes.ts +2 -2
- package/src/compiler/checker-calls.ts +79 -9
- 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 +136 -62
- package/src/compiler/checker-heritage.ts +22 -21
- package/src/compiler/checker-inference.ts +514 -82
- 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 +200 -56
- 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 +124 -23
- 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 +203 -39
- package/src/compiler/command-line.ts +28 -28
- package/src/compiler/compile-program.ts +167 -27
- package/src/compiler/decoder.ts +13 -4
- package/src/compiler/diagnostic-messages.ts +1973 -1892
- package/src/compiler/diagnostics.ts +84 -3
- 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 +197 -38
- package/src/compiler/help.ts +10 -14
- package/src/compiler/incremental.ts +165 -30
- 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 +326 -52
- package/src/compiler/parallel-emit.ts +320 -0
- package/src/compiler/parallel-parse.ts +16 -5
- package/src/compiler/parse-thread.ts +3 -0
- package/src/compiler/parser.ts +156 -39
- package/src/compiler/path.ts +22 -2
- package/src/compiler/printer/emit-context.ts +21 -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 +266 -30
- package/src/compiler/printer/utilities.ts +8 -2
- package/src/compiler/program-checker.ts +57 -5
- package/src/compiler/program-utilities.ts +23 -10
- package/src/compiler/program.ts +18 -26
- package/src/compiler/pseudo-bigint.ts +17 -0
- package/src/compiler/regexp-checker.ts +63 -30
- package/src/compiler/relations.ts +240 -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 +46 -24
- package/src/compiler/syntax-kind.ts +188 -187
- package/src/compiler/thread-entry.ts +64 -4
- 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 +66 -9
- package/src/compiler/tsc-cli.ts +7 -0
- package/src/compiler/tsc-compile.ts +284 -4
- 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
|
@@ -84,7 +84,7 @@ import { isArrayType, isErrorType, isFreshLiteralType, isTupleType } from './che
|
|
|
84
84
|
import { isTypeAssignableToKind } from './checker-type-operators.js';
|
|
85
85
|
import { type IndexInfo, type LiteralType, SignatureKind, type Type, TypeFlags } from './checker-types.js';
|
|
86
86
|
import { hasLateBindableName } from './checker-utilities.js';
|
|
87
|
-
import { NodeBuilder, isEntityNameVisible, isOptionalParameter } from './node-builder.js';
|
|
87
|
+
import { NodeBuilder, NodeBuilderCaches, isEntityNameVisible, isOptionalParameter } from './node-builder.js';
|
|
88
88
|
import {
|
|
89
89
|
getRegularTypeOfExpression,
|
|
90
90
|
newPseudoChecker,
|
|
@@ -92,7 +92,7 @@ import {
|
|
|
92
92
|
} from './node-builder-pseudo.js';
|
|
93
93
|
import { symbolToExpression } from './node-builder-names.js';
|
|
94
94
|
import { tryReuseExistingNode } from './node-builder-reuse.js';
|
|
95
|
-
import type { CompilerOptions
|
|
95
|
+
import type { CompilerOptions } from './options.js';
|
|
96
96
|
import type { EmitContext } from './printer/emit-context.js';
|
|
97
97
|
import { isTypeIdenticalTo } from './relations.js';
|
|
98
98
|
import {
|
|
@@ -115,6 +115,7 @@ import { SyntacticEmitResolver } from './transformers/emit-resolver.js';
|
|
|
115
115
|
import type { Evaluation, ReferenceResolver } from './transformers/reference-resolver.js';
|
|
116
116
|
import { TypeReferenceSerializationKind } from './transformers/type-serialization.js';
|
|
117
117
|
import { TokenFlags } from './types.js';
|
|
118
|
+
import { getSignatureOfFullSignatureType } from './checker-jsdoc.js';
|
|
118
119
|
import { CheckFlags, declarationCount, getDeclarations, type Symbol, SymbolFlags } from './symbol.js';
|
|
119
120
|
|
|
120
121
|
const declarationEmitInternalFlags = NodeBuilderInternalFlags.AllowUnresolvedNames;
|
|
@@ -125,12 +126,17 @@ export class CheckerDeclarationEmitResolver extends DeclarationEmitResolver {
|
|
|
125
126
|
/** Answers the queries that don't need types. */
|
|
126
127
|
private readonly syntactic: SyntacticDeclarationEmitResolver;
|
|
127
128
|
private readonly aliasesMarked: Set<SourceFile>;
|
|
129
|
+
/** The emit context of the last node builder, and the caches the builders for it share. */
|
|
130
|
+
private builderContext: EmitContext | undefined;
|
|
131
|
+
private builderCaches: NodeBuilderCaches | undefined;
|
|
128
132
|
|
|
129
133
|
constructor(checker: Checker, syntactic: SyntacticDeclarationEmitResolver) {
|
|
130
134
|
super();
|
|
131
135
|
this.checker = checker;
|
|
132
136
|
this.syntactic = syntactic;
|
|
133
137
|
this.aliasesMarked = new Set<SourceFile>();
|
|
138
|
+
this.builderContext = undefined;
|
|
139
|
+
this.builderCaches = undefined;
|
|
134
140
|
}
|
|
135
141
|
|
|
136
142
|
// JavaScript emit
|
|
@@ -284,6 +290,8 @@ export class CheckerDeclarationEmitResolver extends DeclarationEmitResolver {
|
|
|
284
290
|
const signatures = getSignaturesOfSymbol(c, getSymbolOfDeclaration(c, node));
|
|
285
291
|
if (signatures.length > 1) return true;
|
|
286
292
|
if (signatures.length === 1) {
|
|
293
|
+
// A JSDoc `@type` signature of the function itself is not an overload.
|
|
294
|
+
if (signatures[0] === getSignatureOfFullSignatureType(c, node)) return false;
|
|
287
295
|
const declaration = signatures[0].declaration;
|
|
288
296
|
if (declaration !== node && declaration !== undefined && (declaration.flags & NodeFlags.JSDoc) === 0) return true;
|
|
289
297
|
}
|
|
@@ -359,10 +367,6 @@ export class CheckerDeclarationEmitResolver extends DeclarationEmitResolver {
|
|
|
359
367
|
return getPropertiesOfType(c, getTypeOfSymbol(c, symbol));
|
|
360
368
|
}
|
|
361
369
|
|
|
362
|
-
getResolutionModeOverride(node: Node): ModuleKind | undefined {
|
|
363
|
-
return this.syntactic.getResolutionModeOverride(node);
|
|
364
|
-
}
|
|
365
|
-
|
|
366
370
|
getSourceFileFromReference(file: SourceFile, reference: FileReference): SourceFile | undefined {
|
|
367
371
|
return this.syntactic.getSourceFileFromReference(file, reference);
|
|
368
372
|
}
|
|
@@ -419,6 +423,12 @@ export class CheckerDeclarationEmitResolver extends DeclarationEmitResolver {
|
|
|
419
423
|
);
|
|
420
424
|
b.pseudo = newPseudoChecker(this.checker);
|
|
421
425
|
b.declarationOrder = true;
|
|
426
|
+
// tsgo's emit resolver, one per emit context, keeps one node builder for all its requests.
|
|
427
|
+
if (context !== this.builderContext || this.builderCaches === undefined) {
|
|
428
|
+
this.builderContext = context;
|
|
429
|
+
this.builderCaches = new NodeBuilderCaches();
|
|
430
|
+
}
|
|
431
|
+
b.useCaches(this.builderCaches);
|
|
422
432
|
return b;
|
|
423
433
|
}
|
|
424
434
|
|
|
@@ -61,7 +61,7 @@ import { skipTrivia } from './scanner.js';
|
|
|
61
61
|
import { Diagnostic, Diagnostics } from './diagnostics.js';
|
|
62
62
|
import { type Symbol, SymbolFlags } from './symbol.js';
|
|
63
63
|
import { SyntaxKind } from './syntax-kind.js';
|
|
64
|
-
import { type Checker } from './checker.js';
|
|
64
|
+
import { type Checker, createDiagnosticForNode } from './checker.js';
|
|
65
65
|
import {
|
|
66
66
|
checkSuperExpression,
|
|
67
67
|
checkThisBeforeSuper,
|
|
@@ -129,7 +129,7 @@ import {
|
|
|
129
129
|
resolveEntityName,
|
|
130
130
|
resolveName,
|
|
131
131
|
getFirstIdentifier,
|
|
132
|
-
|
|
132
|
+
cannotFindNameAtLocation,
|
|
133
133
|
getDeclarationOfAliasSymbol,
|
|
134
134
|
TypeSystemPropertyName,
|
|
135
135
|
popTypeResolution,
|
|
@@ -153,9 +153,6 @@ import {
|
|
|
153
153
|
isGenericIndexType,
|
|
154
154
|
isGenericMappedType,
|
|
155
155
|
isGenericType,
|
|
156
|
-
getMappedTypeNameTypeKind,
|
|
157
|
-
MappedTypeNameTypeKind,
|
|
158
|
-
getIndexForMappedType,
|
|
159
156
|
getIndexTypeEx,
|
|
160
157
|
getMappedTypeModifiers,
|
|
161
158
|
MappedTypeModifiers,
|
|
@@ -211,8 +208,10 @@ import {
|
|
|
211
208
|
checkDeleteExpression,
|
|
212
209
|
checkPostfixUnaryExpression,
|
|
213
210
|
checkPrefixUnaryExpression,
|
|
211
|
+
grammarErrorOnNode,
|
|
214
212
|
isTypeAssertion,
|
|
215
213
|
} from './checker-operators.js';
|
|
214
|
+
import { fileExtensionIsOneOf } from './path.js';
|
|
216
215
|
import { checkJsx } from './checker-jsx.js';
|
|
217
216
|
import { getRegularTypeOfObjectLiteral } from './checker-literals.js';
|
|
218
217
|
import {
|
|
@@ -448,8 +447,10 @@ function getReturnTypeOfSingleNonGenericSignature(c: Checker, funcType: Type, ki
|
|
|
448
447
|
}
|
|
449
448
|
|
|
450
449
|
export function checkComputedPropertyName(c: Checker, node: Node): Type {
|
|
451
|
-
const nodeId =
|
|
450
|
+
const nodeId = node.id;
|
|
452
451
|
if (c.resolvedTypes.get(nodeId) === undefined) {
|
|
452
|
+
// A reference to the name while its expression is checked sees a circular type.
|
|
453
|
+
c.resolvedTypes.set(nodeId, c.circularConstraintType);
|
|
453
454
|
const expression = (node as ComputedPropertyName).expression;
|
|
454
455
|
const container = node.parent!.parent!;
|
|
455
456
|
// `[x in y]` in a type member is a mapped type written in the wrong place, reported by the parser.
|
|
@@ -552,14 +553,14 @@ export function getResolvedSymbol(c: Checker, node: Node): Symbol {
|
|
|
552
553
|
const cached = c.resolvedSymbols.get(node.id);
|
|
553
554
|
if (cached !== undefined) return cached;
|
|
554
555
|
let symbol = c.unknownSymbol;
|
|
555
|
-
|
|
556
|
-
|
|
556
|
+
const text = getText(node);
|
|
557
|
+
if (text !== '') {
|
|
557
558
|
const found = resolveName(
|
|
558
559
|
c,
|
|
559
560
|
node,
|
|
560
561
|
text,
|
|
561
562
|
SymbolFlags.Value | SymbolFlags.ExportValue,
|
|
562
|
-
|
|
563
|
+
cannotFindNameAtLocation,
|
|
563
564
|
!isWriteOnlyAccess(node),
|
|
564
565
|
false,
|
|
565
566
|
);
|
|
@@ -970,8 +971,21 @@ export function checkThisExpression(c: Checker, node: Node): Type {
|
|
|
970
971
|
const globalThisType = getTypeOfSymbol(c, c.globalThisSymbol);
|
|
971
972
|
if (t === globalThisType && capturedByArrowFunction)
|
|
972
973
|
c.error(node, Diagnostics.The_containing_arrow_function_captures_the_global_value_of_this);
|
|
973
|
-
else if (t === undefined)
|
|
974
|
-
|
|
974
|
+
else if (t === undefined) {
|
|
975
|
+
// The related information goes on the reported diagnostic after it is added, as tsgo attaches it,
|
|
976
|
+
// so a later equal report compares unequal to it and is kept.
|
|
977
|
+
const diagnostic = c.error(
|
|
978
|
+
node,
|
|
979
|
+
Diagnostics.X_this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation,
|
|
980
|
+
);
|
|
981
|
+
if (container.kind !== SyntaxKind.SourceFile) {
|
|
982
|
+
const outsideThis = tryGetThisTypeAt(c, container, getThisContainer(container, false, false));
|
|
983
|
+
if (outsideThis !== undefined && outsideThis !== globalThisType)
|
|
984
|
+
diagnostic.addRelatedInfo(
|
|
985
|
+
createDiagnosticForNode(container, Diagnostics.An_outer_value_of_this_is_shadowed_by_this_container, []),
|
|
986
|
+
);
|
|
987
|
+
}
|
|
988
|
+
}
|
|
975
989
|
}
|
|
976
990
|
return t ?? c.anyType;
|
|
977
991
|
}
|
|
@@ -1210,7 +1224,8 @@ export function isTupleLikeType(c: Checker, t: Type): boolean {
|
|
|
1210
1224
|
export function isMutableArrayLikeType(c: Checker, t: Type): boolean {
|
|
1211
1225
|
return (
|
|
1212
1226
|
isMutableArrayOrTuple(c, t) ||
|
|
1213
|
-
((t.flags & (TypeFlags.Any | TypeFlags.Nullable)) === 0 &&
|
|
1227
|
+
((t.flags & (TypeFlags.Any | TypeFlags.Nullable | TypeFlags.Never)) === 0 &&
|
|
1228
|
+
isTypeAssignableTo(c, t, c.anyArrayType))
|
|
1214
1229
|
);
|
|
1215
1230
|
}
|
|
1216
1231
|
|
|
@@ -1248,10 +1263,31 @@ export function getPropertyNameOfObjectLiteralElement(c: Checker, element: Node)
|
|
|
1248
1263
|
return undefined;
|
|
1249
1264
|
}
|
|
1250
1265
|
|
|
1266
|
+
/** Whether `node` is the object literal of the `with` property of an `import()` call's options argument. */
|
|
1267
|
+
function isInlineImportAttributes(node: Node): boolean {
|
|
1268
|
+
const property = node.parent!;
|
|
1269
|
+
if (
|
|
1270
|
+
node.kind !== SyntaxKind.ObjectLiteralExpression ||
|
|
1271
|
+
property.kind !== SyntaxKind.PropertyAssignment ||
|
|
1272
|
+
getInitializer(property) !== node
|
|
1273
|
+
)
|
|
1274
|
+
return false;
|
|
1275
|
+
const name = getName(property)!;
|
|
1276
|
+
if ((name.kind !== SyntaxKind.Identifier && !isStringLiteralLike(name)) || getText(name) !== 'with') return false;
|
|
1277
|
+
const options = property.parent!;
|
|
1278
|
+
if (options.kind !== SyntaxKind.ObjectLiteralExpression) return false;
|
|
1279
|
+
let importCall: Node | undefined = options;
|
|
1280
|
+
while (importCall !== undefined && !isImportCall(importCall)) importCall = importCall.parent;
|
|
1281
|
+
if (importCall === undefined) return false;
|
|
1282
|
+
const args = (importCall as CallExpression).arguments.nodes;
|
|
1283
|
+
return args.length > 1 && skipParentheses(args[1]!) === options;
|
|
1284
|
+
}
|
|
1285
|
+
|
|
1251
1286
|
/** Whether `node` is in an `as const` context, where literals keep their types. */
|
|
1252
1287
|
export function isConstContext(c: Checker, node: Node): boolean {
|
|
1253
1288
|
const parent = node.parent;
|
|
1254
1289
|
if (parent === undefined) return false;
|
|
1290
|
+
if (isInlineImportAttributes(node)) return true;
|
|
1255
1291
|
// Literals contextually typed by a `const` type parameter are in a const context.
|
|
1256
1292
|
if (isValidConstAssertionArgument(c, node) && isConstTypeVariable(c, getContextualType(c, node), 0)) return true;
|
|
1257
1293
|
switch (parent.kind) {
|
|
@@ -1468,7 +1504,7 @@ export function entityNameToString(node: Node): string {
|
|
|
1468
1504
|
}
|
|
1469
1505
|
case SyntaxKind.QualifiedName: {
|
|
1470
1506
|
const q = node as QualifiedName;
|
|
1471
|
-
return entityNameToString(q.left) + '.' + q.right
|
|
1507
|
+
return entityNameToString(q.left) + '.' + getText(q.right);
|
|
1472
1508
|
}
|
|
1473
1509
|
}
|
|
1474
1510
|
return getText(node);
|
|
@@ -1535,32 +1571,25 @@ export function getFlowTypeOfAccessExpression(
|
|
|
1535
1571
|
return propType;
|
|
1536
1572
|
if (propType === c.autoType) return getFlowTypeOfAutoTypedProperty(c, node, prop);
|
|
1537
1573
|
propType = getNarrowableTypeForReference(c, propType, node, checkMode);
|
|
1538
|
-
// `this.x` in the constructor of x's class starts out uninitialized under strictPropertyInitialization
|
|
1574
|
+
// `this.x` in the constructor of x's class starts out uninitialized under strictPropertyInitialization,
|
|
1575
|
+
// and a JavaScript `this.x = …` declaration is unassigned before it in its own function.
|
|
1539
1576
|
let assumeUninitialized = false;
|
|
1540
|
-
|
|
1541
|
-
if (
|
|
1542
|
-
c.strictNullChecks &&
|
|
1543
|
-
c.strictPropertyInitialization &&
|
|
1544
|
-
expression !== undefined &&
|
|
1545
|
-
expression.kind === SyntaxKind.ThisKeyword &&
|
|
1546
|
-
prop !== undefined
|
|
1547
|
-
) {
|
|
1577
|
+
if (c.strictNullChecks && prop !== undefined) {
|
|
1548
1578
|
const declaration = prop.valueDeclaration;
|
|
1549
|
-
|
|
1550
|
-
|
|
1579
|
+
const expression = getExpression(node);
|
|
1580
|
+
if (c.strictPropertyInitialization && expression !== undefined && expression.kind === SyntaxKind.ThisKeyword) {
|
|
1581
|
+
if (declaration !== undefined && isPropertyWithoutInitializer(declaration) && !isStatic(declaration)) {
|
|
1582
|
+
const flowContainer = getControlFlowContainer(node);
|
|
1583
|
+
assumeUninitialized =
|
|
1584
|
+
flowContainer.kind === SyntaxKind.Constructor &&
|
|
1585
|
+
flowContainer.parent === declaration.parent &&
|
|
1586
|
+
(declaration.flags & NodeFlags.Ambient) === 0;
|
|
1587
|
+
}
|
|
1588
|
+
} else
|
|
1551
1589
|
assumeUninitialized =
|
|
1552
|
-
|
|
1553
|
-
|
|
1554
|
-
(
|
|
1555
|
-
}
|
|
1556
|
-
}
|
|
1557
|
-
// A JavaScript `this.x = …` declaration is unassigned before it in its own function.
|
|
1558
|
-
if (c.strictNullChecks && prop !== undefined && !assumeUninitialized) {
|
|
1559
|
-
const declaration = prop.valueDeclaration;
|
|
1560
|
-
assumeUninitialized =
|
|
1561
|
-
declaration instanceof BinaryExpression &&
|
|
1562
|
-
declaration.left.kind === SyntaxKind.PropertyAccessExpression &&
|
|
1563
|
-
getControlFlowContainer(node) === getControlFlowContainer(declaration);
|
|
1590
|
+
declaration instanceof BinaryExpression &&
|
|
1591
|
+
declaration.left.kind === SyntaxKind.PropertyAccessExpression &&
|
|
1592
|
+
getControlFlowContainer(node) === getControlFlowContainer(declaration);
|
|
1564
1593
|
}
|
|
1565
1594
|
const initialType = assumeUninitialized ? getOptionalType(c, propType, false) : propType;
|
|
1566
1595
|
const flowType = getFlowTypeOfReference(c, node, propType, initialType, undefined);
|
|
@@ -1620,18 +1649,13 @@ export function checkIndexedAccessIndexType(c: Checker, t: Type, accessNode: Nod
|
|
|
1620
1649
|
if ((t.flags & TypeFlags.IndexedAccess) === 0) return t;
|
|
1621
1650
|
const objectType = (t as IndexedAccessType).objectType;
|
|
1622
1651
|
const indexType = (t as IndexedAccessType).indexType;
|
|
1623
|
-
// Remapping mapped types don't defer their index types.
|
|
1624
|
-
const objectIndexType =
|
|
1625
|
-
isGenericMappedType(c, objectType) &&
|
|
1626
|
-
getMappedTypeNameTypeKind(c, objectType as MappedType) === MappedTypeNameTypeKind.Remapping
|
|
1627
|
-
? getIndexForMappedType(c, objectType as MappedType, IndexFlags.None)
|
|
1628
|
-
: getIndexTypeEx(c, objectType, IndexFlags.None);
|
|
1629
1652
|
const hasNumberIndexInfo = getIndexInfoOfType(c, objectType, c.numberType) !== undefined;
|
|
1630
1653
|
if (
|
|
1631
1654
|
everyType(
|
|
1632
1655
|
indexType,
|
|
1633
1656
|
(u) =>
|
|
1634
|
-
isTypeAssignableTo(c, u,
|
|
1657
|
+
isTypeAssignableTo(c, u, getIndexTypeEx(c, objectType, IndexFlags.None)) ||
|
|
1658
|
+
(hasNumberIndexInfo && isApplicableIndexType(c, u, c.numberType)),
|
|
1635
1659
|
)
|
|
1636
1660
|
) {
|
|
1637
1661
|
if (
|
|
@@ -1737,6 +1761,15 @@ function hasNumericPropertyNames(c: Checker, t: Type): boolean {
|
|
|
1737
1761
|
// ---- Assertions
|
|
1738
1762
|
|
|
1739
1763
|
function checkAssertion(c: Checker, node: Node, checkMode: CheckMode): Type {
|
|
1764
|
+
if (node.kind === SyntaxKind.TypeAssertionExpression) {
|
|
1765
|
+
const file = getSourceFileOfNode(node);
|
|
1766
|
+
if (fileExtensionIsOneOf(file.fileName, ['.mts', '.cts']))
|
|
1767
|
+
grammarErrorOnNode(
|
|
1768
|
+
c,
|
|
1769
|
+
node,
|
|
1770
|
+
Diagnostics.This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead,
|
|
1771
|
+
);
|
|
1772
|
+
}
|
|
1740
1773
|
// `<T>expr`, over `<T>`.
|
|
1741
1774
|
if (node.kind === SyntaxKind.TypeAssertionExpression && shouldCheckErasableSyntax(c, node)) {
|
|
1742
1775
|
const file = getSourceFileOfNode(node);
|
|
@@ -1750,8 +1783,10 @@ function checkAssertion(c: Checker, node: Node, checkMode: CheckMode): Type {
|
|
|
1750
1783
|
),
|
|
1751
1784
|
);
|
|
1752
1785
|
}
|
|
1786
|
+
const exprType = checkExpressionEx(c, getExpression(node)!, checkMode);
|
|
1787
|
+
// The type node is checked in every case, including the `const` of `x as const`.
|
|
1788
|
+
checkTypeNodeIfPresent(c, getType(node));
|
|
1753
1789
|
if (isConstTypeReference(getType(node)!)) {
|
|
1754
|
-
const exprType = checkExpressionEx(c, getExpression(node)!, checkMode);
|
|
1755
1790
|
if (!isValidConstAssertionArgument(c, getExpression(node)!))
|
|
1756
1791
|
c.error(
|
|
1757
1792
|
getExpression(node)!,
|
|
@@ -1759,10 +1794,8 @@ function checkAssertion(c: Checker, node: Node, checkMode: CheckMode): Type {
|
|
|
1759
1794
|
);
|
|
1760
1795
|
return getRegularTypeOfLiteralType(c, exprType);
|
|
1761
1796
|
}
|
|
1762
|
-
const exprType = checkExpressionEx(c, getExpression(node)!, checkMode);
|
|
1763
1797
|
// The operand is compared with the asserted type once, after the last check of the operand.
|
|
1764
1798
|
c.nodeLinks(node).assertionExpressionType = exprType;
|
|
1765
|
-
checkTypeNodeIfPresent(c, getType(node));
|
|
1766
1799
|
checkNodeDeferred(c, node);
|
|
1767
1800
|
return getTypeFromTypeNode(c, getType(node)!);
|
|
1768
1801
|
}
|
|
@@ -54,6 +54,7 @@ import {
|
|
|
54
54
|
reportErrorsFromWidening,
|
|
55
55
|
reportImplicitAny,
|
|
56
56
|
WideningKind,
|
|
57
|
+
getWidenedTypeForVariableLikeDeclaration,
|
|
57
58
|
} from './checker-symbol-types.js';
|
|
58
59
|
import { getMergedSymbol, getSymbolOfDeclaration } from './checker-symbols.js';
|
|
59
60
|
import {
|
|
@@ -105,7 +106,12 @@ import {
|
|
|
105
106
|
getInferenceContext,
|
|
106
107
|
instantiateContextualType,
|
|
107
108
|
} from './checker-contextual.js';
|
|
108
|
-
import {
|
|
109
|
+
import {
|
|
110
|
+
checkJSDocFullSignature,
|
|
111
|
+
checkJSDocFullSignatureType,
|
|
112
|
+
checkUnmatchedJSDocParameters,
|
|
113
|
+
getFullSignatureTypeNode,
|
|
114
|
+
} from './checker-jsdoc.js';
|
|
109
115
|
import { getEffectiveCheckNode, isFunctionLike, nodeIsMissing } from './ast-utilities.js';
|
|
110
116
|
import {
|
|
111
117
|
getFlowTypeOfReferenceAt,
|
|
@@ -144,6 +150,7 @@ import {
|
|
|
144
150
|
|
|
145
151
|
export function checkFunctionExpressionOrObjectLiteralMethod(c: Checker, node: Node, checkMode: CheckMode): Type {
|
|
146
152
|
checkNodeDeferred(c, node);
|
|
153
|
+
checkJSDocFullSignatureType(c, node);
|
|
147
154
|
if (node.kind === SyntaxKind.FunctionExpression) checkCollisionsForDeclarationName(c, node, getName(node));
|
|
148
155
|
if (node.kind === SyntaxKind.GetAccessor || node.kind === SyntaxKind.SetAccessor) return c.anyType;
|
|
149
156
|
if ((checkMode & CheckMode.SkipContextSensitive) !== 0 && isContextSensitive(c, node)) {
|
|
@@ -238,7 +245,8 @@ function contextuallyCheckFunctionExpressionOrObjectLiteralMethod(c: Checker, no
|
|
|
238
245
|
getType(node) === undefined &&
|
|
239
246
|
resolvedReturnTypeOf(c, signature) === undefined
|
|
240
247
|
) {
|
|
241
|
-
|
|
248
|
+
// The resolved return type is cached, so it is computed without SkipContextSensitive to keep anyFunctionType out of it.
|
|
249
|
+
const returnType = getReturnTypeFromBodyEx(c, node, checkMode & ~CheckMode.SkipContextSensitive);
|
|
242
250
|
if (resolvedReturnTypeOf(c, signature) === undefined) signatureSideOf(c, signature).resolvedReturnType = returnType;
|
|
243
251
|
}
|
|
244
252
|
checkFunctionLikeSignature(c, node);
|
|
@@ -328,7 +336,12 @@ function assignParameterSymbolType(c: Checker, parameter: Symbol, contextualType
|
|
|
328
336
|
if (c.symbolTypes.get(id) !== undefined) return;
|
|
329
337
|
const declaration = parameter.valueDeclaration;
|
|
330
338
|
if (contextualType === undefined) {
|
|
331
|
-
c.symbolTypes.set(
|
|
339
|
+
c.symbolTypes.set(
|
|
340
|
+
id,
|
|
341
|
+
declaration !== undefined
|
|
342
|
+
? getWidenedTypeForVariableLikeDeclaration(c, declaration, true)
|
|
343
|
+
: getTypeOfSymbol(c, parameter),
|
|
344
|
+
);
|
|
332
345
|
return;
|
|
333
346
|
}
|
|
334
347
|
c.symbolTypes.set(
|
|
@@ -574,6 +587,9 @@ export function checkAwaitExpression(c: Checker, node: Node): Type {
|
|
|
574
587
|
export function checkYieldExpression(c: Checker, node: Node): Type {
|
|
575
588
|
checkGrammarYieldOfExpression(c, node);
|
|
576
589
|
const yieldExpr = node as YieldExpression;
|
|
590
|
+
// The operand is checked also outside a generator.
|
|
591
|
+
const operand = yieldExpr.expression;
|
|
592
|
+
const yieldExpressionType = operand !== undefined ? checkExpression(c, operand) : c.undefinedWideningType;
|
|
577
593
|
const func = getContainingFunctionLike(node);
|
|
578
594
|
if (func === undefined) return c.anyType;
|
|
579
595
|
const functionFlags = getFunctionFlags(func);
|
|
@@ -593,8 +609,6 @@ export function checkYieldExpression(c: Checker, node: Node): Type {
|
|
|
593
609
|
returnType !== undefined ? getIterationTypesOfGeneratorFunctionReturnType(c, returnType, isAsync) : undefined;
|
|
594
610
|
const signatureYieldType = iterationTypes?.yieldType ?? c.anyType;
|
|
595
611
|
const signatureNextType = iterationTypes?.nextType ?? c.anyType;
|
|
596
|
-
const operand = yieldExpr.expression;
|
|
597
|
-
const yieldExpressionType = operand !== undefined ? checkExpression(c, operand) : c.undefinedWideningType;
|
|
598
612
|
const yieldedType = getYieldedTypeOfYieldExpression(c, yieldExpr, yieldExpressionType, signatureNextType, isAsync);
|
|
599
613
|
if (returnType !== undefined && yieldedType !== undefined)
|
|
600
614
|
checkTypeAssignableToAndOptionallyElaborate(c, yieldedType, signatureYieldType, operand ?? node, operand);
|
|
@@ -1266,7 +1280,8 @@ function assignParameterType(c: Checker, declaration: Node): void {
|
|
|
1266
1280
|
if (symbol === undefined) return;
|
|
1267
1281
|
const id = getSymbolId(symbol);
|
|
1268
1282
|
if (c.symbolTypes.get(id) !== undefined) return;
|
|
1269
|
-
|
|
1283
|
+
// Without a context, the parameter's own type, reporting its implicit any errors.
|
|
1284
|
+
const t = getWidenedTypeForVariableLikeDeclaration(c, declaration, true);
|
|
1270
1285
|
c.symbolTypes.set(
|
|
1271
1286
|
id,
|
|
1272
1287
|
addOptionality(c, t, false, getInitializer(declaration) === undefined && isOptionalDeclaration(declaration)),
|
|
@@ -20,15 +20,6 @@ import { ModuleKind, ScriptTarget, getEmitModuleKind, getUseDefineForClassFields
|
|
|
20
20
|
import { moduleKindName } from './program-utilities.js';
|
|
21
21
|
import { SyntaxKind } from './syntax-kind.js';
|
|
22
22
|
|
|
23
|
-
/** A collision check that waits until the file is checked, when the flags it reads are complete. */
|
|
24
|
-
export class DeferredCollisionCheck {
|
|
25
|
-
constructor(
|
|
26
|
-
readonly node: Node,
|
|
27
|
-
/** `Reflect` rather than `WeakMap` and `WeakSet`. */
|
|
28
|
-
readonly reflect: boolean,
|
|
29
|
-
) {}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
23
|
/** An error that is not reported under noEmit, since it is about the emitted code. */
|
|
33
24
|
export function errorSkippedOnNoEmit(
|
|
34
25
|
c: Checker,
|
|
@@ -51,9 +42,9 @@ export function checkCollisionsForDeclarationName(c: Checker, node: Node, name:
|
|
|
51
42
|
c.languageVersion <= ScriptTarget.ES2021 &&
|
|
52
43
|
(needCollisionCheckForIdentifier(node, name, 'WeakMap') || needCollisionCheckForIdentifier(node, name, 'WeakSet'))
|
|
53
44
|
)
|
|
54
|
-
c.
|
|
45
|
+
c.deferDiagnostic(node, () => checkWeakMapSetCollision(c, node));
|
|
55
46
|
if (c.languageVersion <= ScriptTarget.ES2021 && needCollisionCheckForIdentifier(node, name, 'Reflect'))
|
|
56
|
-
c.
|
|
47
|
+
c.deferDiagnostic(node, () => checkReflectCollision(c, node));
|
|
57
48
|
if (isClassLike(node) && (node.flags & NodeFlags.Ambient) === 0 && getText(name) === 'Object') {
|
|
58
49
|
if (c.host.getEmitModuleFormatOfFile(getSourceFileOfNode(name)) < ModuleKind.ES2015)
|
|
59
50
|
c.error(
|
|
@@ -174,17 +165,6 @@ export function markSuperPropertyInStaticInitializer(c: Checker, node: Node): vo
|
|
|
174
165
|
c.nodeLinks(scope).flags |= NodeCheckFlags.ContainsSuperPropertyInStaticInitializer;
|
|
175
166
|
}
|
|
176
167
|
|
|
177
|
-
/** Reports the `WeakMap`, `WeakSet` and `Reflect` collisions found while checking the file. */
|
|
178
|
-
export function produceDeferredCollisionChecks(c: Checker): void {
|
|
179
|
-
const checks = c.deferredCollisionChecks;
|
|
180
|
-
if (checks.length === 0) return;
|
|
181
|
-
c.deferredCollisionChecks = [];
|
|
182
|
-
for (const check of checks) {
|
|
183
|
-
if (check.reflect) checkReflectCollision(c, check.node);
|
|
184
|
-
else checkWeakMapSetCollision(c, check.node);
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
|
|
188
168
|
function checkWeakMapSetCollision(c: Checker, node: Node): void {
|
|
189
169
|
const scope = getEnclosingBlockScopeContainer(node);
|
|
190
170
|
if (scope === undefined || (c.nodeLinks(scope).flags & NodeCheckFlags.ContainsClassWithPrivateIdentifiers) === 0)
|