tsc-ts 0.0.9 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (373) hide show
  1. package/README.md +2 -2
  2. package/bin/tsc-ts.js +70 -1
  3. package/dist/api/compiler/ast-utilities.d.ts +19 -1
  4. package/dist/api/compiler/ast-utilities.js +180 -95
  5. package/dist/api/compiler/ast.d.ts +22 -15
  6. package/dist/api/compiler/ast.js +1026 -995
  7. package/dist/api/compiler/astnav.js +15 -15
  8. package/dist/api/compiler/binder-utilities.js +186 -186
  9. package/dist/api/compiler/binder.js +290 -263
  10. package/dist/api/compiler/character-codes.js +2 -2
  11. package/dist/api/compiler/checker-calls.js +178 -124
  12. package/dist/api/compiler/checker-classes.d.ts +14 -3
  13. package/dist/api/compiler/checker-classes.js +134 -90
  14. package/dist/api/compiler/checker-contextual.js +64 -61
  15. package/dist/api/compiler/checker-declaration-order.js +79 -79
  16. package/dist/api/compiler/checker-declarations.d.ts +1 -0
  17. package/dist/api/compiler/checker-declarations.js +160 -136
  18. package/dist/api/compiler/checker-declared-types.js +67 -65
  19. package/dist/api/compiler/checker-decorators.js +77 -77
  20. package/dist/api/compiler/checker-deprecation.d.ts +8 -3
  21. package/dist/api/compiler/checker-deprecation.js +76 -55
  22. package/dist/api/compiler/checker-destructuring.js +47 -45
  23. package/dist/api/compiler/checker-elaboration.js +24 -24
  24. package/dist/api/compiler/checker-emit-helpers.js +4 -4
  25. package/dist/api/compiler/checker-emit-resolver.d.ts +4 -2
  26. package/dist/api/compiler/checker-emit-resolver.js +25 -13
  27. package/dist/api/compiler/checker-evaluator.js +9 -9
  28. package/dist/api/compiler/checker-expressions.js +244 -211
  29. package/dist/api/compiler/checker-functions.js +113 -107
  30. package/dist/api/compiler/checker-generated-code.d.ts +0 -11
  31. package/dist/api/compiler/checker-generated-code.js +28 -52
  32. package/dist/api/compiler/checker-grammar.d.ts +1 -0
  33. package/dist/api/compiler/checker-grammar.js +472 -440
  34. package/dist/api/compiler/checker-heritage.js +91 -93
  35. package/dist/api/compiler/checker-inference.d.ts +77 -5
  36. package/dist/api/compiler/checker-inference.js +487 -107
  37. package/dist/api/compiler/checker-iteration.d.ts +0 -10
  38. package/dist/api/compiler/checker-iteration.js +35 -52
  39. package/dist/api/compiler/checker-javascript.js +14 -14
  40. package/dist/api/compiler/checker-jsdoc.d.ts +8 -10
  41. package/dist/api/compiler/checker-jsdoc.js +67 -58
  42. package/dist/api/compiler/checker-jsx.js +105 -88
  43. package/dist/api/compiler/checker-members.d.ts +9 -2
  44. package/dist/api/compiler/checker-members.js +212 -75
  45. package/dist/api/compiler/checker-modules.d.ts +15 -6
  46. package/dist/api/compiler/checker-modules.js +469 -309
  47. package/dist/api/compiler/checker-narrowing.js +273 -189
  48. package/dist/api/compiler/checker-object-literals.js +25 -22
  49. package/dist/api/compiler/checker-operators.js +126 -118
  50. package/dist/api/compiler/checker-overloads.js +27 -27
  51. package/dist/api/compiler/checker-property-access.js +59 -55
  52. package/dist/api/compiler/checker-services.d.ts +1 -0
  53. package/dist/api/compiler/checker-services.js +222 -210
  54. package/dist/api/compiler/checker-signatures.js +65 -49
  55. package/dist/api/compiler/checker-source-file.d.ts +5 -0
  56. package/dist/api/compiler/checker-source-file.js +154 -130
  57. package/dist/api/compiler/checker-statements.js +33 -32
  58. package/dist/api/compiler/checker-super.js +50 -50
  59. package/dist/api/compiler/checker-symbol-types.js +109 -93
  60. package/dist/api/compiler/checker-symbols.d.ts +13 -1
  61. package/dist/api/compiler/checker-symbols.js +264 -149
  62. package/dist/api/compiler/checker-type-factory.d.ts +5 -0
  63. package/dist/api/compiler/checker-type-factory.js +145 -36
  64. package/dist/api/compiler/checker-type-nodes.d.ts +1 -0
  65. package/dist/api/compiler/checker-type-nodes.js +179 -141
  66. package/dist/api/compiler/checker-type-operators.d.ts +2 -0
  67. package/dist/api/compiler/checker-type-operators.js +110 -63
  68. package/dist/api/compiler/checker-types.d.ts +80 -3
  69. package/dist/api/compiler/checker-types.js +121 -2
  70. package/dist/api/compiler/checker-unused.js +114 -118
  71. package/dist/api/compiler/checker-utilities.js +11 -11
  72. package/dist/api/compiler/checker.d.ts +104 -31
  73. package/dist/api/compiler/checker.js +181 -33
  74. package/dist/api/compiler/command-line.d.ts +1 -3
  75. package/dist/api/compiler/command-line.js +47 -44
  76. package/dist/api/compiler/compile-program.d.ts +42 -3
  77. package/dist/api/compiler/compile-program.js +139 -27
  78. package/dist/api/compiler/diagnostic-messages.d.ts +1849 -1774
  79. package/dist/api/compiler/diagnostic-messages.js +128 -122
  80. package/dist/api/compiler/diagnostics.d.ts +22 -0
  81. package/dist/api/compiler/diagnostics.js +93 -11
  82. package/dist/api/compiler/emitter.d.ts +7 -1
  83. package/dist/api/compiler/emitter.js +53 -11
  84. package/dist/api/compiler/file-include.d.ts +2 -1
  85. package/dist/api/compiler/file-include.js +11 -7
  86. package/dist/api/compiler/file-loader.d.ts +21 -1
  87. package/dist/api/compiler/file-loader.js +201 -48
  88. package/dist/api/compiler/instantiation.d.ts +7 -0
  89. package/dist/api/compiler/instantiation.js +101 -49
  90. package/dist/api/compiler/jsdoc.js +23 -23
  91. package/dist/api/compiler/link-tables.d.ts +48 -18
  92. package/dist/api/compiler/link-tables.js +80 -37
  93. package/dist/api/compiler/locales/cs-CZ.d.ts +1 -1
  94. package/dist/api/compiler/locales/cs-CZ.js +1 -1
  95. package/dist/api/compiler/locales/de-DE.d.ts +1 -1
  96. package/dist/api/compiler/locales/de-DE.js +1 -1
  97. package/dist/api/compiler/locales/es-ES.d.ts +1 -1
  98. package/dist/api/compiler/locales/es-ES.js +1 -1
  99. package/dist/api/compiler/locales/fr-FR.d.ts +1 -1
  100. package/dist/api/compiler/locales/fr-FR.js +1 -1
  101. package/dist/api/compiler/locales/it-IT.d.ts +1 -1
  102. package/dist/api/compiler/locales/it-IT.js +1 -1
  103. package/dist/api/compiler/locales/ja-JP.d.ts +1 -1
  104. package/dist/api/compiler/locales/ja-JP.js +1 -1
  105. package/dist/api/compiler/locales/ko-KR.d.ts +1 -1
  106. package/dist/api/compiler/locales/ko-KR.js +1 -1
  107. package/dist/api/compiler/locales/pl-PL.d.ts +1 -1
  108. package/dist/api/compiler/locales/pl-PL.js +1 -1
  109. package/dist/api/compiler/locales/pt-BR.d.ts +1 -1
  110. package/dist/api/compiler/locales/pt-BR.js +1 -1
  111. package/dist/api/compiler/locales/ru-RU.d.ts +1 -1
  112. package/dist/api/compiler/locales/ru-RU.js +1 -1
  113. package/dist/api/compiler/locales/tr-TR.d.ts +1 -1
  114. package/dist/api/compiler/locales/tr-TR.js +1 -1
  115. package/dist/api/compiler/locales/zh-CN.d.ts +1 -1
  116. package/dist/api/compiler/locales/zh-CN.js +1 -1
  117. package/dist/api/compiler/locales/zh-TW.d.ts +1 -1
  118. package/dist/api/compiler/locales/zh-TW.js +1 -1
  119. package/dist/api/compiler/module-resolution-types.js +6 -6
  120. package/dist/api/compiler/module-resolution.d.ts +10 -1
  121. package/dist/api/compiler/module-resolution.js +115 -84
  122. package/dist/api/compiler/module-specifiers.d.ts +15 -0
  123. package/dist/api/compiler/module-specifiers.js +24 -18
  124. package/dist/api/compiler/name-resolver.js +74 -65
  125. package/dist/api/compiler/node-builder-names.d.ts +11 -3
  126. package/dist/api/compiler/node-builder-names.js +210 -90
  127. package/dist/api/compiler/node-builder-pseudo.js +29 -31
  128. package/dist/api/compiler/node-builder-reuse.js +23 -22
  129. package/dist/api/compiler/node-builder.d.ts +18 -1
  130. package/dist/api/compiler/node-builder.js +191 -102
  131. package/dist/api/compiler/option-declarations.d.ts +2 -6
  132. package/dist/api/compiler/option-declarations.js +315 -375
  133. package/dist/api/compiler/options.d.ts +15 -33
  134. package/dist/api/compiler/options.js +21 -54
  135. package/dist/api/compiler/output-paths.d.ts +4 -1
  136. package/dist/api/compiler/output-paths.js +6 -11
  137. package/dist/api/compiler/package-json.d.ts +3 -3
  138. package/dist/api/compiler/package-json.js +11 -10
  139. package/dist/api/compiler/parallel-parse.d.ts +3 -2
  140. package/dist/api/compiler/parallel-parse.js +17 -5
  141. package/dist/api/compiler/parser.d.ts +40 -19
  142. package/dist/api/compiler/parser.js +308 -216
  143. package/dist/api/compiler/path.d.ts +9 -0
  144. package/dist/api/compiler/path.js +20 -3
  145. package/dist/api/compiler/printer/emit-context.d.ts +5 -1
  146. package/dist/api/compiler/printer/emit-context.js +20 -1
  147. package/dist/api/compiler/printer/factory-base.d.ts +2 -2
  148. package/dist/api/compiler/printer/factory-base.js +7 -3
  149. package/dist/api/compiler/printer/factory.js +3 -1
  150. package/dist/api/compiler/printer/helpers.js +10 -1
  151. package/dist/api/compiler/printer/name-generator.d.ts +1 -1
  152. package/dist/api/compiler/printer/name-generator.js +35 -16
  153. package/dist/api/compiler/printer/printer.d.ts +49 -2
  154. package/dist/api/compiler/printer/printer.js +539 -293
  155. package/dist/api/compiler/printer/utilities.js +149 -147
  156. package/dist/api/compiler/program-checker.d.ts +12 -2
  157. package/dist/api/compiler/program-checker.js +88 -34
  158. package/dist/api/compiler/program-utilities.d.ts +3 -1
  159. package/dist/api/compiler/program-utilities.js +28 -15
  160. package/dist/api/compiler/program.d.ts +4 -6
  161. package/dist/api/compiler/program.js +74 -87
  162. package/dist/api/compiler/pseudo-bigint.d.ts +2 -0
  163. package/dist/api/compiler/pseudo-bigint.js +18 -0
  164. package/dist/api/compiler/regexp-checker.d.ts +1 -1
  165. package/dist/api/compiler/regexp-checker.js +93 -76
  166. package/dist/api/compiler/relations.d.ts +27 -4
  167. package/dist/api/compiler/relations.js +347 -180
  168. package/dist/api/compiler/reparser.js +60 -56
  169. package/dist/api/compiler/scanner.d.ts +19 -2
  170. package/dist/api/compiler/scanner.js +123 -108
  171. package/dist/api/compiler/shared-results.d.ts +463 -0
  172. package/dist/api/compiler/shared-results.js +2128 -0
  173. package/dist/api/compiler/sourcemap.js +2 -2
  174. package/dist/api/compiler/symbol-accessibility.js +87 -74
  175. package/dist/api/compiler/symbol.d.ts +23 -14
  176. package/dist/api/compiler/symbol.js +23 -11
  177. package/dist/api/compiler/syntax-kind.d.ts +198 -197
  178. package/dist/api/compiler/transformers/alias-references.js +247 -139
  179. package/dist/api/compiler/transformers/async-utilities.js +25 -25
  180. package/dist/api/compiler/transformers/async.d.ts +0 -1
  181. package/dist/api/compiler/transformers/async.js +64 -77
  182. package/dist/api/compiler/transformers/class-fields.d.ts +1 -0
  183. package/dist/api/compiler/transformers/class-fields.js +81 -78
  184. package/dist/api/compiler/transformers/commonjs-module.js +18 -15
  185. package/dist/api/compiler/transformers/const-enum-inliner.js +1 -1
  186. package/dist/api/compiler/transformers/declarations-diagnostics.js +247 -244
  187. package/dist/api/compiler/transformers/declarations-pseudo.js +100 -100
  188. package/dist/api/compiler/transformers/declarations-resolver.d.ts +0 -3
  189. package/dist/api/compiler/transformers/declarations-syntactic.d.ts +1 -2
  190. package/dist/api/compiler/transformers/declarations-syntactic.js +134 -156
  191. package/dist/api/compiler/transformers/declarations-tracker.js +18 -18
  192. package/dist/api/compiler/transformers/declarations.d.ts +4 -1
  193. package/dist/api/compiler/transformers/declarations.js +305 -238
  194. package/dist/api/compiler/transformers/decorator-metadata.d.ts +1 -1
  195. package/dist/api/compiler/transformers/decorator-metadata.js +53 -45
  196. package/dist/api/compiler/transformers/decorator-utilities.js +24 -24
  197. package/dist/api/compiler/transformers/destructuring.js +19 -18
  198. package/dist/api/compiler/transformers/emit-resolver.js +1 -1
  199. package/dist/api/compiler/transformers/es-decorators.js +55 -55
  200. package/dist/api/compiler/transformers/external-module-info.js +3 -3
  201. package/dist/api/compiler/transformers/for-await.js +25 -25
  202. package/dist/api/compiler/transformers/import-elision.js +14 -14
  203. package/dist/api/compiler/transformers/jsx.js +12 -12
  204. package/dist/api/compiler/transformers/legacy-decorators.js +17 -17
  205. package/dist/api/compiler/transformers/module.js +8 -8
  206. package/dist/api/compiler/transformers/named-evaluation.js +4 -4
  207. package/dist/api/compiler/transformers/object-rest-spread.js +20 -20
  208. package/dist/api/compiler/transformers/optional-chain.js +10 -10
  209. package/dist/api/compiler/transformers/reference-resolver.d.ts +12 -1
  210. package/dist/api/compiler/transformers/reference-resolver.js +131 -69
  211. package/dist/api/compiler/transformers/runtime-syntax.js +35 -31
  212. package/dist/api/compiler/transformers/subtree-facts.js +47 -47
  213. package/dist/api/compiler/transformers/syntax-facts.js +56 -58
  214. package/dist/api/compiler/transformers/type-eraser.js +73 -66
  215. package/dist/api/compiler/transformers/type-serialization.js +24 -24
  216. package/dist/api/compiler/transformers/using.js +12 -12
  217. package/dist/api/compiler/transformers/utilities.js +77 -77
  218. package/dist/api/compiler/transformers/visitor-base.js +172 -172
  219. package/dist/api/compiler/transformers/visitor-hooks.js +6 -2
  220. package/dist/api/compiler/tsconfig.d.ts +10 -2
  221. package/dist/api/compiler/tsconfig.js +136 -48
  222. package/dist/api/compiler/type-printer.js +40 -3
  223. package/dist/api/compiler/types.d.ts +2 -1
  224. package/dist/api/library/ast.generated.d.ts +42 -39
  225. package/dist/api/library/ast.generated.js +1 -1
  226. package/dist/api/library/compiler-options.generated.d.ts +111 -100
  227. package/dist/api/library/compiler-options.generated.js +1 -1
  228. package/dist/api/library/disk.js +12 -1
  229. package/dist/api/library/enums.generated.d.ts +206 -206
  230. package/dist/api/library/enums.generated.js +206 -206
  231. package/dist/api/library/nodes.js +26 -26
  232. package/package.json +9 -9
  233. package/src/compiler/ast-utilities.ts +99 -7
  234. package/src/compiler/ast.ts +58 -26
  235. package/src/compiler/binder.ts +39 -4
  236. package/src/compiler/character-codes.ts +2 -2
  237. package/src/compiler/checker-calls.ts +79 -9
  238. package/src/compiler/checker-classes.ts +78 -24
  239. package/src/compiler/checker-contextual.ts +6 -1
  240. package/src/compiler/checker-declarations.ts +31 -4
  241. package/src/compiler/checker-declared-types.ts +8 -5
  242. package/src/compiler/checker-decorators.ts +1 -1
  243. package/src/compiler/checker-deprecation.ts +29 -8
  244. package/src/compiler/checker-destructuring.ts +10 -3
  245. package/src/compiler/checker-emit-helpers.ts +1 -0
  246. package/src/compiler/checker-emit-resolver.ts +16 -6
  247. package/src/compiler/checker-expressions.ts +79 -46
  248. package/src/compiler/checker-functions.ts +21 -6
  249. package/src/compiler/checker-generated-code.ts +2 -22
  250. package/src/compiler/checker-grammar.ts +136 -62
  251. package/src/compiler/checker-heritage.ts +22 -21
  252. package/src/compiler/checker-inference.ts +514 -82
  253. package/src/compiler/checker-iteration.ts +18 -31
  254. package/src/compiler/checker-javascript.ts +1 -1
  255. package/src/compiler/checker-jsdoc.ts +50 -27
  256. package/src/compiler/checker-jsx.ts +26 -4
  257. package/src/compiler/checker-members.ts +200 -56
  258. package/src/compiler/checker-modules.ts +332 -65
  259. package/src/compiler/checker-narrowing.ts +98 -19
  260. package/src/compiler/checker-object-literals.ts +3 -0
  261. package/src/compiler/checker-operators.ts +11 -4
  262. package/src/compiler/checker-property-access.ts +7 -2
  263. package/src/compiler/checker-services.ts +39 -12
  264. package/src/compiler/checker-signatures.ts +15 -1
  265. package/src/compiler/checker-source-file.ts +39 -13
  266. package/src/compiler/checker-statements.ts +3 -2
  267. package/src/compiler/checker-symbol-types.ts +29 -6
  268. package/src/compiler/checker-symbols.ts +158 -15
  269. package/src/compiler/checker-type-factory.ts +124 -23
  270. package/src/compiler/checker-type-nodes.ts +46 -3
  271. package/src/compiler/checker-type-operators.ts +83 -26
  272. package/src/compiler/checker-types.ts +147 -4
  273. package/src/compiler/checker-unused.ts +9 -14
  274. package/src/compiler/checker.ts +203 -39
  275. package/src/compiler/command-line.ts +28 -28
  276. package/src/compiler/compile-program.ts +167 -27
  277. package/src/compiler/decoder.ts +13 -4
  278. package/src/compiler/diagnostic-messages.ts +1973 -1892
  279. package/src/compiler/diagnostics.ts +84 -3
  280. package/src/compiler/emitter.ts +57 -8
  281. package/src/compiler/encoder.ts +23 -8
  282. package/src/compiler/file-include.ts +9 -3
  283. package/src/compiler/file-loader.ts +197 -38
  284. package/src/compiler/help.ts +10 -14
  285. package/src/compiler/incremental.ts +165 -30
  286. package/src/compiler/init.ts +2 -7
  287. package/src/compiler/instantiation.ts +77 -22
  288. package/src/compiler/jsdoc.ts +3 -1
  289. package/src/compiler/link-tables.ts +82 -37
  290. package/src/compiler/locales/cs-CZ.ts +1 -1
  291. package/src/compiler/locales/de-DE.ts +1 -1
  292. package/src/compiler/locales/es-ES.ts +1 -1
  293. package/src/compiler/locales/fr-FR.ts +1 -1
  294. package/src/compiler/locales/it-IT.ts +1 -1
  295. package/src/compiler/locales/ja-JP.ts +1 -1
  296. package/src/compiler/locales/ko-KR.ts +1 -1
  297. package/src/compiler/locales/pl-PL.ts +1 -1
  298. package/src/compiler/locales/pt-BR.ts +1 -1
  299. package/src/compiler/locales/ru-RU.ts +1 -1
  300. package/src/compiler/locales/tr-TR.ts +1 -1
  301. package/src/compiler/locales/zh-CN.ts +1 -1
  302. package/src/compiler/locales/zh-TW.ts +1 -1
  303. package/src/compiler/module-resolution.ts +44 -8
  304. package/src/compiler/module-specifiers.ts +62 -20
  305. package/src/compiler/name-resolver.ts +9 -1
  306. package/src/compiler/node-builder-names.ts +236 -54
  307. package/src/compiler/node-builder-pseudo.ts +4 -7
  308. package/src/compiler/node-builder-reuse.ts +5 -4
  309. package/src/compiler/node-builder.ts +130 -31
  310. package/src/compiler/option-declarations.ts +33 -103
  311. package/src/compiler/options.ts +23 -62
  312. package/src/compiler/output-paths.ts +5 -18
  313. package/src/compiler/package-entrypoints.ts +345 -0
  314. package/src/compiler/package-json.ts +4 -4
  315. package/src/compiler/parallel-check.ts +326 -52
  316. package/src/compiler/parallel-emit.ts +320 -0
  317. package/src/compiler/parallel-parse.ts +16 -5
  318. package/src/compiler/parse-thread.ts +3 -0
  319. package/src/compiler/parser.ts +156 -39
  320. package/src/compiler/path.ts +22 -2
  321. package/src/compiler/printer/emit-context.ts +21 -0
  322. package/src/compiler/printer/factory-base.ts +10 -3
  323. package/src/compiler/printer/factory.ts +4 -1
  324. package/src/compiler/printer/helpers.ts +10 -1
  325. package/src/compiler/printer/name-generator.ts +24 -2
  326. package/src/compiler/printer/printer.ts +266 -30
  327. package/src/compiler/printer/utilities.ts +8 -2
  328. package/src/compiler/program-checker.ts +57 -5
  329. package/src/compiler/program-utilities.ts +23 -10
  330. package/src/compiler/program.ts +18 -26
  331. package/src/compiler/pseudo-bigint.ts +17 -0
  332. package/src/compiler/regexp-checker.ts +63 -30
  333. package/src/compiler/relations.ts +240 -77
  334. package/src/compiler/reparser.ts +7 -2
  335. package/src/compiler/scanner.ts +109 -79
  336. package/src/compiler/shared-results.ts +2414 -0
  337. package/src/compiler/show-config.ts +18 -1
  338. package/src/compiler/sourcemap.ts +2 -2
  339. package/src/compiler/symbol-accessibility.ts +26 -3
  340. package/src/compiler/symbol.ts +46 -24
  341. package/src/compiler/syntax-kind.ts +188 -187
  342. package/src/compiler/thread-entry.ts +64 -4
  343. package/src/compiler/transformers/alias-references.ts +123 -4
  344. package/src/compiler/transformers/async.ts +2 -17
  345. package/src/compiler/transformers/class-fields.ts +13 -12
  346. package/src/compiler/transformers/commonjs-module.ts +11 -7
  347. package/src/compiler/transformers/declarations-diagnostics.ts +5 -3
  348. package/src/compiler/transformers/declarations-pseudo.ts +2 -4
  349. package/src/compiler/transformers/declarations-resolver.ts +0 -3
  350. package/src/compiler/transformers/declarations-syntactic.ts +1 -21
  351. package/src/compiler/transformers/declarations.ts +134 -48
  352. package/src/compiler/transformers/decorator-metadata.ts +9 -1
  353. package/src/compiler/transformers/destructuring.ts +4 -3
  354. package/src/compiler/transformers/external-module-info.ts +1 -1
  355. package/src/compiler/transformers/jsx.ts +2 -1
  356. package/src/compiler/transformers/reference-resolver.ts +83 -19
  357. package/src/compiler/transformers/runtime-syntax.ts +6 -1
  358. package/src/compiler/transformers/syntax-facts.ts +2 -7
  359. package/src/compiler/transformers/type-eraser.ts +10 -1
  360. package/src/compiler/transformers/type-serialization.ts +3 -2
  361. package/src/compiler/transformers/visitor-base.ts +2 -1
  362. package/src/compiler/transformers/visitor-hooks.ts +9 -4
  363. package/src/compiler/tsc-build.ts +66 -9
  364. package/src/compiler/tsc-cli.ts +7 -0
  365. package/src/compiler/tsc-compile.ts +284 -4
  366. package/src/compiler/tsc-watch.ts +74 -45
  367. package/src/compiler/tsconfig.ts +176 -19
  368. package/src/compiler/type-printer.ts +36 -2
  369. package/src/compiler/types.ts +2 -1
  370. package/src/library/ast.generated.ts +57 -41
  371. package/src/library/compiler-options.generated.ts +117 -103
  372. package/src/library/disk.ts +10 -1
  373. package/src/library/enums.generated.ts +196 -196
@@ -84,7 +84,7 @@ import { isArrayType, isErrorType, isFreshLiteralType, isTupleType } from './che
84
84
  import { isTypeAssignableToKind } from './checker-type-operators.js';
85
85
  import { type IndexInfo, type LiteralType, SignatureKind, type Type, TypeFlags } from './checker-types.js';
86
86
  import { hasLateBindableName } from './checker-utilities.js';
87
- import { NodeBuilder, isEntityNameVisible, isOptionalParameter } from './node-builder.js';
87
+ import { NodeBuilder, NodeBuilderCaches, isEntityNameVisible, isOptionalParameter } from './node-builder.js';
88
88
  import {
89
89
  getRegularTypeOfExpression,
90
90
  newPseudoChecker,
@@ -92,7 +92,7 @@ import {
92
92
  } from './node-builder-pseudo.js';
93
93
  import { symbolToExpression } from './node-builder-names.js';
94
94
  import { tryReuseExistingNode } from './node-builder-reuse.js';
95
- import type { CompilerOptions, ModuleKind } from './options.js';
95
+ import type { CompilerOptions } from './options.js';
96
96
  import type { EmitContext } from './printer/emit-context.js';
97
97
  import { isTypeIdenticalTo } from './relations.js';
98
98
  import {
@@ -115,6 +115,7 @@ import { SyntacticEmitResolver } from './transformers/emit-resolver.js';
115
115
  import type { Evaluation, ReferenceResolver } from './transformers/reference-resolver.js';
116
116
  import { TypeReferenceSerializationKind } from './transformers/type-serialization.js';
117
117
  import { TokenFlags } from './types.js';
118
+ import { getSignatureOfFullSignatureType } from './checker-jsdoc.js';
118
119
  import { CheckFlags, declarationCount, getDeclarations, type Symbol, SymbolFlags } from './symbol.js';
119
120
 
120
121
  const declarationEmitInternalFlags = NodeBuilderInternalFlags.AllowUnresolvedNames;
@@ -125,12 +126,17 @@ export class CheckerDeclarationEmitResolver extends DeclarationEmitResolver {
125
126
  /** Answers the queries that don't need types. */
126
127
  private readonly syntactic: SyntacticDeclarationEmitResolver;
127
128
  private readonly aliasesMarked: Set<SourceFile>;
129
+ /** The emit context of the last node builder, and the caches the builders for it share. */
130
+ private builderContext: EmitContext | undefined;
131
+ private builderCaches: NodeBuilderCaches | undefined;
128
132
 
129
133
  constructor(checker: Checker, syntactic: SyntacticDeclarationEmitResolver) {
130
134
  super();
131
135
  this.checker = checker;
132
136
  this.syntactic = syntactic;
133
137
  this.aliasesMarked = new Set<SourceFile>();
138
+ this.builderContext = undefined;
139
+ this.builderCaches = undefined;
134
140
  }
135
141
 
136
142
  // JavaScript emit
@@ -284,6 +290,8 @@ export class CheckerDeclarationEmitResolver extends DeclarationEmitResolver {
284
290
  const signatures = getSignaturesOfSymbol(c, getSymbolOfDeclaration(c, node));
285
291
  if (signatures.length > 1) return true;
286
292
  if (signatures.length === 1) {
293
+ // A JSDoc `@type` signature of the function itself is not an overload.
294
+ if (signatures[0] === getSignatureOfFullSignatureType(c, node)) return false;
287
295
  const declaration = signatures[0].declaration;
288
296
  if (declaration !== node && declaration !== undefined && (declaration.flags & NodeFlags.JSDoc) === 0) return true;
289
297
  }
@@ -359,10 +367,6 @@ export class CheckerDeclarationEmitResolver extends DeclarationEmitResolver {
359
367
  return getPropertiesOfType(c, getTypeOfSymbol(c, symbol));
360
368
  }
361
369
 
362
- getResolutionModeOverride(node: Node): ModuleKind | undefined {
363
- return this.syntactic.getResolutionModeOverride(node);
364
- }
365
-
366
370
  getSourceFileFromReference(file: SourceFile, reference: FileReference): SourceFile | undefined {
367
371
  return this.syntactic.getSourceFileFromReference(file, reference);
368
372
  }
@@ -419,6 +423,12 @@ export class CheckerDeclarationEmitResolver extends DeclarationEmitResolver {
419
423
  );
420
424
  b.pseudo = newPseudoChecker(this.checker);
421
425
  b.declarationOrder = true;
426
+ // tsgo's emit resolver, one per emit context, keeps one node builder for all its requests.
427
+ if (context !== this.builderContext || this.builderCaches === undefined) {
428
+ this.builderContext = context;
429
+ this.builderCaches = new NodeBuilderCaches();
430
+ }
431
+ b.useCaches(this.builderCaches);
422
432
  return b;
423
433
  }
424
434
 
@@ -61,7 +61,7 @@ import { skipTrivia } from './scanner.js';
61
61
  import { Diagnostic, Diagnostics } from './diagnostics.js';
62
62
  import { type Symbol, SymbolFlags } from './symbol.js';
63
63
  import { SyntaxKind } from './syntax-kind.js';
64
- import { type Checker } from './checker.js';
64
+ import { type Checker, createDiagnosticForNode } from './checker.js';
65
65
  import {
66
66
  checkSuperExpression,
67
67
  checkThisBeforeSuper,
@@ -129,7 +129,7 @@ import {
129
129
  resolveEntityName,
130
130
  resolveName,
131
131
  getFirstIdentifier,
132
- getCannotFindNameDiagnosticForName,
132
+ cannotFindNameAtLocation,
133
133
  getDeclarationOfAliasSymbol,
134
134
  TypeSystemPropertyName,
135
135
  popTypeResolution,
@@ -153,9 +153,6 @@ import {
153
153
  isGenericIndexType,
154
154
  isGenericMappedType,
155
155
  isGenericType,
156
- getMappedTypeNameTypeKind,
157
- MappedTypeNameTypeKind,
158
- getIndexForMappedType,
159
156
  getIndexTypeEx,
160
157
  getMappedTypeModifiers,
161
158
  MappedTypeModifiers,
@@ -211,8 +208,10 @@ import {
211
208
  checkDeleteExpression,
212
209
  checkPostfixUnaryExpression,
213
210
  checkPrefixUnaryExpression,
211
+ grammarErrorOnNode,
214
212
  isTypeAssertion,
215
213
  } from './checker-operators.js';
214
+ import { fileExtensionIsOneOf } from './path.js';
216
215
  import { checkJsx } from './checker-jsx.js';
217
216
  import { getRegularTypeOfObjectLiteral } from './checker-literals.js';
218
217
  import {
@@ -448,8 +447,10 @@ function getReturnTypeOfSingleNonGenericSignature(c: Checker, funcType: Type, ki
448
447
  }
449
448
 
450
449
  export function checkComputedPropertyName(c: Checker, node: Node): Type {
451
- const nodeId = (node as ComputedPropertyName).expression.id;
450
+ const nodeId = node.id;
452
451
  if (c.resolvedTypes.get(nodeId) === undefined) {
452
+ // A reference to the name while its expression is checked sees a circular type.
453
+ c.resolvedTypes.set(nodeId, c.circularConstraintType);
453
454
  const expression = (node as ComputedPropertyName).expression;
454
455
  const container = node.parent!.parent!;
455
456
  // `[x in y]` in a type member is a mapped type written in the wrong place, reported by the parser.
@@ -552,14 +553,14 @@ export function getResolvedSymbol(c: Checker, node: Node): Symbol {
552
553
  const cached = c.resolvedSymbols.get(node.id);
553
554
  if (cached !== undefined) return cached;
554
555
  let symbol = c.unknownSymbol;
555
- if (getText(node) !== '') {
556
- const text = getText(node);
556
+ const text = getText(node);
557
+ if (text !== '') {
557
558
  const found = resolveName(
558
559
  c,
559
560
  node,
560
561
  text,
561
562
  SymbolFlags.Value | SymbolFlags.ExportValue,
562
- getCannotFindNameDiagnosticForName(c, node),
563
+ cannotFindNameAtLocation,
563
564
  !isWriteOnlyAccess(node),
564
565
  false,
565
566
  );
@@ -970,8 +971,21 @@ export function checkThisExpression(c: Checker, node: Node): Type {
970
971
  const globalThisType = getTypeOfSymbol(c, c.globalThisSymbol);
971
972
  if (t === globalThisType && capturedByArrowFunction)
972
973
  c.error(node, Diagnostics.The_containing_arrow_function_captures_the_global_value_of_this);
973
- else if (t === undefined)
974
- c.error(node, Diagnostics.X_this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation);
974
+ else if (t === undefined) {
975
+ // The related information goes on the reported diagnostic after it is added, as tsgo attaches it,
976
+ // so a later equal report compares unequal to it and is kept.
977
+ const diagnostic = c.error(
978
+ node,
979
+ Diagnostics.X_this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation,
980
+ );
981
+ if (container.kind !== SyntaxKind.SourceFile) {
982
+ const outsideThis = tryGetThisTypeAt(c, container, getThisContainer(container, false, false));
983
+ if (outsideThis !== undefined && outsideThis !== globalThisType)
984
+ diagnostic.addRelatedInfo(
985
+ createDiagnosticForNode(container, Diagnostics.An_outer_value_of_this_is_shadowed_by_this_container, []),
986
+ );
987
+ }
988
+ }
975
989
  }
976
990
  return t ?? c.anyType;
977
991
  }
@@ -1210,7 +1224,8 @@ export function isTupleLikeType(c: Checker, t: Type): boolean {
1210
1224
  export function isMutableArrayLikeType(c: Checker, t: Type): boolean {
1211
1225
  return (
1212
1226
  isMutableArrayOrTuple(c, t) ||
1213
- ((t.flags & (TypeFlags.Any | TypeFlags.Nullable)) === 0 && isTypeAssignableTo(c, t, c.anyArrayType))
1227
+ ((t.flags & (TypeFlags.Any | TypeFlags.Nullable | TypeFlags.Never)) === 0 &&
1228
+ isTypeAssignableTo(c, t, c.anyArrayType))
1214
1229
  );
1215
1230
  }
1216
1231
 
@@ -1248,10 +1263,31 @@ export function getPropertyNameOfObjectLiteralElement(c: Checker, element: Node)
1248
1263
  return undefined;
1249
1264
  }
1250
1265
 
1266
+ /** Whether `node` is the object literal of the `with` property of an `import()` call's options argument. */
1267
+ function isInlineImportAttributes(node: Node): boolean {
1268
+ const property = node.parent!;
1269
+ if (
1270
+ node.kind !== SyntaxKind.ObjectLiteralExpression ||
1271
+ property.kind !== SyntaxKind.PropertyAssignment ||
1272
+ getInitializer(property) !== node
1273
+ )
1274
+ return false;
1275
+ const name = getName(property)!;
1276
+ if ((name.kind !== SyntaxKind.Identifier && !isStringLiteralLike(name)) || getText(name) !== 'with') return false;
1277
+ const options = property.parent!;
1278
+ if (options.kind !== SyntaxKind.ObjectLiteralExpression) return false;
1279
+ let importCall: Node | undefined = options;
1280
+ while (importCall !== undefined && !isImportCall(importCall)) importCall = importCall.parent;
1281
+ if (importCall === undefined) return false;
1282
+ const args = (importCall as CallExpression).arguments.nodes;
1283
+ return args.length > 1 && skipParentheses(args[1]!) === options;
1284
+ }
1285
+
1251
1286
  /** Whether `node` is in an `as const` context, where literals keep their types. */
1252
1287
  export function isConstContext(c: Checker, node: Node): boolean {
1253
1288
  const parent = node.parent;
1254
1289
  if (parent === undefined) return false;
1290
+ if (isInlineImportAttributes(node)) return true;
1255
1291
  // Literals contextually typed by a `const` type parameter are in a const context.
1256
1292
  if (isValidConstAssertionArgument(c, node) && isConstTypeVariable(c, getContextualType(c, node), 0)) return true;
1257
1293
  switch (parent.kind) {
@@ -1468,7 +1504,7 @@ export function entityNameToString(node: Node): string {
1468
1504
  }
1469
1505
  case SyntaxKind.QualifiedName: {
1470
1506
  const q = node as QualifiedName;
1471
- return entityNameToString(q.left) + '.' + q.right.text;
1507
+ return entityNameToString(q.left) + '.' + getText(q.right);
1472
1508
  }
1473
1509
  }
1474
1510
  return getText(node);
@@ -1535,32 +1571,25 @@ export function getFlowTypeOfAccessExpression(
1535
1571
  return propType;
1536
1572
  if (propType === c.autoType) return getFlowTypeOfAutoTypedProperty(c, node, prop);
1537
1573
  propType = getNarrowableTypeForReference(c, propType, node, checkMode);
1538
- // `this.x` in the constructor of x's class starts out uninitialized under strictPropertyInitialization.
1574
+ // `this.x` in the constructor of x's class starts out uninitialized under strictPropertyInitialization,
1575
+ // and a JavaScript `this.x = …` declaration is unassigned before it in its own function.
1539
1576
  let assumeUninitialized = false;
1540
- const expression = getExpression(node);
1541
- if (
1542
- c.strictNullChecks &&
1543
- c.strictPropertyInitialization &&
1544
- expression !== undefined &&
1545
- expression.kind === SyntaxKind.ThisKeyword &&
1546
- prop !== undefined
1547
- ) {
1577
+ if (c.strictNullChecks && prop !== undefined) {
1548
1578
  const declaration = prop.valueDeclaration;
1549
- if (declaration !== undefined && isPropertyWithoutInitializer(declaration) && !isStatic(declaration)) {
1550
- const flowContainer = getControlFlowContainer(node);
1579
+ const expression = getExpression(node);
1580
+ if (c.strictPropertyInitialization && expression !== undefined && expression.kind === SyntaxKind.ThisKeyword) {
1581
+ if (declaration !== undefined && isPropertyWithoutInitializer(declaration) && !isStatic(declaration)) {
1582
+ const flowContainer = getControlFlowContainer(node);
1583
+ assumeUninitialized =
1584
+ flowContainer.kind === SyntaxKind.Constructor &&
1585
+ flowContainer.parent === declaration.parent &&
1586
+ (declaration.flags & NodeFlags.Ambient) === 0;
1587
+ }
1588
+ } else
1551
1589
  assumeUninitialized =
1552
- flowContainer.kind === SyntaxKind.Constructor &&
1553
- flowContainer.parent === declaration.parent &&
1554
- (declaration.flags & NodeFlags.Ambient) === 0;
1555
- }
1556
- }
1557
- // A JavaScript `this.x = …` declaration is unassigned before it in its own function.
1558
- if (c.strictNullChecks && prop !== undefined && !assumeUninitialized) {
1559
- const declaration = prop.valueDeclaration;
1560
- assumeUninitialized =
1561
- declaration instanceof BinaryExpression &&
1562
- declaration.left.kind === SyntaxKind.PropertyAccessExpression &&
1563
- getControlFlowContainer(node) === getControlFlowContainer(declaration);
1590
+ declaration instanceof BinaryExpression &&
1591
+ declaration.left.kind === SyntaxKind.PropertyAccessExpression &&
1592
+ getControlFlowContainer(node) === getControlFlowContainer(declaration);
1564
1593
  }
1565
1594
  const initialType = assumeUninitialized ? getOptionalType(c, propType, false) : propType;
1566
1595
  const flowType = getFlowTypeOfReference(c, node, propType, initialType, undefined);
@@ -1620,18 +1649,13 @@ export function checkIndexedAccessIndexType(c: Checker, t: Type, accessNode: Nod
1620
1649
  if ((t.flags & TypeFlags.IndexedAccess) === 0) return t;
1621
1650
  const objectType = (t as IndexedAccessType).objectType;
1622
1651
  const indexType = (t as IndexedAccessType).indexType;
1623
- // Remapping mapped types don't defer their index types.
1624
- const objectIndexType =
1625
- isGenericMappedType(c, objectType) &&
1626
- getMappedTypeNameTypeKind(c, objectType as MappedType) === MappedTypeNameTypeKind.Remapping
1627
- ? getIndexForMappedType(c, objectType as MappedType, IndexFlags.None)
1628
- : getIndexTypeEx(c, objectType, IndexFlags.None);
1629
1652
  const hasNumberIndexInfo = getIndexInfoOfType(c, objectType, c.numberType) !== undefined;
1630
1653
  if (
1631
1654
  everyType(
1632
1655
  indexType,
1633
1656
  (u) =>
1634
- isTypeAssignableTo(c, u, objectIndexType) || (hasNumberIndexInfo && isApplicableIndexType(c, u, c.numberType)),
1657
+ isTypeAssignableTo(c, u, getIndexTypeEx(c, objectType, IndexFlags.None)) ||
1658
+ (hasNumberIndexInfo && isApplicableIndexType(c, u, c.numberType)),
1635
1659
  )
1636
1660
  ) {
1637
1661
  if (
@@ -1737,6 +1761,15 @@ function hasNumericPropertyNames(c: Checker, t: Type): boolean {
1737
1761
  // ---- Assertions
1738
1762
 
1739
1763
  function checkAssertion(c: Checker, node: Node, checkMode: CheckMode): Type {
1764
+ if (node.kind === SyntaxKind.TypeAssertionExpression) {
1765
+ const file = getSourceFileOfNode(node);
1766
+ if (fileExtensionIsOneOf(file.fileName, ['.mts', '.cts']))
1767
+ grammarErrorOnNode(
1768
+ c,
1769
+ node,
1770
+ Diagnostics.This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead,
1771
+ );
1772
+ }
1740
1773
  // `<T>expr`, over `<T>`.
1741
1774
  if (node.kind === SyntaxKind.TypeAssertionExpression && shouldCheckErasableSyntax(c, node)) {
1742
1775
  const file = getSourceFileOfNode(node);
@@ -1750,8 +1783,10 @@ function checkAssertion(c: Checker, node: Node, checkMode: CheckMode): Type {
1750
1783
  ),
1751
1784
  );
1752
1785
  }
1786
+ const exprType = checkExpressionEx(c, getExpression(node)!, checkMode);
1787
+ // The type node is checked in every case, including the `const` of `x as const`.
1788
+ checkTypeNodeIfPresent(c, getType(node));
1753
1789
  if (isConstTypeReference(getType(node)!)) {
1754
- const exprType = checkExpressionEx(c, getExpression(node)!, checkMode);
1755
1790
  if (!isValidConstAssertionArgument(c, getExpression(node)!))
1756
1791
  c.error(
1757
1792
  getExpression(node)!,
@@ -1759,10 +1794,8 @@ function checkAssertion(c: Checker, node: Node, checkMode: CheckMode): Type {
1759
1794
  );
1760
1795
  return getRegularTypeOfLiteralType(c, exprType);
1761
1796
  }
1762
- const exprType = checkExpressionEx(c, getExpression(node)!, checkMode);
1763
1797
  // The operand is compared with the asserted type once, after the last check of the operand.
1764
1798
  c.nodeLinks(node).assertionExpressionType = exprType;
1765
- checkTypeNodeIfPresent(c, getType(node));
1766
1799
  checkNodeDeferred(c, node);
1767
1800
  return getTypeFromTypeNode(c, getType(node)!);
1768
1801
  }
@@ -54,6 +54,7 @@ import {
54
54
  reportErrorsFromWidening,
55
55
  reportImplicitAny,
56
56
  WideningKind,
57
+ getWidenedTypeForVariableLikeDeclaration,
57
58
  } from './checker-symbol-types.js';
58
59
  import { getMergedSymbol, getSymbolOfDeclaration } from './checker-symbols.js';
59
60
  import {
@@ -105,7 +106,12 @@ import {
105
106
  getInferenceContext,
106
107
  instantiateContextualType,
107
108
  } from './checker-contextual.js';
108
- import { checkJSDocFullSignature, checkUnmatchedJSDocParameters, getFullSignatureTypeNode } from './checker-jsdoc.js';
109
+ import {
110
+ checkJSDocFullSignature,
111
+ checkJSDocFullSignatureType,
112
+ checkUnmatchedJSDocParameters,
113
+ getFullSignatureTypeNode,
114
+ } from './checker-jsdoc.js';
109
115
  import { getEffectiveCheckNode, isFunctionLike, nodeIsMissing } from './ast-utilities.js';
110
116
  import {
111
117
  getFlowTypeOfReferenceAt,
@@ -144,6 +150,7 @@ import {
144
150
 
145
151
  export function checkFunctionExpressionOrObjectLiteralMethod(c: Checker, node: Node, checkMode: CheckMode): Type {
146
152
  checkNodeDeferred(c, node);
153
+ checkJSDocFullSignatureType(c, node);
147
154
  if (node.kind === SyntaxKind.FunctionExpression) checkCollisionsForDeclarationName(c, node, getName(node));
148
155
  if (node.kind === SyntaxKind.GetAccessor || node.kind === SyntaxKind.SetAccessor) return c.anyType;
149
156
  if ((checkMode & CheckMode.SkipContextSensitive) !== 0 && isContextSensitive(c, node)) {
@@ -238,7 +245,8 @@ function contextuallyCheckFunctionExpressionOrObjectLiteralMethod(c: Checker, no
238
245
  getType(node) === undefined &&
239
246
  resolvedReturnTypeOf(c, signature) === undefined
240
247
  ) {
241
- const returnType = getReturnTypeFromBodyEx(c, node, checkMode);
248
+ // The resolved return type is cached, so it is computed without SkipContextSensitive to keep anyFunctionType out of it.
249
+ const returnType = getReturnTypeFromBodyEx(c, node, checkMode & ~CheckMode.SkipContextSensitive);
242
250
  if (resolvedReturnTypeOf(c, signature) === undefined) signatureSideOf(c, signature).resolvedReturnType = returnType;
243
251
  }
244
252
  checkFunctionLikeSignature(c, node);
@@ -328,7 +336,12 @@ function assignParameterSymbolType(c: Checker, parameter: Symbol, contextualType
328
336
  if (c.symbolTypes.get(id) !== undefined) return;
329
337
  const declaration = parameter.valueDeclaration;
330
338
  if (contextualType === undefined) {
331
- c.symbolTypes.set(id, getTypeOfSymbol(c, parameter));
339
+ c.symbolTypes.set(
340
+ id,
341
+ declaration !== undefined
342
+ ? getWidenedTypeForVariableLikeDeclaration(c, declaration, true)
343
+ : getTypeOfSymbol(c, parameter),
344
+ );
332
345
  return;
333
346
  }
334
347
  c.symbolTypes.set(
@@ -574,6 +587,9 @@ export function checkAwaitExpression(c: Checker, node: Node): Type {
574
587
  export function checkYieldExpression(c: Checker, node: Node): Type {
575
588
  checkGrammarYieldOfExpression(c, node);
576
589
  const yieldExpr = node as YieldExpression;
590
+ // The operand is checked also outside a generator.
591
+ const operand = yieldExpr.expression;
592
+ const yieldExpressionType = operand !== undefined ? checkExpression(c, operand) : c.undefinedWideningType;
577
593
  const func = getContainingFunctionLike(node);
578
594
  if (func === undefined) return c.anyType;
579
595
  const functionFlags = getFunctionFlags(func);
@@ -593,8 +609,6 @@ export function checkYieldExpression(c: Checker, node: Node): Type {
593
609
  returnType !== undefined ? getIterationTypesOfGeneratorFunctionReturnType(c, returnType, isAsync) : undefined;
594
610
  const signatureYieldType = iterationTypes?.yieldType ?? c.anyType;
595
611
  const signatureNextType = iterationTypes?.nextType ?? c.anyType;
596
- const operand = yieldExpr.expression;
597
- const yieldExpressionType = operand !== undefined ? checkExpression(c, operand) : c.undefinedWideningType;
598
612
  const yieldedType = getYieldedTypeOfYieldExpression(c, yieldExpr, yieldExpressionType, signatureNextType, isAsync);
599
613
  if (returnType !== undefined && yieldedType !== undefined)
600
614
  checkTypeAssignableToAndOptionallyElaborate(c, yieldedType, signatureYieldType, operand ?? node, operand);
@@ -1266,7 +1280,8 @@ function assignParameterType(c: Checker, declaration: Node): void {
1266
1280
  if (symbol === undefined) return;
1267
1281
  const id = getSymbolId(symbol);
1268
1282
  if (c.symbolTypes.get(id) !== undefined) return;
1269
- const t = getTypeOfSymbol(c, symbol);
1283
+ // Without a context, the parameter's own type, reporting its implicit any errors.
1284
+ const t = getWidenedTypeForVariableLikeDeclaration(c, declaration, true);
1270
1285
  c.symbolTypes.set(
1271
1286
  id,
1272
1287
  addOptionality(c, t, false, getInitializer(declaration) === undefined && isOptionalDeclaration(declaration)),
@@ -20,15 +20,6 @@ import { ModuleKind, ScriptTarget, getEmitModuleKind, getUseDefineForClassFields
20
20
  import { moduleKindName } from './program-utilities.js';
21
21
  import { SyntaxKind } from './syntax-kind.js';
22
22
 
23
- /** A collision check that waits until the file is checked, when the flags it reads are complete. */
24
- export class DeferredCollisionCheck {
25
- constructor(
26
- readonly node: Node,
27
- /** `Reflect` rather than `WeakMap` and `WeakSet`. */
28
- readonly reflect: boolean,
29
- ) {}
30
- }
31
-
32
23
  /** An error that is not reported under noEmit, since it is about the emitted code. */
33
24
  export function errorSkippedOnNoEmit(
34
25
  c: Checker,
@@ -51,9 +42,9 @@ export function checkCollisionsForDeclarationName(c: Checker, node: Node, name:
51
42
  c.languageVersion <= ScriptTarget.ES2021 &&
52
43
  (needCollisionCheckForIdentifier(node, name, 'WeakMap') || needCollisionCheckForIdentifier(node, name, 'WeakSet'))
53
44
  )
54
- c.deferredCollisionChecks.push(new DeferredCollisionCheck(node, false));
45
+ c.deferDiagnostic(node, () => checkWeakMapSetCollision(c, node));
55
46
  if (c.languageVersion <= ScriptTarget.ES2021 && needCollisionCheckForIdentifier(node, name, 'Reflect'))
56
- c.deferredCollisionChecks.push(new DeferredCollisionCheck(node, true));
47
+ c.deferDiagnostic(node, () => checkReflectCollision(c, node));
57
48
  if (isClassLike(node) && (node.flags & NodeFlags.Ambient) === 0 && getText(name) === 'Object') {
58
49
  if (c.host.getEmitModuleFormatOfFile(getSourceFileOfNode(name)) < ModuleKind.ES2015)
59
50
  c.error(
@@ -174,17 +165,6 @@ export function markSuperPropertyInStaticInitializer(c: Checker, node: Node): vo
174
165
  c.nodeLinks(scope).flags |= NodeCheckFlags.ContainsSuperPropertyInStaticInitializer;
175
166
  }
176
167
 
177
- /** Reports the `WeakMap`, `WeakSet` and `Reflect` collisions found while checking the file. */
178
- export function produceDeferredCollisionChecks(c: Checker): void {
179
- const checks = c.deferredCollisionChecks;
180
- if (checks.length === 0) return;
181
- c.deferredCollisionChecks = [];
182
- for (const check of checks) {
183
- if (check.reflect) checkReflectCollision(c, check.node);
184
- else checkWeakMapSetCollision(c, check.node);
185
- }
186
- }
187
-
188
168
  function checkWeakMapSetCollision(c: Checker, node: Node): void {
189
169
  const scope = getEnclosingBlockScopeContainer(node);
190
170
  if (scope === undefined || (c.nodeLinks(scope).flags & NodeCheckFlags.ContainsClassWithPrivateIdentifiers) === 0)