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
package/src/compiler/checker.ts
CHANGED
|
@@ -29,13 +29,26 @@
|
|
|
29
29
|
// | checker-elaboration.ts | reporting relation errors at the failing subexpression |
|
|
30
30
|
// | checker-grammar.ts | grammar checks |
|
|
31
31
|
// | checker-flow.ts | control flow narrowing |
|
|
32
|
-
import type {
|
|
32
|
+
import type { ModuleSpecifierResult } from './node-builder-names.js';
|
|
33
33
|
import type { EmitHelperFileLinks } from './checker-emit-helpers.js';
|
|
34
34
|
import { sideOf } from './side-state.js';
|
|
35
35
|
import type { Node, PatternAmbientModule, SourceFile } from './ast.js';
|
|
36
|
-
import {
|
|
36
|
+
import {
|
|
37
|
+
CompactIntLinkTable,
|
|
38
|
+
CompactLinkTable,
|
|
39
|
+
IntLinkTable,
|
|
40
|
+
LinkTable,
|
|
41
|
+
PagedIdSet,
|
|
42
|
+
SparseLinkTable,
|
|
43
|
+
} from './link-tables.js';
|
|
37
44
|
import { getErrorRangeForNode, getSourceFileOfNode } from './binder-utilities.js';
|
|
38
|
-
import {
|
|
45
|
+
import {
|
|
46
|
+
Diagnostic,
|
|
47
|
+
type DiagnosticMessage,
|
|
48
|
+
Diagnostics,
|
|
49
|
+
compareDiagnostics,
|
|
50
|
+
equalDiagnostics,
|
|
51
|
+
} from './diagnostics.js';
|
|
39
52
|
import {
|
|
40
53
|
type CompilerOptions,
|
|
41
54
|
ModuleKind,
|
|
@@ -51,6 +64,7 @@ import {
|
|
|
51
64
|
IntrinsicType,
|
|
52
65
|
LiteralType,
|
|
53
66
|
MemberNames,
|
|
67
|
+
NamedMemberOrder,
|
|
54
68
|
NodeLinks,
|
|
55
69
|
ObjectFlags,
|
|
56
70
|
ObjectType,
|
|
@@ -70,6 +84,8 @@ import {
|
|
|
70
84
|
type ConditionalType,
|
|
71
85
|
type InterfaceType,
|
|
72
86
|
type TypeChecking,
|
|
87
|
+
type ConditionalResultKey,
|
|
88
|
+
type DistributedConditional,
|
|
73
89
|
} from './checker-types.js';
|
|
74
90
|
import { getBaseTypes } from './checker-declared-types.js';
|
|
75
91
|
import type { ModuleResolution } from './checker-modules.js';
|
|
@@ -101,19 +117,28 @@ import {
|
|
|
101
117
|
mergeAmbientModulesAndAugmentations,
|
|
102
118
|
} from './checker-symbols.js';
|
|
103
119
|
import { PermissiveMapper, ReportingMapper, RestrictiveMapper, UniqueLiteralMapper } from './instantiation.js';
|
|
104
|
-
import {
|
|
105
|
-
|
|
120
|
+
import {
|
|
121
|
+
Relation,
|
|
122
|
+
RelationKey,
|
|
123
|
+
type InternedRelationKey,
|
|
124
|
+
type Relater,
|
|
125
|
+
TypeComparer,
|
|
126
|
+
type VarianceStackEntry,
|
|
127
|
+
} from './relations.js';
|
|
128
|
+
import { TypeNodeVisitor, checkSourceFile, produceDeferredDiagnostics } from './checker-source-file.js';
|
|
129
|
+
import { checkObjectLiteralDeprecations } from './checker-deprecation.js';
|
|
106
130
|
import { InferenceCaches } from './checker-inference.js';
|
|
107
131
|
import { AssignmentMarker, type FlowLoopInfo, type FlowState, type FlowWalk } from './checker-narrowing.js';
|
|
108
132
|
import type { FlowNode, FlowReduceLabel } from './flow.js';
|
|
109
133
|
import { JsxState } from './checker-jsx.js';
|
|
110
|
-
import type {
|
|
134
|
+
import type { IterationTypes } from './checker-iteration.js';
|
|
111
135
|
import type { SpreadIndices } from './checker-contextual.js';
|
|
112
136
|
import { SourceFileMetadata, getEmitModuleFormatOfFile } from './program-utilities.js';
|
|
113
137
|
import type { GrammarChecker } from './checker-grammar.js';
|
|
114
138
|
import type { ResolvedModule } from './module-resolution-types.js';
|
|
115
139
|
import type { ModuleSpecifierHost } from './module-specifiers.js';
|
|
116
140
|
import type { PropertyListIndex } from './checker-members.js';
|
|
141
|
+
import { shareThreads, startThreadSharing, type ThreadSharing } from './shared-results.js';
|
|
117
142
|
|
|
118
143
|
/** What the checker needs from a program. */
|
|
119
144
|
export abstract class CheckerHost {
|
|
@@ -186,22 +211,36 @@ export abstract class CheckerHost {
|
|
|
186
211
|
}
|
|
187
212
|
}
|
|
188
213
|
|
|
189
|
-
/**
|
|
214
|
+
/**
|
|
215
|
+
* Per-file and global diagnostics, sorted on read like tsgo's DiagnosticsCollection, which keeps one of
|
|
216
|
+
* each set of equal diagnostics.
|
|
217
|
+
*/
|
|
190
218
|
class DiagnosticCollection {
|
|
191
219
|
private readonly byFile = new Map<string, Diagnostic[]>();
|
|
192
220
|
private readonly sortedFiles = new Set<string>();
|
|
193
221
|
private readonly global: Diagnostic[] = [];
|
|
194
222
|
private globalSorted = true;
|
|
195
|
-
/** The diagnostics
|
|
223
|
+
/** The diagnostics at each file, position, end and code, to find an equal one when adding. */
|
|
224
|
+
private readonly byLocation = new Map<string, Diagnostic[]>();
|
|
225
|
+
/** The diagnostics reported since `startLog`, while recording, also those equal to one already added. */
|
|
196
226
|
private log: Diagnostic[] | undefined = undefined;
|
|
197
227
|
|
|
198
|
-
|
|
228
|
+
/** Adds `diagnostic` unless an equal one was added; returns the one the collection holds. */
|
|
229
|
+
add(diagnostic: Diagnostic): Diagnostic {
|
|
199
230
|
if (this.log !== undefined) this.log.push(diagnostic);
|
|
231
|
+
if (this.added !== undefined) this.added.push(diagnostic);
|
|
200
232
|
const file = diagnostic.file;
|
|
233
|
+
const key = `${file === undefined ? '' : file.fileName}\0${diagnostic.pos}\0${diagnostic.end}\0${diagnostic.code}`;
|
|
234
|
+
const existing = this.byLocation.get(key);
|
|
235
|
+
if (existing === undefined) this.byLocation.set(key, [diagnostic]);
|
|
236
|
+
else {
|
|
237
|
+
for (const d of existing) if (equalDiagnostics(d, diagnostic)) return d;
|
|
238
|
+
existing.push(diagnostic);
|
|
239
|
+
}
|
|
201
240
|
if (file === undefined) {
|
|
202
241
|
this.global.push(diagnostic);
|
|
203
242
|
this.globalSorted = false;
|
|
204
|
-
return;
|
|
243
|
+
return diagnostic;
|
|
205
244
|
}
|
|
206
245
|
let list = this.byFile.get(file.fileName);
|
|
207
246
|
if (list === undefined) {
|
|
@@ -210,6 +249,7 @@ class DiagnosticCollection {
|
|
|
210
249
|
}
|
|
211
250
|
list.push(diagnostic);
|
|
212
251
|
this.sortedFiles.delete(file.fileName);
|
|
252
|
+
return diagnostic;
|
|
213
253
|
}
|
|
214
254
|
|
|
215
255
|
forFile(fileName: string): Diagnostic[] {
|
|
@@ -245,6 +285,44 @@ class DiagnosticCollection {
|
|
|
245
285
|
return this.global.slice();
|
|
246
286
|
}
|
|
247
287
|
|
|
288
|
+
/** The global diagnostics `withoutNewGlobals` removed. */
|
|
289
|
+
removedGlobals = 0;
|
|
290
|
+
/** Where results are shared between checker threads (shared-results.ts): every diagnostic added, in order. */
|
|
291
|
+
added: Diagnostic[] | undefined = undefined;
|
|
292
|
+
|
|
293
|
+
/** Runs `run`, then removes the global diagnostics it added. */
|
|
294
|
+
withoutNewGlobals<T>(run: () => T): T {
|
|
295
|
+
const outer = this.log;
|
|
296
|
+
const added: Diagnostic[] = [];
|
|
297
|
+
this.log = added;
|
|
298
|
+
try {
|
|
299
|
+
return run();
|
|
300
|
+
} finally {
|
|
301
|
+
this.log = outer;
|
|
302
|
+
if (outer !== undefined) for (const d of added) outer.push(d);
|
|
303
|
+
const globals = new Set<Diagnostic>();
|
|
304
|
+
for (const d of added) if (d.file === undefined) globals.add(d);
|
|
305
|
+
if (globals.size > 0) {
|
|
306
|
+
let kept = 0;
|
|
307
|
+
for (const d of this.global) {
|
|
308
|
+
if (!globals.has(d)) this.global[kept++] = d;
|
|
309
|
+
else this.forget(d);
|
|
310
|
+
}
|
|
311
|
+
this.removedGlobals += this.global.length - kept;
|
|
312
|
+
this.global.length = kept;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
/** Removes the global diagnostic `diagnostic` from the location index. */
|
|
318
|
+
private forget(diagnostic: Diagnostic): void {
|
|
319
|
+
const key = `\0${diagnostic.pos}\0${diagnostic.end}\0${diagnostic.code}`;
|
|
320
|
+
const existing = this.byLocation.get(key);
|
|
321
|
+
if (existing === undefined) return;
|
|
322
|
+
const at = existing.indexOf(diagnostic);
|
|
323
|
+
if (at >= 0) existing.splice(at, 1);
|
|
324
|
+
}
|
|
325
|
+
|
|
248
326
|
/** Records the diagnostics added from now on. */
|
|
249
327
|
startLog(): void {
|
|
250
328
|
this.log = [];
|
|
@@ -336,10 +414,20 @@ export class Checker implements TypeChecking {
|
|
|
336
414
|
readonly memberPositionsInLists = new Map<Symbol[], Map<string, number>>();
|
|
337
415
|
/** The property names of the last instantiation of each such list whose table is built on demand. */
|
|
338
416
|
readonly memberNamesOfLists = new Map<Symbol[], MemberNames>();
|
|
417
|
+
/** The property order of the instantiations of each such list (`NamedMemberOrder`); null where it has none. */
|
|
418
|
+
readonly namedMemberOrdersOfLists = new Map<Symbol[], NamedMemberOrder | null>();
|
|
339
419
|
/** Long lists of inherited properties, by name. */
|
|
340
420
|
readonly propertiesByName = new Map<Symbol[], Map<string, Symbol>>();
|
|
341
421
|
/** Number of `typeToString` calls in progress. */
|
|
342
422
|
serializationLevel = 0;
|
|
423
|
+
/**
|
|
424
|
+
* `typeToString` results by type, enclosing declaration, flags and the type parameter of the variance check in
|
|
425
|
+
* progress: the prints that created no types, which a later print with the same inputs repeats exactly
|
|
426
|
+
* (`typeToString`).
|
|
427
|
+
*/
|
|
428
|
+
readonly typeStrings = new Map<string, string>();
|
|
429
|
+
/** `symbolToString` results by symbol, then by enclosing declaration and flags, kept as `typeStrings` are. */
|
|
430
|
+
readonly symbolStrings = new Map<Symbol, Map<string, string>>();
|
|
343
431
|
/** Whether `globalObjectType` is set; global type lookups before it can't suggest `typeof`. */
|
|
344
432
|
hasGlobalObjectType = false;
|
|
345
433
|
/** The node being checked, for errors with no better location. */
|
|
@@ -357,7 +445,7 @@ export class Checker implements TypeChecking {
|
|
|
357
445
|
*/
|
|
358
446
|
modulesMerged = false;
|
|
359
447
|
/** Module specifiers of `import("…")` types, by module symbol id, importing file path and resolution mode. */
|
|
360
|
-
readonly moduleSpecifiers = new Map<string,
|
|
448
|
+
readonly moduleSpecifiers = new Map<string, ModuleSpecifierResult>();
|
|
361
449
|
/** Specifier generation for hosts without a program. */
|
|
362
450
|
fallbackModuleSpecifierHost: ModuleSpecifierHost | undefined = undefined;
|
|
363
451
|
|
|
@@ -375,6 +463,9 @@ export class Checker implements TypeChecking {
|
|
|
375
463
|
* so far; null where a list repeats a name.
|
|
376
464
|
*/
|
|
377
465
|
readonly propertyListIndexes = new Map<Symbol[], PropertyListIndex | number | null>();
|
|
466
|
+
// Types, targets and mappers of symbols keep a slot per id: they are dense enough, and read on hot
|
|
467
|
+
// paths. The other symbol columns, which most symbols leave empty, keep only their values
|
|
468
|
+
// (CompactLinkTable).
|
|
378
469
|
/** The type of a value symbol. */
|
|
379
470
|
readonly symbolTypes = new LinkTable<Type>();
|
|
380
471
|
/** For instantiated and synthetic symbols, the symbol they come from. */
|
|
@@ -382,24 +473,24 @@ export class Checker implements TypeChecking {
|
|
|
382
473
|
/** The mapper of an instantiated symbol or a mapped type property. */
|
|
383
474
|
readonly symbolMappers = new LinkTable<TypeMapper>();
|
|
384
475
|
/** The literal type of a property name. */
|
|
385
|
-
readonly symbolNameTypes = new
|
|
476
|
+
readonly symbolNameTypes = new CompactLinkTable<Type>();
|
|
386
477
|
/** The mapped type of a mapped type property, or the union/intersection of a synthetic property. */
|
|
387
|
-
readonly symbolContainingTypes = new
|
|
478
|
+
readonly symbolContainingTypes = new CompactLinkTable<Type>();
|
|
388
479
|
/** The key type of a mapped type property. */
|
|
389
|
-
readonly symbolKeyTypes = new
|
|
480
|
+
readonly symbolKeyTypes = new CompactLinkTable<Type>();
|
|
390
481
|
/** The property a mapped, spread or synthetic property comes from. */
|
|
391
|
-
readonly symbolSyntheticOrigins = new
|
|
482
|
+
readonly symbolSyntheticOrigins = new CompactLinkTable<Symbol>();
|
|
392
483
|
/** The left and right properties a spread property combines. */
|
|
393
|
-
readonly symbolLeftSpreads = new
|
|
394
|
-
readonly symbolRightSpreads = new
|
|
484
|
+
readonly symbolLeftSpreads = new CompactLinkTable<Symbol>();
|
|
485
|
+
readonly symbolRightSpreads = new CompactLinkTable<Symbol>();
|
|
395
486
|
/** Bits of SymbolFlags for the meanings in which a symbol was referenced. */
|
|
396
|
-
readonly symbolReferenceKinds = new
|
|
487
|
+
readonly symbolReferenceKinds = new CompactIntLinkTable();
|
|
397
488
|
/** The resolved symbol of an identifier, entity name or call. */
|
|
398
|
-
readonly resolvedSymbols = new
|
|
489
|
+
readonly resolvedSymbols = new CompactLinkTable<Symbol>();
|
|
399
490
|
/** The resolved type of a type node or expression. */
|
|
400
|
-
readonly resolvedTypes = new
|
|
491
|
+
readonly resolvedTypes = new CompactLinkTable<Type>();
|
|
401
492
|
/** The resolved signature of a call-like node or a signature declaration. */
|
|
402
|
-
readonly resolvedSignatures = new
|
|
493
|
+
readonly resolvedSignatures = new CompactLinkTable<Signature>();
|
|
403
494
|
/** Merged symbols, indexed by the id of the symbol merged into them. */
|
|
404
495
|
readonly mergedSymbols: Map<number, Symbol>;
|
|
405
496
|
/**
|
|
@@ -576,15 +667,21 @@ export class Checker implements TypeChecking {
|
|
|
576
667
|
|
|
577
668
|
// Resolution stacks for cycle detection (see pushTypeResolution).
|
|
578
669
|
resolutionStart = 0;
|
|
579
|
-
|
|
670
|
+
/** The generic types whose variances are being computed, outermost first. */
|
|
671
|
+
varianceStack: VarianceStackEntry[] = [];
|
|
580
672
|
|
|
581
673
|
// Instantiation
|
|
582
674
|
instantiationDepth = 0;
|
|
675
|
+
/** The types being instantiated, outermost first: the first `instantiationDepth` entries are current. */
|
|
676
|
+
readonly instantiationStack: Type[] = [];
|
|
677
|
+
/** The calls being resolved, outermost first: the first `callResolutionDepth` entries are current. */
|
|
678
|
+
readonly callResolutionStack: Node[] = [];
|
|
679
|
+
callResolutionDepth = 0;
|
|
583
680
|
instantiationCount = 0;
|
|
584
681
|
/** Instantiations over the checker's lifetime (statistics). */
|
|
585
682
|
totalInstantiations = 0;
|
|
586
|
-
/**
|
|
587
|
-
|
|
683
|
+
/** Ids of the mappers of the instantiations in progress: the first `activeMapperDepth` entries are live. */
|
|
684
|
+
activeMapperIds = new Int32Array(16);
|
|
588
685
|
activeMapperDepth = 0;
|
|
589
686
|
/** Per active mapper: its instantiations by type id, created on the first nested write. */
|
|
590
687
|
readonly activeMapperCaches: (Map<number, Type> | undefined)[] = [];
|
|
@@ -599,21 +696,35 @@ export class Checker implements TypeChecking {
|
|
|
599
696
|
/** Empty lists for type arguments that are compared with cached instantiations before any is kept. */
|
|
600
697
|
readonly freeTypeLists: Type[][] = [];
|
|
601
698
|
/**
|
|
602
|
-
*
|
|
699
|
+
* The ids of the anonymous and mapped types whose declaration has no outer type parameters
|
|
603
700
|
* to instantiate (`getObjectTypeInstantiation`).
|
|
604
701
|
*/
|
|
605
|
-
readonly withoutOuterTypeParameters = new
|
|
702
|
+
readonly withoutOuterTypeParameters = new PagedIdSet();
|
|
606
703
|
conditionalConstraintDepth = 0;
|
|
607
704
|
|
|
608
705
|
readonly suggestionResolver: SuggestionNameResolver;
|
|
609
706
|
readonly awaitedTypeStack: number[] = [];
|
|
610
707
|
/** Iteration types by type id and iteration use. */
|
|
611
708
|
readonly iterationTypesCache = new Map<number, IterationTypes>();
|
|
612
|
-
/**
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
709
|
+
/**
|
|
710
|
+
* Diagnostics reported after the checks of the file being checked, or before the next global
|
|
711
|
+
* diagnostics are read, in the order they were deferred. Reporting them earlier could resolve types
|
|
712
|
+
* that are being resolved.
|
|
713
|
+
*/
|
|
714
|
+
deferredDiagnostics: (() => void)[] = [];
|
|
715
|
+
|
|
716
|
+
/** Defers the diagnostic `report` reports at `node` (`deferredDiagnostics`). */
|
|
717
|
+
deferDiagnostic(node: Node, report: () => void): void {
|
|
718
|
+
this.deferredDiagnostics.push(report);
|
|
719
|
+
if (this.deferredDiagnosticFiles !== undefined)
|
|
720
|
+
this.deferredDiagnosticFiles.push(getSourceFileOfNode(node).fileName);
|
|
721
|
+
}
|
|
722
|
+
|
|
723
|
+
/**
|
|
724
|
+
* The checked object literals of each file whose members may set deprecated properties of their contextual
|
|
725
|
+
* types, reported when the file's suggestion diagnostics are asked for (`checkObjectLiteralDeprecations`).
|
|
726
|
+
*/
|
|
727
|
+
readonly objectLiteralsForDeprecations = new Map<SourceFile, Node[]>();
|
|
617
728
|
/** Binding patterns whose implied type is being computed as a contextual type. */
|
|
618
729
|
readonly contextualBindingPatterns: Node[] = [];
|
|
619
730
|
/** The binding pattern or assignment pattern that implied each type. */
|
|
@@ -666,11 +777,13 @@ export class Checker implements TypeChecking {
|
|
|
666
777
|
flowTypeCache: Map<Node, Type> | undefined = undefined;
|
|
667
778
|
flowInvocationCount = 0;
|
|
668
779
|
/** The reduce labels being passed, innermost last; each limits its target label's antecedents. */
|
|
669
|
-
|
|
780
|
+
flowReduceLabels: FlowReduceLabel[] = [];
|
|
670
781
|
readonly flowNodeReachable = new Map<FlowNode, boolean>();
|
|
671
782
|
readonly flowNodePostSuper = new Map<FlowNode, boolean>();
|
|
672
783
|
lastFlowNode: FlowNode | undefined = undefined;
|
|
673
784
|
lastFlowNodeReachable = false;
|
|
785
|
+
/** Symbols whose explicit type is being found, for flow analysis of self-referential `for...of`. */
|
|
786
|
+
readonly resolvingExplicitTypeOfSymbol = new Set<Symbol>();
|
|
674
787
|
readonly assignmentMarker: AssignmentMarker;
|
|
675
788
|
readonly primitiveTypeAliasSuggestions = new Map<string, Symbol>();
|
|
676
789
|
|
|
@@ -697,6 +810,9 @@ export class Checker implements TypeChecking {
|
|
|
697
810
|
readonly ambientModuleSymbols: Symbol[] = [];
|
|
698
811
|
readonly patternAmbientModules: PatternAmbientModule[] = [];
|
|
699
812
|
readonly patternAmbientModuleAugmentations = new Map<string, Symbol>();
|
|
813
|
+
/** The pattern module each entry of `patternAmbientModuleAugmentations` augments. */
|
|
814
|
+
readonly patternAmbientModuleAugmentationTargets = new Map<string, Symbol>();
|
|
815
|
+
readonly moduleImportAttributesTypes = new Map<Symbol, Type>();
|
|
700
816
|
|
|
701
817
|
readonly inferenceCaches = new InferenceCaches();
|
|
702
818
|
/** The type resolution stack: the first `resolutionDepth` entries are live, later slots are reused. */
|
|
@@ -706,6 +822,28 @@ export class Checker implements TypeChecking {
|
|
|
706
822
|
resolutionDepth = 0;
|
|
707
823
|
/** The number of resolution cycles found (`pushTypeResolution`). */
|
|
708
824
|
resolutionCycleCount = 0;
|
|
825
|
+
/**
|
|
826
|
+
* While an `inferTypesFromUnstarted` walk runs: the unions and intersections whose properties
|
|
827
|
+
* `hasUnmatchedProperty` searched before they were resolved. Such a search creates fewer types
|
|
828
|
+
* than one of the resolved properties.
|
|
829
|
+
*/
|
|
830
|
+
unresolvedPropertySearches: Type[] | undefined = undefined;
|
|
831
|
+
// The fields of shared results come last, so the fields before keep their places.
|
|
832
|
+
/** TSC_TS_SHARE: the checker thread's sharing with the other checker threads. */
|
|
833
|
+
threadSharing: ThreadSharing | undefined = undefined;
|
|
834
|
+
/**
|
|
835
|
+
* Where results are shared (shared-results.ts): for each conditional type made as a member of the distribution of a
|
|
836
|
+
* conditional type instantiation, that instantiation and the constituent it is for.
|
|
837
|
+
*/
|
|
838
|
+
distributedConditionals: Map<Type, DistributedConditional> | undefined = undefined;
|
|
839
|
+
/** The same members by `distributedKey`. */
|
|
840
|
+
distributedByKey: Map<string, Type> | undefined = undefined;
|
|
841
|
+
/** The conditional types conditional type instantiations resolved to, with the instantiation's root and key. */
|
|
842
|
+
conditionalResults: Map<Type, ConditionalResultKey> | undefined = undefined;
|
|
843
|
+
/** The access flags of the key `getIndexedAccessTypeEx` keeps each indexed access type by. */
|
|
844
|
+
indexedAccessKeyFlags: Map<Type, number> | undefined = undefined;
|
|
845
|
+
/** Where results are shared between checker threads (shared-results.ts): the file of each diagnostic deferred. */
|
|
846
|
+
deferredDiagnosticFiles: string[] | undefined = undefined;
|
|
709
847
|
|
|
710
848
|
constructor(host: CheckerHost) {
|
|
711
849
|
this.host = host;
|
|
@@ -918,6 +1056,13 @@ export class Checker implements TypeChecking {
|
|
|
918
1056
|
mergeAmbientModulesAndAugmentations(this);
|
|
919
1057
|
this.modulesMerged = true;
|
|
920
1058
|
this.mergeDiagnostics.push(this.diagnostics.takeLog(), this.suggestionDiagnostics.takeLog());
|
|
1059
|
+
if (shareThreads) startThreadSharing(this);
|
|
1060
|
+
if (this.threadSharing !== undefined) {
|
|
1061
|
+
this.distributedConditionals = new Map<Type, DistributedConditional>();
|
|
1062
|
+
this.distributedByKey = new Map<string, Type>();
|
|
1063
|
+
this.conditionalResults = new Map<Type, ConditionalResultKey>();
|
|
1064
|
+
this.indexedAccessKeyFlags = new Map<Type, number>();
|
|
1065
|
+
}
|
|
921
1066
|
}
|
|
922
1067
|
|
|
923
1068
|
// ---- Public API
|
|
@@ -932,14 +1077,29 @@ export class Checker implements TypeChecking {
|
|
|
932
1077
|
/** Checks `file`, including unused identifiers, and returns its suggestion diagnostics. */
|
|
933
1078
|
getSuggestionDiagnostics(file: SourceFile): Diagnostic[] {
|
|
934
1079
|
checkSourceFile(this, file, true);
|
|
1080
|
+
checkObjectLiteralDeprecations(this, file);
|
|
935
1081
|
return this.suggestionDiagnostics.forFile(file.fileName);
|
|
936
1082
|
}
|
|
937
1083
|
|
|
938
1084
|
/** Diagnostics without a file, such as missing global types. */
|
|
939
1085
|
getGlobalDiagnostics(): Diagnostic[] {
|
|
1086
|
+
produceDeferredDiagnostics(this);
|
|
940
1087
|
return this.diagnostics.globals();
|
|
941
1088
|
}
|
|
942
1089
|
|
|
1090
|
+
/**
|
|
1091
|
+
* Runs `run` (such as emitting declarations), then forgets the global diagnostics it reported:
|
|
1092
|
+
* the program collects global diagnostics before it emits.
|
|
1093
|
+
*/
|
|
1094
|
+
withoutGlobalDiagnostics<T>(run: () => T): T {
|
|
1095
|
+
return this.diagnostics.withoutNewGlobals(run);
|
|
1096
|
+
}
|
|
1097
|
+
|
|
1098
|
+
/** The global diagnostics `withoutGlobalDiagnostics` forgot so far. */
|
|
1099
|
+
forgottenGlobalDiagnostics(): number {
|
|
1100
|
+
return this.diagnostics.removedGlobals;
|
|
1101
|
+
}
|
|
1102
|
+
|
|
943
1103
|
// ---- Links
|
|
944
1104
|
|
|
945
1105
|
/** The rarely used links of `symbol`, created on first use. */
|
|
@@ -1043,15 +1203,15 @@ export class Checker implements TypeChecking {
|
|
|
1043
1203
|
|
|
1044
1204
|
/** Reports `message` at `node`, or as a global diagnostic without a node. */
|
|
1045
1205
|
error(node: Node | undefined, message: DiagnosticMessage, ...args: string[]): Diagnostic {
|
|
1046
|
-
|
|
1047
|
-
this.addDiagnostic(diagnostic);
|
|
1048
|
-
return diagnostic;
|
|
1206
|
+
return this.addDiagnostic(createDiagnosticForNode(node, message, args));
|
|
1049
1207
|
}
|
|
1050
1208
|
|
|
1051
|
-
|
|
1209
|
+
/** Reports `diagnostic`; returns the equal diagnostic already reported, if any, else `diagnostic`. */
|
|
1210
|
+
addDiagnostic(diagnostic: Diagnostic): Diagnostic {
|
|
1052
1211
|
this.reports++;
|
|
1053
1212
|
// Discard diagnostics created while at the maximum number of nested typeToString calls.
|
|
1054
|
-
if (this.serializationLevel < maxSerializationLevel) this.diagnostics.add(diagnostic);
|
|
1213
|
+
if (this.serializationLevel < maxSerializationLevel) return this.diagnostics.add(diagnostic);
|
|
1214
|
+
return diagnostic;
|
|
1055
1215
|
}
|
|
1056
1216
|
|
|
1057
1217
|
addSuggestion(diagnostic: Diagnostic): void {
|
|
@@ -1097,6 +1257,7 @@ export function disposeChecker(c: Checker): void {
|
|
|
1097
1257
|
c.sharedSymbolCopies.clear();
|
|
1098
1258
|
c.memberPositionsInLists.clear();
|
|
1099
1259
|
c.memberNamesOfLists.clear();
|
|
1260
|
+
c.namedMemberOrdersOfLists.clear();
|
|
1100
1261
|
c.propertiesByName.clear();
|
|
1101
1262
|
c.symbolAccessibilityCaches = undefined;
|
|
1102
1263
|
c.unresolvedSymbols.clear();
|
|
@@ -1122,8 +1283,8 @@ export function disposeChecker(c: Checker): void {
|
|
|
1122
1283
|
c.cachedTypesById.clear();
|
|
1123
1284
|
c.cachedTypesByPair.clear();
|
|
1124
1285
|
c.iterationTypesCache.clear();
|
|
1125
|
-
c.
|
|
1126
|
-
c.
|
|
1286
|
+
c.deferredDiagnostics = [];
|
|
1287
|
+
c.objectLiteralsForDeprecations.clear();
|
|
1127
1288
|
c.errorTypes.clear();
|
|
1128
1289
|
c.globalTypeCache.clear();
|
|
1129
1290
|
c.globalSymbolCache.clear();
|
|
@@ -1134,8 +1295,11 @@ export function disposeChecker(c: Checker): void {
|
|
|
1134
1295
|
c.flowNodePostSuper.clear();
|
|
1135
1296
|
c.primitiveTypeAliasSuggestions.clear();
|
|
1136
1297
|
c.patternAmbientModuleAugmentations.clear();
|
|
1298
|
+
c.patternAmbientModuleAugmentationTargets.clear();
|
|
1299
|
+
c.moduleImportAttributesTypes.clear();
|
|
1137
1300
|
c.sharedFlowTypes.length = 0;
|
|
1138
1301
|
c.relationComparers = [];
|
|
1302
|
+
c.inferenceCaches.unstartedInferences.clear();
|
|
1139
1303
|
}
|
|
1140
1304
|
|
|
1141
1305
|
export const enum VarianceReporting {
|
|
@@ -8,20 +8,18 @@ import {
|
|
|
8
8
|
buildOption,
|
|
9
9
|
buildOptionsByName,
|
|
10
10
|
compilerOptionsByName,
|
|
11
|
-
watchOptionsByName,
|
|
12
11
|
type OptionDeclaration,
|
|
13
12
|
type OptionNameMap,
|
|
14
13
|
} from './option-declarations.js';
|
|
15
14
|
import {
|
|
16
15
|
setBuildOption,
|
|
17
16
|
setCompilerOption,
|
|
18
|
-
setWatchOption,
|
|
19
17
|
type BuildOptions,
|
|
20
18
|
type CompilerOptions,
|
|
21
19
|
type OptionValue,
|
|
22
|
-
type WatchOptions,
|
|
23
20
|
} from './options.js';
|
|
24
|
-
import { getNormalizedAbsolutePath } from './path.js';
|
|
21
|
+
import { getNormalizedAbsolutePath, isNetworkPathValue } from './path.js';
|
|
22
|
+
import { getSpellingSuggestion } from './spelling.js';
|
|
25
23
|
|
|
26
24
|
/** Reads response files. */
|
|
27
25
|
export abstract class CommandLineHost {
|
|
@@ -33,7 +31,6 @@ export abstract class CommandLineHost {
|
|
|
33
31
|
|
|
34
32
|
export interface ParsedCommandLine {
|
|
35
33
|
readonly options: CompilerOptions;
|
|
36
|
-
readonly watchOptions: WatchOptions;
|
|
37
34
|
readonly fileNames: readonly string[];
|
|
38
35
|
readonly errors: readonly Diagnostic[];
|
|
39
36
|
/** Options as written, keyed by declaration name in first-seen order. Paths are not made absolute. */
|
|
@@ -44,7 +41,6 @@ export interface ParsedBuildCommandLine {
|
|
|
44
41
|
readonly buildOptions: BuildOptions;
|
|
45
42
|
/** Only options shared with `tsc`, and `build`. */
|
|
46
43
|
readonly compilerOptions: CompilerOptions;
|
|
47
|
-
readonly watchOptions: WatchOptions;
|
|
48
44
|
/** Project paths as given; `["."]` if none. */
|
|
49
45
|
readonly projects: readonly string[];
|
|
50
46
|
readonly errors: readonly Diagnostic[];
|
|
@@ -55,6 +51,8 @@ export interface ParsedBuildCommandLine {
|
|
|
55
51
|
interface ParserMode {
|
|
56
52
|
readonly options: OptionNameMap;
|
|
57
53
|
readonly unknownOption: DiagnosticMessage;
|
|
54
|
+
/** An unknown option with a spelling suggestion among `options`. */
|
|
55
|
+
readonly unknownOptionDidYouMean: DiagnosticMessage;
|
|
58
56
|
readonly missingArgument: DiagnosticMessage;
|
|
59
57
|
/** Options of the other mode, reported with `wrongMode` instead of as unknown. */
|
|
60
58
|
readonly otherModeOptions?: OptionNameMap;
|
|
@@ -64,6 +62,7 @@ interface ParserMode {
|
|
|
64
62
|
const compilerMode: ParserMode = {
|
|
65
63
|
options: compilerOptionsByName,
|
|
66
64
|
unknownOption: Diagnostics.Unknown_compiler_option_0,
|
|
65
|
+
unknownOptionDidYouMean: Diagnostics.Unknown_compiler_option_0_Did_you_mean_1,
|
|
67
66
|
missingArgument: Diagnostics.Compiler_option_0_expects_an_argument,
|
|
68
67
|
otherModeOptions: buildOptionsByName,
|
|
69
68
|
wrongMode: Diagnostics.Compiler_option_0_may_only_be_used_with_build,
|
|
@@ -72,29 +71,22 @@ const compilerMode: ParserMode = {
|
|
|
72
71
|
const buildMode: ParserMode = {
|
|
73
72
|
options: buildOptionsByName,
|
|
74
73
|
unknownOption: Diagnostics.Unknown_build_option_0,
|
|
74
|
+
unknownOptionDidYouMean: Diagnostics.Unknown_build_option_0_Did_you_mean_1,
|
|
75
75
|
missingArgument: Diagnostics.Build_option_0_requires_a_value_of_type_1,
|
|
76
76
|
otherModeOptions: compilerOptionsByName,
|
|
77
77
|
wrongMode: Diagnostics.Compiler_option_0_may_not_be_used_with_build,
|
|
78
78
|
};
|
|
79
79
|
|
|
80
|
-
const watchMode: ParserMode = {
|
|
81
|
-
options: watchOptionsByName,
|
|
82
|
-
unknownOption: Diagnostics.Unknown_watch_option_0,
|
|
83
|
-
missingArgument: Diagnostics.Watch_option_0_requires_a_value_of_type_1,
|
|
84
|
-
};
|
|
85
|
-
|
|
86
80
|
export function parseCommandLine(args: readonly string[], host: CommandLineHost): ParsedCommandLine {
|
|
87
81
|
const parser = new CommandLineParser(compilerMode, host);
|
|
88
82
|
parser.parseArguments(args);
|
|
89
83
|
const cwd = host.currentDirectory;
|
|
90
84
|
const options: CompilerOptions = {};
|
|
91
|
-
const watchOptions: WatchOptions = {};
|
|
92
85
|
for (const [name, value] of parser.raw) {
|
|
93
86
|
if (parser.droppedLists.has(name)) continue;
|
|
94
87
|
setCompilerOption(options, name, toAbsolutePaths(name, value, cwd));
|
|
95
|
-
setWatchOption(watchOptions, name, value);
|
|
96
88
|
}
|
|
97
|
-
return { options,
|
|
89
|
+
return { options, fileNames: parser.fileNames, errors: parser.errors, raw: parser.raw };
|
|
98
90
|
}
|
|
99
91
|
|
|
100
92
|
export function parseBuildCommandLine(args: readonly string[], host: CommandLineHost): ParsedBuildCommandLine {
|
|
@@ -102,7 +94,6 @@ export function parseBuildCommandLine(args: readonly string[], host: CommandLine
|
|
|
102
94
|
parser.parseArguments(args);
|
|
103
95
|
const buildOptions: BuildOptions = {};
|
|
104
96
|
const compilerOptions: CompilerOptions = {};
|
|
105
|
-
const watchOptions: WatchOptions = {};
|
|
106
97
|
for (const [name, value] of parser.raw) {
|
|
107
98
|
if (parser.droppedLists.has(name)) continue;
|
|
108
99
|
const declaration = buildOptionsByName.get(name);
|
|
@@ -110,7 +101,6 @@ export function parseBuildCommandLine(args: readonly string[], host: CommandLine
|
|
|
110
101
|
setCompilerOption(compilerOptions, name, value);
|
|
111
102
|
}
|
|
112
103
|
setBuildOption(buildOptions, name, value);
|
|
113
|
-
setWatchOption(watchOptions, name, value);
|
|
114
104
|
}
|
|
115
105
|
const errors = parser.errors;
|
|
116
106
|
const { clean, force, verbose, dry } = buildOptions;
|
|
@@ -126,7 +116,6 @@ export function parseBuildCommandLine(args: readonly string[], host: CommandLine
|
|
|
126
116
|
return {
|
|
127
117
|
buildOptions,
|
|
128
118
|
compilerOptions,
|
|
129
|
-
watchOptions,
|
|
130
119
|
projects: parser.fileNames.length > 0 ? parser.fileNames : ['.'],
|
|
131
120
|
errors,
|
|
132
121
|
raw: parser.raw,
|
|
@@ -156,6 +145,8 @@ class CommandLineParser {
|
|
|
156
145
|
* though `raw` (and so `--init`) has `[]`.
|
|
157
146
|
*/
|
|
158
147
|
readonly droppedLists = new Set<string>();
|
|
148
|
+
/** Response files being read, so one that includes itself is skipped. */
|
|
149
|
+
private readonly responseFiles = new Set<string>();
|
|
159
150
|
|
|
160
151
|
constructor(
|
|
161
152
|
private readonly mode: ParserMode,
|
|
@@ -173,13 +164,8 @@ class CommandLineParser {
|
|
|
173
164
|
} else if (arg.startsWith('-')) {
|
|
174
165
|
const name = arg.startsWith('--') ? arg.slice(2) : arg.slice(1);
|
|
175
166
|
const option = this.mode.options.find(name, true);
|
|
176
|
-
if (option !== undefined)
|
|
177
|
-
|
|
178
|
-
} else {
|
|
179
|
-
const watchOption = watchOptionsByName.find(name, true);
|
|
180
|
-
if (watchOption !== undefined) i = this.parseOptionValue(args, i, watchOption, watchMode);
|
|
181
|
-
else this.errors.push(this.unknownOptionError(name, arg));
|
|
182
|
-
}
|
|
167
|
+
if (option !== undefined) i = this.parseOptionValue(args, i, option, this.mode);
|
|
168
|
+
else this.errors.push(this.unknownOptionError(name, arg));
|
|
183
169
|
} else {
|
|
184
170
|
this.fileNames.push(arg);
|
|
185
171
|
}
|
|
@@ -193,12 +179,21 @@ class CommandLineParser {
|
|
|
193
179
|
other.name === 'build' ? Diagnostics.Option_build_must_be_the_first_command_line_argument : this.mode.wrongMode;
|
|
194
180
|
return createCompilerDiagnostic(message, name);
|
|
195
181
|
}
|
|
182
|
+
const suggestion = getSpellingSuggestion(name, this.mode.options.names());
|
|
183
|
+
if (suggestion !== '') return createCompilerDiagnostic(this.mode.unknownOptionDidYouMean, arg, suggestion);
|
|
196
184
|
return createCompilerDiagnostic(this.mode.unknownOption, arg);
|
|
197
185
|
}
|
|
198
186
|
|
|
199
187
|
/** Splits a response file into arguments at whitespace; `"` quotes an argument. */
|
|
200
188
|
private parseResponseFile(fileName: string): void {
|
|
201
189
|
const path = getNormalizedAbsolutePath(fileName, this.host.currentDirectory);
|
|
190
|
+
if (this.responseFiles.has(path)) return;
|
|
191
|
+
this.responseFiles.add(path);
|
|
192
|
+
this.readResponseFile(fileName, path);
|
|
193
|
+
this.responseFiles.delete(path);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
private readResponseFile(fileName: string, path: string): void {
|
|
202
197
|
const text = this.host.readFile(path);
|
|
203
198
|
if (text === undefined) {
|
|
204
199
|
this.errors.push(createCompilerDiagnostic(Diagnostics.Cannot_read_file_0, path));
|
|
@@ -217,10 +212,12 @@ class CommandLineParser {
|
|
|
217
212
|
args.push(text.slice(start + 1, pos));
|
|
218
213
|
pos++;
|
|
219
214
|
} else {
|
|
220
|
-
|
|
215
|
+
// The file name as written.
|
|
216
|
+
this.errors.push(
|
|
217
|
+
createCompilerDiagnostic(Diagnostics.Unterminated_quoted_string_in_response_file_0, fileName),
|
|
218
|
+
);
|
|
221
219
|
}
|
|
222
220
|
} else {
|
|
223
|
-
// tsgo panics when the file ends in an argument; tsc accepts it.
|
|
224
221
|
while (pos < text.length && text.charCodeAt(pos) > 32) pos++;
|
|
225
222
|
args.push(text.slice(start, pos));
|
|
226
223
|
}
|
|
@@ -300,7 +297,10 @@ class CommandLineParser {
|
|
|
300
297
|
this.raw.set(name, next !== 'false');
|
|
301
298
|
return next === 'true' || next === 'false' ? i + 1 : i;
|
|
302
299
|
case 'string':
|
|
303
|
-
if (this.validateString(option, next))
|
|
300
|
+
if (!this.validateString(option, next)) return i + 1;
|
|
301
|
+
if (option.isFilePath === true && isNetworkPathValue(next!, this.host.currentDirectory))
|
|
302
|
+
this.errors.push(createCompilerDiagnostic(Diagnostics.Network_path_0_is_not_supported, next!));
|
|
303
|
+
else this.raw.set(name, next);
|
|
304
304
|
return i + 1;
|
|
305
305
|
case 'list': {
|
|
306
306
|
const errorCount = this.errors.length;
|