tsc-ts 0.0.4 → 0.0.6
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 +34 -2
- package/dist/api/compiler/ast-utilities.d.ts +82 -0
- package/dist/api/compiler/ast-utilities.js +462 -0
- package/dist/api/compiler/ast.d.ts +2351 -0
- package/dist/api/compiler/ast.js +11212 -0
- package/dist/api/compiler/astnav.d.ts +37 -0
- package/dist/api/compiler/astnav.js +767 -0
- package/dist/api/compiler/binder-utilities.d.ts +182 -0
- package/dist/api/compiler/binder-utilities.js +1241 -0
- package/dist/api/compiler/binder.d.ts +33 -0
- package/dist/api/compiler/binder.js +2359 -0
- package/dist/api/compiler/character-codes.d.ts +161 -0
- package/dist/api/compiler/character-codes.js +160 -0
- package/dist/api/compiler/checker-calls.d.ts +46 -0
- package/dist/api/compiler/checker-calls.js +1641 -0
- package/dist/api/compiler/checker-classes.d.ts +30 -0
- package/dist/api/compiler/checker-classes.js +582 -0
- package/dist/api/compiler/checker-contextual.d.ts +77 -0
- package/dist/api/compiler/checker-contextual.js +1136 -0
- package/dist/api/compiler/checker-declaration-order.d.ts +12 -0
- package/dist/api/compiler/checker-declaration-order.js +357 -0
- package/dist/api/compiler/checker-declarations.d.ts +33 -0
- package/dist/api/compiler/checker-declarations.js +888 -0
- package/dist/api/compiler/checker-declared-types.d.ts +48 -0
- package/dist/api/compiler/checker-declared-types.js +788 -0
- package/dist/api/compiler/checker-decorators.d.ts +26 -0
- package/dist/api/compiler/checker-decorators.js +562 -0
- package/dist/api/compiler/checker-deprecation.d.ts +33 -0
- package/dist/api/compiler/checker-deprecation.js +314 -0
- package/dist/api/compiler/checker-destructuring.d.ts +34 -0
- package/dist/api/compiler/checker-destructuring.js +584 -0
- package/dist/api/compiler/checker-elaboration.d.ts +15 -0
- package/dist/api/compiler/checker-elaboration.js +291 -0
- package/dist/api/compiler/checker-emit-helpers.d.ts +58 -0
- package/dist/api/compiler/checker-emit-helpers.js +154 -0
- package/dist/api/compiler/checker-emit-resolver.d.ts +75 -0
- package/dist/api/compiler/checker-emit-resolver.js +580 -0
- package/dist/api/compiler/checker-evaluator.d.ts +27 -0
- package/dist/api/compiler/checker-evaluator.js +188 -0
- package/dist/api/compiler/checker-expressions.d.ts +67 -0
- package/dist/api/compiler/checker-expressions.js +1351 -0
- package/dist/api/compiler/checker-features.d.ts +6 -0
- package/dist/api/compiler/checker-features.js +354 -0
- package/dist/api/compiler/checker-flow.d.ts +86 -0
- package/dist/api/compiler/checker-flow.js +169 -0
- package/dist/api/compiler/checker-functions.d.ts +43 -0
- package/dist/api/compiler/checker-functions.js +1002 -0
- package/dist/api/compiler/checker-generated-code.d.ts +25 -0
- package/dist/api/compiler/checker-generated-code.js +168 -0
- package/dist/api/compiler/checker-globals.d.ts +14 -0
- package/dist/api/compiler/checker-globals.js +37 -0
- package/dist/api/compiler/checker-grammar.d.ts +35 -0
- package/dist/api/compiler/checker-grammar.js +2587 -0
- package/dist/api/compiler/checker-heritage.d.ts +28 -0
- package/dist/api/compiler/checker-heritage.js +901 -0
- package/dist/api/compiler/checker-inference.d.ts +179 -0
- package/dist/api/compiler/checker-inference.js +2105 -0
- package/dist/api/compiler/checker-iteration.d.ts +115 -0
- package/dist/api/compiler/checker-iteration.js +857 -0
- package/dist/api/compiler/checker-javascript.d.ts +42 -0
- package/dist/api/compiler/checker-javascript.js +442 -0
- package/dist/api/compiler/checker-jsdoc.d.ts +30 -0
- package/dist/api/compiler/checker-jsdoc.js +320 -0
- package/dist/api/compiler/checker-jsx.d.ts +94 -0
- package/dist/api/compiler/checker-jsx.js +1433 -0
- package/dist/api/compiler/checker-literals.d.ts +6 -0
- package/dist/api/compiler/checker-literals.js +43 -0
- package/dist/api/compiler/checker-members.d.ts +200 -0
- package/dist/api/compiler/checker-members.js +2148 -0
- package/dist/api/compiler/checker-modules.d.ts +85 -0
- package/dist/api/compiler/checker-modules.js +2141 -0
- package/dist/api/compiler/checker-narrowing.d.ts +120 -0
- package/dist/api/compiler/checker-narrowing.js +2797 -0
- package/dist/api/compiler/checker-object-literals.d.ts +14 -0
- package/dist/api/compiler/checker-object-literals.js +483 -0
- package/dist/api/compiler/checker-operators.d.ts +33 -0
- package/dist/api/compiler/checker-operators.js +1040 -0
- package/dist/api/compiler/checker-overloads.d.ts +7 -0
- package/dist/api/compiler/checker-overloads.js +271 -0
- package/dist/api/compiler/checker-property-access.d.ts +34 -0
- package/dist/api/compiler/checker-property-access.js +672 -0
- package/dist/api/compiler/checker-services.d.ts +49 -0
- package/dist/api/compiler/checker-services.js +995 -0
- package/dist/api/compiler/checker-signatures.d.ts +55 -0
- package/dist/api/compiler/checker-signatures.js +789 -0
- package/dist/api/compiler/checker-source-file.d.ts +27 -0
- package/dist/api/compiler/checker-source-file.js +619 -0
- package/dist/api/compiler/checker-statements.d.ts +18 -0
- package/dist/api/compiler/checker-statements.js +226 -0
- package/dist/api/compiler/checker-super.d.ts +13 -0
- package/dist/api/compiler/checker-super.js +241 -0
- package/dist/api/compiler/checker-symbol-types.d.ts +51 -0
- package/dist/api/compiler/checker-symbol-types.js +955 -0
- package/dist/api/compiler/checker-symbols.d.ts +181 -0
- package/dist/api/compiler/checker-symbols.js +1784 -0
- package/dist/api/compiler/checker-type-factory.d.ts +142 -0
- package/dist/api/compiler/checker-type-factory.js +2542 -0
- package/dist/api/compiler/checker-type-nodes.d.ts +26 -0
- package/dist/api/compiler/checker-type-nodes.js +828 -0
- package/dist/api/compiler/checker-type-operators.d.ts +109 -0
- package/dist/api/compiler/checker-type-operators.js +1842 -0
- package/dist/api/compiler/checker-types.d.ts +1093 -0
- package/dist/api/compiler/checker-types.js +1874 -0
- package/dist/api/compiler/checker-unused.d.ts +19 -0
- package/dist/api/compiler/checker-unused.js +524 -0
- package/dist/api/compiler/checker-utilities.d.ts +33 -0
- package/dist/api/compiler/checker-utilities.js +141 -0
- package/dist/api/compiler/checker.d.ts +512 -0
- package/dist/api/compiler/checker.js +932 -0
- package/dist/api/compiler/command-line.d.ts +32 -0
- package/dist/api/compiler/command-line.js +383 -0
- package/dist/api/compiler/compile-program.d.ts +118 -0
- package/dist/api/compiler/compile-program.js +384 -0
- package/dist/api/compiler/diagnostic-locales.d.ts +22 -0
- package/dist/api/compiler/diagnostic-locales.js +64 -0
- package/dist/api/compiler/diagnostic-messages.d.ts +2166 -0
- package/dist/api/compiler/diagnostic-messages.js +184 -0
- package/dist/api/compiler/diagnostics.d.ts +161 -0
- package/dist/api/compiler/diagnostics.js +784 -0
- package/dist/api/compiler/emitter.d.ts +71 -0
- package/dist/api/compiler/emitter.js +327 -0
- package/dist/api/compiler/file-include.d.ts +144 -0
- package/dist/api/compiler/file-include.js +599 -0
- package/dist/api/compiler/file-loader.d.ts +290 -0
- package/dist/api/compiler/file-loader.js +1323 -0
- package/dist/api/compiler/file-system.d.ts +51 -0
- package/dist/api/compiler/file-system.js +132 -0
- package/dist/api/compiler/flow.d.ts +60 -0
- package/dist/api/compiler/flow.js +45 -0
- package/dist/api/compiler/instantiation.d.ts +74 -0
- package/dist/api/compiler/instantiation.js +835 -0
- package/dist/api/compiler/jsdoc.d.ts +75 -0
- package/dist/api/compiler/jsdoc.js +1229 -0
- package/dist/api/compiler/link-tables.d.ts +105 -0
- package/dist/api/compiler/link-tables.js +319 -0
- package/dist/api/compiler/locale-data.d.ts +24 -0
- package/dist/api/compiler/locale-data.js +183 -0
- package/dist/api/compiler/locale.d.ts +4 -0
- package/dist/api/compiler/locale.js +317 -0
- package/dist/api/compiler/locales/cs-CZ.d.ts +2 -0
- package/dist/api/compiler/locales/cs-CZ.js +3 -0
- package/dist/api/compiler/locales/de-DE.d.ts +2 -0
- package/dist/api/compiler/locales/de-DE.js +3 -0
- package/dist/api/compiler/locales/es-ES.d.ts +2 -0
- package/dist/api/compiler/locales/es-ES.js +3 -0
- package/dist/api/compiler/locales/fr-FR.d.ts +2 -0
- package/dist/api/compiler/locales/fr-FR.js +3 -0
- package/dist/api/compiler/locales/it-IT.d.ts +2 -0
- package/dist/api/compiler/locales/it-IT.js +3 -0
- package/dist/api/compiler/locales/ja-JP.d.ts +2 -0
- package/dist/api/compiler/locales/ja-JP.js +3 -0
- package/dist/api/compiler/locales/ko-KR.d.ts +2 -0
- package/dist/api/compiler/locales/ko-KR.js +3 -0
- package/dist/api/compiler/locales/pl-PL.d.ts +2 -0
- package/dist/api/compiler/locales/pl-PL.js +3 -0
- package/dist/api/compiler/locales/pt-BR.d.ts +2 -0
- package/dist/api/compiler/locales/pt-BR.js +3 -0
- package/dist/api/compiler/locales/ru-RU.d.ts +2 -0
- package/dist/api/compiler/locales/ru-RU.js +3 -0
- package/dist/api/compiler/locales/tr-TR.d.ts +2 -0
- package/dist/api/compiler/locales/tr-TR.js +3 -0
- package/dist/api/compiler/locales/zh-CN.d.ts +2 -0
- package/dist/api/compiler/locales/zh-CN.js +3 -0
- package/dist/api/compiler/locales/zh-TW.d.ts +2 -0
- package/dist/api/compiler/locales/zh-TW.js +3 -0
- package/dist/api/compiler/module-resolution-types.d.ts +83 -0
- package/dist/api/compiler/module-resolution-types.js +176 -0
- package/dist/api/compiler/module-resolution.d.ts +71 -0
- package/dist/api/compiler/module-resolution.js +1598 -0
- package/dist/api/compiler/module-specifiers.d.ts +64 -0
- package/dist/api/compiler/module-specifiers.js +1101 -0
- package/dist/api/compiler/name-resolver.d.ts +43 -0
- package/dist/api/compiler/name-resolver.js +509 -0
- package/dist/api/compiler/node-builder-names.d.ts +32 -0
- package/dist/api/compiler/node-builder-names.js +854 -0
- package/dist/api/compiler/node-builder-pseudo.d.ts +36 -0
- package/dist/api/compiler/node-builder-pseudo.js +745 -0
- package/dist/api/compiler/node-builder-reuse.d.ts +4 -0
- package/dist/api/compiler/node-builder-reuse.js +647 -0
- package/dist/api/compiler/node-builder.d.ts +270 -0
- package/dist/api/compiler/node-builder.js +2645 -0
- package/dist/api/compiler/option-declarations.d.ts +90 -0
- package/dist/api/compiler/option-declarations.js +1460 -0
- package/dist/api/compiler/options.d.ts +289 -0
- package/dist/api/compiler/options.js +1197 -0
- package/dist/api/compiler/output-paths.d.ts +42 -0
- package/dist/api/compiler/output-paths.js +195 -0
- package/dist/api/compiler/package-json.d.ts +175 -0
- package/dist/api/compiler/package-json.js +1015 -0
- package/dist/api/compiler/parallel-parse.d.ts +221 -0
- package/dist/api/compiler/parallel-parse.js +541 -0
- package/dist/api/compiler/parser.d.ts +604 -0
- package/dist/api/compiler/parser.js +6426 -0
- package/dist/api/compiler/path.d.ts +91 -0
- package/dist/api/compiler/path.js +705 -0
- package/dist/api/compiler/printer/async-helpers.d.ts +22 -0
- package/dist/api/compiler/printer/async-helpers.js +91 -0
- package/dist/api/compiler/printer/auto-generate.d.ts +13 -0
- package/dist/api/compiler/printer/auto-generate.js +20 -0
- package/dist/api/compiler/printer/decorator-helpers.d.ts +24 -0
- package/dist/api/compiler/printer/decorator-helpers.js +118 -0
- package/dist/api/compiler/printer/emit-context.d.ts +157 -0
- package/dist/api/compiler/printer/emit-context.js +582 -0
- package/dist/api/compiler/printer/emit-flags.d.ts +60 -0
- package/dist/api/compiler/printer/emit-flags.js +2 -0
- package/dist/api/compiler/printer/factory-base.d.ts +171 -0
- package/dist/api/compiler/printer/factory-base.js +1505 -0
- package/dist/api/compiler/printer/factory.d.ts +147 -0
- package/dist/api/compiler/printer/factory.js +542 -0
- package/dist/api/compiler/printer/helpers.d.ts +27 -0
- package/dist/api/compiler/printer/helpers.js +164 -0
- package/dist/api/compiler/printer/name-generator.d.ts +41 -0
- package/dist/api/compiler/printer/name-generator.js +283 -0
- package/dist/api/compiler/printer/printer.d.ts +411 -0
- package/dist/api/compiler/printer/printer.js +4517 -0
- package/dist/api/compiler/printer/text-writer.d.ts +46 -0
- package/dist/api/compiler/printer/text-writer.js +172 -0
- package/dist/api/compiler/printer/utilities.d.ts +82 -0
- package/dist/api/compiler/printer/utilities.js +817 -0
- package/dist/api/compiler/program-checker.d.ts +156 -0
- package/dist/api/compiler/program-checker.js +529 -0
- package/dist/api/compiler/program-utilities.d.ts +52 -0
- package/dist/api/compiler/program-utilities.js +365 -0
- package/dist/api/compiler/program.d.ts +180 -0
- package/dist/api/compiler/program.js +1019 -0
- package/dist/api/compiler/pseudo-bigint.d.ts +5 -0
- package/dist/api/compiler/pseudo-bigint.js +61 -0
- package/dist/api/compiler/regexp-checker.d.ts +38 -0
- package/dist/api/compiler/regexp-checker.js +942 -0
- package/dist/api/compiler/relations.d.ts +263 -0
- package/dist/api/compiler/relations.js +4002 -0
- package/dist/api/compiler/reparser.d.ts +48 -0
- package/dist/api/compiler/reparser.js +1323 -0
- package/dist/api/compiler/scanner.d.ts +256 -0
- package/dist/api/compiler/scanner.js +2853 -0
- package/dist/api/compiler/side-state.d.ts +16 -0
- package/dist/api/compiler/side-state.js +89 -0
- package/dist/api/compiler/sourcemap.d.ts +55 -0
- package/dist/api/compiler/sourcemap.js +340 -0
- package/dist/api/compiler/spelling.d.ts +14 -0
- package/dist/api/compiler/spelling.js +128 -0
- package/dist/api/compiler/symbol-accessibility.d.ts +57 -0
- package/dist/api/compiler/symbol-accessibility.js +991 -0
- package/dist/api/compiler/symbol.d.ts +282 -0
- package/dist/api/compiler/symbol.js +339 -0
- package/dist/api/compiler/symlinks.d.ts +32 -0
- package/dist/api/compiler/symlinks.js +114 -0
- package/dist/api/compiler/syntax-kind.d.ts +389 -0
- package/dist/api/compiler/syntax-kind.js +2 -0
- package/dist/api/compiler/timeline.d.ts +9 -0
- package/dist/api/compiler/timeline.js +54 -0
- package/dist/api/compiler/transformers/alias-references.d.ts +39 -0
- package/dist/api/compiler/transformers/alias-references.js +677 -0
- package/dist/api/compiler/transformers/async-utilities.d.ts +51 -0
- package/dist/api/compiler/transformers/async-utilities.js +260 -0
- package/dist/api/compiler/transformers/async.d.ts +53 -0
- package/dist/api/compiler/transformers/async.js +645 -0
- package/dist/api/compiler/transformers/class-fields.d.ts +206 -0
- package/dist/api/compiler/transformers/class-fields.js +2418 -0
- package/dist/api/compiler/transformers/class-utilities.d.ts +46 -0
- package/dist/api/compiler/transformers/class-utilities.js +261 -0
- package/dist/api/compiler/transformers/commonjs-module.d.ts +103 -0
- package/dist/api/compiler/transformers/commonjs-module.js +1180 -0
- package/dist/api/compiler/transformers/const-enum-inliner.d.ts +11 -0
- package/dist/api/compiler/transformers/const-enum-inliner.js +36 -0
- package/dist/api/compiler/transformers/declarations-diagnostics.d.ts +52 -0
- package/dist/api/compiler/transformers/declarations-diagnostics.js +539 -0
- package/dist/api/compiler/transformers/declarations-pseudo.d.ts +160 -0
- package/dist/api/compiler/transformers/declarations-pseudo.js +799 -0
- package/dist/api/compiler/transformers/declarations-resolver.d.ts +152 -0
- package/dist/api/compiler/transformers/declarations-resolver.js +35 -0
- package/dist/api/compiler/transformers/declarations-syntactic.d.ts +119 -0
- package/dist/api/compiler/transformers/declarations-syntactic.js +1582 -0
- package/dist/api/compiler/transformers/declarations-tracker.d.ts +46 -0
- package/dist/api/compiler/transformers/declarations-tracker.js +198 -0
- package/dist/api/compiler/transformers/declarations.d.ts +175 -0
- package/dist/api/compiler/transformers/declarations.js +2381 -0
- package/dist/api/compiler/transformers/decorator-metadata.d.ts +54 -0
- package/dist/api/compiler/transformers/decorator-metadata.js +554 -0
- package/dist/api/compiler/transformers/decorator-utilities.d.ts +38 -0
- package/dist/api/compiler/transformers/decorator-utilities.js +238 -0
- package/dist/api/compiler/transformers/destructuring.d.ts +25 -0
- package/dist/api/compiler/transformers/destructuring.js +626 -0
- package/dist/api/compiler/transformers/downlevel.d.ts +6 -0
- package/dist/api/compiler/transformers/downlevel.js +45 -0
- package/dist/api/compiler/transformers/emit-resolver.d.ts +61 -0
- package/dist/api/compiler/transformers/emit-resolver.js +197 -0
- package/dist/api/compiler/transformers/es-decorators.d.ts +118 -0
- package/dist/api/compiler/transformers/es-decorators.js +1901 -0
- package/dist/api/compiler/transformers/exponentiation.d.ts +11 -0
- package/dist/api/compiler/transformers/exponentiation.js +76 -0
- package/dist/api/compiler/transformers/external-module-info.d.ts +35 -0
- package/dist/api/compiler/transformers/external-module-info.js +351 -0
- package/dist/api/compiler/transformers/for-await.d.ts +43 -0
- package/dist/api/compiler/transformers/for-await.js +469 -0
- package/dist/api/compiler/transformers/import-elision.d.ts +16 -0
- package/dist/api/compiler/transformers/import-elision.js +124 -0
- package/dist/api/compiler/transformers/jsx-entities.d.ts +1 -0
- package/dist/api/compiler/transformers/jsx-entities.js +256 -0
- package/dist/api/compiler/transformers/jsx.d.ts +71 -0
- package/dist/api/compiler/transformers/jsx.js +700 -0
- package/dist/api/compiler/transformers/legacy-decorators.d.ts +56 -0
- package/dist/api/compiler/transformers/legacy-decorators.js +564 -0
- package/dist/api/compiler/transformers/logical-assignment.d.ts +14 -0
- package/dist/api/compiler/transformers/logical-assignment.js +62 -0
- package/dist/api/compiler/transformers/module-utilities.d.ts +9 -0
- package/dist/api/compiler/transformers/module-utilities.js +36 -0
- package/dist/api/compiler/transformers/module.d.ts +49 -0
- package/dist/api/compiler/transformers/module.js +296 -0
- package/dist/api/compiler/transformers/named-evaluation.d.ts +26 -0
- package/dist/api/compiler/transformers/named-evaluation.js +266 -0
- package/dist/api/compiler/transformers/nullish-coalescing.d.ts +9 -0
- package/dist/api/compiler/transformers/nullish-coalescing.js +26 -0
- package/dist/api/compiler/transformers/object-rest-spread.d.ts +34 -0
- package/dist/api/compiler/transformers/object-rest-spread.js +411 -0
- package/dist/api/compiler/transformers/optional-catch.d.ts +9 -0
- package/dist/api/compiler/transformers/optional-catch.js +20 -0
- package/dist/api/compiler/transformers/optional-chain.d.ts +14 -0
- package/dist/api/compiler/transformers/optional-chain.js +188 -0
- package/dist/api/compiler/transformers/reference-resolver.d.ts +129 -0
- package/dist/api/compiler/transformers/reference-resolver.js +1157 -0
- package/dist/api/compiler/transformers/runtime-syntax.d.ts +71 -0
- package/dist/api/compiler/transformers/runtime-syntax.js +753 -0
- package/dist/api/compiler/transformers/subtree-facts.d.ts +10 -0
- package/dist/api/compiler/transformers/subtree-facts.js +205 -0
- package/dist/api/compiler/transformers/syntax-facts.d.ts +52 -0
- package/dist/api/compiler/transformers/syntax-facts.js +258 -0
- package/dist/api/compiler/transformers/tagged-template.d.ts +17 -0
- package/dist/api/compiler/transformers/tagged-template.js +148 -0
- package/dist/api/compiler/transformers/transformer.d.ts +17 -0
- package/dist/api/compiler/transformers/transformer.js +54 -0
- package/dist/api/compiler/transformers/type-eraser.d.ts +21 -0
- package/dist/api/compiler/transformers/type-eraser.js +346 -0
- package/dist/api/compiler/transformers/type-serialization.d.ts +20 -0
- package/dist/api/compiler/transformers/type-serialization.js +347 -0
- package/dist/api/compiler/transformers/using.d.ts +56 -0
- package/dist/api/compiler/transformers/using.js +453 -0
- package/dist/api/compiler/transformers/utilities.d.ts +50 -0
- package/dist/api/compiler/transformers/utilities.js +347 -0
- package/dist/api/compiler/transformers/visitor-base.d.ts +6 -0
- package/dist/api/compiler/transformers/visitor-base.js +817 -0
- package/dist/api/compiler/transformers/visitor-hooks.d.ts +29 -0
- package/dist/api/compiler/transformers/visitor-hooks.js +189 -0
- package/dist/api/compiler/tsconfig.d.ts +177 -0
- package/dist/api/compiler/tsconfig.js +1311 -0
- package/dist/api/compiler/type-printer.d.ts +15 -0
- package/dist/api/compiler/type-printer.js +74 -0
- package/dist/api/compiler/types.d.ts +87 -0
- package/dist/api/compiler/types.js +23 -0
- package/dist/api/compiler/unicode-identifiers.d.ts +2 -0
- package/dist/api/compiler/unicode-identifiers.js +209 -0
- package/dist/api/compiler/unicode-properties.d.ts +8 -0
- package/dist/api/compiler/unicode-properties.js +531 -0
- package/dist/api/compiler/vfs-match.d.ts +24 -0
- package/dist/api/compiler/vfs-match.js +587 -0
- package/dist/api/library/ast.d.ts +3 -2
- package/dist/api/library/ast.generated.d.ts +127 -139
- package/dist/api/library/checker.d.ts +51 -0
- package/dist/api/library/checker.js +318 -0
- package/dist/api/library/diagnostics.d.ts +13 -0
- package/dist/api/library/diagnostics.js +50 -0
- package/dist/api/library/disk.d.ts +13 -0
- package/dist/api/library/disk.js +66 -0
- package/dist/api/library/errors.d.ts +13 -0
- package/dist/api/library/errors.js +24 -0
- package/dist/api/library/host.d.ts +24 -0
- package/dist/api/library/host.js +52 -0
- package/dist/api/library/index.d.ts +5 -1
- package/dist/api/library/index.js +4 -0
- package/dist/api/library/nodes.d.ts +51 -0
- package/dist/api/library/nodes.js +196 -0
- package/dist/api/library/options.d.ts +144 -0
- package/dist/api/library/options.js +308 -0
- package/dist/api/library/parse.d.ts +19 -0
- package/dist/api/library/parse.js +41 -0
- package/dist/api/library/program.d.ts +21 -0
- package/dist/api/library/program.js +234 -0
- package/dist/api/library/types.d.ts +14 -1
- package/package.json +12 -8
- package/src/compiler/ast-utilities.ts +548 -0
- package/src/compiler/ast.ts +12870 -0
- package/src/compiler/astnav.ts +799 -0
- package/src/compiler/binder-utilities.ts +1392 -0
- package/src/compiler/binder.ts +2707 -0
- package/src/compiler/build-info.ts +1197 -0
- package/src/compiler/character-codes.ts +323 -0
- package/src/compiler/checker-calls.ts +2155 -0
- package/src/compiler/checker-classes.ts +706 -0
- package/src/compiler/checker-contextual.ts +1457 -0
- package/src/compiler/checker-declaration-order.ts +438 -0
- package/src/compiler/checker-declarations.ts +1201 -0
- package/src/compiler/checker-declared-types.ts +919 -0
- package/src/compiler/checker-decorators.ts +694 -0
- package/src/compiler/checker-deprecation.ts +355 -0
- package/src/compiler/checker-destructuring.ts +805 -0
- package/src/compiler/checker-elaboration.ts +477 -0
- package/src/compiler/checker-emit-helpers.ts +224 -0
- package/src/compiler/checker-emit-resolver.ts +769 -0
- package/src/compiler/checker-evaluator.ts +243 -0
- package/src/compiler/checker-expressions.ts +1831 -0
- package/src/compiler/checker-features.ts +361 -0
- package/src/compiler/checker-flow.ts +394 -0
- package/src/compiler/checker-functions.ts +1296 -0
- package/src/compiler/checker-generated-code.ts +227 -0
- package/src/compiler/checker-globals.ts +52 -0
- package/src/compiler/checker-grammar.ts +3596 -0
- package/src/compiler/checker-heritage.ts +1240 -0
- package/src/compiler/checker-inference.ts +2584 -0
- package/src/compiler/checker-iteration.ts +1206 -0
- package/src/compiler/checker-javascript.ts +502 -0
- package/src/compiler/checker-jsdoc.ts +360 -0
- package/src/compiler/checker-jsx.ts +1928 -0
- package/src/compiler/checker-literals.ts +61 -0
- package/src/compiler/checker-members.ts +2480 -0
- package/src/compiler/checker-modules.ts +2896 -0
- package/src/compiler/checker-narrowing.ts +3230 -0
- package/src/compiler/checker-object-literals.ts +591 -0
- package/src/compiler/checker-operators.ts +1422 -0
- package/src/compiler/checker-overloads.ts +328 -0
- package/src/compiler/checker-property-access.ts +906 -0
- package/src/compiler/checker-services.ts +1149 -0
- package/src/compiler/checker-signatures.ts +1032 -0
- package/src/compiler/checker-source-file.ts +732 -0
- package/src/compiler/checker-statements.ts +292 -0
- package/src/compiler/checker-super.ts +261 -0
- package/src/compiler/checker-symbol-types.ts +1187 -0
- package/src/compiler/checker-symbols.ts +2157 -0
- package/src/compiler/checker-type-factory.ts +2616 -0
- package/src/compiler/checker-type-nodes.ts +1033 -0
- package/src/compiler/checker-type-operators.ts +2510 -0
- package/src/compiler/checker-types.ts +2520 -0
- package/src/compiler/checker-unused.ts +642 -0
- package/src/compiler/checker-utilities.ts +161 -0
- package/src/compiler/checker.ts +1138 -0
- package/src/compiler/command-line.ts +436 -0
- package/src/compiler/compile-program.ts +439 -0
- package/src/compiler/decoder.ts +1209 -0
- package/src/compiler/diagnostic-locales.ts +86 -0
- package/src/compiler/diagnostic-messages.ts +2349 -0
- package/src/compiler/diagnostics.ts +858 -0
- package/src/compiler/emitter.ts +434 -0
- package/src/compiler/encoder.ts +1945 -0
- package/src/compiler/file-include.ts +741 -0
- package/src/compiler/file-loader.ts +1597 -0
- package/src/compiler/file-system.ts +143 -0
- package/src/compiler/flow.ts +89 -0
- package/src/compiler/help.ts +473 -0
- package/src/compiler/incremental.ts +2818 -0
- package/src/compiler/init.ts +141 -0
- package/src/compiler/instantiation.ts +938 -0
- package/src/compiler/jsdoc.ts +1386 -0
- package/src/compiler/link-tables.ts +343 -0
- package/src/compiler/locale-data.ts +203 -0
- package/src/compiler/locale.ts +307 -0
- package/src/compiler/locales/cs-CZ.ts +5 -0
- package/src/compiler/locales/de-DE.ts +5 -0
- package/src/compiler/locales/es-ES.ts +5 -0
- package/src/compiler/locales/fr-FR.ts +5 -0
- package/src/compiler/locales/it-IT.ts +5 -0
- package/src/compiler/locales/ja-JP.ts +5 -0
- package/src/compiler/locales/ko-KR.ts +5 -0
- package/src/compiler/locales/pl-PL.ts +5 -0
- package/src/compiler/locales/pt-BR.ts +5 -0
- package/src/compiler/locales/ru-RU.ts +5 -0
- package/src/compiler/locales/tr-TR.ts +5 -0
- package/src/compiler/locales/zh-CN.ts +5 -0
- package/src/compiler/locales/zh-TW.ts +5 -0
- package/src/compiler/module-resolution-types.ts +243 -0
- package/src/compiler/module-resolution.ts +2072 -0
- package/src/compiler/module-specifiers.ts +1491 -0
- package/src/compiler/name-resolver.ts +646 -0
- package/src/compiler/node-builder-names.ts +1071 -0
- package/src/compiler/node-builder-pseudo.ts +892 -0
- package/src/compiler/node-builder-reuse.ts +764 -0
- package/src/compiler/node-builder.ts +3433 -0
- package/src/compiler/option-declarations.ts +1560 -0
- package/src/compiler/options.ts +1576 -0
- package/src/compiler/output-paths.ts +334 -0
- package/src/compiler/package-json.ts +1083 -0
- package/src/compiler/parallel-check.ts +1954 -0
- package/src/compiler/parallel-parse.ts +595 -0
- package/src/compiler/parse-thread.ts +136 -0
- package/src/compiler/parser.ts +7766 -0
- package/src/compiler/path.ts +717 -0
- package/src/compiler/printer/async-helpers.ts +183 -0
- package/src/compiler/printer/auto-generate.ts +27 -0
- package/src/compiler/printer/decorator-helpers.ts +218 -0
- package/src/compiler/printer/emit-context.ts +684 -0
- package/src/compiler/printer/emit-flags.ts +64 -0
- package/src/compiler/printer/factory-base.ts +2577 -0
- package/src/compiler/printer/factory.ts +764 -0
- package/src/compiler/printer/helpers.ts +291 -0
- package/src/compiler/printer/name-generator.ts +372 -0
- package/src/compiler/printer/printer.ts +5072 -0
- package/src/compiler/printer/text-writer.ts +183 -0
- package/src/compiler/printer/utilities.ts +884 -0
- package/src/compiler/program-checker.ts +594 -0
- package/src/compiler/program-utilities.ts +435 -0
- package/src/compiler/program.ts +1426 -0
- package/src/compiler/pseudo-bigint.ts +62 -0
- package/src/compiler/regexp-checker.ts +1142 -0
- package/src/compiler/relations.ts +5149 -0
- package/src/compiler/reparser.ts +1566 -0
- package/src/compiler/scanner.ts +2951 -0
- package/src/compiler/show-config.ts +239 -0
- package/src/compiler/side-state.ts +125 -0
- package/src/compiler/sourcemap.ts +366 -0
- package/src/compiler/spelling.ts +122 -0
- package/src/compiler/symbol-accessibility.ts +1166 -0
- package/src/compiler/symbol.ts +557 -0
- package/src/compiler/symlinks.ts +137 -0
- package/src/compiler/syntax-kind.ts +391 -0
- package/src/compiler/thread-entry.ts +191 -0
- package/src/compiler/timeline.ts +53 -0
- package/src/compiler/transformers/alias-references.ts +757 -0
- package/src/compiler/transformers/async-utilities.ts +335 -0
- package/src/compiler/transformers/async.ts +838 -0
- package/src/compiler/transformers/class-fields.ts +2967 -0
- package/src/compiler/transformers/class-utilities.ts +324 -0
- package/src/compiler/transformers/commonjs-module.ts +1621 -0
- package/src/compiler/transformers/const-enum-inliner.ts +50 -0
- package/src/compiler/transformers/declarations-diagnostics.ts +833 -0
- package/src/compiler/transformers/declarations-pseudo.ts +969 -0
- package/src/compiler/transformers/declarations-resolver.ts +249 -0
- package/src/compiler/transformers/declarations-syntactic.ts +1867 -0
- package/src/compiler/transformers/declarations-tracker.ts +269 -0
- package/src/compiler/transformers/declarations.ts +3120 -0
- package/src/compiler/transformers/decorator-metadata.ts +697 -0
- package/src/compiler/transformers/decorator-utilities.ts +283 -0
- package/src/compiler/transformers/destructuring.ts +708 -0
- package/src/compiler/transformers/downlevel.ts +50 -0
- package/src/compiler/transformers/emit-resolver.ts +258 -0
- package/src/compiler/transformers/es-decorators.ts +2682 -0
- package/src/compiler/transformers/exponentiation.ts +80 -0
- package/src/compiler/transformers/external-module-info.ts +412 -0
- package/src/compiler/transformers/for-await.ts +687 -0
- package/src/compiler/transformers/import-elision.ts +152 -0
- package/src/compiler/transformers/jsx-entities.ts +256 -0
- package/src/compiler/transformers/jsx.ts +824 -0
- package/src/compiler/transformers/legacy-decorators.ts +726 -0
- package/src/compiler/transformers/logical-assignment.ts +75 -0
- package/src/compiler/transformers/module-utilities.ts +42 -0
- package/src/compiler/transformers/module.ts +474 -0
- package/src/compiler/transformers/named-evaluation.ts +389 -0
- package/src/compiler/transformers/nullish-coalescing.ts +35 -0
- package/src/compiler/transformers/object-rest-spread.ts +577 -0
- package/src/compiler/transformers/optional-catch.ts +29 -0
- package/src/compiler/transformers/optional-chain.ts +246 -0
- package/src/compiler/transformers/reference-resolver.ts +1213 -0
- package/src/compiler/transformers/runtime-syntax.ts +942 -0
- package/src/compiler/transformers/subtree-facts.ts +253 -0
- package/src/compiler/transformers/syntax-facts.ts +358 -0
- package/src/compiler/transformers/tagged-template.ts +167 -0
- package/src/compiler/transformers/transformer.ts +56 -0
- package/src/compiler/transformers/type-eraser.ts +520 -0
- package/src/compiler/transformers/type-serialization.ts +374 -0
- package/src/compiler/transformers/using.ts +613 -0
- package/src/compiler/transformers/utilities.ts +419 -0
- package/src/compiler/transformers/visitor-base.ts +1601 -0
- package/src/compiler/transformers/visitor-hooks.ts +252 -0
- package/src/compiler/tsc-build.ts +1422 -0
- package/src/compiler/tsc-cli.ts +669 -0
- package/src/compiler/tsc-compile.ts +446 -0
- package/src/compiler/tsc-watch.ts +922 -0
- package/src/compiler/tsconfig.ts +1574 -0
- package/src/compiler/type-printer.ts +110 -0
- package/src/compiler/types.ts +115 -0
- package/src/compiler/unicode-identifiers.ts +212 -0
- package/src/compiler/unicode-properties.ts +537 -0
- package/src/compiler/vfs-match.ts +597 -0
- package/src/compiler/xxh3.ts +650 -0
- package/src/library/ast.generated.ts +141 -167
- package/src/library/ast.ts +4 -1
- package/src/library/checker.ts +384 -0
- package/src/library/diagnostics.ts +72 -0
- package/src/library/disk.ts +73 -0
- package/src/library/errors.ts +26 -0
- package/src/library/host.ts +63 -0
- package/src/library/index.ts +21 -0
- package/src/library/nodes.ts +232 -0
- package/src/library/options.ts +449 -0
- package/src/library/parse.ts +63 -0
- package/src/library/program.ts +293 -0
- package/src/library/types.ts +14 -1
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type Node, NodeVisitor, type SourceFile } from './ast.js';
|
|
2
|
+
import type { Checker } from './checker.js';
|
|
3
|
+
/**
|
|
4
|
+
* Checks `file` once; diagnostics accumulate in the checker. `checkUnused` also reports unused
|
|
5
|
+
* identifiers, which need the whole file checked first.
|
|
6
|
+
*/
|
|
7
|
+
export declare function checkSourceFile(c: Checker, file: SourceFile, checkUnused?: boolean): void;
|
|
8
|
+
/** Checks a statement, declaration, class member or type node. */
|
|
9
|
+
export declare function checkSourceElement(c: Checker, node: Node | undefined): void;
|
|
10
|
+
/** Resolves the `@link` names of a node's JSDoc, which marks what they name referenced. */
|
|
11
|
+
export declare function checkJSDocLinksOfNode(c: Checker, node: Node): void;
|
|
12
|
+
/** Resolves every type reference in a type annotation, reporting unresolved names and constraint errors. */
|
|
13
|
+
export declare function checkTypeNodeIfPresent(c: Checker, node: Node | undefined): void;
|
|
14
|
+
/** Visits the children of a type node; owned by the checker to avoid per-node allocation. */
|
|
15
|
+
export declare class TypeNodeVisitor extends NodeVisitor {
|
|
16
|
+
readonly c: Checker;
|
|
17
|
+
constructor(c: Checker);
|
|
18
|
+
visitNode(node: Node): boolean;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Queues a function expression, arrow, accessor, class expression or other deferred node to check with
|
|
22
|
+
* its file, like tsgo: nodes wait in the links of their own source file and are checked when that file
|
|
23
|
+
* is checked, and nodes of files this checker has already checked are not queued again. Checking one
|
|
24
|
+
* file often defers nodes of others (inferring a function's return type checks its body), and those
|
|
25
|
+
* belong to whichever checker checks the other file.
|
|
26
|
+
*/
|
|
27
|
+
export declare function checkNodeDeferred(c: Checker, node: Node): void;
|
|
@@ -0,0 +1,619 @@
|
|
|
1
|
+
// File-level checking: `checkSourceFile`, the statement/declaration dispatch and deferred checks.
|
|
2
|
+
//
|
|
3
|
+
// Extension points, by syntactic area:
|
|
4
|
+
// - statements: checker-statements.ts (`checkBlock`, `checkIfStatement`, ...)
|
|
5
|
+
// - declarations: checker-declarations.ts (variables, functions, aliases, enums, namespaces)
|
|
6
|
+
// - imports and exports: checker-modules.ts
|
|
7
|
+
// - classes and interfaces: checker-classes.ts
|
|
8
|
+
// - expressions: checker-expressions.ts (`checkExpression`), calls in checker-calls.ts
|
|
9
|
+
// - JSX: checker-jsx.ts
|
|
10
|
+
// - grammar: checker-grammar.ts (checks the parser leaves to the checker)
|
|
11
|
+
// - type nodes: `checkTypeNode` below
|
|
12
|
+
import { checkPendingExternalEmitHelpers } from './checker-emit-helpers.js';
|
|
13
|
+
import { produceDeferredCollisionChecks } from './checker-generated-code.js';
|
|
14
|
+
import { resolveUntypedCall } from './checker-calls.js';
|
|
15
|
+
import { NodeVisitor, getComment, getElements, getExpression, getName, getParameters, getText, getNodeId, getStatements, getType, getTypeParameters, getHeritageClauses, getFlowNode, } from './ast.js';
|
|
16
|
+
import { getSourceFileOfNode, isEnumConst, isExternalOrCommonJSModule, isPotentiallyExecutableNode, } from './binder-utilities.js';
|
|
17
|
+
import { getSignatureFromDeclaration, getTypePredicateOfSignature } from './checker-signatures.js';
|
|
18
|
+
import { getConstraintTypeFromMappedType, getNameTypeFromMappedType } from './checker-type-operators.js';
|
|
19
|
+
import { checkTypeAssignableTo, checkTypeRelatedTo } from './relations.js';
|
|
20
|
+
import { Diagnostic, chainDiagnostic } from './diagnostics.js';
|
|
21
|
+
import { skipTrivia } from './scanner.js';
|
|
22
|
+
import { nodeIsMissing } from './ast-utilities.js';
|
|
23
|
+
import { getAttachedJSDoc } from './parser.js';
|
|
24
|
+
import { shouldPreserveConstEnums } from './options.js';
|
|
25
|
+
import { isReachableFlowNode } from './checker-narrowing.js';
|
|
26
|
+
import { getTupleElementFlags, getTypeFromIndexedAccessTypeNode, getTypeFromTypeNode } from './checker-type-nodes.js';
|
|
27
|
+
import { isArrayLikeType } from './checker-members.js';
|
|
28
|
+
import { checkBlock, checkDoStatement, checkExpressionStatement, checkForInStatement, checkForOfStatement, checkForStatement, checkIfStatement, checkLabeledStatement, checkReturnStatement, checkSwitchStatement, checkThrowStatement, checkTryStatement, checkWhileStatement, } from './checker-statements.js';
|
|
29
|
+
import { checkEnumDeclaration, checkEnumMember, checkExternalModuleExports, checkFunctionDeclaration, checkModuleDeclaration, checkTypeAliasDeclaration, checkTypeArgumentConstraintsOfReference, checkTypeParameter, checkTypeParameterDeferred, checkTypeParameters, checkVariableStatement, checkVariableLikeDeclaration, checkUnusedRenamedBindingElements, isInstantiatedModule, } from './checker-declarations.js';
|
|
30
|
+
import { checkExportAssignment, checkExportDeclaration, checkImportDeclaration, checkImportEqualsDeclaration, resolveJSDocMemberName, } from './checker-modules.js';
|
|
31
|
+
import { checkAccessorDeclaration, checkClassDeclaration, checkClassLikeDeferred, checkInterfaceDeclaration, } from './checker-classes.js';
|
|
32
|
+
import { checkJsxElementDeferred } from './checker-jsx.js';
|
|
33
|
+
import { checkAssertionDeferred, checkComputedPropertyName, checkExpression, checkIndexedAccessIndexType, } from './checker-expressions.js';
|
|
34
|
+
import { checkFunctionLikeBody } from './checker-functions.js';
|
|
35
|
+
import { produceDeferredIterationErrors } from './checker-iteration.js';
|
|
36
|
+
import { checkFunctionOrMethodSymbols } from './checker-overloads.js';
|
|
37
|
+
import { checkInferTypeParameterDeclarations, checkTypeLiteralMembers } from './checker-heritage.js';
|
|
38
|
+
import { checkGrammarSourceFile } from './checker-grammar.js';
|
|
39
|
+
import { getTypeOfSymbol, reportImplicitAny } from './checker-symbol-types.js';
|
|
40
|
+
import { getSymbolOfDeclaration } from './checker-symbols.js';
|
|
41
|
+
import { checkUnusedIdentifiers } from './checker-unused.js';
|
|
42
|
+
import { checkDeprecatedTypeReference } from './checker-deprecation.js';
|
|
43
|
+
/**
|
|
44
|
+
* Checks `file` once; diagnostics accumulate in the checker. `checkUnused` also reports unused
|
|
45
|
+
* identifiers, which need the whole file checked first.
|
|
46
|
+
*/
|
|
47
|
+
export function checkSourceFile(c, file, checkUnused = false) {
|
|
48
|
+
const links = c.nodeLinks(file);
|
|
49
|
+
if ((links.flags & 1 /* NodeCheckFlags.TypeChecked */) === 0) {
|
|
50
|
+
links.flags |= 1 /* NodeCheckFlags.TypeChecked */;
|
|
51
|
+
checkSourceFileWorker(c, file);
|
|
52
|
+
}
|
|
53
|
+
if (checkUnused && (links.flags & 2 /* NodeCheckFlags.UnusedChecked */) === 0) {
|
|
54
|
+
links.flags |= 2 /* NodeCheckFlags.UnusedChecked */;
|
|
55
|
+
checkUnusedIdentifiers(c, file);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
function checkSourceFileWorker(c, file) {
|
|
59
|
+
c.fileBeingChecked = file;
|
|
60
|
+
c.saveDeferredDiagnostics = true;
|
|
61
|
+
for (const statement of getStatements(file).nodes)
|
|
62
|
+
checkSourceElement(c, statement);
|
|
63
|
+
checkDeferredNodes(c, file);
|
|
64
|
+
if (isExternalOrCommonJSModule(file))
|
|
65
|
+
checkExternalModuleExports(c, file);
|
|
66
|
+
if (!file.isDeclarationFile)
|
|
67
|
+
checkUnusedRenamedBindingElements(c);
|
|
68
|
+
else
|
|
69
|
+
c.renamedBindingElementsInTypes.length = 0;
|
|
70
|
+
// Grammar checks run last so the types they need are created in tsgo's order.
|
|
71
|
+
checkGrammarSourceFile(c, file);
|
|
72
|
+
// Expressions first checked by grammar checks may defer more nodes.
|
|
73
|
+
checkDeferredNodes(c, file);
|
|
74
|
+
checkPendingExternalEmitHelpers(c, file);
|
|
75
|
+
c.fileBeingChecked = undefined;
|
|
76
|
+
c.saveDeferredDiagnostics = false;
|
|
77
|
+
produceDeferredIterationErrors(c);
|
|
78
|
+
produceDeferredCollisionChecks(c);
|
|
79
|
+
// The file's deferred nodes are all checked; later ones are not queued (checkNodeDeferred).
|
|
80
|
+
const links = c.nodeLinks(file);
|
|
81
|
+
links.typeChecked = true;
|
|
82
|
+
links.deferredNodes = undefined;
|
|
83
|
+
}
|
|
84
|
+
/** Checks a statement, declaration, class member or type node. */
|
|
85
|
+
export function checkSourceElement(c, node) {
|
|
86
|
+
if (node === undefined)
|
|
87
|
+
return;
|
|
88
|
+
const saveCurrentNode = c.currentNode;
|
|
89
|
+
const saveWithinUnreachableCode = c.withinUnreachableCode;
|
|
90
|
+
c.currentNode = node;
|
|
91
|
+
c.instantiationCount = 0;
|
|
92
|
+
checkSourceElementWorker(c, node);
|
|
93
|
+
c.currentNode = saveCurrentNode;
|
|
94
|
+
c.withinUnreachableCode = saveWithinUnreachableCode;
|
|
95
|
+
}
|
|
96
|
+
/** Reports a statement that can't be reached, with the unreachable statements after it. */
|
|
97
|
+
function checkSourceElementUnreachable(c, node) {
|
|
98
|
+
if (!isPotentiallyExecutableNode(node))
|
|
99
|
+
return false;
|
|
100
|
+
if (c.reportedUnreachableNodes.has(node))
|
|
101
|
+
return true;
|
|
102
|
+
if (!isSourceElementUnreachable(c, node))
|
|
103
|
+
return false;
|
|
104
|
+
c.reportedUnreachableNodes.add(node);
|
|
105
|
+
const file = getSourceFileOfNode(node);
|
|
106
|
+
let endNode = node;
|
|
107
|
+
const parent = node.parent;
|
|
108
|
+
const statements = getStatements(parent)?.nodes;
|
|
109
|
+
if (statements !== undefined) {
|
|
110
|
+
const offset = statements.indexOf(node);
|
|
111
|
+
if (offset >= 0)
|
|
112
|
+
for (let i = offset + 1; i < statements.length; i++) {
|
|
113
|
+
const next = statements[i];
|
|
114
|
+
if (!isPotentiallyExecutableNode(next) || !isSourceElementUnreachable(c, next))
|
|
115
|
+
break;
|
|
116
|
+
endNode = next;
|
|
117
|
+
c.reportedUnreachableNodes.add(next);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// A missing statement starts where it ends, before the trivia of the next token.
|
|
121
|
+
const start = nodeIsMissing(node) ? node.pos : skipTrivia(file.text, node.pos);
|
|
122
|
+
const diagnostic = new Diagnostic(file.diagnosticFile(), start, endNode.end, 1698 /* Diagnostics.Unreachable_code_detected */, []);
|
|
123
|
+
c.addErrorOrSuggestion(c.compilerOptions.allowUnreachableCode === false, diagnostic);
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
126
|
+
function isSourceElementUnreachable(c, node) {
|
|
127
|
+
if ((node.flags & 134217728 /* NodeFlags.Unreachable */) !== 0) {
|
|
128
|
+
// The binder knows the code is unreachable; const enums only count when preserved.
|
|
129
|
+
if (node.kind === 267 /* SyntaxKind.EnumDeclaration */)
|
|
130
|
+
return !isEnumConst(node) || shouldPreserveConstEnums(c.compilerOptions);
|
|
131
|
+
if (node.kind === 268 /* SyntaxKind.ModuleDeclaration */)
|
|
132
|
+
return isInstantiatedModule(node, shouldPreserveConstEnums(c.compilerOptions));
|
|
133
|
+
return true;
|
|
134
|
+
}
|
|
135
|
+
// Otherwise control flow decides, through assertion calls for example.
|
|
136
|
+
const flowNode = getFlowNode(node);
|
|
137
|
+
return flowNode !== undefined && !isReachableFlowNode(c, flowNode);
|
|
138
|
+
}
|
|
139
|
+
/** Resolves the `@link` names of a node's JSDoc, which marks what they name referenced. */
|
|
140
|
+
export function checkJSDocLinksOfNode(c, node) {
|
|
141
|
+
const jsDoc = getAttachedJSDoc(node);
|
|
142
|
+
if (jsDoc !== undefined)
|
|
143
|
+
for (const d of jsDoc)
|
|
144
|
+
checkJSDocLinks(c, d);
|
|
145
|
+
}
|
|
146
|
+
function checkSourceElementWorker(c, node) {
|
|
147
|
+
checkJSDocLinksOfNode(c, node);
|
|
148
|
+
if (!c.withinUnreachableCode &&
|
|
149
|
+
c.compilerOptions.allowUnreachableCode !== true &&
|
|
150
|
+
checkSourceElementUnreachable(c, node))
|
|
151
|
+
c.withinUnreachableCode = true;
|
|
152
|
+
switch (node.kind) {
|
|
153
|
+
// Statements
|
|
154
|
+
case 242 /* SyntaxKind.Block */:
|
|
155
|
+
case 269 /* SyntaxKind.ModuleBlock */:
|
|
156
|
+
checkBlock(c, node);
|
|
157
|
+
return;
|
|
158
|
+
case 243 /* SyntaxKind.EmptyStatement */:
|
|
159
|
+
case 260 /* SyntaxKind.DebuggerStatement */:
|
|
160
|
+
case 253 /* SyntaxKind.BreakStatement */:
|
|
161
|
+
case 252 /* SyntaxKind.ContinueStatement */:
|
|
162
|
+
return;
|
|
163
|
+
case 244 /* SyntaxKind.VariableStatement */:
|
|
164
|
+
checkVariableStatement(c, node);
|
|
165
|
+
return;
|
|
166
|
+
case 245 /* SyntaxKind.ExpressionStatement */:
|
|
167
|
+
checkExpressionStatement(c, node);
|
|
168
|
+
return;
|
|
169
|
+
case 246 /* SyntaxKind.IfStatement */:
|
|
170
|
+
checkIfStatement(c, node);
|
|
171
|
+
return;
|
|
172
|
+
case 247 /* SyntaxKind.DoStatement */:
|
|
173
|
+
checkDoStatement(c, node);
|
|
174
|
+
return;
|
|
175
|
+
case 248 /* SyntaxKind.WhileStatement */:
|
|
176
|
+
checkWhileStatement(c, node);
|
|
177
|
+
return;
|
|
178
|
+
case 249 /* SyntaxKind.ForStatement */:
|
|
179
|
+
checkForStatement(c, node);
|
|
180
|
+
return;
|
|
181
|
+
case 250 /* SyntaxKind.ForInStatement */:
|
|
182
|
+
checkForInStatement(c, node);
|
|
183
|
+
return;
|
|
184
|
+
case 251 /* SyntaxKind.ForOfStatement */:
|
|
185
|
+
checkForOfStatement(c, node);
|
|
186
|
+
return;
|
|
187
|
+
case 254 /* SyntaxKind.ReturnStatement */:
|
|
188
|
+
checkReturnStatement(c, node);
|
|
189
|
+
return;
|
|
190
|
+
case 256 /* SyntaxKind.SwitchStatement */:
|
|
191
|
+
checkSwitchStatement(c, node);
|
|
192
|
+
return;
|
|
193
|
+
case 257 /* SyntaxKind.LabeledStatement */:
|
|
194
|
+
checkLabeledStatement(c, node);
|
|
195
|
+
return;
|
|
196
|
+
case 258 /* SyntaxKind.ThrowStatement */:
|
|
197
|
+
checkThrowStatement(c, node);
|
|
198
|
+
return;
|
|
199
|
+
case 259 /* SyntaxKind.TryStatement */:
|
|
200
|
+
checkTryStatement(c, node);
|
|
201
|
+
return;
|
|
202
|
+
case 255 /* SyntaxKind.WithStatement */:
|
|
203
|
+
// The body isn't checked: every name in it has type `any`.
|
|
204
|
+
checkExpression(c, getExpression(node));
|
|
205
|
+
return;
|
|
206
|
+
// Declarations
|
|
207
|
+
case 263 /* SyntaxKind.FunctionDeclaration */:
|
|
208
|
+
checkFunctionDeclaration(c, node);
|
|
209
|
+
return;
|
|
210
|
+
case 264 /* SyntaxKind.ClassDeclaration */:
|
|
211
|
+
checkClassDeclaration(c, node);
|
|
212
|
+
return;
|
|
213
|
+
case 265 /* SyntaxKind.InterfaceDeclaration */:
|
|
214
|
+
checkInterfaceDeclaration(c, node);
|
|
215
|
+
return;
|
|
216
|
+
case 266 /* SyntaxKind.TypeAliasDeclaration */:
|
|
217
|
+
case 345 /* SyntaxKind.JSTypeAliasDeclaration */:
|
|
218
|
+
checkTypeAliasDeclaration(c, node);
|
|
219
|
+
return;
|
|
220
|
+
case 267 /* SyntaxKind.EnumDeclaration */:
|
|
221
|
+
checkEnumDeclaration(c, node);
|
|
222
|
+
return;
|
|
223
|
+
case 306 /* SyntaxKind.EnumMember */:
|
|
224
|
+
checkEnumMember(c, node);
|
|
225
|
+
return;
|
|
226
|
+
case 268 /* SyntaxKind.ModuleDeclaration */:
|
|
227
|
+
checkModuleDeclaration(c, node);
|
|
228
|
+
return;
|
|
229
|
+
case 273 /* SyntaxKind.ImportDeclaration */:
|
|
230
|
+
case 346 /* SyntaxKind.JSImportDeclaration */:
|
|
231
|
+
checkImportDeclaration(c, node);
|
|
232
|
+
return;
|
|
233
|
+
case 272 /* SyntaxKind.ImportEqualsDeclaration */:
|
|
234
|
+
checkImportEqualsDeclaration(c, node);
|
|
235
|
+
return;
|
|
236
|
+
case 279 /* SyntaxKind.ExportDeclaration */:
|
|
237
|
+
checkExportDeclaration(c, node);
|
|
238
|
+
return;
|
|
239
|
+
case 278 /* SyntaxKind.ExportAssignment */:
|
|
240
|
+
checkExportAssignment(c, node);
|
|
241
|
+
return;
|
|
242
|
+
case 271 /* SyntaxKind.NamespaceExportDeclaration */:
|
|
243
|
+
case 283 /* SyntaxKind.MissingDeclaration */:
|
|
244
|
+
return;
|
|
245
|
+
case 169 /* SyntaxKind.TypeParameter */:
|
|
246
|
+
checkTypeParameter(c, node);
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
checkTypeNode(c, node);
|
|
250
|
+
}
|
|
251
|
+
// ---- JSDoc
|
|
252
|
+
/** Resolves the names of `{@link}` tags in a JSDoc comment and its tags, which references them. */
|
|
253
|
+
function checkJSDocLinks(c, jsDoc) {
|
|
254
|
+
checkJSDocCommentLinks(c, getComment(jsDoc));
|
|
255
|
+
const tags = jsDoc.kind === 315 /* SyntaxKind.JSDoc */ ? jsDoc.tags : undefined;
|
|
256
|
+
if (tags !== undefined)
|
|
257
|
+
for (const tag of tags.nodes)
|
|
258
|
+
checkJSDocCommentLinks(c, getComment(tag));
|
|
259
|
+
}
|
|
260
|
+
function checkJSDocCommentLinks(c, comments) {
|
|
261
|
+
if (comments === undefined)
|
|
262
|
+
return;
|
|
263
|
+
for (const comment of comments.nodes)
|
|
264
|
+
if (comment.kind === 319 /* SyntaxKind.JSDocLink */ ||
|
|
265
|
+
comment.kind === 320 /* SyntaxKind.JSDocLinkCode */ ||
|
|
266
|
+
comment.kind === 321 /* SyntaxKind.JSDocLinkPlain */)
|
|
267
|
+
resolveJSDocMemberName(c, getName(comment));
|
|
268
|
+
}
|
|
269
|
+
// ---- Type nodes
|
|
270
|
+
/** Resolves every type reference in a type annotation, reporting unresolved names and constraint errors. */
|
|
271
|
+
export function checkTypeNodeIfPresent(c, node) {
|
|
272
|
+
if (node !== undefined)
|
|
273
|
+
checkTypeNode(c, node);
|
|
274
|
+
}
|
|
275
|
+
/** Implicit `any` return types of signatures without annotations. */
|
|
276
|
+
function checkSignatureMember(c, node) {
|
|
277
|
+
if (getType(node) !== undefined || !c.noImplicitAny)
|
|
278
|
+
return;
|
|
279
|
+
if (node.kind === 174 /* SyntaxKind.MethodSignature */)
|
|
280
|
+
reportImplicitAny(c, node, c.anyType);
|
|
281
|
+
else if (node.kind === 180 /* SyntaxKind.CallSignature */)
|
|
282
|
+
c.error(node, 1692 /* Diagnostics.Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type */);
|
|
283
|
+
else
|
|
284
|
+
c.error(node, 1685 /* Diagnostics.Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type */);
|
|
285
|
+
}
|
|
286
|
+
function checkTypeNode(c, node) {
|
|
287
|
+
const saveCurrentNode = c.currentNode;
|
|
288
|
+
c.currentNode = node;
|
|
289
|
+
c.instantiationCount = 0;
|
|
290
|
+
checkTypeNodeWorker(c, node);
|
|
291
|
+
c.currentNode = saveCurrentNode;
|
|
292
|
+
}
|
|
293
|
+
function isTypeReferenceHeritageElement(node) {
|
|
294
|
+
const clause = node.parent;
|
|
295
|
+
if (clause === undefined || clause.kind !== 299 /* SyntaxKind.HeritageClause */)
|
|
296
|
+
return false;
|
|
297
|
+
const token = clause.token;
|
|
298
|
+
if ((token === 118 /* SyntaxKind.ImplementsKeyword */) === (clause.parent.kind === 265 /* SyntaxKind.InterfaceDeclaration */))
|
|
299
|
+
return false;
|
|
300
|
+
// Only the first clause of each kind counts.
|
|
301
|
+
for (const other of getHeritageClauses(clause.parent).nodes)
|
|
302
|
+
if (other.token === token)
|
|
303
|
+
return other === clause;
|
|
304
|
+
return false;
|
|
305
|
+
}
|
|
306
|
+
function checkTypeNodeWorker(c, node) {
|
|
307
|
+
switch (node.kind) {
|
|
308
|
+
case 183 /* SyntaxKind.TypePredicate */:
|
|
309
|
+
checkTypePredicate(c, node);
|
|
310
|
+
return;
|
|
311
|
+
case 174 /* SyntaxKind.MethodSignature */:
|
|
312
|
+
case 180 /* SyntaxKind.CallSignature */:
|
|
313
|
+
case 181 /* SyntaxKind.ConstructSignature */: {
|
|
314
|
+
checkTypeParameters(c, getTypeParameters(node));
|
|
315
|
+
checkSignatureMember(c, node);
|
|
316
|
+
const name = getName(node);
|
|
317
|
+
if (name !== undefined && name.kind === 168 /* SyntaxKind.ComputedPropertyName */)
|
|
318
|
+
checkComputedPropertyName(c, name);
|
|
319
|
+
break;
|
|
320
|
+
}
|
|
321
|
+
case 185 /* SyntaxKind.FunctionType */:
|
|
322
|
+
case 186 /* SyntaxKind.ConstructorType */:
|
|
323
|
+
checkTypeParameters(c, getTypeParameters(node));
|
|
324
|
+
break;
|
|
325
|
+
case 184 /* SyntaxKind.TypeReference */:
|
|
326
|
+
case 206 /* SyntaxKind.ImportType */: {
|
|
327
|
+
const type = getTypeFromTypeNode(c, node);
|
|
328
|
+
checkTypeArgumentConstraintsOfReference(c, node, type);
|
|
329
|
+
checkDeprecatedTypeReference(c, node, type);
|
|
330
|
+
break;
|
|
331
|
+
}
|
|
332
|
+
case 200 /* SyntaxKind.IndexedAccessType */:
|
|
333
|
+
// The indexed access type itself, not the substitution type of a conditional type's true branch.
|
|
334
|
+
checkIndexedAccessIndexType(c, getTypeFromIndexedAccessTypeNode(c, node), node);
|
|
335
|
+
break;
|
|
336
|
+
case 190 /* SyntaxKind.TupleType */:
|
|
337
|
+
checkTupleRestElements(c, node);
|
|
338
|
+
getTypeFromTypeNode(c, node);
|
|
339
|
+
case 234 /* SyntaxKind.ExpressionWithTypeArguments */:
|
|
340
|
+
// Implemented types and interface base types are type references; class base types are
|
|
341
|
+
// checked with the base constructor's type parameters.
|
|
342
|
+
if (isTypeReferenceHeritageElement(node))
|
|
343
|
+
checkTypeArgumentConstraintsOfReference(c, node, getTypeFromTypeNode(c, node));
|
|
344
|
+
break;
|
|
345
|
+
case 187 /* SyntaxKind.TypeQuery */:
|
|
346
|
+
case 199 /* SyntaxKind.TypeOperator */:
|
|
347
|
+
case 202 /* SyntaxKind.LiteralType */:
|
|
348
|
+
case 198 /* SyntaxKind.ThisType */:
|
|
349
|
+
getTypeFromTypeNode(c, node);
|
|
350
|
+
break;
|
|
351
|
+
}
|
|
352
|
+
// Type arguments of an import type are only resolved with its type.
|
|
353
|
+
if (node.kind === 206 /* SyntaxKind.ImportType */) {
|
|
354
|
+
checkTypeNode(c, node.argument);
|
|
355
|
+
return;
|
|
356
|
+
}
|
|
357
|
+
// Type arguments of a type query are checked with its type.
|
|
358
|
+
if (node.kind === 187 /* SyntaxKind.TypeQuery */)
|
|
359
|
+
return;
|
|
360
|
+
if (node.kind === 201 /* SyntaxKind.MappedType */) {
|
|
361
|
+
checkMappedType(c, node);
|
|
362
|
+
return;
|
|
363
|
+
}
|
|
364
|
+
if (node.kind === 204 /* SyntaxKind.TemplateLiteralType */) {
|
|
365
|
+
checkTemplateLiteralType(c, node);
|
|
366
|
+
return;
|
|
367
|
+
}
|
|
368
|
+
node.forEachChild(c.typeNodeVisitor);
|
|
369
|
+
// Unions and intersections are resolved after their constituents.
|
|
370
|
+
if (node.kind === 193 /* SyntaxKind.UnionType */ || node.kind === 194 /* SyntaxKind.IntersectionType */)
|
|
371
|
+
getTypeFromTypeNode(c, node);
|
|
372
|
+
if (node.kind === 174 /* SyntaxKind.MethodSignature */)
|
|
373
|
+
checkFunctionOrMethodSymbols(c, node);
|
|
374
|
+
else if (node.kind === 188 /* SyntaxKind.TypeLiteral */)
|
|
375
|
+
checkTypeLiteralMembers(c, node);
|
|
376
|
+
}
|
|
377
|
+
/** Checks that each span of a template literal type can be written in a template, then its type. */
|
|
378
|
+
function checkTemplateLiteralType(c, node) {
|
|
379
|
+
for (const span of node.templateSpans.nodes) {
|
|
380
|
+
const spanType = span.type;
|
|
381
|
+
checkTypeNode(c, spanType);
|
|
382
|
+
checkTypeAssignableTo(c, getTypeFromTypeNode(c, spanType), c.templateConstraintType, spanType, undefined);
|
|
383
|
+
}
|
|
384
|
+
getTypeFromTypeNode(c, node);
|
|
385
|
+
}
|
|
386
|
+
/** Checks a mapped type's parts before its type, which resolves the constraint eagerly. */
|
|
387
|
+
function checkMappedType(c, node) {
|
|
388
|
+
checkTypeParameter(c, node.typeParameter);
|
|
389
|
+
checkTypeNodeIfPresent(c, node.nameType);
|
|
390
|
+
checkTypeNodeIfPresent(c, node.type);
|
|
391
|
+
if (node.type === undefined)
|
|
392
|
+
reportImplicitAny(c, node, c.anyType);
|
|
393
|
+
const t = getTypeFromTypeNode(c, node);
|
|
394
|
+
const nameType = getNameTypeFromMappedType(c, t);
|
|
395
|
+
if (nameType !== undefined)
|
|
396
|
+
checkTypeAssignableTo(c, nameType, c.stringNumberSymbolType, node.nameType, undefined);
|
|
397
|
+
else
|
|
398
|
+
checkTypeAssignableTo(c, getConstraintTypeFromMappedType(c, t), c.stringNumberSymbolType, node.typeParameter.constraint, undefined);
|
|
399
|
+
}
|
|
400
|
+
function checkTypePredicate(c, node) {
|
|
401
|
+
const parent = getTypePredicateParent(node);
|
|
402
|
+
if (parent === undefined) {
|
|
403
|
+
c.error(node, 178 /* Diagnostics.A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods */);
|
|
404
|
+
return;
|
|
405
|
+
}
|
|
406
|
+
const signature = getSignatureFromDeclaration(c, parent);
|
|
407
|
+
const typePredicate = getTypePredicateOfSignature(c, signature);
|
|
408
|
+
if (typePredicate === undefined)
|
|
409
|
+
return;
|
|
410
|
+
checkTypeNodeIfPresent(c, node.type);
|
|
411
|
+
if (typePredicate.kind === 0 /* TypePredicateKind.This */ || typePredicate.kind === 2 /* TypePredicateKind.AssertsThis */)
|
|
412
|
+
return;
|
|
413
|
+
const parameterName = node.parameterName;
|
|
414
|
+
if (typePredicate.parameterIndex >= 0) {
|
|
415
|
+
if (signature.hasRestParameter() && typePredicate.parameterIndex === signature.parameters.length - 1)
|
|
416
|
+
c.error(parameterName, 179 /* Diagnostics.A_type_predicate_cannot_reference_a_rest_parameter */);
|
|
417
|
+
else if (typePredicate.type !== undefined) {
|
|
418
|
+
const diagnostics = [];
|
|
419
|
+
if (!checkTypeRelatedTo(c, typePredicate.type, getTypeOfSymbol(c, signature.parameters[typePredicate.parameterIndex]), c.assignableRelation, node.type, undefined, diagnostics))
|
|
420
|
+
c.addDiagnostic(chainDiagnostic(diagnostics[0], 811 /* Diagnostics.A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type */));
|
|
421
|
+
}
|
|
422
|
+
return;
|
|
423
|
+
}
|
|
424
|
+
for (const param of getParameters(parent).nodes) {
|
|
425
|
+
const name = getName(param);
|
|
426
|
+
if ((name.kind === 207 /* SyntaxKind.ObjectBindingPattern */ || name.kind === 208 /* SyntaxKind.ArrayBindingPattern */) &&
|
|
427
|
+
checkIfTypePredicateVariableIsDeclaredInBindingPattern(c, name, parameterName, typePredicate.parameterName))
|
|
428
|
+
return;
|
|
429
|
+
}
|
|
430
|
+
c.error(parameterName, 175 /* Diagnostics.Cannot_find_parameter_0 */, typePredicate.parameterName);
|
|
431
|
+
}
|
|
432
|
+
/** The signature whose return type is the type predicate, if it is in a valid position. */
|
|
433
|
+
function getTypePredicateParent(node) {
|
|
434
|
+
const parent = node.parent;
|
|
435
|
+
switch (parent.kind) {
|
|
436
|
+
case 220 /* SyntaxKind.ArrowFunction */:
|
|
437
|
+
case 180 /* SyntaxKind.CallSignature */:
|
|
438
|
+
case 263 /* SyntaxKind.FunctionDeclaration */:
|
|
439
|
+
case 219 /* SyntaxKind.FunctionExpression */:
|
|
440
|
+
case 185 /* SyntaxKind.FunctionType */:
|
|
441
|
+
case 175 /* SyntaxKind.MethodDeclaration */:
|
|
442
|
+
case 174 /* SyntaxKind.MethodSignature */:
|
|
443
|
+
if (getType(parent) === node)
|
|
444
|
+
return parent;
|
|
445
|
+
}
|
|
446
|
+
return undefined;
|
|
447
|
+
}
|
|
448
|
+
function checkIfTypePredicateVariableIsDeclaredInBindingPattern(c, pattern, predicateVariableNode, predicateVariableName) {
|
|
449
|
+
for (const element of getElements(pattern).nodes) {
|
|
450
|
+
const name = getName(element);
|
|
451
|
+
if (name === undefined)
|
|
452
|
+
continue;
|
|
453
|
+
if (name.kind === 79 /* SyntaxKind.Identifier */ && getText(name) === predicateVariableName) {
|
|
454
|
+
c.error(predicateVariableNode, 180 /* Diagnostics.A_type_predicate_cannot_reference_element_0_in_a_binding_pattern */, predicateVariableName);
|
|
455
|
+
return true;
|
|
456
|
+
}
|
|
457
|
+
if ((name.kind === 208 /* SyntaxKind.ArrayBindingPattern */ || name.kind === 207 /* SyntaxKind.ObjectBindingPattern */) &&
|
|
458
|
+
checkIfTypePredicateVariableIsDeclaredInBindingPattern(c, name, predicateVariableNode, predicateVariableName))
|
|
459
|
+
return true;
|
|
460
|
+
}
|
|
461
|
+
return false;
|
|
462
|
+
}
|
|
463
|
+
/** Checks an accessor of a type literal or interface. */
|
|
464
|
+
function checkTypeMemberAccessor(c, node) {
|
|
465
|
+
const name = getName(node);
|
|
466
|
+
if (name !== undefined && name.kind === 168 /* SyntaxKind.ComputedPropertyName */)
|
|
467
|
+
checkComputedPropertyName(c, name);
|
|
468
|
+
const symbol = getSymbolOfDeclaration(c, node);
|
|
469
|
+
if (symbol !== undefined)
|
|
470
|
+
getTypeOfSymbol(c, symbol);
|
|
471
|
+
checkFunctionLikeBody(c, node);
|
|
472
|
+
checkAccessorDeclaration(c, node);
|
|
473
|
+
}
|
|
474
|
+
/** Variadic tuple elements must be array-like. */
|
|
475
|
+
function checkTupleRestElements(c, node) {
|
|
476
|
+
for (const e of node.elements.nodes) {
|
|
477
|
+
if ((getTupleElementFlags(c, e) & 8 /* ElementFlags.Variadic */) === 0)
|
|
478
|
+
continue;
|
|
479
|
+
if (!isArrayLikeType(c, getTypeFromTypeNode(c, getType(e)))) {
|
|
480
|
+
c.error(e, 725 /* Diagnostics.A_rest_element_type_must_be_an_array_type */);
|
|
481
|
+
return;
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
/** Visits the children of a type node; owned by the checker to avoid per-node allocation. */
|
|
486
|
+
export class TypeNodeVisitor extends NodeVisitor {
|
|
487
|
+
c;
|
|
488
|
+
constructor(c) {
|
|
489
|
+
super();
|
|
490
|
+
this.c = c;
|
|
491
|
+
}
|
|
492
|
+
visitNode(node) {
|
|
493
|
+
// Type members and their parameters are source elements in tsgo, whose JSDoc links count as uses.
|
|
494
|
+
checkJSDocLinksOfNode(this.c, node);
|
|
495
|
+
switch (node.kind) {
|
|
496
|
+
case 79 /* SyntaxKind.Identifier */:
|
|
497
|
+
case 167 /* SyntaxKind.QualifiedName */:
|
|
498
|
+
case 10 /* SyntaxKind.StringLiteral */:
|
|
499
|
+
case 8 /* SyntaxKind.NumericLiteral */:
|
|
500
|
+
return false;
|
|
501
|
+
case 170 /* SyntaxKind.Parameter */:
|
|
502
|
+
checkVariableLikeDeclaration(this.c, node);
|
|
503
|
+
return false;
|
|
504
|
+
case 174 /* SyntaxKind.MethodSignature */:
|
|
505
|
+
case 180 /* SyntaxKind.CallSignature */:
|
|
506
|
+
case 181 /* SyntaxKind.ConstructSignature */:
|
|
507
|
+
checkTypeNode(this.c, node);
|
|
508
|
+
return false;
|
|
509
|
+
case 172 /* SyntaxKind.PropertySignature */:
|
|
510
|
+
checkVariableLikeDeclaration(this.c, node);
|
|
511
|
+
return false;
|
|
512
|
+
case 178 /* SyntaxKind.GetAccessor */:
|
|
513
|
+
case 179 /* SyntaxKind.SetAccessor */:
|
|
514
|
+
checkTypeMemberAccessor(this.c, node);
|
|
515
|
+
return false;
|
|
516
|
+
case 182 /* SyntaxKind.IndexSignature */:
|
|
517
|
+
node.forEachChild(this);
|
|
518
|
+
return false;
|
|
519
|
+
case 169 /* SyntaxKind.TypeParameter */:
|
|
520
|
+
// Lists of signatures are checked as a whole; `infer` and mapped type parameters alone.
|
|
521
|
+
if (node.parent.kind === 196 /* SyntaxKind.InferType */ || node.parent.kind === 201 /* SyntaxKind.MappedType */)
|
|
522
|
+
checkTypeParameter(this.c, node);
|
|
523
|
+
if (node.parent.kind === 196 /* SyntaxKind.InferType */) {
|
|
524
|
+
const symbol = getSymbolOfDeclaration(this.c, node);
|
|
525
|
+
if (symbol !== undefined)
|
|
526
|
+
checkInferTypeParameterDeclarations(this.c, symbol);
|
|
527
|
+
}
|
|
528
|
+
return false;
|
|
529
|
+
}
|
|
530
|
+
if (node.kind >= 183 /* SyntaxKind.FirstTypeNode */ && node.kind <= 206 /* SyntaxKind.LastTypeNode */)
|
|
531
|
+
checkTypeNode(this.c, node);
|
|
532
|
+
else if (node.kind === 234 /* SyntaxKind.ExpressionWithTypeArguments */)
|
|
533
|
+
checkTypeNode(this.c, node);
|
|
534
|
+
return false;
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
// ---- Deferred checks
|
|
538
|
+
/**
|
|
539
|
+
* Queues a function expression, arrow, accessor, class expression or other deferred node to check with
|
|
540
|
+
* its file, like tsgo: nodes wait in the links of their own source file and are checked when that file
|
|
541
|
+
* is checked, and nodes of files this checker has already checked are not queued again. Checking one
|
|
542
|
+
* file often defers nodes of others (inferring a function's return type checks its body), and those
|
|
543
|
+
* belong to whichever checker checks the other file.
|
|
544
|
+
*/
|
|
545
|
+
export function checkNodeDeferred(c, node) {
|
|
546
|
+
const links = c.nodeLinks(getSourceFileOfNode(node));
|
|
547
|
+
if (links.typeChecked)
|
|
548
|
+
return;
|
|
549
|
+
const id = getNodeId(node);
|
|
550
|
+
if (c.deferredNodeIds.has(id))
|
|
551
|
+
return;
|
|
552
|
+
c.deferredNodeIds.add(id);
|
|
553
|
+
let nodes = links.deferredNodes;
|
|
554
|
+
if (nodes === undefined) {
|
|
555
|
+
nodes = [];
|
|
556
|
+
links.deferredNodes = nodes;
|
|
557
|
+
}
|
|
558
|
+
nodes.push(node);
|
|
559
|
+
}
|
|
560
|
+
function checkDeferredNodes(c, file) {
|
|
561
|
+
const nodes = c.nodeLinks(file).deferredNodes;
|
|
562
|
+
if (nodes === undefined)
|
|
563
|
+
return;
|
|
564
|
+
// Deferred checks may defer more nodes.
|
|
565
|
+
for (let i = 0; i < nodes.length; i++)
|
|
566
|
+
checkDeferredNode(c, nodes[i]);
|
|
567
|
+
nodes.length = 0;
|
|
568
|
+
}
|
|
569
|
+
/** Resolves the type of an object literal accessor, which reports accessors implicitly typed `any`. */
|
|
570
|
+
function checkObjectLiteralAccessorType(c, node) {
|
|
571
|
+
if (node.parent.kind !== 211 /* SyntaxKind.ObjectLiteralExpression */)
|
|
572
|
+
return;
|
|
573
|
+
const symbol = getSymbolOfDeclaration(c, node);
|
|
574
|
+
if (symbol !== undefined)
|
|
575
|
+
getTypeOfSymbol(c, symbol);
|
|
576
|
+
}
|
|
577
|
+
function checkDeferredNode(c, node) {
|
|
578
|
+
const saveCurrentNode = c.currentNode;
|
|
579
|
+
c.currentNode = node;
|
|
580
|
+
c.instantiationCount = 0;
|
|
581
|
+
switch (node.kind) {
|
|
582
|
+
case 214 /* SyntaxKind.CallExpression */:
|
|
583
|
+
case 215 /* SyntaxKind.NewExpression */:
|
|
584
|
+
case 216 /* SyntaxKind.TaggedTemplateExpression */:
|
|
585
|
+
// Deferred when overload resolution fails, so that the arguments are checked once.
|
|
586
|
+
resolveUntypedCall(c, node);
|
|
587
|
+
break;
|
|
588
|
+
case 219 /* SyntaxKind.FunctionExpression */:
|
|
589
|
+
case 220 /* SyntaxKind.ArrowFunction */:
|
|
590
|
+
case 175 /* SyntaxKind.MethodDeclaration */:
|
|
591
|
+
checkFunctionLikeBody(c, node);
|
|
592
|
+
break;
|
|
593
|
+
case 178 /* SyntaxKind.GetAccessor */:
|
|
594
|
+
case 179 /* SyntaxKind.SetAccessor */:
|
|
595
|
+
checkObjectLiteralAccessorType(c, node);
|
|
596
|
+
checkFunctionLikeBody(c, node);
|
|
597
|
+
if (node.parent.kind === 211 /* SyntaxKind.ObjectLiteralExpression */)
|
|
598
|
+
checkAccessorDeclaration(c, node);
|
|
599
|
+
break;
|
|
600
|
+
case 232 /* SyntaxKind.ClassExpression */:
|
|
601
|
+
checkClassLikeDeferred(c, node);
|
|
602
|
+
break;
|
|
603
|
+
case 235 /* SyntaxKind.AsExpression */:
|
|
604
|
+
case 217 /* SyntaxKind.TypeAssertionExpression */:
|
|
605
|
+
checkAssertionDeferred(c, node);
|
|
606
|
+
break;
|
|
607
|
+
case 169 /* SyntaxKind.TypeParameter */:
|
|
608
|
+
checkTypeParameterDeferred(c, node);
|
|
609
|
+
break;
|
|
610
|
+
case 285 /* SyntaxKind.JsxElement */:
|
|
611
|
+
case 286 /* SyntaxKind.JsxSelfClosingElement */:
|
|
612
|
+
checkJsxElementDeferred(c, node);
|
|
613
|
+
break;
|
|
614
|
+
case 223 /* SyntaxKind.VoidExpression */:
|
|
615
|
+
checkExpression(c, getExpression(node));
|
|
616
|
+
break;
|
|
617
|
+
}
|
|
618
|
+
c.currentNode = saveCurrentNode;
|
|
619
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type Node } from './ast.js';
|
|
2
|
+
import { type Checker } from './checker.js';
|
|
3
|
+
import { type Type } from './checker-types.js';
|
|
4
|
+
export declare function checkBlock(c: Checker, node: Node): void;
|
|
5
|
+
export declare function checkExpressionStatement(c: Checker, node: Node): void;
|
|
6
|
+
export declare function checkIfStatement(c: Checker, node: Node): void;
|
|
7
|
+
export declare function checkDoStatement(c: Checker, node: Node): void;
|
|
8
|
+
export declare function checkWhileStatement(c: Checker, node: Node): void;
|
|
9
|
+
export declare function checkForStatement(c: Checker, node: Node): void;
|
|
10
|
+
export declare function checkForInStatement(c: Checker, node: Node): void;
|
|
11
|
+
export declare function checkForOfStatement(c: Checker, node: Node): void;
|
|
12
|
+
/** The element type a `for...of` produces. */
|
|
13
|
+
export declare function checkRightHandSideOfForOf(c: Checker, statement: Node): Type;
|
|
14
|
+
export declare function checkReturnStatement(c: Checker, node: Node): void;
|
|
15
|
+
export declare function checkSwitchStatement(c: Checker, node: Node): void;
|
|
16
|
+
export declare function checkLabeledStatement(c: Checker, node: Node): void;
|
|
17
|
+
export declare function checkThrowStatement(c: Checker, node: Node): void;
|
|
18
|
+
export declare function checkTryStatement(c: Checker, node: Node): void;
|