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
|
@@ -98,7 +98,7 @@ export function getInferenceContext(c, node) {
|
|
|
98
98
|
}
|
|
99
99
|
/** The node a contextual type for `node` is pushed onto: an element for its attributes, which spans its children. */
|
|
100
100
|
function getContextNode(node) {
|
|
101
|
-
if (node.kind ===
|
|
101
|
+
if (node.kind === 294 /* SyntaxKind.JsxAttributes */ && node.parent.kind !== 287 /* SyntaxKind.JsxSelfClosingElement */)
|
|
102
102
|
return node.parent.parent;
|
|
103
103
|
return node;
|
|
104
104
|
}
|
|
@@ -175,56 +175,56 @@ export function getContextualTypeEx(c, node, contextFlags) {
|
|
|
175
175
|
if (parent === undefined)
|
|
176
176
|
return undefined;
|
|
177
177
|
switch (parent.kind) {
|
|
178
|
-
case
|
|
179
|
-
case
|
|
180
|
-
case
|
|
181
|
-
case
|
|
182
|
-
case
|
|
178
|
+
case 262 /* SyntaxKind.VariableDeclaration */:
|
|
179
|
+
case 171 /* SyntaxKind.Parameter */:
|
|
180
|
+
case 174 /* SyntaxKind.PropertyDeclaration */:
|
|
181
|
+
case 173 /* SyntaxKind.PropertySignature */:
|
|
182
|
+
case 210 /* SyntaxKind.BindingElement */:
|
|
183
183
|
if (getInitializer(parent) !== node)
|
|
184
184
|
return undefined;
|
|
185
185
|
return getContextualTypeForInitializerExpression(c, parent, contextFlags);
|
|
186
|
-
case
|
|
187
|
-
case
|
|
186
|
+
case 221 /* SyntaxKind.ArrowFunction */:
|
|
187
|
+
case 255 /* SyntaxKind.ReturnStatement */:
|
|
188
188
|
return getContextualTypeForReturnExpression(c, node);
|
|
189
|
-
case
|
|
189
|
+
case 231 /* SyntaxKind.YieldExpression */:
|
|
190
190
|
return getContextualTypeForYieldOperand(c, parent, contextFlags);
|
|
191
|
-
case
|
|
191
|
+
case 225 /* SyntaxKind.AwaitExpression */:
|
|
192
192
|
return getContextualTypeForAwaitOperand(c, parent, contextFlags);
|
|
193
|
-
case
|
|
194
|
-
case
|
|
193
|
+
case 215 /* SyntaxKind.CallExpression */:
|
|
194
|
+
case 216 /* SyntaxKind.NewExpression */:
|
|
195
195
|
return getContextualTypeForArgument(c, parent, node);
|
|
196
|
-
case
|
|
196
|
+
case 172 /* SyntaxKind.Decorator */: {
|
|
197
197
|
// A decorator expression is contextually typed by the call the runtime makes.
|
|
198
198
|
const signature = getDecoratorCallSignature(c, parent);
|
|
199
199
|
return signature !== undefined ? getOrCreateTypeFromSignature(c, signature) : undefined;
|
|
200
200
|
}
|
|
201
|
-
case
|
|
202
|
-
case
|
|
201
|
+
case 236 /* SyntaxKind.AsExpression */:
|
|
202
|
+
case 218 /* SyntaxKind.TypeAssertionExpression */: {
|
|
203
203
|
const typeNode = getType(parent);
|
|
204
204
|
return isConstTypeReference(typeNode)
|
|
205
205
|
? getContextualTypeEx(c, parent, contextFlags)
|
|
206
206
|
: getTypeFromTypeNode(c, typeNode);
|
|
207
207
|
}
|
|
208
|
-
case
|
|
208
|
+
case 240 /* SyntaxKind.SatisfiesExpression */:
|
|
209
209
|
return getTypeFromTypeNode(c, getType(parent));
|
|
210
|
-
case
|
|
210
|
+
case 279 /* SyntaxKind.ExportAssignment */: {
|
|
211
211
|
// A JSDoc `@type` on `export default`.
|
|
212
212
|
const typeNode = getType(parent);
|
|
213
213
|
return typeNode !== undefined ? getTypeFromTypeNode(c, typeNode) : undefined;
|
|
214
214
|
}
|
|
215
|
-
case
|
|
215
|
+
case 228 /* SyntaxKind.BinaryExpression */:
|
|
216
216
|
return getContextualTypeForBinaryOperand(c, parent, node, contextFlags);
|
|
217
|
-
case
|
|
218
|
-
case
|
|
217
|
+
case 304 /* SyntaxKind.PropertyAssignment */:
|
|
218
|
+
case 305 /* SyntaxKind.ShorthandPropertyAssignment */:
|
|
219
219
|
// The property's name gets the property's contextual type too.
|
|
220
220
|
return getContextualTypeForObjectLiteralElement(c, parent, contextFlags);
|
|
221
|
-
case
|
|
222
|
-
return node.kind ===
|
|
221
|
+
case 212 /* SyntaxKind.ObjectLiteralExpression */:
|
|
222
|
+
return node.kind === 176 /* SyntaxKind.MethodDeclaration */
|
|
223
223
|
? getContextualTypeForObjectLiteralElement(c, node, contextFlags)
|
|
224
224
|
: undefined;
|
|
225
|
-
case
|
|
225
|
+
case 306 /* SyntaxKind.SpreadAssignment */:
|
|
226
226
|
return getContextualTypeEx(c, parent.parent, contextFlags);
|
|
227
|
-
case
|
|
227
|
+
case 211 /* SyntaxKind.ArrayLiteralExpression */: {
|
|
228
228
|
const elements = parent.elements.nodes;
|
|
229
229
|
const index = indexOfNode(elements, node);
|
|
230
230
|
if (index < 0)
|
|
@@ -232,28 +232,28 @@ export function getContextualTypeEx(c, node, contextFlags) {
|
|
|
232
232
|
const spreads = getSpreadIndices(c, parent, elements);
|
|
233
233
|
return getContextualTypeForElementExpression(c, getApparentTypeOfContextualTypeEx(c, parent, contextFlags), index, elements.length, spreads.first, spreads.last);
|
|
234
234
|
}
|
|
235
|
-
case
|
|
235
|
+
case 229 /* SyntaxKind.ConditionalExpression */: {
|
|
236
236
|
const cond = parent;
|
|
237
237
|
return node === cond.whenTrue || node === cond.whenFalse
|
|
238
238
|
? getContextualTypeEx(c, parent, contextFlags)
|
|
239
239
|
: undefined;
|
|
240
240
|
}
|
|
241
|
-
case
|
|
241
|
+
case 241 /* SyntaxKind.TemplateSpan */: {
|
|
242
242
|
const template = parent.parent;
|
|
243
|
-
return template.parent !== undefined && template.parent.kind ===
|
|
243
|
+
return template.parent !== undefined && template.parent.kind === 217 /* SyntaxKind.TaggedTemplateExpression */
|
|
244
244
|
? getContextualTypeForArgument(c, template.parent, node)
|
|
245
245
|
: undefined;
|
|
246
246
|
}
|
|
247
|
-
case
|
|
248
|
-
case
|
|
247
|
+
case 219 /* SyntaxKind.ParenthesizedExpression */:
|
|
248
|
+
case 237 /* SyntaxKind.NonNullExpression */:
|
|
249
249
|
return getContextualTypeEx(c, parent, contextFlags);
|
|
250
|
-
case
|
|
250
|
+
case 296 /* SyntaxKind.JsxExpression */:
|
|
251
251
|
return getContextualTypeForJsxExpression(c, parent, contextFlags);
|
|
252
|
-
case
|
|
253
|
-
case
|
|
252
|
+
case 293 /* SyntaxKind.JsxAttribute */:
|
|
253
|
+
case 295 /* SyntaxKind.JsxSpreadAttribute */:
|
|
254
254
|
return getContextualTypeForJsxAttribute(c, parent, contextFlags);
|
|
255
|
-
case
|
|
256
|
-
case
|
|
255
|
+
case 288 /* SyntaxKind.JsxOpeningElement */:
|
|
256
|
+
case 287 /* SyntaxKind.JsxSelfClosingElement */:
|
|
257
257
|
return getContextualJsxElementAttributesType(c, parent, contextFlags);
|
|
258
258
|
}
|
|
259
259
|
return undefined;
|
|
@@ -266,7 +266,7 @@ function getContextualTypeForInitializerExpression(c, declaration, contextFlags)
|
|
|
266
266
|
const name = getName(declaration);
|
|
267
267
|
if ((contextFlags & 8 /* ContextFlags.SkipBindingPatterns */) === 0 &&
|
|
268
268
|
name !== undefined &&
|
|
269
|
-
(name.kind ===
|
|
269
|
+
(name.kind === 208 /* SyntaxKind.ObjectBindingPattern */ || name.kind === 209 /* SyntaxKind.ArrayBindingPattern */) &&
|
|
270
270
|
getElements(name).nodes.length > 0)
|
|
271
271
|
return getTypeFromBindingPattern(c, name, true, false);
|
|
272
272
|
return undefined;
|
|
@@ -275,17 +275,20 @@ function getContextualTypeForInitializer(c, declaration, contextFlags) {
|
|
|
275
275
|
const typeNode = getType(declaration);
|
|
276
276
|
if (typeNode !== undefined)
|
|
277
277
|
return getTypeFromTypeNode(c, typeNode);
|
|
278
|
-
if (declaration.kind ===
|
|
278
|
+
if (declaration.kind === 171 /* SyntaxKind.Parameter */)
|
|
279
279
|
return getContextuallyTypedParameterTypeOrUndefined(c, declaration);
|
|
280
|
-
if (declaration.kind ===
|
|
280
|
+
if (declaration.kind === 210 /* SyntaxKind.BindingElement */)
|
|
281
281
|
return getContextualTypeForBindingElement(c, declaration);
|
|
282
282
|
// A static property of a class expression takes the type of the same property of the class's contextual type.
|
|
283
|
-
if (declaration.kind ===
|
|
283
|
+
if (declaration.kind === 174 /* SyntaxKind.PropertyDeclaration */ &&
|
|
284
284
|
isStatic(declaration) &&
|
|
285
|
-
declaration.parent.kind ===
|
|
285
|
+
declaration.parent.kind === 233 /* SyntaxKind.ClassExpression */) {
|
|
286
286
|
const parentType = getContextualTypeEx(c, declaration.parent, contextFlags);
|
|
287
287
|
const symbol = getSymbolOfDeclaration(c, declaration);
|
|
288
|
-
|
|
288
|
+
// The class's own type might still be in progress, so contextually typing by it would report a spurious circularity.
|
|
289
|
+
if (parentType !== undefined &&
|
|
290
|
+
symbol !== undefined &&
|
|
291
|
+
parentType.symbol !== getSymbolOfDeclaration(c, declaration.parent))
|
|
289
292
|
return getTypeOfPropertyOfContextualType(c, parentType, symbol.name);
|
|
290
293
|
}
|
|
291
294
|
return undefined;
|
|
@@ -295,18 +298,18 @@ function getContextualTypeForBindingElement(c, declaration) {
|
|
|
295
298
|
const element = declaration;
|
|
296
299
|
const name = element.propertyName ?? element.name;
|
|
297
300
|
if (name === undefined ||
|
|
298
|
-
name.kind ===
|
|
299
|
-
name.kind ===
|
|
300
|
-
(name.kind ===
|
|
301
|
+
name.kind === 208 /* SyntaxKind.ObjectBindingPattern */ ||
|
|
302
|
+
name.kind === 209 /* SyntaxKind.ArrayBindingPattern */ ||
|
|
303
|
+
(name.kind === 169 /* SyntaxKind.ComputedPropertyName */ && !isLiteralComputedName(name)))
|
|
301
304
|
return undefined;
|
|
302
305
|
const parent = declaration.parent.parent;
|
|
303
306
|
let parentType = getContextualTypeForInitializer(c, parent, 0 /* ContextFlags.None */);
|
|
304
|
-
if (parentType === undefined && parent.kind !==
|
|
307
|
+
if (parentType === undefined && parent.kind !== 210 /* SyntaxKind.BindingElement */ && getInitializer(parent) !== undefined)
|
|
305
308
|
parentType = checkDeclarationInitializer(c, parent, element.dotDotDotToken !== undefined ? 32 /* CheckMode.RestBindingElement */ : 0 /* CheckMode.Normal */);
|
|
306
309
|
if (parentType === undefined)
|
|
307
310
|
return undefined;
|
|
308
311
|
const parentName = getName(parent);
|
|
309
|
-
if (parentName.kind ===
|
|
312
|
+
if (parentName.kind === 209 /* SyntaxKind.ArrayBindingPattern */) {
|
|
310
313
|
const index = getElements(parentName).nodes.indexOf(declaration);
|
|
311
314
|
if (index < 0)
|
|
312
315
|
return undefined;
|
|
@@ -498,7 +501,7 @@ function getSpreadIndices(c, node, elements) {
|
|
|
498
501
|
let first = -1;
|
|
499
502
|
let last = -1;
|
|
500
503
|
for (let i = 0; i < elements.length; i++)
|
|
501
|
-
if (elements[i].kind ===
|
|
504
|
+
if (elements[i].kind === 232 /* SyntaxKind.SpreadElement */) {
|
|
502
505
|
if (first < 0)
|
|
503
506
|
first = i;
|
|
504
507
|
last = i;
|
|
@@ -524,7 +527,7 @@ function getContextualTypeForObjectLiteralElement(c, element, contextFlags) {
|
|
|
524
527
|
let nameType = symbol !== undefined ? c.symbolNameTypes.get(getSymbolId(symbol)) : undefined;
|
|
525
528
|
// Late-bound members are named by the type of their computed name, like a unique symbol.
|
|
526
529
|
const nameNode = getName(element);
|
|
527
|
-
if (nameType === undefined && nameNode.kind ===
|
|
530
|
+
if (nameType === undefined && nameNode.kind === 169 /* SyntaxKind.ComputedPropertyName */)
|
|
528
531
|
nameType = checkComputedPropertyName(c, nameNode);
|
|
529
532
|
return getTypeOfPropertyOfContextualTypeEx(c, t, name, nameType);
|
|
530
533
|
}
|
|
@@ -629,7 +632,7 @@ function getTypeOfConcretePropertyOfContextualType(c, t, name) {
|
|
|
629
632
|
}
|
|
630
633
|
/** Whether the type of a mapped type property is being resolved. */
|
|
631
634
|
function isCircularMappedProperty(c, symbol) {
|
|
632
|
-
return ((symbol.checkFlags &
|
|
635
|
+
return ((symbol.checkFlags & 2097152 /* CheckFlags.Mapped */) !== 0 &&
|
|
633
636
|
c.symbolTypes.get(getSymbolId(symbol)) === undefined &&
|
|
634
637
|
findResolutionCycleStartIndex(c, symbol, 0 /* TypeSystemPropertyName.Type */) >= 0);
|
|
635
638
|
}
|
|
@@ -697,9 +700,9 @@ export function getApparentTypeOfContextualTypeEx(c, node, contextFlags) {
|
|
|
697
700
|
: mapTypeEx(c, t, (u) => ((u.objectFlags & 32 /* ObjectFlags.Mapped */) !== 0 ? u : getApparentType(c, u)), true);
|
|
698
701
|
if (apparentType === undefined)
|
|
699
702
|
return undefined;
|
|
700
|
-
if ((apparentType.flags & 134217728 /* TypeFlags.Union */) !== 0 && node.kind ===
|
|
703
|
+
if ((apparentType.flags & 134217728 /* TypeFlags.Union */) !== 0 && node.kind === 212 /* SyntaxKind.ObjectLiteralExpression */)
|
|
701
704
|
return discriminateContextualTypeByObjectMembers(c, node, apparentType);
|
|
702
|
-
if ((apparentType.flags & 134217728 /* TypeFlags.Union */) !== 0 && node.kind ===
|
|
705
|
+
if ((apparentType.flags & 134217728 /* TypeFlags.Union */) !== 0 && node.kind === 294 /* SyntaxKind.JsxAttributes */)
|
|
703
706
|
return discriminateContextualTypeByJSXAttributes(c, node, apparentType);
|
|
704
707
|
return apparentType;
|
|
705
708
|
}
|
|
@@ -732,10 +735,10 @@ function discriminateContextualTypeByObjectMembers(c, node, contextualType) {
|
|
|
732
735
|
const symbol = getSymbol(p);
|
|
733
736
|
if (symbol === undefined)
|
|
734
737
|
continue;
|
|
735
|
-
if ((p.kind ===
|
|
738
|
+
if ((p.kind === 304 /* SyntaxKind.PropertyAssignment */ &&
|
|
736
739
|
isPossiblyDiscriminantValue(p.initializer) &&
|
|
737
740
|
isDiscriminantProperty(c, contextualType, symbol.name)) ||
|
|
738
|
-
(p.kind ===
|
|
741
|
+
(p.kind === 305 /* SyntaxKind.ShorthandPropertyAssignment */ && isDiscriminantProperty(c, contextualType, symbol.name)))
|
|
739
742
|
props.push(p);
|
|
740
743
|
}
|
|
741
744
|
const nodeSymbol = getSymbol(node);
|
|
@@ -789,7 +792,7 @@ function getMatchingUnionConstituentForObjectLiteral(c, unionType, node) {
|
|
|
789
792
|
for (const p of getProperties(node).nodes) {
|
|
790
793
|
const symbol = getSymbol(p);
|
|
791
794
|
if (symbol !== undefined &&
|
|
792
|
-
p.kind ===
|
|
795
|
+
p.kind === 304 /* SyntaxKind.PropertyAssignment */ &&
|
|
793
796
|
symbol.name === keyPropertyName &&
|
|
794
797
|
isPossiblyDiscriminantValue(p.initializer)) {
|
|
795
798
|
propNode = p;
|
|
@@ -807,17 +810,17 @@ function isPossiblyDiscriminantValue(node) {
|
|
|
807
810
|
case 8 /* SyntaxKind.NumericLiteral */:
|
|
808
811
|
case 9 /* SyntaxKind.BigIntLiteral */:
|
|
809
812
|
case 14 /* SyntaxKind.NoSubstitutionTemplateLiteral */:
|
|
810
|
-
case
|
|
813
|
+
case 230 /* SyntaxKind.TemplateExpression */:
|
|
811
814
|
case 111 /* SyntaxKind.TrueKeyword */:
|
|
812
815
|
case 96 /* SyntaxKind.FalseKeyword */:
|
|
813
816
|
case 105 /* SyntaxKind.NullKeyword */:
|
|
814
817
|
case 79 /* SyntaxKind.Identifier */:
|
|
815
818
|
case 157 /* SyntaxKind.UndefinedKeyword */:
|
|
816
819
|
return true;
|
|
817
|
-
case
|
|
818
|
-
case
|
|
820
|
+
case 213 /* SyntaxKind.PropertyAccessExpression */:
|
|
821
|
+
case 219 /* SyntaxKind.ParenthesizedExpression */:
|
|
819
822
|
return isPossiblyDiscriminantValue(getExpression(node));
|
|
820
|
-
case
|
|
823
|
+
case 296 /* SyntaxKind.JsxExpression */: {
|
|
821
824
|
const expression = getExpression(node);
|
|
822
825
|
return expression === undefined || isPossiblyDiscriminantValue(expression);
|
|
823
826
|
}
|
|
@@ -912,7 +915,7 @@ function discriminantMatches(c, props, index, t) {
|
|
|
912
915
|
let propType;
|
|
913
916
|
if (index < props.length) {
|
|
914
917
|
const prop = props[index];
|
|
915
|
-
if (prop.kind ===
|
|
918
|
+
if (prop.kind === 304 /* SyntaxKind.PropertyAssignment */)
|
|
916
919
|
propType = getContextFreeTypeOfExpression(c, prop.initializer);
|
|
917
920
|
else if (prop instanceof JsxAttribute)
|
|
918
921
|
// An attribute without an initializer is `true`.
|
|
@@ -957,7 +960,7 @@ export function hasContextSensitiveParameters(func) {
|
|
|
957
960
|
for (const p of params)
|
|
958
961
|
if (getType(p) === undefined)
|
|
959
962
|
return true;
|
|
960
|
-
if (func.kind !==
|
|
963
|
+
if (func.kind !== 221 /* SyntaxKind.ArrowFunction */) {
|
|
961
964
|
// Without an explicit `this` parameter, the implicit one is contextually typed.
|
|
962
965
|
if (params.length === 0 || !isThisParameter(params[0]))
|
|
963
966
|
return (func.flags & 128 /* NodeFlags.ContainsThis */) !== 0;
|
|
@@ -1084,7 +1087,7 @@ export function getContextuallyTypedParameterType(c, parameter) {
|
|
|
1084
1087
|
}
|
|
1085
1088
|
/** The contextual type of an intra-expression inference site. */
|
|
1086
1089
|
export function getContextualTypeForInference(c, node) {
|
|
1087
|
-
return node.kind ===
|
|
1090
|
+
return node.kind === 176 /* SyntaxKind.MethodDeclaration */
|
|
1088
1091
|
? getContextualTypeForObjectLiteralElement(c, node, 2 /* ContextFlags.NoConstraints */)
|
|
1089
1092
|
: getContextualTypeEx(c, node, 2 /* ContextFlags.NoConstraints */);
|
|
1090
1093
|
}
|
|
@@ -1109,7 +1112,7 @@ function getThisTypeOfObjectLiteralFromContextualType(c, containingLiteral, cont
|
|
|
1109
1112
|
const thisType = getThisTypeFromContextualType(c, t);
|
|
1110
1113
|
if (thisType !== undefined)
|
|
1111
1114
|
return thisType;
|
|
1112
|
-
if (literal.parent.kind !==
|
|
1115
|
+
if (literal.parent.kind !== 304 /* SyntaxKind.PropertyAssignment */)
|
|
1113
1116
|
break;
|
|
1114
1117
|
literal = literal.parent.parent;
|
|
1115
1118
|
t = getApparentTypeOfContextualTypeEx(c, literal, 0 /* ContextFlags.None */);
|
|
@@ -25,7 +25,7 @@ export function checkResolvedBlockScopedVariable(c, resolved, errorLocation) {
|
|
|
25
25
|
let declaration;
|
|
26
26
|
for (let i = 0; i < declarationCount(result); i++) {
|
|
27
27
|
const d = declarationAt(result, i);
|
|
28
|
-
if (isBlockOrCatchScoped(d) || isClassLike(d) || d.kind ===
|
|
28
|
+
if (isBlockOrCatchScoped(d) || isClassLike(d) || d.kind === 268 /* SyntaxKind.EnumDeclaration */) {
|
|
29
29
|
declaration = d;
|
|
30
30
|
break;
|
|
31
31
|
}
|
|
@@ -37,13 +37,13 @@ export function checkResolvedBlockScopedVariable(c, resolved, errorLocation) {
|
|
|
37
37
|
const declarationName = declarationNameToString(getSourceFileOfNode(declaration), getNameOfDeclaration(declaration));
|
|
38
38
|
let diagnostic = undefined;
|
|
39
39
|
if ((result.flags & 2 /* SymbolFlags.BlockScopedVariable */) !== 0)
|
|
40
|
-
diagnostic = c.error(errorLocation,
|
|
40
|
+
diagnostic = c.error(errorLocation, 623 /* Diagnostics.Block_scoped_variable_0_used_before_its_declaration */, declarationName);
|
|
41
41
|
else if ((result.flags & 32 /* SymbolFlags.Class */) !== 0)
|
|
42
|
-
diagnostic = c.error(errorLocation,
|
|
42
|
+
diagnostic = c.error(errorLocation, 624 /* Diagnostics.Class_0_used_before_its_declaration */, declarationName);
|
|
43
43
|
else if ((result.flags & 256 /* SymbolFlags.RegularEnum */) !== 0 || c.isolatedModules)
|
|
44
|
-
diagnostic = c.error(errorLocation,
|
|
44
|
+
diagnostic = c.error(errorLocation, 625 /* Diagnostics.Enum_0_used_before_its_declaration */, declarationName);
|
|
45
45
|
if (diagnostic !== undefined)
|
|
46
|
-
diagnostic.addRelatedInfo(createDiagnosticForNode(declaration,
|
|
46
|
+
diagnostic.addRelatedInfo(createDiagnosticForNode(declaration, 867 /* Diagnostics.X_0_is_declared_here */, [declarationName]));
|
|
47
47
|
}
|
|
48
48
|
/** Reports a class property read in an initializer before it's initialized. */
|
|
49
49
|
export function checkPropertyNotUsedBeforeDeclaration(c, prop, node, right) {
|
|
@@ -56,33 +56,33 @@ export function checkPropertyNotUsedBeforeDeclaration(c, prop, node, right) {
|
|
|
56
56
|
!isOptionalPropertyDeclaration(valueDeclaration) &&
|
|
57
57
|
!(isAccessExpression(node) && isAccessExpression(getExpression(node))) &&
|
|
58
58
|
!isBlockScopedNameDeclaredBeforeUse(c, valueDeclaration, right) &&
|
|
59
|
-
!(valueDeclaration.kind ===
|
|
59
|
+
!(valueDeclaration.kind === 176 /* SyntaxKind.MethodDeclaration */ && isStatic(valueDeclaration)) &&
|
|
60
60
|
(getUseDefineForClassFields(c) || !isPropertyDeclaredInAncestorClass(c, prop)))
|
|
61
|
-
diagnostic = c.error(right,
|
|
62
|
-
else if (valueDeclaration.kind ===
|
|
63
|
-
node.parent.kind !==
|
|
61
|
+
diagnostic = c.error(right, 868 /* Diagnostics.Property_0_is_used_before_its_initialization */, declarationName);
|
|
62
|
+
else if (valueDeclaration.kind === 265 /* SyntaxKind.ClassDeclaration */ &&
|
|
63
|
+
node.parent.kind !== 185 /* SyntaxKind.TypeReference */ &&
|
|
64
64
|
(valueDeclaration.flags & 8388608 /* NodeFlags.Ambient */) === 0 &&
|
|
65
65
|
!isBlockScopedNameDeclaredBeforeUse(c, valueDeclaration, right))
|
|
66
|
-
diagnostic = c.error(right,
|
|
66
|
+
diagnostic = c.error(right, 624 /* Diagnostics.Class_0_used_before_its_declaration */, declarationName);
|
|
67
67
|
if (diagnostic !== undefined)
|
|
68
|
-
diagnostic.addRelatedInfo(createDiagnosticForNode(valueDeclaration,
|
|
68
|
+
diagnostic.addRelatedInfo(createDiagnosticForNode(valueDeclaration, 867 /* Diagnostics.X_0_is_declared_here */, [declarationName]));
|
|
69
69
|
}
|
|
70
70
|
export function isInPropertyInitializerOrClassStaticBlock(node, ignoreArrowFunctions) {
|
|
71
71
|
for (let current = node; current !== undefined; current = current.parent) {
|
|
72
72
|
switch (current.kind) {
|
|
73
|
-
case
|
|
74
|
-
case
|
|
73
|
+
case 174 /* SyntaxKind.PropertyDeclaration */:
|
|
74
|
+
case 177 /* SyntaxKind.ClassStaticBlockDeclaration */:
|
|
75
75
|
return true;
|
|
76
|
-
case
|
|
77
|
-
case
|
|
76
|
+
case 188 /* SyntaxKind.TypeQuery */:
|
|
77
|
+
case 289 /* SyntaxKind.JsxClosingElement */:
|
|
78
78
|
return false;
|
|
79
|
-
case
|
|
79
|
+
case 221 /* SyntaxKind.ArrowFunction */:
|
|
80
80
|
if (!ignoreArrowFunctions)
|
|
81
81
|
return false;
|
|
82
82
|
break;
|
|
83
|
-
case
|
|
83
|
+
case 243 /* SyntaxKind.Block */: {
|
|
84
84
|
const parent = current.parent;
|
|
85
|
-
if (isFunctionLike(parent) && parent.kind !==
|
|
85
|
+
if (isFunctionLike(parent) && parent.kind !== 221 /* SyntaxKind.ArrowFunction */)
|
|
86
86
|
return false;
|
|
87
87
|
}
|
|
88
88
|
}
|
|
@@ -90,7 +90,7 @@ export function isInPropertyInitializerOrClassStaticBlock(node, ignoreArrowFunct
|
|
|
90
90
|
return false;
|
|
91
91
|
}
|
|
92
92
|
function isOptionalPropertyDeclaration(node) {
|
|
93
|
-
if (node.kind !==
|
|
93
|
+
if (node.kind !== 174 /* SyntaxKind.PropertyDeclaration */)
|
|
94
94
|
return false;
|
|
95
95
|
const postfix = getPostfixToken(node);
|
|
96
96
|
return postfix !== undefined && postfix.kind === 57 /* SyntaxKind.QuestionToken */;
|
|
@@ -120,25 +120,25 @@ export function isBlockScopedNameDeclaredBeforeUse(c, declaration, usage) {
|
|
|
120
120
|
if ((usage.flags & 4194304 /* NodeFlags.JSDoc */) !== 0 || isPartOfTypeQuery(usage) || isInAmbientOrTypeNode(usage))
|
|
121
121
|
return true;
|
|
122
122
|
if (declaration.pos <= usage.pos &&
|
|
123
|
-
!(declaration.kind ===
|
|
123
|
+
!(declaration.kind === 174 /* SyntaxKind.PropertyDeclaration */ &&
|
|
124
124
|
isThisProperty(usage.parent) &&
|
|
125
125
|
getInitializer(declaration) === undefined &&
|
|
126
126
|
declaration.postfixToken?.kind !== 53 /* SyntaxKind.ExclamationToken */)) {
|
|
127
|
-
if (declaration.kind ===
|
|
127
|
+
if (declaration.kind === 210 /* SyntaxKind.BindingElement */) {
|
|
128
128
|
// Binding elements may use earlier siblings only (`var [a = b, b = b] = ...` is an error).
|
|
129
|
-
const errorBindingElement = findAncestorOfKind(usage,
|
|
129
|
+
const errorBindingElement = findAncestorOfKind(usage, 210 /* SyntaxKind.BindingElement */);
|
|
130
130
|
if (errorBindingElement !== undefined)
|
|
131
|
-
return (findAncestorOfKind(errorBindingElement,
|
|
132
|
-
findAncestorOfKind(declaration,
|
|
131
|
+
return (findAncestorOfKind(errorBindingElement, 210 /* SyntaxKind.BindingElement */) !==
|
|
132
|
+
findAncestorOfKind(declaration, 210 /* SyntaxKind.BindingElement */) || declaration.pos < errorBindingElement.pos);
|
|
133
133
|
// `var [a] = a` uses the variable before its declaration.
|
|
134
|
-
return isBlockScopedNameDeclaredBeforeUse(c, findAncestorOfKind(declaration,
|
|
134
|
+
return isBlockScopedNameDeclaredBeforeUse(c, findAncestorOfKind(declaration, 262 /* SyntaxKind.VariableDeclaration */), usage);
|
|
135
135
|
}
|
|
136
|
-
if (declaration.kind ===
|
|
136
|
+
if (declaration.kind === 262 /* SyntaxKind.VariableDeclaration */)
|
|
137
137
|
// `var a = a` uses the variable in its own initializer.
|
|
138
138
|
return !isImmediatelyUsedInInitializerOfBlockScopedVariable(declaration, usage, declContainer);
|
|
139
139
|
if (isClassLike(declaration))
|
|
140
140
|
return !isUsedInClassComputedNameOrDecorator(c, declaration, usage);
|
|
141
|
-
if (declaration.kind ===
|
|
141
|
+
if (declaration.kind === 174 /* SyntaxKind.PropertyDeclaration */)
|
|
142
142
|
// A self-referencing property initializer, as in `x = this.x`.
|
|
143
143
|
return !isPropertyImmediatelyReferencedWithinDeclaration(declaration, usage, false);
|
|
144
144
|
if (isParameterPropertyDeclaration(declaration, declaration.parent))
|
|
@@ -151,12 +151,12 @@ export function isBlockScopedNameDeclaredBeforeUse(c, declaration, usage) {
|
|
|
151
151
|
// Uses after the declaration are legal when deferred: in export specifiers and `export =`,
|
|
152
152
|
// functions, and instance property initializers referencing other members.
|
|
153
153
|
const parent = usage.parent;
|
|
154
|
-
if (parent.kind ===
|
|
154
|
+
if (parent.kind === 283 /* SyntaxKind.ExportSpecifier */ || isExportEquals(parent) || isExportEquals(usage))
|
|
155
155
|
return true;
|
|
156
156
|
if (isUsedInFunctionOrInstanceProperty(c, usage, declaration, declContainer)) {
|
|
157
157
|
if (getEmitStandardClassFields(c) &&
|
|
158
158
|
getContainingClass(declaration) !== undefined &&
|
|
159
|
-
(declaration.kind ===
|
|
159
|
+
(declaration.kind === 174 /* SyntaxKind.PropertyDeclaration */ ||
|
|
160
160
|
isParameterPropertyDeclaration(declaration, declaration.parent)))
|
|
161
161
|
return !isPropertyImmediatelyReferencedWithinDeclaration(declaration, usage, true);
|
|
162
162
|
return true;
|
|
@@ -164,7 +164,7 @@ export function isBlockScopedNameDeclaredBeforeUse(c, declaration, usage) {
|
|
|
164
164
|
return false;
|
|
165
165
|
}
|
|
166
166
|
function isExportEquals(node) {
|
|
167
|
-
return node.kind ===
|
|
167
|
+
return node.kind === 279 /* SyntaxKind.ExportAssignment */ && node.isExportEquals;
|
|
168
168
|
}
|
|
169
169
|
/**
|
|
170
170
|
* Whether a use of a class within its own declaration happens before the class exists: in a
|
|
@@ -174,24 +174,24 @@ function isUsedInClassComputedNameOrDecorator(c, declaration, usage) {
|
|
|
174
174
|
const legacyDecorators = c.compilerOptions.experimentalDecorators === true;
|
|
175
175
|
let container = usage;
|
|
176
176
|
while (container !== undefined && container !== declaration) {
|
|
177
|
-
if (container.kind ===
|
|
177
|
+
if (container.kind === 169 /* SyntaxKind.ComputedPropertyName */ && container.parent.parent === declaration)
|
|
178
178
|
break;
|
|
179
|
-
if (!legacyDecorators && container.kind ===
|
|
179
|
+
if (!legacyDecorators && container.kind === 172 /* SyntaxKind.Decorator */) {
|
|
180
180
|
const decorated = container.parent;
|
|
181
181
|
if (decorated === declaration ||
|
|
182
|
-
((decorated.kind ===
|
|
183
|
-
decorated.kind ===
|
|
184
|
-
decorated.kind ===
|
|
185
|
-
decorated.kind ===
|
|
182
|
+
((decorated.kind === 176 /* SyntaxKind.MethodDeclaration */ ||
|
|
183
|
+
decorated.kind === 179 /* SyntaxKind.GetAccessor */ ||
|
|
184
|
+
decorated.kind === 180 /* SyntaxKind.SetAccessor */ ||
|
|
185
|
+
decorated.kind === 174 /* SyntaxKind.PropertyDeclaration */) &&
|
|
186
186
|
decorated.parent === declaration) ||
|
|
187
|
-
(decorated.kind ===
|
|
187
|
+
(decorated.kind === 171 /* SyntaxKind.Parameter */ && decorated.parent.parent === declaration))
|
|
188
188
|
break;
|
|
189
189
|
}
|
|
190
190
|
container = container.parent;
|
|
191
191
|
}
|
|
192
192
|
if (container === undefined || container === declaration)
|
|
193
193
|
return false;
|
|
194
|
-
if (!legacyDecorators && container.kind ===
|
|
194
|
+
if (!legacyDecorators && container.kind === 172 /* SyntaxKind.Decorator */) {
|
|
195
195
|
let n = usage;
|
|
196
196
|
while (n !== undefined && n !== container) {
|
|
197
197
|
if (isFunctionLike(n) && getImmediatelyInvokedFunctionExpression(n) === undefined)
|
|
@@ -215,36 +215,36 @@ function isInAmbientOrTypeNode(node) {
|
|
|
215
215
|
if ((node.flags & 8388608 /* NodeFlags.Ambient */) !== 0)
|
|
216
216
|
return true;
|
|
217
217
|
for (let current = node; current !== undefined; current = current.parent)
|
|
218
|
-
if (current.kind ===
|
|
219
|
-
current.kind ===
|
|
220
|
-
current.kind ===
|
|
218
|
+
if (current.kind === 266 /* SyntaxKind.InterfaceDeclaration */ ||
|
|
219
|
+
current.kind === 267 /* SyntaxKind.TypeAliasDeclaration */ ||
|
|
220
|
+
current.kind === 189 /* SyntaxKind.TypeLiteral */)
|
|
221
221
|
return true;
|
|
222
222
|
return false;
|
|
223
223
|
}
|
|
224
224
|
export function getEnclosingBlockScopeContainer(node) {
|
|
225
225
|
for (let current = node.parent; current !== undefined; current = current.parent) {
|
|
226
226
|
switch (current.kind) {
|
|
227
|
-
case
|
|
228
|
-
case
|
|
229
|
-
case
|
|
230
|
-
case
|
|
231
|
-
case
|
|
232
|
-
case
|
|
233
|
-
case
|
|
234
|
-
case
|
|
235
|
-
case
|
|
236
|
-
case
|
|
237
|
-
case
|
|
238
|
-
case
|
|
239
|
-
case
|
|
240
|
-
case
|
|
241
|
-
case
|
|
242
|
-
case
|
|
227
|
+
case 308 /* SyntaxKind.SourceFile */:
|
|
228
|
+
case 271 /* SyntaxKind.CaseBlock */:
|
|
229
|
+
case 301 /* SyntaxKind.CatchClause */:
|
|
230
|
+
case 269 /* SyntaxKind.ModuleDeclaration */:
|
|
231
|
+
case 250 /* SyntaxKind.ForStatement */:
|
|
232
|
+
case 251 /* SyntaxKind.ForInStatement */:
|
|
233
|
+
case 252 /* SyntaxKind.ForOfStatement */:
|
|
234
|
+
case 178 /* SyntaxKind.Constructor */:
|
|
235
|
+
case 176 /* SyntaxKind.MethodDeclaration */:
|
|
236
|
+
case 179 /* SyntaxKind.GetAccessor */:
|
|
237
|
+
case 180 /* SyntaxKind.SetAccessor */:
|
|
238
|
+
case 264 /* SyntaxKind.FunctionDeclaration */:
|
|
239
|
+
case 220 /* SyntaxKind.FunctionExpression */:
|
|
240
|
+
case 221 /* SyntaxKind.ArrowFunction */:
|
|
241
|
+
case 174 /* SyntaxKind.PropertyDeclaration */:
|
|
242
|
+
case 177 /* SyntaxKind.ClassStaticBlockDeclaration */:
|
|
243
243
|
return current;
|
|
244
|
-
case
|
|
244
|
+
case 243 /* SyntaxKind.Block */: {
|
|
245
245
|
// Function bodies aren't block scope containers of their own.
|
|
246
246
|
const parent = current.parent;
|
|
247
|
-
if (!isFunctionLike(parent) && parent.kind !==
|
|
247
|
+
if (!isFunctionLike(parent) && parent.kind !== 177 /* SyntaxKind.ClassStaticBlockDeclaration */)
|
|
248
248
|
return current;
|
|
249
249
|
}
|
|
250
250
|
}
|
|
@@ -260,25 +260,25 @@ function isUsedInFunctionOrInstanceProperty(c, usage, declaration, declContainer
|
|
|
260
260
|
return true;
|
|
261
261
|
continue;
|
|
262
262
|
}
|
|
263
|
-
if (current.kind ===
|
|
263
|
+
if (current.kind === 177 /* SyntaxKind.ClassStaticBlockDeclaration */) {
|
|
264
264
|
if (declaration.pos < usage.pos)
|
|
265
265
|
return true;
|
|
266
266
|
continue;
|
|
267
267
|
}
|
|
268
268
|
const parent = current.parent;
|
|
269
|
-
if (parent !== undefined && parent.kind ===
|
|
269
|
+
if (parent !== undefined && parent.kind === 174 /* SyntaxKind.PropertyDeclaration */ && getInitializer(parent) === current) {
|
|
270
270
|
if (isStatic(parent)) {
|
|
271
|
-
if (declaration.kind ===
|
|
271
|
+
if (declaration.kind === 176 /* SyntaxKind.MethodDeclaration */)
|
|
272
272
|
return true;
|
|
273
273
|
// A static property assigned in a static block before the initializer.
|
|
274
|
-
if (declaration.kind ===
|
|
274
|
+
if (declaration.kind === 174 /* SyntaxKind.PropertyDeclaration */ &&
|
|
275
275
|
getContainingClass(usage) === getContainingClass(declaration)) {
|
|
276
276
|
const propName = getName(declaration);
|
|
277
277
|
if (propName.kind === 79 /* SyntaxKind.Identifier */ || propName.kind === 80 /* SyntaxKind.PrivateIdentifier */) {
|
|
278
278
|
const symbol = getSymbolOfDeclaration(c, declaration);
|
|
279
279
|
const staticBlocks = [];
|
|
280
280
|
for (const m of getMembers(declaration.parent).nodes)
|
|
281
|
-
if (m.kind ===
|
|
281
|
+
if (m.kind === 177 /* SyntaxKind.ClassStaticBlockDeclaration */)
|
|
282
282
|
staticBlocks.push(m);
|
|
283
283
|
if (symbol !== undefined &&
|
|
284
284
|
isPropertyInitializedInStaticBlocks(c, propName, getTypeOfSymbol(c, symbol), staticBlocks, declaration.parent.pos, current.pos))
|
|
@@ -287,16 +287,16 @@ function isUsedInFunctionOrInstanceProperty(c, usage, declaration, declContainer
|
|
|
287
287
|
}
|
|
288
288
|
}
|
|
289
289
|
else {
|
|
290
|
-
const isDeclarationInstanceProperty = declaration.kind ===
|
|
290
|
+
const isDeclarationInstanceProperty = declaration.kind === 174 /* SyntaxKind.PropertyDeclaration */ && !isStatic(declaration);
|
|
291
291
|
if (!isDeclarationInstanceProperty || getContainingClass(usage) !== getContainingClass(declaration))
|
|
292
292
|
return true;
|
|
293
293
|
}
|
|
294
294
|
}
|
|
295
|
-
if (parent !== undefined && parent.kind ===
|
|
295
|
+
if (parent !== undefined && parent.kind === 172 /* SyntaxKind.Decorator */ && getExpression(parent) === current) {
|
|
296
296
|
const decorated = parent.parent;
|
|
297
|
-
if (decorated.kind ===
|
|
297
|
+
if (decorated.kind === 171 /* SyntaxKind.Parameter */)
|
|
298
298
|
return isUsedInFunctionOrInstanceProperty(c, decorated.parent.parent, declaration, declContainer);
|
|
299
|
-
if (decorated.kind ===
|
|
299
|
+
if (decorated.kind === 176 /* SyntaxKind.MethodDeclaration */)
|
|
300
300
|
return isUsedInFunctionOrInstanceProperty(c, decorated.parent, declaration, declContainer);
|
|
301
301
|
}
|
|
302
302
|
}
|
|
@@ -305,15 +305,15 @@ function isUsedInFunctionOrInstanceProperty(c, usage, declaration, declContainer
|
|
|
305
305
|
function isImmediatelyUsedInInitializerOfBlockScopedVariable(declaration, usage, declContainer) {
|
|
306
306
|
const grandparent = declaration.parent.parent;
|
|
307
307
|
switch (grandparent.kind) {
|
|
308
|
-
case
|
|
309
|
-
case
|
|
310
|
-
case
|
|
308
|
+
case 245 /* SyntaxKind.VariableStatement */:
|
|
309
|
+
case 250 /* SyntaxKind.ForStatement */:
|
|
310
|
+
case 252 /* SyntaxKind.ForOfStatement */:
|
|
311
311
|
// The use is within the declaration: its initializer or a binding element.
|
|
312
312
|
if (isSameScopeDescendentOf(usage, declaration, declContainer))
|
|
313
313
|
return true;
|
|
314
314
|
}
|
|
315
315
|
// In `for (... in/of expr)`, the use is within the expression.
|
|
316
|
-
return ((grandparent.kind ===
|
|
316
|
+
return ((grandparent.kind === 251 /* SyntaxKind.ForInStatement */ || grandparent.kind === 252 /* SyntaxKind.ForOfStatement */) &&
|
|
317
317
|
isSameScopeDescendentOf(usage, getExpression(grandparent), declContainer));
|
|
318
318
|
}
|
|
319
319
|
/** Whether `initial` is within `parent` without crossing `stopAt` or a function that isn't an IIFE. */
|
|
@@ -337,19 +337,19 @@ function isPropertyImmediatelyReferencedWithinDeclaration(declaration, usage, st
|
|
|
337
337
|
return false;
|
|
338
338
|
for (let node = usage; node !== undefined && node !== declaration; node = node.parent) {
|
|
339
339
|
switch (node.kind) {
|
|
340
|
-
case
|
|
340
|
+
case 221 /* SyntaxKind.ArrowFunction */:
|
|
341
341
|
return false;
|
|
342
|
-
case
|
|
342
|
+
case 174 /* SyntaxKind.PropertyDeclaration */:
|
|
343
343
|
// Even when stopping at any property declaration, it must be in the same class.
|
|
344
344
|
return (stopAtAnyPropertyDeclaration &&
|
|
345
|
-
((declaration.kind ===
|
|
345
|
+
((declaration.kind === 174 /* SyntaxKind.PropertyDeclaration */ && node.parent === declaration.parent) ||
|
|
346
346
|
(isParameterPropertyDeclaration(declaration, declaration.parent) &&
|
|
347
347
|
node.parent === declaration.parent.parent)));
|
|
348
|
-
case
|
|
348
|
+
case 243 /* SyntaxKind.Block */:
|
|
349
349
|
switch (node.parent.kind) {
|
|
350
|
-
case
|
|
351
|
-
case
|
|
352
|
-
case
|
|
350
|
+
case 176 /* SyntaxKind.MethodDeclaration */:
|
|
351
|
+
case 179 /* SyntaxKind.GetAccessor */:
|
|
352
|
+
case 180 /* SyntaxKind.SetAccessor */:
|
|
353
353
|
return false;
|
|
354
354
|
}
|
|
355
355
|
}
|