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,253 @@
|
|
|
1
|
+
// Whether a subtree contains TypeScript-only syntax, computed as tsgo's subtree facts are.
|
|
2
|
+
// Transforms skip subtrees without it; that also decides how malformed code is emitted.
|
|
3
|
+
import {
|
|
4
|
+
ClassDeclaration,
|
|
5
|
+
ClassExpression,
|
|
6
|
+
ConstructorDeclaration,
|
|
7
|
+
ExportAssignment,
|
|
8
|
+
ExportDeclaration,
|
|
9
|
+
ExportSpecifier,
|
|
10
|
+
FunctionDeclaration,
|
|
11
|
+
GetAccessorDeclaration,
|
|
12
|
+
Identifier,
|
|
13
|
+
ImportClause,
|
|
14
|
+
ImportEqualsDeclaration,
|
|
15
|
+
ImportSpecifier,
|
|
16
|
+
MethodDeclaration,
|
|
17
|
+
ModifierFlags,
|
|
18
|
+
type Node,
|
|
19
|
+
NodeVisitor,
|
|
20
|
+
ParameterDeclaration,
|
|
21
|
+
PropertyDeclaration,
|
|
22
|
+
SetAccessorDeclaration,
|
|
23
|
+
VariableDeclaration,
|
|
24
|
+
VariableStatement,
|
|
25
|
+
ArrowFunction,
|
|
26
|
+
FunctionExpression,
|
|
27
|
+
CallExpression,
|
|
28
|
+
NewExpression,
|
|
29
|
+
TaggedTemplateExpression,
|
|
30
|
+
ExpressionWithTypeArguments,
|
|
31
|
+
JsxOpeningElement,
|
|
32
|
+
JsxSelfClosingElement,
|
|
33
|
+
HeritageClause,
|
|
34
|
+
getModifiers,
|
|
35
|
+
} from '../ast.js';
|
|
36
|
+
import { ClusteredIntLinkTable } from '../link-tables.js';
|
|
37
|
+
import { isTypeNodeKind } from '../printer/utilities.js';
|
|
38
|
+
import { SyntaxKind } from '../syntax-kind.js';
|
|
39
|
+
|
|
40
|
+
const enum Facts {
|
|
41
|
+
None = 0,
|
|
42
|
+
TypeScript = 1,
|
|
43
|
+
/** The node's own syntax decides; children aren't consulted. */
|
|
44
|
+
Final = 2,
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/** The answers `TypeScriptFacts.cache` stores; zero is unknown. */
|
|
48
|
+
const enum Answer {
|
|
49
|
+
No = 1,
|
|
50
|
+
Yes = 2,
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/** Memoized `containsTypeScript` answers for one emit. */
|
|
54
|
+
export class TypeScriptFacts extends NodeVisitor {
|
|
55
|
+
/** The answer for each node, by node id. */
|
|
56
|
+
private readonly cache: ClusteredIntLinkTable;
|
|
57
|
+
private found: boolean;
|
|
58
|
+
|
|
59
|
+
constructor() {
|
|
60
|
+
super();
|
|
61
|
+
this.cache = new ClusteredIntLinkTable();
|
|
62
|
+
this.found = false;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
containsTypeScript(node: Node): boolean {
|
|
66
|
+
const cached = this.cache.get(node.id);
|
|
67
|
+
if (cached !== 0) return cached === Answer.Yes;
|
|
68
|
+
const own = ownFacts(node);
|
|
69
|
+
let result = (own & Facts.TypeScript) !== 0;
|
|
70
|
+
if (!result && (own & Facts.Final) === 0) {
|
|
71
|
+
const saved = this.found;
|
|
72
|
+
this.found = false;
|
|
73
|
+
node.forEachChild(this);
|
|
74
|
+
result = this.found;
|
|
75
|
+
this.found = saved;
|
|
76
|
+
}
|
|
77
|
+
this.cache.set(node.id, result ? Answer.Yes : Answer.No);
|
|
78
|
+
return result;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
visitNode(node: Node): boolean {
|
|
82
|
+
if (this.containsTypeScript(node)) this.found = true;
|
|
83
|
+
return this.found;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function ambient(node: Node): boolean {
|
|
88
|
+
const modifiers = getModifiers(node);
|
|
89
|
+
return modifiers !== undefined && (modifiers.modifierFlags & ModifierFlags.Ambient) !== 0;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/** TypeScript syntax of the node itself, beyond what its children contribute. */
|
|
93
|
+
function ownFacts(node: Node): Facts {
|
|
94
|
+
const kind = node.kind;
|
|
95
|
+
if (isTypeNodeKind(kind) && kind !== SyntaxKind.ExpressionWithTypeArguments) return Facts.TypeScript;
|
|
96
|
+
switch (kind) {
|
|
97
|
+
case SyntaxKind.PublicKeyword:
|
|
98
|
+
case SyntaxKind.PrivateKeyword:
|
|
99
|
+
case SyntaxKind.ProtectedKeyword:
|
|
100
|
+
case SyntaxKind.ReadonlyKeyword:
|
|
101
|
+
case SyntaxKind.AbstractKeyword:
|
|
102
|
+
case SyntaxKind.DeclareKeyword:
|
|
103
|
+
case SyntaxKind.ConstKeyword:
|
|
104
|
+
case SyntaxKind.InKeyword:
|
|
105
|
+
case SyntaxKind.OutKeyword:
|
|
106
|
+
case SyntaxKind.OverrideKeyword:
|
|
107
|
+
case SyntaxKind.ExportKeyword:
|
|
108
|
+
case SyntaxKind.Decorator:
|
|
109
|
+
case SyntaxKind.EnumMember:
|
|
110
|
+
case SyntaxKind.EnumDeclaration:
|
|
111
|
+
case SyntaxKind.ModuleDeclaration:
|
|
112
|
+
case SyntaxKind.ShorthandPropertyAssignment:
|
|
113
|
+
case SyntaxKind.AsExpression:
|
|
114
|
+
case SyntaxKind.SatisfiesExpression:
|
|
115
|
+
case SyntaxKind.NonNullExpression:
|
|
116
|
+
case SyntaxKind.TypeAssertionExpression:
|
|
117
|
+
case SyntaxKind.InterfaceDeclaration:
|
|
118
|
+
case SyntaxKind.TypeAliasDeclaration:
|
|
119
|
+
case SyntaxKind.JSTypeAliasDeclaration:
|
|
120
|
+
case SyntaxKind.NamespaceExportDeclaration:
|
|
121
|
+
case SyntaxKind.CallSignature:
|
|
122
|
+
case SyntaxKind.ConstructSignature:
|
|
123
|
+
case SyntaxKind.IndexSignature:
|
|
124
|
+
case SyntaxKind.MethodSignature:
|
|
125
|
+
case SyntaxKind.PropertySignature:
|
|
126
|
+
case SyntaxKind.TypeParameter:
|
|
127
|
+
return Facts.TypeScript;
|
|
128
|
+
case SyntaxKind.VariableStatement:
|
|
129
|
+
return node instanceof VariableStatement && ambient(node) ? Facts.TypeScript : Facts.None;
|
|
130
|
+
case SyntaxKind.VariableDeclaration:
|
|
131
|
+
return node instanceof VariableDeclaration && (node.exclamationToken !== undefined || node.type !== undefined)
|
|
132
|
+
? Facts.TypeScript
|
|
133
|
+
: Facts.None;
|
|
134
|
+
case SyntaxKind.Parameter:
|
|
135
|
+
if (node instanceof ParameterDeclaration)
|
|
136
|
+
return (node.name instanceof Identifier && node.name.text === 'this') ||
|
|
137
|
+
node.questionToken !== undefined ||
|
|
138
|
+
node.type !== undefined
|
|
139
|
+
? Facts.TypeScript
|
|
140
|
+
: Facts.None;
|
|
141
|
+
break;
|
|
142
|
+
case SyntaxKind.FunctionDeclaration:
|
|
143
|
+
if (node instanceof FunctionDeclaration)
|
|
144
|
+
return node.body === undefined ||
|
|
145
|
+
ambient(node) ||
|
|
146
|
+
node.typeParameters !== undefined ||
|
|
147
|
+
node.type !== undefined ||
|
|
148
|
+
node.fullSignature !== undefined
|
|
149
|
+
? Facts.TypeScript
|
|
150
|
+
: Facts.None;
|
|
151
|
+
break;
|
|
152
|
+
case SyntaxKind.ClassDeclaration:
|
|
153
|
+
if (node instanceof ClassDeclaration)
|
|
154
|
+
return ambient(node) || node.typeParameters !== undefined ? Facts.TypeScript : Facts.None;
|
|
155
|
+
break;
|
|
156
|
+
case SyntaxKind.ClassExpression:
|
|
157
|
+
if (node instanceof ClassExpression)
|
|
158
|
+
return ambient(node) || node.typeParameters !== undefined ? Facts.TypeScript : Facts.None;
|
|
159
|
+
break;
|
|
160
|
+
case SyntaxKind.HeritageClause:
|
|
161
|
+
if (node instanceof HeritageClause) {
|
|
162
|
+
if (node.token === SyntaxKind.ImplementsKeyword) return Facts.TypeScript;
|
|
163
|
+
return node.token === SyntaxKind.ExtendsKeyword ? Facts.None : Facts.Final;
|
|
164
|
+
}
|
|
165
|
+
break;
|
|
166
|
+
case SyntaxKind.ImportEqualsDeclaration:
|
|
167
|
+
if (node instanceof ImportEqualsDeclaration)
|
|
168
|
+
return node.isTypeOnly || node.moduleReference.kind !== SyntaxKind.ExternalModuleReference
|
|
169
|
+
? Facts.TypeScript
|
|
170
|
+
: Facts.None;
|
|
171
|
+
break;
|
|
172
|
+
case SyntaxKind.ImportSpecifier:
|
|
173
|
+
return node instanceof ImportSpecifier && node.isTypeOnly ? Facts.TypeScript : Facts.None;
|
|
174
|
+
case SyntaxKind.ImportClause:
|
|
175
|
+
return node instanceof ImportClause && node.phaseModifier === SyntaxKind.TypeKeyword
|
|
176
|
+
? Facts.TypeScript
|
|
177
|
+
: Facts.None;
|
|
178
|
+
case SyntaxKind.ExportAssignment:
|
|
179
|
+
return node instanceof ExportAssignment && node.isExportEquals ? Facts.TypeScript : Facts.None;
|
|
180
|
+
case SyntaxKind.ExportDeclaration:
|
|
181
|
+
return node instanceof ExportDeclaration && node.isTypeOnly ? Facts.TypeScript : Facts.None;
|
|
182
|
+
case SyntaxKind.ExportSpecifier:
|
|
183
|
+
return node instanceof ExportSpecifier && node.isTypeOnly ? Facts.TypeScript : Facts.None;
|
|
184
|
+
case SyntaxKind.Constructor:
|
|
185
|
+
if (node instanceof ConstructorDeclaration)
|
|
186
|
+
return node.body === undefined ||
|
|
187
|
+
node.typeParameters !== undefined ||
|
|
188
|
+
node.type !== undefined ||
|
|
189
|
+
node.fullSignature !== undefined
|
|
190
|
+
? Facts.TypeScript
|
|
191
|
+
: Facts.None;
|
|
192
|
+
break;
|
|
193
|
+
case SyntaxKind.GetAccessor:
|
|
194
|
+
if (node instanceof GetAccessorDeclaration)
|
|
195
|
+
return node.body === undefined ||
|
|
196
|
+
node.typeParameters !== undefined ||
|
|
197
|
+
node.type !== undefined ||
|
|
198
|
+
node.fullSignature !== undefined
|
|
199
|
+
? Facts.TypeScript
|
|
200
|
+
: Facts.None;
|
|
201
|
+
break;
|
|
202
|
+
case SyntaxKind.SetAccessor:
|
|
203
|
+
if (node instanceof SetAccessorDeclaration)
|
|
204
|
+
return node.body === undefined ||
|
|
205
|
+
node.typeParameters !== undefined ||
|
|
206
|
+
node.type !== undefined ||
|
|
207
|
+
node.fullSignature !== undefined
|
|
208
|
+
? Facts.TypeScript
|
|
209
|
+
: Facts.None;
|
|
210
|
+
break;
|
|
211
|
+
case SyntaxKind.MethodDeclaration:
|
|
212
|
+
if (node instanceof MethodDeclaration)
|
|
213
|
+
return node.body === undefined ||
|
|
214
|
+
node.postfixToken !== undefined ||
|
|
215
|
+
node.typeParameters !== undefined ||
|
|
216
|
+
node.type !== undefined ||
|
|
217
|
+
node.fullSignature !== undefined
|
|
218
|
+
? Facts.TypeScript
|
|
219
|
+
: Facts.None;
|
|
220
|
+
break;
|
|
221
|
+
case SyntaxKind.PropertyDeclaration:
|
|
222
|
+
return node instanceof PropertyDeclaration && (node.postfixToken !== undefined || node.type !== undefined)
|
|
223
|
+
? Facts.TypeScript
|
|
224
|
+
: Facts.None;
|
|
225
|
+
case SyntaxKind.ArrowFunction:
|
|
226
|
+
return node instanceof ArrowFunction &&
|
|
227
|
+
(node.typeParameters !== undefined || node.type !== undefined || node.fullSignature !== undefined)
|
|
228
|
+
? Facts.TypeScript
|
|
229
|
+
: Facts.None;
|
|
230
|
+
case SyntaxKind.FunctionExpression:
|
|
231
|
+
return node instanceof FunctionExpression &&
|
|
232
|
+
(node.typeParameters !== undefined || node.type !== undefined || node.fullSignature !== undefined)
|
|
233
|
+
? Facts.TypeScript
|
|
234
|
+
: Facts.None;
|
|
235
|
+
case SyntaxKind.CallExpression:
|
|
236
|
+
return node instanceof CallExpression && node.typeArguments !== undefined ? Facts.TypeScript : Facts.None;
|
|
237
|
+
case SyntaxKind.NewExpression:
|
|
238
|
+
return node instanceof NewExpression && node.typeArguments !== undefined ? Facts.TypeScript : Facts.None;
|
|
239
|
+
case SyntaxKind.TaggedTemplateExpression:
|
|
240
|
+
return node instanceof TaggedTemplateExpression && node.typeArguments !== undefined
|
|
241
|
+
? Facts.TypeScript
|
|
242
|
+
: Facts.None;
|
|
243
|
+
case SyntaxKind.ExpressionWithTypeArguments:
|
|
244
|
+
return node instanceof ExpressionWithTypeArguments && node.typeArguments !== undefined
|
|
245
|
+
? Facts.TypeScript
|
|
246
|
+
: Facts.None;
|
|
247
|
+
case SyntaxKind.JsxOpeningElement:
|
|
248
|
+
return node instanceof JsxOpeningElement && node.typeArguments !== undefined ? Facts.TypeScript : Facts.None;
|
|
249
|
+
case SyntaxKind.JsxSelfClosingElement:
|
|
250
|
+
return node instanceof JsxSelfClosingElement && node.typeArguments !== undefined ? Facts.TypeScript : Facts.None;
|
|
251
|
+
}
|
|
252
|
+
return Facts.None;
|
|
253
|
+
}
|
|
@@ -0,0 +1,358 @@
|
|
|
1
|
+
// What syntax a subtree contains, computed as tsgo's subtree facts are. Downlevel transforms
|
|
2
|
+
// skip subtrees without the syntax they lower.
|
|
3
|
+
import {
|
|
4
|
+
BinaryExpression,
|
|
5
|
+
BindingElement,
|
|
6
|
+
BindingPattern,
|
|
7
|
+
CallExpression,
|
|
8
|
+
CatchClause,
|
|
9
|
+
ForInOrOfStatement,
|
|
10
|
+
FunctionDeclaration,
|
|
11
|
+
FunctionExpression,
|
|
12
|
+
Identifier,
|
|
13
|
+
MetaProperty,
|
|
14
|
+
MethodDeclaration,
|
|
15
|
+
ModifierFlags,
|
|
16
|
+
type ModifierList,
|
|
17
|
+
type Node,
|
|
18
|
+
NodeFlags,
|
|
19
|
+
NodeVisitor,
|
|
20
|
+
NoSubstitutionTemplateLiteral,
|
|
21
|
+
PropertyAccessExpression,
|
|
22
|
+
TemplateHead,
|
|
23
|
+
TemplateMiddle,
|
|
24
|
+
TemplateTail,
|
|
25
|
+
VariableDeclarationList,
|
|
26
|
+
getModifiers,
|
|
27
|
+
getName,
|
|
28
|
+
} from '../ast.js';
|
|
29
|
+
import { ClusteredIntLinkTable } from '../link-tables.js';
|
|
30
|
+
import { isTypeNodeKind } from '../printer/utilities.js';
|
|
31
|
+
import { SyntaxKind } from '../syntax-kind.js';
|
|
32
|
+
import { TokenFlags } from '../types.js';
|
|
33
|
+
import { getElementsOfBindingOrAssignmentPattern, getTargetOfBindingOrAssignmentElement } from './destructuring.js';
|
|
34
|
+
|
|
35
|
+
export const enum SubtreeFacts {
|
|
36
|
+
None = 0,
|
|
37
|
+
ContainsTypeScript = 1 << 0,
|
|
38
|
+
ContainsJsx = 1 << 1,
|
|
39
|
+
ContainsUsing = 1 << 2,
|
|
40
|
+
ContainsLogicalAssignments = 1 << 3,
|
|
41
|
+
ContainsNullishCoalescing = 1 << 4,
|
|
42
|
+
ContainsOptionalChaining = 1 << 5,
|
|
43
|
+
ContainsMissingCatchClauseVariable = 1 << 6,
|
|
44
|
+
/** A `...` in an object literal or object pattern somewhere inside; never cleared. */
|
|
45
|
+
ContainsESObjectRestOrSpread = 1 << 7,
|
|
46
|
+
ContainsForAwaitOrAsyncGenerator = 1 << 8,
|
|
47
|
+
ContainsAnyAwait = 1 << 9,
|
|
48
|
+
ContainsExponentiationOperator = 1 << 10,
|
|
49
|
+
ContainsLexicalThis = 1 << 11,
|
|
50
|
+
ContainsLexicalSuper = 1 << 12,
|
|
51
|
+
/** A `...` anywhere; cleared when leaving a binding pattern. */
|
|
52
|
+
ContainsRestOrSpread = 1 << 13,
|
|
53
|
+
/** A `{ ...x }`; cleared when leaving most scopes. */
|
|
54
|
+
ContainsObjectRestOrSpread = 1 << 14,
|
|
55
|
+
ContainsAwait = 1 << 15,
|
|
56
|
+
ContainsDynamicImport = 1 << 16,
|
|
57
|
+
ContainsClassFields = 1 << 17,
|
|
58
|
+
ContainsDecorators = 1 << 18,
|
|
59
|
+
ContainsIdentifier = 1 << 19,
|
|
60
|
+
ContainsPrivateIdentifierInExpression = 1 << 20,
|
|
61
|
+
ContainsInvalidTemplateEscape = 1 << 21,
|
|
62
|
+
|
|
63
|
+
ContainsLexicalThisOrSuper = ContainsLexicalThis | ContainsLexicalSuper,
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Facts that don't propagate out of a node to its parent.
|
|
67
|
+
const enum Exclusions {
|
|
68
|
+
None = 0,
|
|
69
|
+
ArrowFunction = SubtreeFacts.ContainsAwait | SubtreeFacts.ContainsObjectRestOrSpread,
|
|
70
|
+
Function = SubtreeFacts.ContainsLexicalThisOrSuper |
|
|
71
|
+
SubtreeFacts.ContainsAwait |
|
|
72
|
+
SubtreeFacts.ContainsObjectRestOrSpread,
|
|
73
|
+
Property = SubtreeFacts.ContainsLexicalThisOrSuper,
|
|
74
|
+
Module = SubtreeFacts.ContainsLexicalThisOrSuper,
|
|
75
|
+
ObjectRestOrSpread = SubtreeFacts.ContainsObjectRestOrSpread,
|
|
76
|
+
BindingPattern = SubtreeFacts.ContainsRestOrSpread,
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/** Marks a computed entry of `SyntaxFacts.cache`, whose facts may be `None`. */
|
|
80
|
+
const computedFacts = 1 << 30;
|
|
81
|
+
|
|
82
|
+
/** Memoized subtree facts for one emit; synthesized nodes get theirs on first use. */
|
|
83
|
+
export class SyntaxFacts extends NodeVisitor {
|
|
84
|
+
/** The facts of each node, by node id, with `computedFacts` set. */
|
|
85
|
+
private readonly cache: ClusteredIntLinkTable;
|
|
86
|
+
private collected: SubtreeFacts;
|
|
87
|
+
|
|
88
|
+
constructor() {
|
|
89
|
+
super();
|
|
90
|
+
this.cache = new ClusteredIntLinkTable();
|
|
91
|
+
this.collected = SubtreeFacts.None;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
of(node: Node): SubtreeFacts {
|
|
95
|
+
const cached = this.cache.get(node.id);
|
|
96
|
+
if (cached !== 0) return cached & ~computedFacts;
|
|
97
|
+
const facts = this.compute(node);
|
|
98
|
+
this.cache.set(node.id, facts | computedFacts);
|
|
99
|
+
return facts;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
has(node: Node, facts: SubtreeFacts): boolean {
|
|
103
|
+
return (this.of(node) & facts) !== 0;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/** Whether the subtree has a `...` in a pattern or literal. */
|
|
107
|
+
hasRestOrSpread(node: Node): boolean {
|
|
108
|
+
return this.has(node, SubtreeFacts.ContainsRestOrSpread | SubtreeFacts.ContainsObjectRestOrSpread);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/** Whether the subtree has a `{ ...x }` in a pattern or literal, outside nested scopes. */
|
|
112
|
+
hasObjectRestOrSpread(node: Node): boolean {
|
|
113
|
+
return this.has(node, SubtreeFacts.ContainsObjectRestOrSpread);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/** The facts `node` contributes to its parent. */
|
|
117
|
+
propagate(node: Node | undefined): SubtreeFacts {
|
|
118
|
+
if (node === undefined) return SubtreeFacts.None;
|
|
119
|
+
const kind = node.kind;
|
|
120
|
+
if (isTypeNodeKind(kind) && kind !== SyntaxKind.ExpressionWithTypeArguments) return SubtreeFacts.ContainsTypeScript;
|
|
121
|
+
const facts = this.of(node);
|
|
122
|
+
switch (kind) {
|
|
123
|
+
case SyntaxKind.ArrowFunction:
|
|
124
|
+
return facts & ~Exclusions.ArrowFunction;
|
|
125
|
+
case SyntaxKind.FunctionDeclaration:
|
|
126
|
+
case SyntaxKind.FunctionExpression:
|
|
127
|
+
case SyntaxKind.Constructor:
|
|
128
|
+
return facts & ~Exclusions.Function;
|
|
129
|
+
case SyntaxKind.MethodDeclaration:
|
|
130
|
+
case SyntaxKind.GetAccessor:
|
|
131
|
+
case SyntaxKind.SetAccessor:
|
|
132
|
+
return (facts & ~Exclusions.Function) | this.propagate(getName(node));
|
|
133
|
+
case SyntaxKind.PropertyDeclaration:
|
|
134
|
+
return (facts & ~Exclusions.Property) | this.propagate(getName(node));
|
|
135
|
+
case SyntaxKind.ModuleDeclaration:
|
|
136
|
+
return facts & ~Exclusions.Module;
|
|
137
|
+
case SyntaxKind.ObjectLiteralExpression:
|
|
138
|
+
case SyntaxKind.VariableDeclarationList:
|
|
139
|
+
case SyntaxKind.CatchClause:
|
|
140
|
+
return facts & ~Exclusions.ObjectRestOrSpread;
|
|
141
|
+
case SyntaxKind.ObjectBindingPattern:
|
|
142
|
+
case SyntaxKind.ArrayBindingPattern:
|
|
143
|
+
return facts & ~Exclusions.BindingPattern;
|
|
144
|
+
}
|
|
145
|
+
return facts;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
visitNode(node: Node): boolean {
|
|
149
|
+
this.collected |= this.propagate(node);
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
private children(node: Node): SubtreeFacts {
|
|
154
|
+
const saved = this.collected;
|
|
155
|
+
this.collected = SubtreeFacts.None;
|
|
156
|
+
node.forEachChild(this);
|
|
157
|
+
const facts = this.collected;
|
|
158
|
+
this.collected = saved;
|
|
159
|
+
return facts;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
private compute(node: Node): SubtreeFacts {
|
|
163
|
+
switch (node.kind) {
|
|
164
|
+
case SyntaxKind.UsingKeyword:
|
|
165
|
+
return SubtreeFacts.ContainsUsing;
|
|
166
|
+
case SyntaxKind.AccessorKeyword:
|
|
167
|
+
case SyntaxKind.PrivateIdentifier:
|
|
168
|
+
return SubtreeFacts.ContainsClassFields;
|
|
169
|
+
case SyntaxKind.AsyncKeyword:
|
|
170
|
+
return SubtreeFacts.ContainsAnyAwait;
|
|
171
|
+
case SyntaxKind.SuperKeyword:
|
|
172
|
+
return SubtreeFacts.ContainsLexicalSuper;
|
|
173
|
+
case SyntaxKind.ThisKeyword:
|
|
174
|
+
return SubtreeFacts.ContainsLexicalThis;
|
|
175
|
+
case SyntaxKind.AsteriskAsteriskToken:
|
|
176
|
+
case SyntaxKind.AsteriskAsteriskEqualsToken:
|
|
177
|
+
return SubtreeFacts.ContainsExponentiationOperator;
|
|
178
|
+
case SyntaxKind.QuestionQuestionToken:
|
|
179
|
+
return SubtreeFacts.ContainsNullishCoalescing;
|
|
180
|
+
case SyntaxKind.QuestionDotToken:
|
|
181
|
+
return SubtreeFacts.ContainsOptionalChaining;
|
|
182
|
+
case SyntaxKind.QuestionQuestionEqualsToken:
|
|
183
|
+
case SyntaxKind.BarBarEqualsToken:
|
|
184
|
+
case SyntaxKind.AmpersandAmpersandEqualsToken:
|
|
185
|
+
return SubtreeFacts.ContainsLogicalAssignments;
|
|
186
|
+
case SyntaxKind.Identifier:
|
|
187
|
+
return SubtreeFacts.ContainsIdentifier;
|
|
188
|
+
case SyntaxKind.NoSubstitutionTemplateLiteral:
|
|
189
|
+
return node instanceof NoSubstitutionTemplateLiteral && invalidEscape(node.templateFlags)
|
|
190
|
+
? SubtreeFacts.ContainsInvalidTemplateEscape
|
|
191
|
+
: SubtreeFacts.None;
|
|
192
|
+
case SyntaxKind.TemplateHead:
|
|
193
|
+
return node instanceof TemplateHead && invalidEscape(node.templateFlags)
|
|
194
|
+
? SubtreeFacts.ContainsInvalidTemplateEscape
|
|
195
|
+
: SubtreeFacts.None;
|
|
196
|
+
case SyntaxKind.TemplateMiddle:
|
|
197
|
+
return node instanceof TemplateMiddle && invalidEscape(node.templateFlags)
|
|
198
|
+
? SubtreeFacts.ContainsInvalidTemplateEscape
|
|
199
|
+
: SubtreeFacts.None;
|
|
200
|
+
case SyntaxKind.TemplateTail:
|
|
201
|
+
return node instanceof TemplateTail && invalidEscape(node.templateFlags)
|
|
202
|
+
? SubtreeFacts.ContainsInvalidTemplateEscape
|
|
203
|
+
: SubtreeFacts.None;
|
|
204
|
+
case SyntaxKind.Decorator:
|
|
205
|
+
return this.children(node) | SubtreeFacts.ContainsTypeScript | SubtreeFacts.ContainsDecorators;
|
|
206
|
+
case SyntaxKind.ForInStatement:
|
|
207
|
+
case SyntaxKind.ForOfStatement:
|
|
208
|
+
return (
|
|
209
|
+
this.children(node) |
|
|
210
|
+
(node instanceof ForInOrOfStatement && node.awaitModifier !== undefined
|
|
211
|
+
? SubtreeFacts.ContainsForAwaitOrAsyncGenerator
|
|
212
|
+
: SubtreeFacts.None)
|
|
213
|
+
);
|
|
214
|
+
case SyntaxKind.ReturnStatement:
|
|
215
|
+
case SyntaxKind.YieldExpression:
|
|
216
|
+
// Returns and yields in an ES2018 async generator are awaited.
|
|
217
|
+
return this.children(node) | SubtreeFacts.ContainsForAwaitOrAsyncGenerator;
|
|
218
|
+
case SyntaxKind.AwaitExpression:
|
|
219
|
+
return (
|
|
220
|
+
this.children(node) |
|
|
221
|
+
SubtreeFacts.ContainsAwait |
|
|
222
|
+
SubtreeFacts.ContainsAnyAwait |
|
|
223
|
+
SubtreeFacts.ContainsForAwaitOrAsyncGenerator
|
|
224
|
+
);
|
|
225
|
+
case SyntaxKind.CatchClause:
|
|
226
|
+
return (
|
|
227
|
+
this.children(node) |
|
|
228
|
+
(node instanceof CatchClause && node.variableDeclaration === undefined
|
|
229
|
+
? SubtreeFacts.ContainsMissingCatchClauseVariable
|
|
230
|
+
: SubtreeFacts.None)
|
|
231
|
+
);
|
|
232
|
+
case SyntaxKind.VariableDeclarationList:
|
|
233
|
+
return (
|
|
234
|
+
this.children(node) |
|
|
235
|
+
(node instanceof VariableDeclarationList && (node.flags & NodeFlags.Using) !== 0
|
|
236
|
+
? SubtreeFacts.ContainsUsing
|
|
237
|
+
: SubtreeFacts.None)
|
|
238
|
+
);
|
|
239
|
+
case SyntaxKind.ObjectBindingPattern:
|
|
240
|
+
case SyntaxKind.ArrayBindingPattern:
|
|
241
|
+
return this.bindingPattern(node as BindingPattern);
|
|
242
|
+
case SyntaxKind.BindingElement:
|
|
243
|
+
return (
|
|
244
|
+
this.children(node) |
|
|
245
|
+
(node instanceof BindingElement && node.dotDotDotToken !== undefined
|
|
246
|
+
? SubtreeFacts.ContainsRestOrSpread
|
|
247
|
+
: SubtreeFacts.None)
|
|
248
|
+
);
|
|
249
|
+
case SyntaxKind.FunctionDeclaration:
|
|
250
|
+
return this.children(node) | asyncFacts(node, (node as FunctionDeclaration).asteriskToken !== undefined);
|
|
251
|
+
case SyntaxKind.FunctionExpression:
|
|
252
|
+
return this.children(node) | asyncFacts(node, (node as FunctionExpression).asteriskToken !== undefined);
|
|
253
|
+
case SyntaxKind.MethodDeclaration:
|
|
254
|
+
return this.children(node) | asyncFacts(node, (node as MethodDeclaration).asteriskToken !== undefined);
|
|
255
|
+
case SyntaxKind.ArrowFunction:
|
|
256
|
+
return this.children(node) | asyncFacts(node, false);
|
|
257
|
+
case SyntaxKind.PropertyDeclaration:
|
|
258
|
+
case SyntaxKind.ClassStaticBlockDeclaration:
|
|
259
|
+
return this.children(node) | SubtreeFacts.ContainsClassFields;
|
|
260
|
+
case SyntaxKind.BinaryExpression:
|
|
261
|
+
return this.children(node) | this.binaryFacts(node as BinaryExpression);
|
|
262
|
+
case SyntaxKind.PropertyAccessExpression:
|
|
263
|
+
return (
|
|
264
|
+
this.children(node) |
|
|
265
|
+
(node instanceof PropertyAccessExpression && !(node.name instanceof Identifier)
|
|
266
|
+
? SubtreeFacts.ContainsPrivateIdentifierInExpression
|
|
267
|
+
: SubtreeFacts.None)
|
|
268
|
+
);
|
|
269
|
+
case SyntaxKind.CallExpression:
|
|
270
|
+
return (
|
|
271
|
+
this.children(node) |
|
|
272
|
+
(node instanceof CallExpression && node.expression.kind === SyntaxKind.ImportKeyword
|
|
273
|
+
? SubtreeFacts.ContainsDynamicImport
|
|
274
|
+
: SubtreeFacts.None)
|
|
275
|
+
);
|
|
276
|
+
case SyntaxKind.MetaProperty:
|
|
277
|
+
return node instanceof MetaProperty ? this.propagate(node.name) & ~SubtreeFacts.ContainsIdentifier : 0;
|
|
278
|
+
case SyntaxKind.SpreadElement:
|
|
279
|
+
return this.children(node) | SubtreeFacts.ContainsRestOrSpread;
|
|
280
|
+
case SyntaxKind.SpreadAssignment:
|
|
281
|
+
return (
|
|
282
|
+
this.children(node) | SubtreeFacts.ContainsESObjectRestOrSpread | SubtreeFacts.ContainsObjectRestOrSpread
|
|
283
|
+
);
|
|
284
|
+
case SyntaxKind.JsxElement:
|
|
285
|
+
case SyntaxKind.JsxAttributes:
|
|
286
|
+
case SyntaxKind.JsxNamespacedName:
|
|
287
|
+
case SyntaxKind.JsxOpeningElement:
|
|
288
|
+
case SyntaxKind.JsxSelfClosingElement:
|
|
289
|
+
case SyntaxKind.JsxFragment:
|
|
290
|
+
case SyntaxKind.JsxOpeningFragment:
|
|
291
|
+
case SyntaxKind.JsxClosingFragment:
|
|
292
|
+
case SyntaxKind.JsxAttribute:
|
|
293
|
+
case SyntaxKind.JsxSpreadAttribute:
|
|
294
|
+
case SyntaxKind.JsxClosingElement:
|
|
295
|
+
case SyntaxKind.JsxExpression:
|
|
296
|
+
case SyntaxKind.JsxText:
|
|
297
|
+
return this.children(node) | SubtreeFacts.ContainsJsx;
|
|
298
|
+
}
|
|
299
|
+
return this.children(node);
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
private bindingPattern(node: BindingPattern): SubtreeFacts {
|
|
303
|
+
const elements = node.elements.nodes;
|
|
304
|
+
const object = node.kind === SyntaxKind.ObjectBindingPattern;
|
|
305
|
+
let facts = SubtreeFacts.None;
|
|
306
|
+
for (const child of elements) {
|
|
307
|
+
let element = this.propagate(child);
|
|
308
|
+
if ((element & SubtreeFacts.ContainsRestOrSpread) !== 0) {
|
|
309
|
+
element &= ~SubtreeFacts.ContainsRestOrSpread;
|
|
310
|
+
if (object) element |= SubtreeFacts.ContainsObjectRestOrSpread | SubtreeFacts.ContainsESObjectRestOrSpread;
|
|
311
|
+
}
|
|
312
|
+
facts |= element;
|
|
313
|
+
}
|
|
314
|
+
return facts;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
private binaryFacts(node: BinaryExpression): SubtreeFacts {
|
|
318
|
+
const operator = node.operatorToken.kind;
|
|
319
|
+
if (operator === SyntaxKind.InKeyword && node.left.kind === SyntaxKind.PrivateIdentifier)
|
|
320
|
+
return SubtreeFacts.ContainsClassFields | SubtreeFacts.ContainsPrivateIdentifierInExpression;
|
|
321
|
+
if (
|
|
322
|
+
operator === SyntaxKind.EqualsToken &&
|
|
323
|
+
(node.left.kind === SyntaxKind.ObjectLiteralExpression || node.left.kind === SyntaxKind.ArrayLiteralExpression) &&
|
|
324
|
+
this.containsObjectRestOrSpread(node.left)
|
|
325
|
+
)
|
|
326
|
+
return SubtreeFacts.ContainsObjectRestOrSpread;
|
|
327
|
+
return SubtreeFacts.None;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
/** Whether a pattern has an object rest element, at any depth of nested assignment patterns. */
|
|
331
|
+
containsObjectRestOrSpread(node: Node): boolean {
|
|
332
|
+
const facts = this.of(node);
|
|
333
|
+
if ((facts & SubtreeFacts.ContainsObjectRestOrSpread) !== 0) return true;
|
|
334
|
+
if ((facts & SubtreeFacts.ContainsESObjectRestOrSpread) === 0) return false;
|
|
335
|
+
// Nested spreads, as in `{ x: { a, ...b } = foo } = c`.
|
|
336
|
+
const elements = getElementsOfBindingOrAssignmentPattern(node);
|
|
337
|
+
for (const element of elements) {
|
|
338
|
+
const target = getTargetOfBindingOrAssignmentElement(element);
|
|
339
|
+
if (
|
|
340
|
+
target !== undefined &&
|
|
341
|
+
(target.kind === SyntaxKind.ObjectLiteralExpression || target.kind === SyntaxKind.ArrayLiteralExpression) &&
|
|
342
|
+
this.containsObjectRestOrSpread(target)
|
|
343
|
+
)
|
|
344
|
+
return true;
|
|
345
|
+
}
|
|
346
|
+
return false;
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
function invalidEscape(flags: TokenFlags): boolean {
|
|
351
|
+
return (flags & TokenFlags.ContainsInvalidEscape) !== 0;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
function asyncFacts(node: Node, generator: boolean): SubtreeFacts {
|
|
355
|
+
const modifiers: ModifierList | undefined = getModifiers(node);
|
|
356
|
+
if (modifiers === undefined || (modifiers.modifierFlags & ModifierFlags.Async) === 0) return SubtreeFacts.None;
|
|
357
|
+
return generator ? SubtreeFacts.ContainsForAwaitOrAsyncGenerator : SubtreeFacts.ContainsAnyAwait;
|
|
358
|
+
}
|