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,741 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Why each file is in a program, as `--explainFiles` prints it, and diagnostics explaining file inclusion.
|
|
3
|
+
*/
|
|
4
|
+
import { ObjectLiteralExpression, StringLiteral, type FileReference, type Node, type SourceFile } from './ast.js';
|
|
5
|
+
import { createCompilerDiagnostic, Diagnostic, Diagnostics, type DiagnosticMessage } from './diagnostics.js';
|
|
6
|
+
import { packageIdToString, type PackageId } from './module-resolution-types.js';
|
|
7
|
+
import { ModuleKind } from './options.js';
|
|
8
|
+
import { getNormalizedAbsolutePath, toFileNameLowerCase } from './path.js';
|
|
9
|
+
import { isExternalOrCommonJSModule, libNames, scriptTargetName } from './program-utilities.js';
|
|
10
|
+
import type { Program } from './program.js';
|
|
11
|
+
import { skipTrivia } from './scanner.js';
|
|
12
|
+
import { getSpellingSuggestion } from './spelling.js';
|
|
13
|
+
import {
|
|
14
|
+
diagnosticAtNode,
|
|
15
|
+
findArrayElement,
|
|
16
|
+
findPropertyAssignment,
|
|
17
|
+
findTsConfigArrayElement,
|
|
18
|
+
getTsConfigObjectLiteral,
|
|
19
|
+
} from './tsconfig.js';
|
|
20
|
+
|
|
21
|
+
export const enum FileIncludeKind {
|
|
22
|
+
// References from a file.
|
|
23
|
+
Import,
|
|
24
|
+
ReferenceFile,
|
|
25
|
+
TypeReferenceDirective,
|
|
26
|
+
LibReferenceDirective,
|
|
27
|
+
|
|
28
|
+
RootFile,
|
|
29
|
+
LibFile,
|
|
30
|
+
AutomaticTypeDirectiveFile,
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* One reason a file is in the program. Reasons are immutable, so the program's loader takes the
|
|
35
|
+
* reasons a parse thread found as they are; what they compute for a program is kept by its
|
|
36
|
+
* IncludeProcessor (`ReasonCache`).
|
|
37
|
+
*/
|
|
38
|
+
export class FileIncludeReason {
|
|
39
|
+
private constructor(
|
|
40
|
+
readonly kind: FileIncludeKind,
|
|
41
|
+
/** The referencing file's path, for references from a file. */
|
|
42
|
+
readonly file: string,
|
|
43
|
+
/** The root file, `lib` entry or reference index; -1 for the default library. */
|
|
44
|
+
readonly index: number,
|
|
45
|
+
/** The synthesized specifier of an `importHelpers` or JSX runtime import. */
|
|
46
|
+
readonly synthetic: StringLiteral | undefined,
|
|
47
|
+
/** The `types` entry, for automatic type directives. */
|
|
48
|
+
readonly typeReference: string,
|
|
49
|
+
readonly packageId: PackageId | undefined,
|
|
50
|
+
) {}
|
|
51
|
+
|
|
52
|
+
static rootFile(index: number): FileIncludeReason {
|
|
53
|
+
return new FileIncludeReason(FileIncludeKind.RootFile, '', index, undefined, '', undefined);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/** A `lib` entry, or the default library with `index` -1. */
|
|
57
|
+
static libFile(index: number): FileIncludeReason {
|
|
58
|
+
return new FileIncludeReason(FileIncludeKind.LibFile, '', index, undefined, '', undefined);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
static automaticTypeDirective(typeReference: string, packageId: PackageId | undefined): FileIncludeReason {
|
|
62
|
+
return new FileIncludeReason(
|
|
63
|
+
FileIncludeKind.AutomaticTypeDirectiveFile,
|
|
64
|
+
'',
|
|
65
|
+
-1,
|
|
66
|
+
undefined,
|
|
67
|
+
typeReference,
|
|
68
|
+
packageId,
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/** An import (`index` into the file's imports and module augmentations, -1 if `synthetic`) or a `///` reference. */
|
|
73
|
+
static reference(
|
|
74
|
+
kind: FileIncludeKind,
|
|
75
|
+
file: string,
|
|
76
|
+
index: number,
|
|
77
|
+
synthetic: StringLiteral | undefined,
|
|
78
|
+
): FileIncludeReason {
|
|
79
|
+
return new FileIncludeReason(kind, file, index, synthetic, '', undefined);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/** The same reason as a new object (`IncludeProcessor.copy`). */
|
|
83
|
+
copy(): FileIncludeReason {
|
|
84
|
+
return new FileIncludeReason(this.kind, this.file, this.index, this.synthetic, this.typeReference, this.packageId);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
isReferencedFile(): boolean {
|
|
88
|
+
return this.kind <= FileIncludeKind.LibReferenceDirective;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
getReferencedLocation(program: Program): ReferenceFileLocation {
|
|
92
|
+
const cache = program.includeProcessor.cacheOf(this);
|
|
93
|
+
if (cache !== undefined && cache.location !== undefined) return cache.location;
|
|
94
|
+
const file = program.getSourceFileByPath(this.file);
|
|
95
|
+
if (file === undefined) throw new Error('referencing file is not in the program');
|
|
96
|
+
let location: ReferenceFileLocation;
|
|
97
|
+
switch (this.kind) {
|
|
98
|
+
case FileIncludeKind.Import: {
|
|
99
|
+
let specifier: Node | undefined;
|
|
100
|
+
if (this.synthetic !== undefined) specifier = this.synthetic;
|
|
101
|
+
else if (this.index < file.imports.length) specifier = file.imports[this.index];
|
|
102
|
+
else {
|
|
103
|
+
let index = file.imports.length;
|
|
104
|
+
for (const augmentation of file.moduleAugmentations) {
|
|
105
|
+
if (!(augmentation instanceof StringLiteral)) continue;
|
|
106
|
+
if (index === this.index) {
|
|
107
|
+
specifier = augmentation;
|
|
108
|
+
break;
|
|
109
|
+
}
|
|
110
|
+
index++;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
if (specifier === undefined) throw new Error('missing import specifier');
|
|
114
|
+
const resolution = program.getResolvedModuleFromModuleSpecifier(file, specifier);
|
|
115
|
+
location = new ReferenceFileLocation(
|
|
116
|
+
file,
|
|
117
|
+
specifier,
|
|
118
|
+
undefined,
|
|
119
|
+
resolution?.packageId,
|
|
120
|
+
this.synthetic !== undefined,
|
|
121
|
+
);
|
|
122
|
+
break;
|
|
123
|
+
}
|
|
124
|
+
case FileIncludeKind.ReferenceFile:
|
|
125
|
+
location = new ReferenceFileLocation(file, undefined, file.referencedFiles[this.index], undefined, false);
|
|
126
|
+
break;
|
|
127
|
+
case FileIncludeKind.TypeReferenceDirective:
|
|
128
|
+
location = new ReferenceFileLocation(
|
|
129
|
+
file,
|
|
130
|
+
undefined,
|
|
131
|
+
file.typeReferenceDirectives[this.index],
|
|
132
|
+
undefined,
|
|
133
|
+
false,
|
|
134
|
+
);
|
|
135
|
+
break;
|
|
136
|
+
default:
|
|
137
|
+
location = new ReferenceFileLocation(
|
|
138
|
+
file,
|
|
139
|
+
undefined,
|
|
140
|
+
file.libReferenceDirectives[this.index],
|
|
141
|
+
undefined,
|
|
142
|
+
false,
|
|
143
|
+
);
|
|
144
|
+
}
|
|
145
|
+
if (!program.isShared()) program.includeProcessor.newCacheOf(this).location = location;
|
|
146
|
+
return location;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/** The reason as a message, with file names relative to the current directory if `relative`. */
|
|
150
|
+
toDiagnostic(program: Program, relative: boolean): Diagnostic {
|
|
151
|
+
const cache = program.includeProcessor.cacheOf(this);
|
|
152
|
+
const cached = cache === undefined ? undefined : relative ? cache.relativeDiagnostic : cache.absoluteDiagnostic;
|
|
153
|
+
if (cached !== undefined) return cached;
|
|
154
|
+
const diagnostic = this.computeDiagnostic(program, relative);
|
|
155
|
+
if (program.isShared()) return diagnostic;
|
|
156
|
+
const own = program.includeProcessor.newCacheOf(this);
|
|
157
|
+
if (relative) own.relativeDiagnostic = diagnostic;
|
|
158
|
+
else own.absoluteDiagnostic = diagnostic;
|
|
159
|
+
return diagnostic;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
private computeDiagnostic(program: Program, relative: boolean): Diagnostic {
|
|
163
|
+
if (this.isReferencedFile()) return this.computeReferenceDiagnostic(program, relative);
|
|
164
|
+
switch (this.kind) {
|
|
165
|
+
case FileIncludeKind.RootFile: {
|
|
166
|
+
const config = program.commandLine;
|
|
167
|
+
if (config.configFile === undefined)
|
|
168
|
+
return createCompilerDiagnostic(Diagnostics.Root_file_specified_for_compilation);
|
|
169
|
+
const fileName = getNormalizedAbsolutePath(config.fileNames[this.index], program.currentDirectory);
|
|
170
|
+
const matchedFileSpec = config.getMatchedFileSpec(fileName);
|
|
171
|
+
if (matchedFileSpec !== '') {
|
|
172
|
+
return createCompilerDiagnostic(
|
|
173
|
+
Diagnostics.Part_of_files_list_in_tsconfig_json,
|
|
174
|
+
matchedFileSpec,
|
|
175
|
+
program.displayFileName(fileName, relative),
|
|
176
|
+
);
|
|
177
|
+
}
|
|
178
|
+
const matchedIncludeSpec = config.getMatchedIncludeSpec(fileName);
|
|
179
|
+
if (matchedIncludeSpec !== '') {
|
|
180
|
+
if (config.isDefaultIncludeSpec()) {
|
|
181
|
+
return createCompilerDiagnostic(
|
|
182
|
+
Diagnostics.Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk,
|
|
183
|
+
);
|
|
184
|
+
}
|
|
185
|
+
return createCompilerDiagnostic(
|
|
186
|
+
Diagnostics.Matched_by_include_pattern_0_in_1,
|
|
187
|
+
matchedIncludeSpec,
|
|
188
|
+
program.displayFileName(config.configName, relative),
|
|
189
|
+
);
|
|
190
|
+
}
|
|
191
|
+
return createCompilerDiagnostic(Diagnostics.Root_file_specified_for_compilation);
|
|
192
|
+
}
|
|
193
|
+
case FileIncludeKind.AutomaticTypeDirectiveFile: {
|
|
194
|
+
const usesWildcardTypes = program.options.types?.includes('*') === true;
|
|
195
|
+
const packageId = this.packageId;
|
|
196
|
+
if (!usesWildcardTypes) {
|
|
197
|
+
return packageId !== undefined
|
|
198
|
+
? createCompilerDiagnostic(
|
|
199
|
+
Diagnostics.Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1,
|
|
200
|
+
this.typeReference,
|
|
201
|
+
packageIdToString(packageId),
|
|
202
|
+
)
|
|
203
|
+
: createCompilerDiagnostic(
|
|
204
|
+
Diagnostics.Entry_point_of_type_library_0_specified_in_compilerOptions,
|
|
205
|
+
this.typeReference,
|
|
206
|
+
);
|
|
207
|
+
}
|
|
208
|
+
return packageId !== undefined
|
|
209
|
+
? createCompilerDiagnostic(
|
|
210
|
+
Diagnostics.Entry_point_for_implicit_type_library_0_with_packageId_1,
|
|
211
|
+
this.typeReference,
|
|
212
|
+
packageIdToString(packageId),
|
|
213
|
+
)
|
|
214
|
+
: createCompilerDiagnostic(Diagnostics.Entry_point_for_implicit_type_library_0, this.typeReference);
|
|
215
|
+
}
|
|
216
|
+
default: {
|
|
217
|
+
const lib = program.options.lib;
|
|
218
|
+
if (this.index >= 0 && lib !== undefined) {
|
|
219
|
+
return createCompilerDiagnostic(Diagnostics.Library_0_specified_in_compilerOptions, lib[this.index]);
|
|
220
|
+
}
|
|
221
|
+
return createCompilerDiagnostic(
|
|
222
|
+
Diagnostics.Default_library_for_target_0,
|
|
223
|
+
scriptTargetName(program.emitScriptTarget()),
|
|
224
|
+
);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
private computeReferenceDiagnostic(program: Program, relative: boolean): Diagnostic {
|
|
230
|
+
const location = program.includeProcessor.getReferenceLocation(this, program);
|
|
231
|
+
const text = location.text();
|
|
232
|
+
const fileName = program.displayFileName(location.file.fileName, relative);
|
|
233
|
+
const packageId = location.packageId;
|
|
234
|
+
switch (this.kind) {
|
|
235
|
+
case FileIncludeKind.Import: {
|
|
236
|
+
if (!location.isSynthetic) {
|
|
237
|
+
return packageId !== undefined
|
|
238
|
+
? createCompilerDiagnostic(
|
|
239
|
+
Diagnostics.Imported_via_0_from_file_1_with_packageId_2,
|
|
240
|
+
text,
|
|
241
|
+
fileName,
|
|
242
|
+
packageIdToString(packageId),
|
|
243
|
+
)
|
|
244
|
+
: createCompilerDiagnostic(Diagnostics.Imported_via_0_from_file_1, text, fileName);
|
|
245
|
+
}
|
|
246
|
+
if (program.importHelpersImportSpecifier(location.file.path) === location.node) {
|
|
247
|
+
return packageId !== undefined
|
|
248
|
+
? createCompilerDiagnostic(
|
|
249
|
+
Diagnostics.Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions,
|
|
250
|
+
text,
|
|
251
|
+
fileName,
|
|
252
|
+
packageIdToString(packageId),
|
|
253
|
+
)
|
|
254
|
+
: createCompilerDiagnostic(
|
|
255
|
+
Diagnostics.Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions,
|
|
256
|
+
text,
|
|
257
|
+
fileName,
|
|
258
|
+
);
|
|
259
|
+
}
|
|
260
|
+
return packageId !== undefined
|
|
261
|
+
? createCompilerDiagnostic(
|
|
262
|
+
Diagnostics.Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions,
|
|
263
|
+
text,
|
|
264
|
+
fileName,
|
|
265
|
+
packageIdToString(packageId),
|
|
266
|
+
)
|
|
267
|
+
: createCompilerDiagnostic(
|
|
268
|
+
Diagnostics.Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions,
|
|
269
|
+
text,
|
|
270
|
+
fileName,
|
|
271
|
+
);
|
|
272
|
+
}
|
|
273
|
+
case FileIncludeKind.ReferenceFile:
|
|
274
|
+
return createCompilerDiagnostic(Diagnostics.Referenced_via_0_from_file_1, text, fileName);
|
|
275
|
+
case FileIncludeKind.TypeReferenceDirective:
|
|
276
|
+
return packageId !== undefined
|
|
277
|
+
? createCompilerDiagnostic(
|
|
278
|
+
Diagnostics.Type_library_referenced_via_0_from_file_1_with_packageId_2,
|
|
279
|
+
text,
|
|
280
|
+
fileName,
|
|
281
|
+
packageIdToString(packageId),
|
|
282
|
+
)
|
|
283
|
+
: createCompilerDiagnostic(Diagnostics.Type_library_referenced_via_0_from_file_1, text, fileName);
|
|
284
|
+
default:
|
|
285
|
+
return createCompilerDiagnostic(Diagnostics.Library_referenced_via_0_from_file_1, text, fileName);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
/** Where in the config or a file this reason is written, as related information; `undefined` if nowhere. */
|
|
290
|
+
toRelatedInfo(program: Program): Diagnostic | undefined {
|
|
291
|
+
const cache = program.includeProcessor.cacheOf(this);
|
|
292
|
+
if (cache !== undefined && cache.relatedInfo !== undefined) return cache.relatedInfo ?? undefined;
|
|
293
|
+
const info = this.computeRelatedInfo(program);
|
|
294
|
+
if (!program.isShared()) program.includeProcessor.newCacheOf(this).relatedInfo = info ?? null;
|
|
295
|
+
return info;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
private computeRelatedInfo(program: Program): Diagnostic | undefined {
|
|
299
|
+
if (this.isReferencedFile()) {
|
|
300
|
+
const location = program.includeProcessor.getReferenceLocation(this, program);
|
|
301
|
+
if (location.isSynthetic) return undefined;
|
|
302
|
+
switch (this.kind) {
|
|
303
|
+
case FileIncludeKind.Import:
|
|
304
|
+
return location.diagnosticAt(Diagnostics.File_is_included_via_import_here);
|
|
305
|
+
case FileIncludeKind.ReferenceFile:
|
|
306
|
+
return location.diagnosticAt(Diagnostics.File_is_included_via_reference_here);
|
|
307
|
+
case FileIncludeKind.TypeReferenceDirective:
|
|
308
|
+
return location.diagnosticAt(Diagnostics.File_is_included_via_type_library_reference_here);
|
|
309
|
+
default:
|
|
310
|
+
return location.diagnosticAt(Diagnostics.File_is_included_via_library_reference_here);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
const config = program.commandLine;
|
|
314
|
+
const configFile = config.configFile?.sourceFile;
|
|
315
|
+
if (configFile === undefined) return undefined;
|
|
316
|
+
switch (this.kind) {
|
|
317
|
+
case FileIncludeKind.RootFile: {
|
|
318
|
+
const fileName = getNormalizedAbsolutePath(config.fileNames[this.index], program.currentDirectory);
|
|
319
|
+
const matchedFileSpec = config.getMatchedFileSpec(fileName);
|
|
320
|
+
if (matchedFileSpec !== '') {
|
|
321
|
+
const node = findTsConfigArrayElement(configFile, 'files', matchedFileSpec);
|
|
322
|
+
return node === undefined
|
|
323
|
+
? undefined
|
|
324
|
+
: diagnosticAtNode(configFile, node, Diagnostics.File_is_matched_by_files_list_specified_here);
|
|
325
|
+
}
|
|
326
|
+
const matchedIncludeSpec = config.getMatchedIncludeSpec(fileName);
|
|
327
|
+
if (matchedIncludeSpec !== '' && !config.isDefaultIncludeSpec()) {
|
|
328
|
+
const node = findTsConfigArrayElement(configFile, 'include', matchedIncludeSpec);
|
|
329
|
+
return node === undefined
|
|
330
|
+
? undefined
|
|
331
|
+
: diagnosticAtNode(configFile, node, Diagnostics.File_is_matched_by_include_pattern_specified_here);
|
|
332
|
+
}
|
|
333
|
+
return undefined;
|
|
334
|
+
}
|
|
335
|
+
case FileIncludeKind.AutomaticTypeDirectiveFile: {
|
|
336
|
+
if (program.options.types?.includes('*') === true) return undefined;
|
|
337
|
+
const node = findArrayElement(
|
|
338
|
+
findPropertyAssignment(program.includeProcessor.compilerOptionsSyntax(program), 'types'),
|
|
339
|
+
this.typeReference,
|
|
340
|
+
);
|
|
341
|
+
return node === undefined
|
|
342
|
+
? undefined
|
|
343
|
+
: diagnosticAtNode(configFile, node, Diagnostics.File_is_entry_point_of_type_library_specified_here);
|
|
344
|
+
}
|
|
345
|
+
default: {
|
|
346
|
+
const lib = program.options.lib;
|
|
347
|
+
const compilerOptions = program.includeProcessor.compilerOptionsSyntax(program);
|
|
348
|
+
if (this.index >= 0 && lib !== undefined) {
|
|
349
|
+
const node = findArrayElement(findPropertyAssignment(compilerOptions, 'lib'), lib[this.index]);
|
|
350
|
+
return node === undefined
|
|
351
|
+
? undefined
|
|
352
|
+
: diagnosticAtNode(configFile, node, Diagnostics.File_is_library_specified_here);
|
|
353
|
+
}
|
|
354
|
+
const target = scriptTargetName(program.emitScriptTarget());
|
|
355
|
+
const property = findPropertyAssignment(compilerOptions, 'target');
|
|
356
|
+
const value = property?.initializer;
|
|
357
|
+
if (!(value instanceof StringLiteral) || value.text !== target) return undefined;
|
|
358
|
+
return diagnosticAtNode(configFile, value, Diagnostics.File_is_default_library_for_target_specified_here);
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
/** Where a reference from a file is written. */
|
|
365
|
+
export class ReferenceFileLocation {
|
|
366
|
+
constructor(
|
|
367
|
+
readonly file: SourceFile,
|
|
368
|
+
/** The module specifier, for imports. */
|
|
369
|
+
readonly node: Node | undefined,
|
|
370
|
+
/** The `///` directive, for references. */
|
|
371
|
+
readonly ref: FileReference | undefined,
|
|
372
|
+
readonly packageId: PackageId | undefined,
|
|
373
|
+
readonly isSynthetic: boolean,
|
|
374
|
+
) {}
|
|
375
|
+
|
|
376
|
+
text(): string {
|
|
377
|
+
const node = this.node;
|
|
378
|
+
if (node !== undefined) {
|
|
379
|
+
if (node.pos >= 0 && node.end >= 0) {
|
|
380
|
+
const start = skipTrivia(this.file.text, node.pos);
|
|
381
|
+
return this.file.text.slice(start, node.end);
|
|
382
|
+
}
|
|
383
|
+
return '"' + (node instanceof StringLiteral ? node.text : '') + '"';
|
|
384
|
+
}
|
|
385
|
+
const ref = this.ref;
|
|
386
|
+
return ref === undefined ? '' : this.file.text.slice(ref.pos, ref.end);
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
diagnosticAt(message: DiagnosticMessage, ...args: string[]): Diagnostic {
|
|
390
|
+
if (this.node !== undefined) return diagnosticAtNode(this.file, this.node, message, ...args);
|
|
391
|
+
const ref = this.ref;
|
|
392
|
+
return new Diagnostic(this.file.diagnosticFile(), ref?.pos ?? 0, ref?.end ?? 0, message, args);
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
export const enum ProcessingDiagnosticKind {
|
|
397
|
+
/** A `/// <reference types>` or `/// <reference lib>` that could not be found. */
|
|
398
|
+
UnknownReference,
|
|
399
|
+
ExplainingFileInclude,
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
/** A diagnostic found while loading files, explained with why the file is in the program once loading is done. */
|
|
403
|
+
export class ProcessingDiagnostic {
|
|
404
|
+
private constructor(
|
|
405
|
+
readonly kind: ProcessingDiagnosticKind,
|
|
406
|
+
/** The path of the file explained; `''` if none. */
|
|
407
|
+
readonly file: string,
|
|
408
|
+
readonly reason: FileIncludeReason | undefined,
|
|
409
|
+
readonly message: DiagnosticMessage | undefined,
|
|
410
|
+
readonly args: readonly string[],
|
|
411
|
+
) {}
|
|
412
|
+
|
|
413
|
+
static unknownReference(reason: FileIncludeReason): ProcessingDiagnostic {
|
|
414
|
+
return new ProcessingDiagnostic(ProcessingDiagnosticKind.UnknownReference, '', reason, undefined, []);
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
static explainingFileInclude(
|
|
418
|
+
file: string,
|
|
419
|
+
reason: FileIncludeReason | undefined,
|
|
420
|
+
message: DiagnosticMessage,
|
|
421
|
+
args: readonly string[],
|
|
422
|
+
): ProcessingDiagnostic {
|
|
423
|
+
return new ProcessingDiagnostic(ProcessingDiagnosticKind.ExplainingFileInclude, file, reason, message, args);
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
/** The same diagnostic with a copy of its reason (`FileIncludeReason.copy`). */
|
|
427
|
+
copy(): ProcessingDiagnostic {
|
|
428
|
+
return new ProcessingDiagnostic(this.kind, this.file, this.reason?.copy(), this.message, this.args);
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
/** This diagnostic with `renew(reason)` for its reason; itself when that is its reason. */
|
|
432
|
+
withReason(renew: (reason: FileIncludeReason) => FileIncludeReason): ProcessingDiagnostic {
|
|
433
|
+
const reason = this.reason === undefined ? undefined : renew(this.reason);
|
|
434
|
+
return reason === this.reason
|
|
435
|
+
? this
|
|
436
|
+
: new ProcessingDiagnostic(this.kind, this.file, reason, this.message, this.args);
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
toDiagnostic(program: Program): Diagnostic {
|
|
440
|
+
const reason = this.reason;
|
|
441
|
+
if (this.kind === ProcessingDiagnosticKind.UnknownReference && reason !== undefined) {
|
|
442
|
+
const location = reason.getReferencedLocation(program);
|
|
443
|
+
const fileName = location.ref?.fileName ?? '';
|
|
444
|
+
if (reason.kind === FileIncludeKind.TypeReferenceDirective) {
|
|
445
|
+
return location.diagnosticAt(Diagnostics.Cannot_find_type_definition_file_for_0, fileName);
|
|
446
|
+
}
|
|
447
|
+
const libName = toFileNameLowerCase(fileName);
|
|
448
|
+
const unqualified = stripLibAffixes(libName);
|
|
449
|
+
const suggestion = getSpellingSuggestion(unqualified, libNames);
|
|
450
|
+
return suggestion !== ''
|
|
451
|
+
? location.diagnosticAt(Diagnostics.Cannot_find_lib_definition_for_0_Did_you_mean_1, libName, suggestion)
|
|
452
|
+
: location.diagnosticAt(Diagnostics.Cannot_find_lib_definition_for_0, libName, suggestion);
|
|
453
|
+
}
|
|
454
|
+
return this.explainFile(program);
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
private explainFile(program: Program): Diagnostic {
|
|
458
|
+
const processor = program.includeProcessor;
|
|
459
|
+
const includeDetails: Diagnostic[] = [];
|
|
460
|
+
const relatedInfo: Diagnostic[] = [];
|
|
461
|
+
const seen = new Set<FileIncludeReason>();
|
|
462
|
+
let preferred: FileIncludeReason | undefined;
|
|
463
|
+
let hasDetails = false;
|
|
464
|
+
const reason = this.reason;
|
|
465
|
+
if (
|
|
466
|
+
reason !== undefined &&
|
|
467
|
+
reason.isReferencedFile() &&
|
|
468
|
+
!processor.getReferenceLocation(reason, program).isSynthetic
|
|
469
|
+
) {
|
|
470
|
+
preferred = reason;
|
|
471
|
+
}
|
|
472
|
+
const processInclude = (include: FileIncludeReason): void => {
|
|
473
|
+
if (seen.has(include)) return;
|
|
474
|
+
seen.add(include);
|
|
475
|
+
includeDetails.push(include.toDiagnostic(program, false));
|
|
476
|
+
if (
|
|
477
|
+
preferred === undefined &&
|
|
478
|
+
include.isReferencedFile() &&
|
|
479
|
+
!processor.getReferenceLocation(include, program).isSynthetic
|
|
480
|
+
) {
|
|
481
|
+
preferred = include;
|
|
482
|
+
} else if (preferred !== include) {
|
|
483
|
+
const info = include.toRelatedInfo(program);
|
|
484
|
+
if (info !== undefined) relatedInfo.push(info);
|
|
485
|
+
}
|
|
486
|
+
};
|
|
487
|
+
let redirectInfo: readonly Diagnostic[] = [];
|
|
488
|
+
if (this.file !== '') {
|
|
489
|
+
hasDetails = true;
|
|
490
|
+
for (const include of processor.reasonsOf(this.file)) processInclude(include);
|
|
491
|
+
redirectInfo = processor.explainRedirectAndImpliedFormat(program, this.file, false);
|
|
492
|
+
}
|
|
493
|
+
if (reason !== undefined) {
|
|
494
|
+
hasDetails = true;
|
|
495
|
+
processInclude(reason);
|
|
496
|
+
}
|
|
497
|
+
const chain: Diagnostic[] = [];
|
|
498
|
+
if (hasDetails && (preferred === undefined || seen.size !== 1)) {
|
|
499
|
+
const fileReason = createCompilerDiagnostic(Diagnostics.The_file_is_in_the_program_because_Colon);
|
|
500
|
+
fileReason.messageChain = includeDetails;
|
|
501
|
+
chain.push(fileReason);
|
|
502
|
+
}
|
|
503
|
+
for (const info of redirectInfo) chain.push(info);
|
|
504
|
+
const message = this.message ?? Diagnostics.The_file_is_in_the_program_because_Colon;
|
|
505
|
+
const result =
|
|
506
|
+
preferred !== undefined
|
|
507
|
+
? processor.getReferenceLocation(preferred, program).diagnosticAt(message, ...this.args)
|
|
508
|
+
: createCompilerDiagnostic(message, ...this.args);
|
|
509
|
+
if (chain.length > 0) result.messageChain = chain;
|
|
510
|
+
if (relatedInfo.length > 0) result.relatedInformation = relatedInfo;
|
|
511
|
+
return result;
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
/** `lib.dom.d.ts` to `dom`. */
|
|
516
|
+
function stripLibAffixes(name: string): string {
|
|
517
|
+
let result = name.startsWith('lib.') ? name.slice(4) : name;
|
|
518
|
+
if (result.endsWith('.d.ts')) result = result.slice(0, -5);
|
|
519
|
+
return result;
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
/** Include reasons of every file and the diagnostics found while loading them. */
|
|
523
|
+
/** What a reason computed for the program of an IncludeProcessor. */
|
|
524
|
+
class ReasonCache {
|
|
525
|
+
relativeDiagnostic: Diagnostic | undefined = undefined;
|
|
526
|
+
absoluteDiagnostic: Diagnostic | undefined = undefined;
|
|
527
|
+
location: ReferenceFileLocation | undefined = undefined;
|
|
528
|
+
relatedInfo: Diagnostic | null | undefined = undefined;
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
export class IncludeProcessor {
|
|
532
|
+
private computed: Diagnostic[] | undefined = undefined;
|
|
533
|
+
/** What each reason computed for this processor's program, once it computed something. */
|
|
534
|
+
private readonly reasonCaches = new Map<FileIncludeReason, ReasonCache>();
|
|
535
|
+
private compilerOptionsObject: ObjectLiteralExpression | undefined = undefined;
|
|
536
|
+
private compilerOptionsComputed = false;
|
|
537
|
+
private readonly redirectAndFileFormat = new Map<string, readonly Diagnostic[]>();
|
|
538
|
+
/** The number of processing diagnostics when the program was created (`noteProgramCreated`). */
|
|
539
|
+
private createdCount: number | undefined = undefined;
|
|
540
|
+
|
|
541
|
+
constructor(
|
|
542
|
+
readonly fileIncludeReasons = new Map<string, FileIncludeReason[]>(),
|
|
543
|
+
readonly processingDiagnostics: ProcessingDiagnostic[] = [],
|
|
544
|
+
) {}
|
|
545
|
+
|
|
546
|
+
/** What `reason` computed for this processor's program, if anything. */
|
|
547
|
+
cacheOf(reason: FileIncludeReason): ReasonCache | undefined {
|
|
548
|
+
return this.reasonCaches.get(reason);
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
/** The cache of `reason`, created if needed. */
|
|
552
|
+
newCacheOf(reason: FileIncludeReason): ReasonCache {
|
|
553
|
+
let cache = this.reasonCaches.get(reason);
|
|
554
|
+
if (cache === undefined) {
|
|
555
|
+
cache = new ReasonCache();
|
|
556
|
+
this.reasonCaches.set(reason, cache);
|
|
557
|
+
}
|
|
558
|
+
return cache;
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
/**
|
|
562
|
+
* A processor with these reasons and the processing diagnostics its program was created with, whose diagnostics are
|
|
563
|
+
* computed for another program. Computing the common source directory later adds diagnostics that the program
|
|
564
|
+
* does not report (`Program.commonSourceDirectory`), and those of a program shared with checker threads are
|
|
565
|
+
* immutable, so the copy has its own list. The reasons written in `replaced`, the path of the file
|
|
566
|
+
* `Program.updateFile` swaps in, are new: a reason keeps where its file writes it, which the new text may move. Each
|
|
567
|
+
* is copied once, so a diagnostic and the file's reasons still share it.
|
|
568
|
+
*/
|
|
569
|
+
copy(replaced?: string): IncludeProcessor {
|
|
570
|
+
const created = this.processingDiagnostics.slice(0, this.createdCount ?? this.processingDiagnostics.length);
|
|
571
|
+
if (replaced === undefined) return new IncludeProcessor(this.fileIncludeReasons, created);
|
|
572
|
+
const copies = new Map<FileIncludeReason, FileIncludeReason>();
|
|
573
|
+
const renew = (reason: FileIncludeReason): FileIncludeReason => {
|
|
574
|
+
if (reason.file !== replaced) return reason;
|
|
575
|
+
let copy = copies.get(reason);
|
|
576
|
+
if (copy === undefined) {
|
|
577
|
+
copy = reason.copy();
|
|
578
|
+
copies.set(reason, copy);
|
|
579
|
+
}
|
|
580
|
+
return copy;
|
|
581
|
+
};
|
|
582
|
+
const reasons = new Map<string, FileIncludeReason[]>();
|
|
583
|
+
for (const [path, list] of this.fileIncludeReasons)
|
|
584
|
+
reasons.set(path, list.some((reason) => reason.file === replaced) ? list.map(renew) : list);
|
|
585
|
+
return new IncludeProcessor(
|
|
586
|
+
reasons,
|
|
587
|
+
created.map((diagnostic) => diagnostic.withReason(renew)),
|
|
588
|
+
);
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
/** The program is created: the processing diagnostics so far are those a copy takes. */
|
|
592
|
+
noteProgramCreated(): void {
|
|
593
|
+
this.createdCount = this.processingDiagnostics.length;
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
reasonsOf(path: string): readonly FileIncludeReason[] {
|
|
597
|
+
return this.fileIncludeReasons.get(path) ?? [];
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
addReason(path: string, reason: FileIncludeReason): void {
|
|
601
|
+
const reasons = this.fileIncludeReasons.get(path);
|
|
602
|
+
if (reasons === undefined) this.fileIncludeReasons.set(path, [reason]);
|
|
603
|
+
else reasons.push(reason);
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
addProcessingDiagnostic(diagnostic: ProcessingDiagnostic): void {
|
|
607
|
+
this.processingDiagnostics.push(diagnostic);
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
/** Reports a file name that differs from an included one only in casing. */
|
|
611
|
+
addCasingDiagnostic(
|
|
612
|
+
file: string,
|
|
613
|
+
existingCasing: string,
|
|
614
|
+
currentCasing: string,
|
|
615
|
+
reason: FileIncludeReason | undefined,
|
|
616
|
+
): void {
|
|
617
|
+
let referenced = false;
|
|
618
|
+
for (const existing of this.reasonsOf(file)) if (existing.isReferencedFile()) referenced = true;
|
|
619
|
+
const reasonIsReference = reason !== undefined && reason.isReferencedFile();
|
|
620
|
+
if (!reasonIsReference && referenced) {
|
|
621
|
+
this.addProcessingDiagnostic(
|
|
622
|
+
ProcessingDiagnostic.explainingFileInclude(
|
|
623
|
+
file,
|
|
624
|
+
reason,
|
|
625
|
+
Diagnostics.Already_included_file_name_0_differs_from_file_name_1_only_in_casing,
|
|
626
|
+
[existingCasing, currentCasing],
|
|
627
|
+
),
|
|
628
|
+
);
|
|
629
|
+
} else {
|
|
630
|
+
this.addProcessingDiagnostic(
|
|
631
|
+
ProcessingDiagnostic.explainingFileInclude(
|
|
632
|
+
file,
|
|
633
|
+
reason,
|
|
634
|
+
Diagnostics.File_name_0_differs_from_already_included_file_name_1_only_in_casing,
|
|
635
|
+
[currentCasing, existingCasing],
|
|
636
|
+
),
|
|
637
|
+
);
|
|
638
|
+
}
|
|
639
|
+
}
|
|
640
|
+
|
|
641
|
+
getReferenceLocation(reason: FileIncludeReason, program: Program): ReferenceFileLocation {
|
|
642
|
+
return reason.getReferencedLocation(program);
|
|
643
|
+
}
|
|
644
|
+
|
|
645
|
+
/** Processing and resolution diagnostics, sorted by file. */
|
|
646
|
+
diagnostics(program: Program): readonly Diagnostic[] {
|
|
647
|
+
if (this.computed === undefined) {
|
|
648
|
+
const computed: Diagnostic[] = [];
|
|
649
|
+
for (const diagnostic of this.processingDiagnostics) computed.push(diagnostic.toDiagnostic(program));
|
|
650
|
+
for (const diagnostic of program.resolutionDiagnostics()) computed.push(diagnostic);
|
|
651
|
+
this.computed = computed;
|
|
652
|
+
}
|
|
653
|
+
return this.computed;
|
|
654
|
+
}
|
|
655
|
+
|
|
656
|
+
/** The compiler options object of the config file. */
|
|
657
|
+
compilerOptionsSyntax(program: Program): ObjectLiteralExpression | undefined {
|
|
658
|
+
if (this.compilerOptionsComputed) return this.compilerOptionsObject;
|
|
659
|
+
const property = findPropertyAssignment(
|
|
660
|
+
getTsConfigObjectLiteral(program.commandLine.configFile?.sourceFile),
|
|
661
|
+
'compilerOptions',
|
|
662
|
+
);
|
|
663
|
+
const initializer = property?.initializer;
|
|
664
|
+
// `as`: scriptc loses instanceof narrowing here.
|
|
665
|
+
const object =
|
|
666
|
+
initializer instanceof ObjectLiteralExpression ? (initializer as ObjectLiteralExpression) : undefined;
|
|
667
|
+
if (!program.isShared()) {
|
|
668
|
+
this.compilerOptionsComputed = true;
|
|
669
|
+
this.compilerOptionsObject = object;
|
|
670
|
+
}
|
|
671
|
+
return object;
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
/**
|
|
675
|
+
* Notes on a file's origin and module format. Cached per file: the first caller's choice of relative or
|
|
676
|
+
* absolute file names sticks, as in tsgo. A shared program keeps what was cached before sharing; after that,
|
|
677
|
+
* only `--explainFiles` asks, once per file, and the result is not kept.
|
|
678
|
+
*/
|
|
679
|
+
explainRedirectAndImpliedFormat(program: Program, path: string, relative: boolean): readonly Diagnostic[] {
|
|
680
|
+
const cached = this.redirectAndFileFormat.get(path);
|
|
681
|
+
if (cached !== undefined) return cached;
|
|
682
|
+
const result: Diagnostic[] = [];
|
|
683
|
+
const redirect = program.redirectFile(path);
|
|
684
|
+
const sourceFile = redirect === undefined ? program.getSourceFileByPath(path) : undefined;
|
|
685
|
+
if (redirect === undefined && sourceFile === undefined) return result;
|
|
686
|
+
const fileName = redirect !== undefined ? redirect.fileName : (sourceFile?.fileName ?? '');
|
|
687
|
+
const source = program.getSourceOfProjectReferenceIfOutputIncluded(path, fileName);
|
|
688
|
+
if (source !== fileName) {
|
|
689
|
+
result.push(
|
|
690
|
+
createCompilerDiagnostic(
|
|
691
|
+
Diagnostics.File_is_output_of_project_reference_source_0,
|
|
692
|
+
program.displayFileName(source, relative),
|
|
693
|
+
),
|
|
694
|
+
);
|
|
695
|
+
}
|
|
696
|
+
if (redirect !== undefined) {
|
|
697
|
+
const target = program.getSourceFileByPath(redirect.target);
|
|
698
|
+
result.push(
|
|
699
|
+
createCompilerDiagnostic(
|
|
700
|
+
Diagnostics.File_redirects_to_file_0,
|
|
701
|
+
program.displayFileName(target?.fileName ?? '', relative),
|
|
702
|
+
),
|
|
703
|
+
);
|
|
704
|
+
}
|
|
705
|
+
if (sourceFile !== undefined && isExternalOrCommonJSModule(sourceFile)) {
|
|
706
|
+
const metadata = program.sourceFileMetadata(path);
|
|
707
|
+
const packageJson = metadata.packageJsonDirectory + '/package.json';
|
|
708
|
+
const format = program.getImpliedNodeFormatForEmit(sourceFile);
|
|
709
|
+
if (format === ModuleKind.ESNext) {
|
|
710
|
+
if (metadata.packageJsonType === 'module') {
|
|
711
|
+
result.push(
|
|
712
|
+
createCompilerDiagnostic(
|
|
713
|
+
Diagnostics.File_is_ECMAScript_module_because_0_has_field_type_with_value_module,
|
|
714
|
+
program.displayFileName(packageJson, relative),
|
|
715
|
+
),
|
|
716
|
+
);
|
|
717
|
+
}
|
|
718
|
+
} else if (format === ModuleKind.CommonJS) {
|
|
719
|
+
if (metadata.packageJsonType !== '') {
|
|
720
|
+
result.push(
|
|
721
|
+
createCompilerDiagnostic(
|
|
722
|
+
Diagnostics.File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module,
|
|
723
|
+
program.displayFileName(packageJson, relative),
|
|
724
|
+
),
|
|
725
|
+
);
|
|
726
|
+
} else if (metadata.packageJsonDirectory !== '') {
|
|
727
|
+
result.push(
|
|
728
|
+
createCompilerDiagnostic(
|
|
729
|
+
Diagnostics.File_is_CommonJS_module_because_0_does_not_have_field_type,
|
|
730
|
+
program.displayFileName(packageJson, relative),
|
|
731
|
+
),
|
|
732
|
+
);
|
|
733
|
+
} else {
|
|
734
|
+
result.push(createCompilerDiagnostic(Diagnostics.File_is_CommonJS_module_because_package_json_was_not_found));
|
|
735
|
+
}
|
|
736
|
+
}
|
|
737
|
+
}
|
|
738
|
+
if (!program.isShared()) this.redirectAndFileFormat.set(path, result);
|
|
739
|
+
return result;
|
|
740
|
+
}
|
|
741
|
+
}
|