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
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[] {
|
|
@@ -247,6 +287,8 @@ class DiagnosticCollection {
|
|
|
247
287
|
|
|
248
288
|
/** The global diagnostics `withoutNewGlobals` removed. */
|
|
249
289
|
removedGlobals = 0;
|
|
290
|
+
/** Where results are shared between checker threads (shared-results.ts): every diagnostic added, in order. */
|
|
291
|
+
added: Diagnostic[] | undefined = undefined;
|
|
250
292
|
|
|
251
293
|
/** Runs `run`, then removes the global diagnostics it added. */
|
|
252
294
|
withoutNewGlobals<T>(run: () => T): T {
|
|
@@ -261,14 +303,26 @@ class DiagnosticCollection {
|
|
|
261
303
|
const globals = new Set<Diagnostic>();
|
|
262
304
|
for (const d of added) if (d.file === undefined) globals.add(d);
|
|
263
305
|
if (globals.size > 0) {
|
|
264
|
-
this.removedGlobals += globals.size;
|
|
265
306
|
let kept = 0;
|
|
266
|
-
for (const d of this.global)
|
|
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;
|
|
267
312
|
this.global.length = kept;
|
|
268
313
|
}
|
|
269
314
|
}
|
|
270
315
|
}
|
|
271
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
|
+
|
|
272
326
|
/** Records the diagnostics added from now on. */
|
|
273
327
|
startLog(): void {
|
|
274
328
|
this.log = [];
|
|
@@ -360,10 +414,20 @@ export class Checker implements TypeChecking {
|
|
|
360
414
|
readonly memberPositionsInLists = new Map<Symbol[], Map<string, number>>();
|
|
361
415
|
/** The property names of the last instantiation of each such list whose table is built on demand. */
|
|
362
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>();
|
|
363
419
|
/** Long lists of inherited properties, by name. */
|
|
364
420
|
readonly propertiesByName = new Map<Symbol[], Map<string, Symbol>>();
|
|
365
421
|
/** Number of `typeToString` calls in progress. */
|
|
366
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>>();
|
|
367
431
|
/** Whether `globalObjectType` is set; global type lookups before it can't suggest `typeof`. */
|
|
368
432
|
hasGlobalObjectType = false;
|
|
369
433
|
/** The node being checked, for errors with no better location. */
|
|
@@ -381,7 +445,7 @@ export class Checker implements TypeChecking {
|
|
|
381
445
|
*/
|
|
382
446
|
modulesMerged = false;
|
|
383
447
|
/** Module specifiers of `import("…")` types, by module symbol id, importing file path and resolution mode. */
|
|
384
|
-
readonly moduleSpecifiers = new Map<string,
|
|
448
|
+
readonly moduleSpecifiers = new Map<string, ModuleSpecifierResult>();
|
|
385
449
|
/** Specifier generation for hosts without a program. */
|
|
386
450
|
fallbackModuleSpecifierHost: ModuleSpecifierHost | undefined = undefined;
|
|
387
451
|
|
|
@@ -399,6 +463,9 @@ export class Checker implements TypeChecking {
|
|
|
399
463
|
* so far; null where a list repeats a name.
|
|
400
464
|
*/
|
|
401
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).
|
|
402
469
|
/** The type of a value symbol. */
|
|
403
470
|
readonly symbolTypes = new LinkTable<Type>();
|
|
404
471
|
/** For instantiated and synthetic symbols, the symbol they come from. */
|
|
@@ -406,24 +473,24 @@ export class Checker implements TypeChecking {
|
|
|
406
473
|
/** The mapper of an instantiated symbol or a mapped type property. */
|
|
407
474
|
readonly symbolMappers = new LinkTable<TypeMapper>();
|
|
408
475
|
/** The literal type of a property name. */
|
|
409
|
-
readonly symbolNameTypes = new
|
|
476
|
+
readonly symbolNameTypes = new CompactLinkTable<Type>();
|
|
410
477
|
/** The mapped type of a mapped type property, or the union/intersection of a synthetic property. */
|
|
411
|
-
readonly symbolContainingTypes = new
|
|
478
|
+
readonly symbolContainingTypes = new CompactLinkTable<Type>();
|
|
412
479
|
/** The key type of a mapped type property. */
|
|
413
|
-
readonly symbolKeyTypes = new
|
|
480
|
+
readonly symbolKeyTypes = new CompactLinkTable<Type>();
|
|
414
481
|
/** The property a mapped, spread or synthetic property comes from. */
|
|
415
|
-
readonly symbolSyntheticOrigins = new
|
|
482
|
+
readonly symbolSyntheticOrigins = new CompactLinkTable<Symbol>();
|
|
416
483
|
/** The left and right properties a spread property combines. */
|
|
417
|
-
readonly symbolLeftSpreads = new
|
|
418
|
-
readonly symbolRightSpreads = new
|
|
484
|
+
readonly symbolLeftSpreads = new CompactLinkTable<Symbol>();
|
|
485
|
+
readonly symbolRightSpreads = new CompactLinkTable<Symbol>();
|
|
419
486
|
/** Bits of SymbolFlags for the meanings in which a symbol was referenced. */
|
|
420
|
-
readonly symbolReferenceKinds = new
|
|
487
|
+
readonly symbolReferenceKinds = new CompactIntLinkTable();
|
|
421
488
|
/** The resolved symbol of an identifier, entity name or call. */
|
|
422
|
-
readonly resolvedSymbols = new
|
|
489
|
+
readonly resolvedSymbols = new CompactLinkTable<Symbol>();
|
|
423
490
|
/** The resolved type of a type node or expression. */
|
|
424
|
-
readonly resolvedTypes = new
|
|
491
|
+
readonly resolvedTypes = new CompactLinkTable<Type>();
|
|
425
492
|
/** The resolved signature of a call-like node or a signature declaration. */
|
|
426
|
-
readonly resolvedSignatures = new
|
|
493
|
+
readonly resolvedSignatures = new CompactLinkTable<Signature>();
|
|
427
494
|
/** Merged symbols, indexed by the id of the symbol merged into them. */
|
|
428
495
|
readonly mergedSymbols: Map<number, Symbol>;
|
|
429
496
|
/**
|
|
@@ -600,15 +667,21 @@ export class Checker implements TypeChecking {
|
|
|
600
667
|
|
|
601
668
|
// Resolution stacks for cycle detection (see pushTypeResolution).
|
|
602
669
|
resolutionStart = 0;
|
|
603
|
-
|
|
670
|
+
/** The generic types whose variances are being computed, outermost first. */
|
|
671
|
+
varianceStack: VarianceStackEntry[] = [];
|
|
604
672
|
|
|
605
673
|
// Instantiation
|
|
606
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;
|
|
607
680
|
instantiationCount = 0;
|
|
608
681
|
/** Instantiations over the checker's lifetime (statistics). */
|
|
609
682
|
totalInstantiations = 0;
|
|
610
|
-
/**
|
|
611
|
-
|
|
683
|
+
/** Ids of the mappers of the instantiations in progress: the first `activeMapperDepth` entries are live. */
|
|
684
|
+
activeMapperIds = new Int32Array(16);
|
|
612
685
|
activeMapperDepth = 0;
|
|
613
686
|
/** Per active mapper: its instantiations by type id, created on the first nested write. */
|
|
614
687
|
readonly activeMapperCaches: (Map<number, Type> | undefined)[] = [];
|
|
@@ -623,21 +696,35 @@ export class Checker implements TypeChecking {
|
|
|
623
696
|
/** Empty lists for type arguments that are compared with cached instantiations before any is kept. */
|
|
624
697
|
readonly freeTypeLists: Type[][] = [];
|
|
625
698
|
/**
|
|
626
|
-
*
|
|
699
|
+
* The ids of the anonymous and mapped types whose declaration has no outer type parameters
|
|
627
700
|
* to instantiate (`getObjectTypeInstantiation`).
|
|
628
701
|
*/
|
|
629
|
-
readonly withoutOuterTypeParameters = new
|
|
702
|
+
readonly withoutOuterTypeParameters = new PagedIdSet();
|
|
630
703
|
conditionalConstraintDepth = 0;
|
|
631
704
|
|
|
632
705
|
readonly suggestionResolver: SuggestionNameResolver;
|
|
633
706
|
readonly awaitedTypeStack: number[] = [];
|
|
634
707
|
/** Iteration types by type id and iteration use. */
|
|
635
708
|
readonly iterationTypesCache = new Map<number, IterationTypes>();
|
|
636
|
-
/**
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
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[]>();
|
|
641
728
|
/** Binding patterns whose implied type is being computed as a contextual type. */
|
|
642
729
|
readonly contextualBindingPatterns: Node[] = [];
|
|
643
730
|
/** The binding pattern or assignment pattern that implied each type. */
|
|
@@ -690,11 +777,13 @@ export class Checker implements TypeChecking {
|
|
|
690
777
|
flowTypeCache: Map<Node, Type> | undefined = undefined;
|
|
691
778
|
flowInvocationCount = 0;
|
|
692
779
|
/** The reduce labels being passed, innermost last; each limits its target label's antecedents. */
|
|
693
|
-
|
|
780
|
+
flowReduceLabels: FlowReduceLabel[] = [];
|
|
694
781
|
readonly flowNodeReachable = new Map<FlowNode, boolean>();
|
|
695
782
|
readonly flowNodePostSuper = new Map<FlowNode, boolean>();
|
|
696
783
|
lastFlowNode: FlowNode | undefined = undefined;
|
|
697
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>();
|
|
698
787
|
readonly assignmentMarker: AssignmentMarker;
|
|
699
788
|
readonly primitiveTypeAliasSuggestions = new Map<string, Symbol>();
|
|
700
789
|
|
|
@@ -721,6 +810,9 @@ export class Checker implements TypeChecking {
|
|
|
721
810
|
readonly ambientModuleSymbols: Symbol[] = [];
|
|
722
811
|
readonly patternAmbientModules: PatternAmbientModule[] = [];
|
|
723
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>();
|
|
724
816
|
|
|
725
817
|
readonly inferenceCaches = new InferenceCaches();
|
|
726
818
|
/** The type resolution stack: the first `resolutionDepth` entries are live, later slots are reused. */
|
|
@@ -730,6 +822,28 @@ export class Checker implements TypeChecking {
|
|
|
730
822
|
resolutionDepth = 0;
|
|
731
823
|
/** The number of resolution cycles found (`pushTypeResolution`). */
|
|
732
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;
|
|
733
847
|
|
|
734
848
|
constructor(host: CheckerHost) {
|
|
735
849
|
this.host = host;
|
|
@@ -942,6 +1056,13 @@ export class Checker implements TypeChecking {
|
|
|
942
1056
|
mergeAmbientModulesAndAugmentations(this);
|
|
943
1057
|
this.modulesMerged = true;
|
|
944
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
|
+
}
|
|
945
1066
|
}
|
|
946
1067
|
|
|
947
1068
|
// ---- Public API
|
|
@@ -956,11 +1077,13 @@ export class Checker implements TypeChecking {
|
|
|
956
1077
|
/** Checks `file`, including unused identifiers, and returns its suggestion diagnostics. */
|
|
957
1078
|
getSuggestionDiagnostics(file: SourceFile): Diagnostic[] {
|
|
958
1079
|
checkSourceFile(this, file, true);
|
|
1080
|
+
checkObjectLiteralDeprecations(this, file);
|
|
959
1081
|
return this.suggestionDiagnostics.forFile(file.fileName);
|
|
960
1082
|
}
|
|
961
1083
|
|
|
962
1084
|
/** Diagnostics without a file, such as missing global types. */
|
|
963
1085
|
getGlobalDiagnostics(): Diagnostic[] {
|
|
1086
|
+
produceDeferredDiagnostics(this);
|
|
964
1087
|
return this.diagnostics.globals();
|
|
965
1088
|
}
|
|
966
1089
|
|
|
@@ -1080,15 +1203,15 @@ export class Checker implements TypeChecking {
|
|
|
1080
1203
|
|
|
1081
1204
|
/** Reports `message` at `node`, or as a global diagnostic without a node. */
|
|
1082
1205
|
error(node: Node | undefined, message: DiagnosticMessage, ...args: string[]): Diagnostic {
|
|
1083
|
-
|
|
1084
|
-
this.addDiagnostic(diagnostic);
|
|
1085
|
-
return diagnostic;
|
|
1206
|
+
return this.addDiagnostic(createDiagnosticForNode(node, message, args));
|
|
1086
1207
|
}
|
|
1087
1208
|
|
|
1088
|
-
|
|
1209
|
+
/** Reports `diagnostic`; returns the equal diagnostic already reported, if any, else `diagnostic`. */
|
|
1210
|
+
addDiagnostic(diagnostic: Diagnostic): Diagnostic {
|
|
1089
1211
|
this.reports++;
|
|
1090
1212
|
// Discard diagnostics created while at the maximum number of nested typeToString calls.
|
|
1091
|
-
if (this.serializationLevel < maxSerializationLevel) this.diagnostics.add(diagnostic);
|
|
1213
|
+
if (this.serializationLevel < maxSerializationLevel) return this.diagnostics.add(diagnostic);
|
|
1214
|
+
return diagnostic;
|
|
1092
1215
|
}
|
|
1093
1216
|
|
|
1094
1217
|
addSuggestion(diagnostic: Diagnostic): void {
|
|
@@ -1134,6 +1257,7 @@ export function disposeChecker(c: Checker): void {
|
|
|
1134
1257
|
c.sharedSymbolCopies.clear();
|
|
1135
1258
|
c.memberPositionsInLists.clear();
|
|
1136
1259
|
c.memberNamesOfLists.clear();
|
|
1260
|
+
c.namedMemberOrdersOfLists.clear();
|
|
1137
1261
|
c.propertiesByName.clear();
|
|
1138
1262
|
c.symbolAccessibilityCaches = undefined;
|
|
1139
1263
|
c.unresolvedSymbols.clear();
|
|
@@ -1159,8 +1283,8 @@ export function disposeChecker(c: Checker): void {
|
|
|
1159
1283
|
c.cachedTypesById.clear();
|
|
1160
1284
|
c.cachedTypesByPair.clear();
|
|
1161
1285
|
c.iterationTypesCache.clear();
|
|
1162
|
-
c.
|
|
1163
|
-
c.
|
|
1286
|
+
c.deferredDiagnostics = [];
|
|
1287
|
+
c.objectLiteralsForDeprecations.clear();
|
|
1164
1288
|
c.errorTypes.clear();
|
|
1165
1289
|
c.globalTypeCache.clear();
|
|
1166
1290
|
c.globalSymbolCache.clear();
|
|
@@ -1171,8 +1295,11 @@ export function disposeChecker(c: Checker): void {
|
|
|
1171
1295
|
c.flowNodePostSuper.clear();
|
|
1172
1296
|
c.primitiveTypeAliasSuggestions.clear();
|
|
1173
1297
|
c.patternAmbientModuleAugmentations.clear();
|
|
1298
|
+
c.patternAmbientModuleAugmentationTargets.clear();
|
|
1299
|
+
c.moduleImportAttributesTypes.clear();
|
|
1174
1300
|
c.sharedFlowTypes.length = 0;
|
|
1175
1301
|
c.relationComparers = [];
|
|
1302
|
+
c.inferenceCaches.unstartedInferences.clear();
|
|
1176
1303
|
}
|
|
1177
1304
|
|
|
1178
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;
|