@zzzen/pyright-internal 1.2.0-dev.20260816 → 1.2.0-dev.20260830

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 (398) hide show
  1. package/dist/analyzer/analyzerNodeInfo.d.ts +123 -24
  2. package/dist/analyzer/analyzerNodeInfo.js +429 -89
  3. package/dist/analyzer/analyzerNodeInfo.js.map +1 -1
  4. package/dist/analyzer/backgroundAnalysisProgram.d.ts +2 -1
  5. package/dist/analyzer/backgroundAnalysisProgram.js +4 -8
  6. package/dist/analyzer/backgroundAnalysisProgram.js.map +1 -1
  7. package/dist/analyzer/binder.d.ts +6 -3
  8. package/dist/analyzer/binder.js +70 -69
  9. package/dist/analyzer/binder.js.map +1 -1
  10. package/dist/analyzer/checker.d.ts +4 -2
  11. package/dist/analyzer/checker.js +86 -59
  12. package/dist/analyzer/checker.js.map +1 -1
  13. package/dist/analyzer/codeFlowEngine.d.ts +2 -1
  14. package/dist/analyzer/codeFlowEngine.js +12 -10
  15. package/dist/analyzer/codeFlowEngine.js.map +1 -1
  16. package/dist/analyzer/codeFlowUtils.d.ts +2 -1
  17. package/dist/analyzer/codeFlowUtils.js +2 -3
  18. package/dist/analyzer/codeFlowUtils.js.map +1 -1
  19. package/dist/analyzer/constructorTransform.js +8 -0
  20. package/dist/analyzer/constructorTransform.js.map +1 -1
  21. package/dist/analyzer/dataClasses.d.ts +5 -4
  22. package/dist/analyzer/dataClasses.js +30 -59
  23. package/dist/analyzer/dataClasses.js.map +1 -1
  24. package/dist/analyzer/declarationUtils.d.ts +2 -1
  25. package/dist/analyzer/declarationUtils.js +2 -2
  26. package/dist/analyzer/declarationUtils.js.map +1 -1
  27. package/dist/analyzer/decorators.d.ts +5 -4
  28. package/dist/analyzer/decorators.js +20 -21
  29. package/dist/analyzer/decorators.js.map +1 -1
  30. package/dist/analyzer/enums.d.ts +5 -4
  31. package/dist/analyzer/enums.js +11 -10
  32. package/dist/analyzer/enums.js.map +1 -1
  33. package/dist/analyzer/importResolver.d.ts +1 -1
  34. package/dist/analyzer/importResolver.js +5 -3
  35. package/dist/analyzer/importResolver.js.map +1 -1
  36. package/dist/analyzer/importStatementUtils.d.ts +3 -1
  37. package/dist/analyzer/importStatementUtils.js +14 -7
  38. package/dist/analyzer/importStatementUtils.js.map +1 -1
  39. package/dist/analyzer/namedTuples.d.ts +2 -1
  40. package/dist/analyzer/namedTuples.js +3 -4
  41. package/dist/analyzer/namedTuples.js.map +1 -1
  42. package/dist/analyzer/operations.d.ts +3 -2
  43. package/dist/analyzer/operations.js +8 -8
  44. package/dist/analyzer/operations.js.map +1 -1
  45. package/dist/analyzer/packageTypeVerifier.js +2 -2
  46. package/dist/analyzer/packageTypeVerifier.js.map +1 -1
  47. package/dist/analyzer/parseTreeUtils.d.ts +13 -11
  48. package/dist/analyzer/parseTreeUtils.js +62 -36
  49. package/dist/analyzer/parseTreeUtils.js.map +1 -1
  50. package/dist/analyzer/parseTreeWalker.d.ts +7 -2
  51. package/dist/analyzer/parseTreeWalker.js +29 -175
  52. package/dist/analyzer/parseTreeWalker.js.map +1 -1
  53. package/dist/analyzer/patternMatching.d.ts +4 -3
  54. package/dist/analyzer/patternMatching.js +47 -43
  55. package/dist/analyzer/patternMatching.js.map +1 -1
  56. package/dist/analyzer/program.d.ts +12 -0
  57. package/dist/analyzer/program.js +238 -29
  58. package/dist/analyzer/program.js.map +1 -1
  59. package/dist/analyzer/properties.d.ts +4 -3
  60. package/dist/analyzer/properties.js +7 -8
  61. package/dist/analyzer/properties.js.map +1 -1
  62. package/dist/analyzer/protocols.js +14 -2
  63. package/dist/analyzer/protocols.js.map +1 -1
  64. package/dist/analyzer/scopeUtils.d.ts +4 -3
  65. package/dist/analyzer/scopeUtils.js +8 -8
  66. package/dist/analyzer/scopeUtils.js.map +1 -1
  67. package/dist/analyzer/sentinel.d.ts +3 -2
  68. package/dist/analyzer/sentinel.js +4 -5
  69. package/dist/analyzer/sentinel.js.map +1 -1
  70. package/dist/analyzer/service.d.ts +5 -10
  71. package/dist/analyzer/service.js +36 -96
  72. package/dist/analyzer/service.js.map +1 -1
  73. package/dist/analyzer/sourceEnumerator.d.ts +5 -0
  74. package/dist/analyzer/sourceEnumerator.js +57 -3
  75. package/dist/analyzer/sourceEnumerator.js.map +1 -1
  76. package/dist/analyzer/sourceFile.d.ts +12 -6
  77. package/dist/analyzer/sourceFile.js +74 -50
  78. package/dist/analyzer/sourceFile.js.map +1 -1
  79. package/dist/analyzer/sourceFileInfoUtils.d.ts +1 -0
  80. package/dist/analyzer/sourceFileInfoUtils.js +8 -0
  81. package/dist/analyzer/sourceFileInfoUtils.js.map +1 -1
  82. package/dist/analyzer/sourceMapper.d.ts +4 -1
  83. package/dist/analyzer/sourceMapper.js +14 -8
  84. package/dist/analyzer/sourceMapper.js.map +1 -1
  85. package/dist/analyzer/testWalker.js +2 -1
  86. package/dist/analyzer/testWalker.js.map +1 -1
  87. package/dist/analyzer/tracePrinter.d.ts +2 -1
  88. package/dist/analyzer/tracePrinter.js +2 -2
  89. package/dist/analyzer/tracePrinter.js.map +1 -1
  90. package/dist/analyzer/tuples.d.ts +3 -2
  91. package/dist/analyzer/tuples.js +5 -5
  92. package/dist/analyzer/tuples.js.map +1 -1
  93. package/dist/analyzer/typeDocStringUtils.d.ts +5 -7
  94. package/dist/analyzer/typeDocStringUtils.js +229 -132
  95. package/dist/analyzer/typeDocStringUtils.js.map +1 -1
  96. package/dist/analyzer/typeEvaluator.d.ts +2 -0
  97. package/dist/analyzer/typeEvaluator.js +418 -229
  98. package/dist/analyzer/typeEvaluator.js.map +1 -1
  99. package/dist/analyzer/typeEvaluatorTypes.d.ts +2 -0
  100. package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
  101. package/dist/analyzer/typeGuards.d.ts +3 -2
  102. package/dist/analyzer/typeGuards.js +159 -35
  103. package/dist/analyzer/typeGuards.js.map +1 -1
  104. package/dist/analyzer/typeStubGeneration.d.ts +64 -0
  105. package/dist/analyzer/typeStubGeneration.js +226 -0
  106. package/dist/analyzer/typeStubGeneration.js.map +1 -0
  107. package/dist/analyzer/typeStubMessages.d.ts +4 -0
  108. package/dist/analyzer/typeStubMessages.js +25 -0
  109. package/dist/analyzer/typeStubMessages.js.map +1 -0
  110. package/dist/analyzer/typeStubOutput.d.ts +9 -0
  111. package/dist/analyzer/typeStubOutput.js +52 -0
  112. package/dist/analyzer/typeStubOutput.js.map +1 -0
  113. package/dist/analyzer/typeStubRenderer.d.ts +5 -0
  114. package/dist/analyzer/{typeStubWriter.js → typeStubRenderer.js} +20 -99
  115. package/dist/analyzer/typeStubRenderer.js.map +1 -0
  116. package/dist/analyzer/typeUtils.d.ts +1 -0
  117. package/dist/analyzer/typeUtils.js +115 -1
  118. package/dist/analyzer/typeUtils.js.map +1 -1
  119. package/dist/analyzer/typedDicts.d.ts +4 -3
  120. package/dist/analyzer/typedDicts.js +15 -14
  121. package/dist/analyzer/typedDicts.js.map +1 -1
  122. package/dist/analyzer/types.d.ts +2 -0
  123. package/dist/analyzer/types.js +84 -58
  124. package/dist/analyzer/types.js.map +1 -1
  125. package/dist/backgroundAnalysisBase.d.ts +5 -4
  126. package/dist/backgroundAnalysisBase.js +11 -19
  127. package/dist/backgroundAnalysisBase.js.map +1 -1
  128. package/dist/commands/createTypeStub.d.ts +2 -6
  129. package/dist/commands/createTypeStub.js +14 -27
  130. package/dist/commands/createTypeStub.js.map +1 -1
  131. package/dist/commands/dumpFileDebugInfoCommand.js +1 -1
  132. package/dist/commands/dumpFileDebugInfoCommand.js.map +1 -1
  133. package/dist/common/collectionUtils.js +15 -6
  134. package/dist/common/collectionUtils.js.map +1 -1
  135. package/dist/common/commandLineOptions.d.ts +1 -1
  136. package/dist/common/commandLineOptions.js.map +1 -1
  137. package/dist/common/configOptions.d.ts +4 -1
  138. package/dist/common/configOptions.js +68 -12
  139. package/dist/common/configOptions.js.map +1 -1
  140. package/dist/common/envVarUtils.d.ts +1 -0
  141. package/dist/common/envVarUtils.js +41 -10
  142. package/dist/common/envVarUtils.js.map +1 -1
  143. package/dist/common/extensibility.d.ts +3 -1
  144. package/dist/common/extensibility.js.map +1 -1
  145. package/dist/common/extraPathGlob.d.ts +12 -0
  146. package/dist/common/extraPathGlob.js +315 -0
  147. package/dist/common/extraPathGlob.js.map +1 -0
  148. package/dist/common/host.d.ts +2 -0
  149. package/dist/common/host.js.map +1 -1
  150. package/dist/common/languageServerInterface.d.ts +2 -1
  151. package/dist/common/languageServerInterface.js.map +1 -1
  152. package/dist/common/pathConsts.d.ts +1 -0
  153. package/dist/common/pathConsts.js +11 -1
  154. package/dist/common/pathConsts.js.map +1 -1
  155. package/dist/common/processUtils.d.ts +4 -2
  156. package/dist/common/processUtils.js +3 -0
  157. package/dist/common/processUtils.js.map +1 -1
  158. package/dist/common/stringUtils.d.ts +6 -0
  159. package/dist/common/stringUtils.js +87 -5
  160. package/dist/common/stringUtils.js.map +1 -1
  161. package/dist/common/textEditTracker.d.ts +3 -1
  162. package/dist/common/textEditTracker.js +8 -6
  163. package/dist/common/textEditTracker.js.map +1 -1
  164. package/dist/common/textRangeCollection.d.ts +1 -0
  165. package/dist/common/textRangeCollection.js +32 -1
  166. package/dist/common/textRangeCollection.js.map +1 -1
  167. package/dist/common/uri/uriUtils.d.ts +3 -0
  168. package/dist/common/uri/uriUtils.js +65 -15
  169. package/dist/common/uri/uriUtils.js.map +1 -1
  170. package/dist/fileSystemMapping.d.ts +10 -0
  171. package/dist/fileSystemMapping.js +176 -0
  172. package/dist/fileSystemMapping.js.map +1 -0
  173. package/dist/languageServerBase.d.ts +1 -1
  174. package/dist/languageServerBase.js +2 -2
  175. package/dist/languageServerBase.js.map +1 -1
  176. package/dist/languageService/analyzerServiceExecutor.d.ts +1 -3
  177. package/dist/languageService/analyzerServiceExecutor.js +10 -29
  178. package/dist/languageService/analyzerServiceExecutor.js.map +1 -1
  179. package/dist/languageService/autoImporter.d.ts +1 -0
  180. package/dist/languageService/autoImporter.js +32 -5
  181. package/dist/languageService/autoImporter.js.map +1 -1
  182. package/dist/languageService/callHierarchyProvider.d.ts +7 -0
  183. package/dist/languageService/callHierarchyProvider.js +97 -11
  184. package/dist/languageService/callHierarchyProvider.js.map +1 -1
  185. package/dist/languageService/completionProvider.d.ts +30 -8
  186. package/dist/languageService/completionProvider.js +298 -93
  187. package/dist/languageService/completionProvider.js.map +1 -1
  188. package/dist/languageService/definitionProvider.js +7 -6
  189. package/dist/languageService/definitionProvider.js.map +1 -1
  190. package/dist/languageService/documentHighlightProvider.js +2 -1
  191. package/dist/languageService/documentHighlightProvider.js.map +1 -1
  192. package/dist/languageService/documentSymbolCollector.d.ts +3 -1
  193. package/dist/languageService/documentSymbolCollector.js +78 -14
  194. package/dist/languageService/documentSymbolCollector.js.map +1 -1
  195. package/dist/languageService/documentSymbolProvider.js +3 -2
  196. package/dist/languageService/documentSymbolProvider.js.map +1 -1
  197. package/dist/languageService/fileWatcherDynamicFeature.js +28 -1
  198. package/dist/languageService/fileWatcherDynamicFeature.js.map +1 -1
  199. package/dist/languageService/hoverProvider.d.ts +2 -1
  200. package/dist/languageService/hoverProvider.js +48 -16
  201. package/dist/languageService/hoverProvider.js.map +1 -1
  202. package/dist/languageService/importSorter.d.ts +3 -1
  203. package/dist/languageService/importSorter.js +4 -2
  204. package/dist/languageService/importSorter.js.map +1 -1
  205. package/dist/languageService/importStatementCandidates.js +4 -2
  206. package/dist/languageService/importStatementCandidates.js.map +1 -1
  207. package/dist/languageService/quickActions.js +2 -1
  208. package/dist/languageService/quickActions.js.map +1 -1
  209. package/dist/languageService/referencesProvider.js +12 -5
  210. package/dist/languageService/referencesProvider.js.map +1 -1
  211. package/dist/languageService/signatureHelpProvider.d.ts +3 -0
  212. package/dist/languageService/signatureHelpProvider.js +56 -18
  213. package/dist/languageService/signatureHelpProvider.js.map +1 -1
  214. package/dist/languageService/symbolIndexer.d.ts +2 -1
  215. package/dist/languageService/symbolIndexer.js +7 -7
  216. package/dist/languageService/symbolIndexer.js.map +1 -1
  217. package/dist/languageService/tooltipUtils.d.ts +1 -1
  218. package/dist/languageService/tooltipUtils.js +103 -35
  219. package/dist/languageService/tooltipUtils.js.map +1 -1
  220. package/dist/languageService/workspaceSymbolProvider.js +3 -2
  221. package/dist/languageService/workspaceSymbolProvider.js.map +1 -1
  222. package/dist/localization/localize.d.ts +6 -0
  223. package/dist/localization/localize.js +10 -0
  224. package/dist/localization/localize.js.map +1 -1
  225. package/dist/localization/package.nls.cs.json +15 -0
  226. package/dist/localization/package.nls.de.json +15 -0
  227. package/dist/localization/package.nls.en-us.json +5 -0
  228. package/dist/localization/package.nls.es.json +15 -0
  229. package/dist/localization/package.nls.fr.json +15 -0
  230. package/dist/localization/package.nls.it.json +15 -0
  231. package/dist/localization/package.nls.ja.json +15 -0
  232. package/dist/localization/package.nls.ko.json +15 -0
  233. package/dist/localization/package.nls.pl.json +15 -0
  234. package/dist/localization/package.nls.pt-br.json +15 -0
  235. package/dist/localization/package.nls.qps-ploc.json +15 -0
  236. package/dist/localization/package.nls.ru.json +15 -0
  237. package/dist/localization/package.nls.tr.json +15 -0
  238. package/dist/localization/package.nls.zh-cn.json +16 -1
  239. package/dist/localization/package.nls.zh-tw.json +17 -2
  240. package/dist/parser/parseNodes.d.ts +85 -80
  241. package/dist/parser/parseNodes.js +182 -159
  242. package/dist/parser/parseNodes.js.map +1 -1
  243. package/dist/parser/parseTreeUtils.d.ts +3 -0
  244. package/dist/parser/parseTreeUtils.js +209 -0
  245. package/dist/parser/parseTreeUtils.js.map +1 -0
  246. package/dist/parser/parser.d.ts +16 -6
  247. package/dist/parser/parser.js +210 -144
  248. package/dist/parser/parser.js.map +1 -1
  249. package/dist/parser/stringAnnotationInfo.d.ts +16 -0
  250. package/dist/parser/stringAnnotationInfo.js +26 -0
  251. package/dist/parser/stringAnnotationInfo.js.map +1 -0
  252. package/dist/pyright.js +30 -17
  253. package/dist/pyright.js.map +1 -1
  254. package/dist/readonlyAugmentedFileSystem.d.ts +2 -9
  255. package/dist/readonlyAugmentedFileSystem.js +17 -144
  256. package/dist/readonlyAugmentedFileSystem.js.map +1 -1
  257. package/dist/server.js +2 -2
  258. package/dist/server.js.map +1 -1
  259. package/dist/tests/analyzerNodeInfo.test.d.ts +1 -0
  260. package/dist/tests/analyzerNodeInfo.test.js +145 -0
  261. package/dist/tests/analyzerNodeInfo.test.js.map +1 -0
  262. package/dist/tests/collectionUtils.test.js +46 -0
  263. package/dist/tests/collectionUtils.test.js.map +1 -1
  264. package/dist/tests/completions.test.js +34 -0
  265. package/dist/tests/completions.test.js.map +1 -1
  266. package/dist/tests/config.test.js +131 -7
  267. package/dist/tests/config.test.js.map +1 -1
  268. package/dist/tests/extraPathGlob.test.d.ts +1 -0
  269. package/dist/tests/extraPathGlob.test.js +434 -0
  270. package/dist/tests/extraPathGlob.test.js.map +1 -0
  271. package/dist/tests/fileSystemMapping.test.d.ts +1 -0
  272. package/dist/tests/fileSystemMapping.test.js +458 -0
  273. package/dist/tests/fileSystemMapping.test.js.map +1 -0
  274. package/dist/tests/fourslash/completions.call.typedDict.fourslash.js +23 -0
  275. package/dist/tests/fourslash/completions.call.typedDict.fourslash.js.map +1 -1
  276. package/dist/tests/fourslash/completions.call.typedDict.list.fourslash.js +14 -0
  277. package/dist/tests/fourslash/completions.call.typedDict.list.fourslash.js.map +1 -1
  278. package/dist/tests/fourslash/completions.call.typedDict.states.fourslash.js +7 -0
  279. package/dist/tests/fourslash/completions.call.typedDict.states.fourslash.js.map +1 -1
  280. package/dist/tests/fourslash/completions.callSite.isinstanceNarrowing.fourslash.d.ts +1 -0
  281. package/dist/tests/fourslash/completions.callSite.isinstanceNarrowing.fourslash.js +41 -0
  282. package/dist/tests/fourslash/completions.callSite.isinstanceNarrowing.fourslash.js.map +1 -0
  283. package/dist/tests/fourslash/completions.dictionary.keys.literalTypes.fourslash.js +2 -0
  284. package/dist/tests/fourslash/completions.dictionary.keys.literalTypes.fourslash.js.map +1 -1
  285. package/dist/tests/fourslash/completions.fstring.stringLiteral.fourslash.js +5 -0
  286. package/dist/tests/fourslash/completions.fstring.stringLiteral.fourslash.js.map +1 -1
  287. package/dist/tests/fourslash/completions.stringLiteral.fourslash.js +4 -0
  288. package/dist/tests/fourslash/completions.stringLiteral.fourslash.js.map +1 -1
  289. package/dist/tests/fourslash/findallreferences.protocolMemberVariable.fourslash.d.ts +1 -0
  290. package/dist/tests/fourslash/findallreferences.protocolMemberVariable.fourslash.js +48 -0
  291. package/dist/tests/fourslash/findallreferences.protocolMemberVariable.fourslash.js.map +1 -0
  292. package/dist/tests/fourslash/hover.docFromSrc.stubs-package.fourslash.js +0 -1
  293. package/dist/tests/fourslash/hover.docFromSrc.stubs-package.fourslash.js.map +1 -1
  294. package/dist/tests/fourslash/hover.inherited.docFromSrc.fourslash.js +8 -2
  295. package/dist/tests/fourslash/hover.inherited.docFromSrc.fourslash.js.map +1 -1
  296. package/dist/tests/fourslash/hover.inherited.docFromStub.fourslash.js +5 -2
  297. package/dist/tests/fourslash/hover.inherited.docFromStub.fourslash.js.map +1 -1
  298. package/dist/tests/fourslash/signature.docstrings.overloaded.fourslash.js +2 -2
  299. package/dist/tests/fourslash/signature.docstrings.overloaded.fourslash.js.map +1 -1
  300. package/dist/tests/harness/fourslash/testState.js +1 -1
  301. package/dist/tests/harness/fourslash/testState.js.map +1 -1
  302. package/dist/tests/hoverProvider.test.js +38 -0
  303. package/dist/tests/hoverProvider.test.js.map +1 -1
  304. package/dist/tests/importStatementUtils.test.js +6 -3
  305. package/dist/tests/importStatementUtils.test.js.map +1 -1
  306. package/dist/tests/ipythonMode.test.js +38 -0
  307. package/dist/tests/ipythonMode.test.js.map +1 -1
  308. package/dist/tests/parseTreeUtils.test.js +88 -0
  309. package/dist/tests/parseTreeUtils.test.js.map +1 -1
  310. package/dist/tests/parser.test.js +60 -3
  311. package/dist/tests/parser.test.js.map +1 -1
  312. package/dist/tests/positionUtils.test.js +23 -0
  313. package/dist/tests/positionUtils.test.js.map +1 -1
  314. package/dist/tests/pyrightCli.test.d.ts +1 -0
  315. package/dist/tests/pyrightCli.test.js +205 -0
  316. package/dist/tests/pyrightCli.test.js.map +1 -0
  317. package/dist/tests/pyrightFileSystem.test.js +41 -0
  318. package/dist/tests/pyrightFileSystem.test.js.map +1 -1
  319. package/dist/tests/service.test.js +183 -0
  320. package/dist/tests/service.test.js.map +1 -1
  321. package/dist/tests/sourceEnumeratorSymlink.test.d.ts +1 -0
  322. package/dist/tests/sourceEnumeratorSymlink.test.js +203 -0
  323. package/dist/tests/sourceEnumeratorSymlink.test.js.map +1 -0
  324. package/dist/tests/stringUtils.test.js +84 -0
  325. package/dist/tests/stringUtils.test.js.map +1 -1
  326. package/dist/tests/symlinkAliasInvalidation.test.d.ts +1 -0
  327. package/dist/tests/symlinkAliasInvalidation.test.js +471 -0
  328. package/dist/tests/symlinkAliasInvalidation.test.js.map +1 -0
  329. package/dist/tests/testUtils.d.ts +2 -0
  330. package/dist/tests/testUtils.js +7 -1
  331. package/dist/tests/testUtils.js.map +1 -1
  332. package/dist/tests/textEditUtil.test.js +2 -2
  333. package/dist/tests/textEditUtil.test.js.map +1 -1
  334. package/dist/tests/textRangeCollection.test.d.ts +1 -0
  335. package/dist/tests/textRangeCollection.test.js +137 -0
  336. package/dist/tests/textRangeCollection.test.js.map +1 -0
  337. package/dist/tests/typeEquality.test.d.ts +1 -0
  338. package/dist/tests/typeEquality.test.js +95 -0
  339. package/dist/tests/typeEquality.test.js.map +1 -0
  340. package/dist/tests/typeEvaluator1.test.js +24 -3
  341. package/dist/tests/typeEvaluator1.test.js.map +1 -1
  342. package/dist/tests/typeEvaluator2.test.js +4 -0
  343. package/dist/tests/typeEvaluator2.test.js.map +1 -1
  344. package/dist/tests/typeEvaluator3.test.js +8 -0
  345. package/dist/tests/typeEvaluator3.test.js.map +1 -1
  346. package/dist/tests/typeEvaluator4.test.js +8 -0
  347. package/dist/tests/typeEvaluator4.test.js.map +1 -1
  348. package/dist/tests/typeEvaluator5.test.js +1 -1
  349. package/dist/tests/typeEvaluator6.test.js +5 -1
  350. package/dist/tests/typeEvaluator6.test.js.map +1 -1
  351. package/dist/tests/typeEvaluator7.test.js +4 -0
  352. package/dist/tests/typeEvaluator7.test.js.map +1 -1
  353. package/dist/tests/typeEvaluator8.test.js +4 -0
  354. package/dist/tests/typeEvaluator8.test.js.map +1 -1
  355. package/dist/tests/typeServer/typeCache.test.d.ts +1 -0
  356. package/dist/tests/typeServer/typeCache.test.js +69 -0
  357. package/dist/tests/typeServer/typeCache.test.js.map +1 -0
  358. package/dist/tests/typeServer/typeServer.virtualFileRedirect.test.js +18 -0
  359. package/dist/tests/typeServer/typeServer.virtualFileRedirect.test.js.map +1 -1
  360. package/dist/tests/typeStubGeneration.test.d.ts +1 -0
  361. package/dist/tests/typeStubGeneration.test.js +397 -0
  362. package/dist/tests/typeStubGeneration.test.js.map +1 -0
  363. package/dist/tests/typeStubOutput.test.d.ts +1 -0
  364. package/dist/tests/typeStubOutput.test.js +136 -0
  365. package/dist/tests/typeStubOutput.test.js.map +1 -0
  366. package/dist/tests/typeUtils.test.d.ts +1 -0
  367. package/dist/tests/typeUtils.test.js +133 -0
  368. package/dist/tests/typeUtils.test.js.map +1 -0
  369. package/dist/tests/uri.test.js +51 -0
  370. package/dist/tests/uri.test.js.map +1 -1
  371. package/dist/typeServer/notebookDocumentHandler.d.ts +9 -2
  372. package/dist/typeServer/notebookDocumentHandler.js +16 -6
  373. package/dist/typeServer/notebookDocumentHandler.js.map +1 -1
  374. package/dist/typeServer/programWrapper.d.ts +1 -0
  375. package/dist/typeServer/programWrapper.js +28 -15
  376. package/dist/typeServer/programWrapper.js.map +1 -1
  377. package/dist/typeServer/protocol/tspSupplemental.d.ts +1 -1
  378. package/dist/typeServer/protocol/tspSupplemental.js +2 -2
  379. package/dist/typeServer/server.d.ts +13 -2
  380. package/dist/typeServer/server.js +36 -23
  381. package/dist/typeServer/server.js.map +1 -1
  382. package/dist/typeServer/typeCache.d.ts +8 -4
  383. package/dist/typeServer/typeCache.js +33 -5
  384. package/dist/typeServer/typeCache.js.map +1 -1
  385. package/dist/typeServer/typeEvalUtils.d.ts +2 -1
  386. package/dist/typeServer/typeEvalUtils.js +7 -3
  387. package/dist/typeServer/typeEvalUtils.js.map +1 -1
  388. package/dist/typeServer/typeGuards.js +3 -4
  389. package/dist/typeServer/typeGuards.js.map +1 -1
  390. package/dist/typeServer/typeServerFileSystem.d.ts +10 -9
  391. package/dist/typeServer/typeServerFileSystem.js +16 -12
  392. package/dist/typeServer/typeServerFileSystem.js.map +1 -1
  393. package/package.json +7 -5
  394. package/dist/analyzer/parseTreeCleaner.d.ts +0 -8
  395. package/dist/analyzer/parseTreeCleaner.js +0 -65
  396. package/dist/analyzer/parseTreeCleaner.js.map +0 -1
  397. package/dist/analyzer/typeStubWriter.d.ts +0 -17
  398. package/dist/analyzer/typeStubWriter.js.map +0 -1
@@ -1,19 +1,21 @@
1
1
  import { AssertNode, AssignmentExpressionNode, AssignmentNode, AugmentedAssignmentNode, AwaitNode, BinaryOperationNode, CallNode, CaseNode, ClassNode, ComprehensionIfNode, ComprehensionNode, DelNode, DictionaryNode, ErrorNode, ExceptNode, ForNode, FormatStringNode, FunctionNode, GlobalNode, IfNode, ImportAsNode, ImportFromAsNode, ImportFromNode, IndexNode, LambdaNode, ListNode, MatchNode, MemberAccessNode, ModuleNameNode, NameNode, NonlocalNode, ParseNode, PatternClassNode, RaiseNode, ReturnNode, SetNode, SliceNode, StatementListNode, StringListNode, SuiteNode, TernaryNode, TryNode, TupleNode, TypeAliasNode, TypeAnnotationNode, TypeParameterListNode, TypeParameterNode, UnaryOperationNode, UnpackNode, WhileNode, WithNode, YieldFromNode, YieldNode } from '../parser/parseNodes';
2
2
  import { ParserOutput } from '../parser/parser';
3
+ import * as AnalyzerNodeInfo from './analyzerNodeInfo';
3
4
  import { ImportResolver } from './importResolver';
4
5
  import { ParseTreeWalker } from './parseTreeWalker';
5
6
  import { TypeEvaluator } from './typeEvaluatorTypes';
6
7
  export declare class Checker extends ParseTreeWalker {
7
8
  private _importResolver;
8
9
  private _evaluator;
9
- private _dependentFiles?;
10
+ private _dependentFiles;
10
11
  private readonly _moduleNode;
11
12
  private readonly _fileInfo;
13
+ private readonly _nodeInfo;
12
14
  private _isUnboundCheckSuppressed;
13
15
  private _scopedNodes;
14
16
  private _typeParamLists;
15
17
  private _multipartImports;
16
- constructor(_importResolver: ImportResolver, _evaluator: TypeEvaluator, parseResults: ParserOutput, _dependentFiles?: ParserOutput[] | undefined);
18
+ constructor(_importResolver: ImportResolver, _evaluator: TypeEvaluator, parseResults: ParserOutput, _dependentFiles: ParserOutput[] | undefined, nodeInfoReader: AnalyzerNodeInfo.AnalyzerNodeInfoReader);
17
19
  check(): void;
18
20
  walk(node: ParseNode): void;
19
21
  visitSuite(node: SuiteNode): boolean;
@@ -88,8 +88,14 @@ const typeUtils_1 = require("./typeUtils");
88
88
  // functions to be emitted.
89
89
  const isPrintCodeComplexityEnabled = false;
90
90
  class Checker extends parseTreeWalker_1.ParseTreeWalker {
91
- constructor(_importResolver, _evaluator, parseResults, _dependentFiles) {
92
- super();
91
+ constructor(_importResolver, _evaluator, parseResults, _dependentFiles, nodeInfoReader) {
92
+ // Forward the reader to the base walker so the structural walk expands both tier-1
93
+ // (parser-derived) and tier-2 (evaluator-discovered, e.g. `cast("Foo", v)`) string
94
+ // annotations. The checker runs after type evaluation, so tier-2 annotations exist by
95
+ // the time it descends; without the reader it would silently skip tier-2 forward-ref
96
+ // subtrees and drop checker-only diagnostics (reportDeprecated, reportPrivateUsage, ...)
97
+ // for symbols referenced only inside an evaluator-discovered forward reference.
98
+ super(nodeInfoReader);
93
99
  this._importResolver = _importResolver;
94
100
  this._evaluator = _evaluator;
95
101
  this._dependentFiles = _dependentFiles;
@@ -101,13 +107,14 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
101
107
  this._typeParamLists = [];
102
108
  // A list of all visited multipart import statements.
103
109
  this._multipartImports = [];
110
+ this._nodeInfo = AnalyzerNodeInfo.createAnalyzerNodeInfoAccessor(nodeInfoReader);
104
111
  this._moduleNode = parseResults.parseTree;
105
- this._fileInfo = AnalyzerNodeInfo.getFileInfo(this._moduleNode);
112
+ this._fileInfo = this._nodeInfo.getFileInfo(this._moduleNode);
106
113
  }
107
114
  check() {
108
115
  this._scopedNodes.push(this._moduleNode);
109
116
  // Report code complexity issues for the module.
110
- const codeComplexity = AnalyzerNodeInfo.getCodeFlowComplexity(this._moduleNode);
117
+ const codeComplexity = this._nodeInfo.getCodeFlowComplexity(this._moduleNode);
111
118
  if (isPrintCodeComplexityEnabled) {
112
119
  console.log(`Code complexity of module ${this._fileInfo.fileUri.toUserVisibleString()} is ${codeComplexity.toString()}`);
113
120
  }
@@ -116,7 +123,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
116
123
  }
117
124
  this._walkStatementsAndReportUnreachable(this._moduleNode.d.statements);
118
125
  // Mark symbols accessed by __all__ as accessed.
119
- const dunderAllInfo = AnalyzerNodeInfo.getDunderAllInfo(this._moduleNode);
126
+ const dunderAllInfo = this._nodeInfo.getDunderAllInfo(this._moduleNode);
120
127
  if (dunderAllInfo) {
121
128
  this._evaluator.markNamesAccessed(this._moduleNode, dunderAllInfo.names);
122
129
  this._reportUnusedDunderAllSymbols(dunderAllInfo.stringNodes);
@@ -128,7 +135,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
128
135
  this._reportDuplicateImports();
129
136
  }
130
137
  walk(node) {
131
- if (!AnalyzerNodeInfo.isCodeUnreachable(node)) {
138
+ if (!this._nodeInfo.isCodeUnreachable(node)) {
132
139
  super.walk(node);
133
140
  }
134
141
  else {
@@ -392,7 +399,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
392
399
  this.walk(param.d.name);
393
400
  }
394
401
  });
395
- const codeComplexity = AnalyzerNodeInfo.getCodeFlowComplexity(node);
402
+ const codeComplexity = this._nodeInfo.getCodeFlowComplexity(node);
396
403
  const isTooComplexToAnalyze = codeComplexity > typeEvaluator_1.maxCodeComplexity;
397
404
  if (isPrintCodeComplexityEnabled) {
398
405
  console.log(`Code complexity of function ${node.d.name.d.value} is ${codeComplexity.toString()}`);
@@ -424,7 +431,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
424
431
  // if there is a '__getattr__' function defined when in strict mode.
425
432
  // This signifies an incomplete stub file that obscures type errors.
426
433
  if (this._fileInfo.isStubFile && node.d.name.d.value === '__getattr__') {
427
- const scope = (0, scopeUtils_1.getScopeForNode)(node);
434
+ const scope = (0, scopeUtils_1.getScopeForNode)(node, this._nodeInfo);
428
435
  if (scope?.type === 4 /* ScopeType.Module */) {
429
436
  this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportIncompleteStub, localize_1.LocMessage.stubUsesGetAttr(), node.d.name);
430
437
  }
@@ -587,7 +594,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
587
594
  // statement is not allowed to have an argument. A syntax error occurs
588
595
  // at runtime in this case.
589
596
  if (enclosingFunctionNode?.d.isAsync && node.d.expr) {
590
- const functionDecl = AnalyzerNodeInfo.getDeclaration(enclosingFunctionNode);
597
+ const functionDecl = this._nodeInfo.getDeclaration(enclosingFunctionNode);
591
598
  if (functionDecl?.type === 5 /* DeclarationType.Function */ && functionDecl.isGenerator) {
592
599
  this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.returnInAsyncGenerator(), node.d.expr);
593
600
  }
@@ -598,7 +605,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
598
605
  this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.noReturnContainsReturn(), node);
599
606
  }
600
607
  else {
601
- const liveScopes = ParseTreeUtils.getTypeVarScopesForNode(node);
608
+ const liveScopes = ParseTreeUtils.getTypeVarScopesForNode(node, this._nodeInfo);
602
609
  declaredReturnType = this._evaluator.stripTypeGuard(declaredReturnType);
603
610
  let adjReturnType = (0, typeUtils_1.makeTypeVarsBound)(declaredReturnType, liveScopes);
604
611
  let diagAddendum = new diagnostic_1.DiagnosticAddendum();
@@ -741,7 +748,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
741
748
  if (node.d.leftExpr.nodeType === 54 /* ParseNodeType.TypeAnnotation */) {
742
749
  const annotationType = this._evaluator.getTypeOfAnnotation(node.d.leftExpr.d.annotation);
743
750
  if ((0, types_1.isClassInstance)(annotationType) && types_1.ClassType.isBuiltIn(annotationType, 'TypeAlias')) {
744
- const scope = (0, scopeUtils_1.getScopeForNode)(node);
751
+ const scope = (0, scopeUtils_1.getScopeForNode)(node, this._nodeInfo);
745
752
  if (scope) {
746
753
  if (scope.type !== 3 /* ScopeType.Class */ &&
747
754
  scope.type !== 4 /* ScopeType.Module */ &&
@@ -901,7 +908,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
901
908
  }
902
909
  }
903
910
  }
904
- if (node.d.annotation) {
911
+ if (AnalyzerNodeInfo.getStringAnnotation(node, AnalyzerNodeInfo.getInfoReader(this._evaluator))) {
905
912
  this._evaluator.getType(node);
906
913
  }
907
914
  if (node.d.strings.length > 1 && !node.d.hasParens) {
@@ -995,7 +1002,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
995
1002
  }
996
1003
  else {
997
1004
  this._evaluator.evaluateTypesForStatement(node);
998
- const importInfo = AnalyzerNodeInfo.getImportInfo(node.d.module);
1005
+ const importInfo = this._nodeInfo.getImportInfo(node.d.module);
999
1006
  if (importInfo &&
1000
1007
  importInfo.isImportFound &&
1001
1008
  importInfo.importType !== 2 /* ImportType.Local */ &&
@@ -1047,7 +1054,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1047
1054
  if (this._fileInfo.isStubFile) {
1048
1055
  return false;
1049
1056
  }
1050
- const importResult = AnalyzerNodeInfo.getImportInfo(node);
1057
+ const importResult = this._nodeInfo.getImportInfo(node);
1051
1058
  (0, debug_1.assert)(importResult !== undefined);
1052
1059
  this._addMissingModuleSourceDiagnosticIfNeeded(importResult, node);
1053
1060
  return false;
@@ -1088,7 +1095,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1088
1095
  return false;
1089
1096
  }
1090
1097
  visitTypeAlias(node) {
1091
- const scope = (0, scopeUtils_1.getScopeForNode)(node);
1098
+ const scope = (0, scopeUtils_1.getScopeForNode)(node, this._nodeInfo);
1092
1099
  if (scope) {
1093
1100
  if (scope.type !== 3 /* ScopeType.Class */ && scope.type !== 4 /* ScopeType.Module */ && scope.type !== 5 /* ScopeType.Builtin */) {
1094
1101
  this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.typeAliasStatementBadScope(), node.d.name);
@@ -1578,7 +1585,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1578
1585
  const nameType = this._evaluator.getType(nameNode);
1579
1586
  if (nameType && (0, types_1.isTypeVar)(nameType) && !types_1.TypeVarType.isSelf(nameType)) {
1580
1587
  // Does this name refer to a TypeVar that is scoped to this function?
1581
- if (nameType.priv.scopeId === ParseTreeUtils.getScopeIdForNode(node)) {
1588
+ if (nameType.priv.scopeId === ParseTreeUtils.getScopeIdForNode(node, this._nodeInfo)) {
1582
1589
  // We exempt constrained TypeVars, TypeVars that are type arguments of
1583
1590
  // other types, and ParamSpecs. There are legitimate uses for singleton
1584
1591
  // instances in these particular cases.
@@ -1864,14 +1871,14 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1864
1871
  }
1865
1872
  const functionNode = functionType.shared.declaration?.node;
1866
1873
  if (functionNode) {
1867
- const liveTypeVars = ParseTreeUtils.getTypeVarScopesForNode(functionNode);
1874
+ const liveTypeVars = ParseTreeUtils.getTypeVarScopesForNode(functionNode, this._nodeInfo);
1868
1875
  functionType = (0, typeUtils_1.makeTypeVarsBound)(functionType, liveTypeVars);
1869
1876
  }
1870
1877
  // Use the parent node of the declaration in this case so we don't transform
1871
1878
  // function-local type variables into bound type variables.
1872
1879
  const prevOverloadNode = prevOverload.shared.declaration?.node?.parent;
1873
1880
  if (prevOverloadNode) {
1874
- const liveTypeVars = ParseTreeUtils.getTypeVarScopesForNode(prevOverloadNode);
1881
+ const liveTypeVars = ParseTreeUtils.getTypeVarScopesForNode(prevOverloadNode, this._nodeInfo);
1875
1882
  prevOverload = (0, typeUtils_1.makeTypeVarsBound)(prevOverload, liveTypeVars);
1876
1883
  }
1877
1884
  return this._evaluator.assignType(functionType, prevOverload,
@@ -1888,12 +1895,12 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1888
1895
  let overloadBound = overload;
1889
1896
  const implNode = implementation.shared.declaration?.node?.parent;
1890
1897
  if (implNode) {
1891
- const liveScopeIds = ParseTreeUtils.getTypeVarScopesForNode(implNode);
1898
+ const liveScopeIds = ParseTreeUtils.getTypeVarScopesForNode(implNode, this._nodeInfo);
1892
1899
  implBound = (0, typeUtils_1.makeTypeVarsBound)(implementation, liveScopeIds);
1893
1900
  }
1894
1901
  const overloadNode = overload.shared.declaration?.node;
1895
1902
  if (overloadNode) {
1896
- const liveScopeIds = ParseTreeUtils.getTypeVarScopesForNode(overloadNode);
1903
+ const liveScopeIds = ParseTreeUtils.getTypeVarScopesForNode(overloadNode, this._nodeInfo);
1897
1904
  overloadBound = (0, typeUtils_1.makeTypeVarsBound)(overload, liveScopeIds);
1898
1905
  }
1899
1906
  // First check the parameters to see if they are assignable.
@@ -2086,7 +2093,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2086
2093
  if (this._fileInfo.diagnosticRuleSet.reportUnsupportedDunderAll === 'none') {
2087
2094
  return;
2088
2095
  }
2089
- const moduleScope = AnalyzerNodeInfo.getScope(this._moduleNode);
2096
+ const moduleScope = this._nodeInfo.getScope(this._moduleNode);
2090
2097
  if (!moduleScope) {
2091
2098
  return;
2092
2099
  }
@@ -2097,9 +2104,9 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2097
2104
  });
2098
2105
  }
2099
2106
  _validateSymbolTables() {
2100
- const dependentFileInfo = this._dependentFiles?.map((p) => AnalyzerNodeInfo.getFileInfo(p.parseTree));
2107
+ const dependentFileInfo = this._dependentFiles?.map((p) => this._nodeInfo.getFileInfo(p.parseTree));
2101
2108
  for (const scopedNode of this._scopedNodes) {
2102
- const scope = AnalyzerNodeInfo.getScope(scopedNode);
2109
+ const scope = this._nodeInfo.getScope(scopedNode);
2103
2110
  if (scope) {
2104
2111
  scope.symbolTable.forEach((symbol, name) => {
2105
2112
  this._conditionallyReportUnusedSymbol(name, symbol, scope.type, dependentFileInfo);
@@ -2116,7 +2123,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2116
2123
  // Report unaccessed type parameters.
2117
2124
  const accessedSymbolSet = this._fileInfo.accessedSymbolSet;
2118
2125
  for (const paramList of this._typeParamLists) {
2119
- const typeParamScope = AnalyzerNodeInfo.getScope(paramList);
2126
+ const typeParamScope = this._nodeInfo.getScope(paramList);
2120
2127
  for (const param of paramList.d.params) {
2121
2128
  const symbol = typeParamScope?.symbolTable.get(param.d.name.d.value);
2122
2129
  if (!symbol) {
@@ -2663,6 +2670,12 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2663
2670
  if (this._fileInfo.isStubFile) {
2664
2671
  return;
2665
2672
  }
2673
+ // The presence of a decorator can change how the class is used (e.g. it
2674
+ // may be registered or consumed through a decorator side effect), so back
2675
+ // off from reporting it as unaccessed if any decorator is present.
2676
+ if (decl.node.d.decorators.length > 0) {
2677
+ return;
2678
+ }
2666
2679
  diagnosticLevel = this._fileInfo.diagnosticRuleSet.reportUnusedClass;
2667
2680
  nameNode = decl.node.d.name;
2668
2681
  rule = diagnosticRules_1.DiagnosticRule.reportUnusedClass;
@@ -2677,6 +2690,12 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2677
2690
  if (this._fileInfo.isStubFile) {
2678
2691
  return;
2679
2692
  }
2693
+ // The presence of a decorator can change how the function is used (e.g. a
2694
+ // Flask `@app.route(...)` handler is registered via a decorator side effect),
2695
+ // so back off from reporting it as unaccessed if any decorator is present.
2696
+ if (decl.node.d.decorators.length > 0) {
2697
+ return;
2698
+ }
2680
2699
  diagnosticLevel = this._fileInfo.diagnosticRuleSet.reportUnusedFunction;
2681
2700
  nameNode = decl.node.d.name;
2682
2701
  rule = diagnosticRules_1.DiagnosticRule.reportUnusedFunction;
@@ -2786,10 +2805,10 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2786
2805
  if (this._fileInfo.diagnosticRuleSet.reportUnnecessaryIsInstance !== 'none') {
2787
2806
  const narrowedTypeNegative = (0, typeGuards_1.narrowTypeForInstanceOrSubclass)(this._evaluator, arg0Type, classTypeList, isInstanceCheck,
2788
2807
  /* isTypeIsCheck */ false,
2789
- /* isPositiveTest */ false, node);
2808
+ /* isPositiveTest */ false, node, this._nodeInfo);
2790
2809
  const narrowedTypePositive = (0, typeGuards_1.narrowTypeForInstanceOrSubclass)(this._evaluator, arg0Type, classTypeList, isInstanceCheck,
2791
2810
  /* isTypeIsCheck */ false,
2792
- /* isPositiveTest */ true, node);
2811
+ /* isPositiveTest */ true, node, this._nodeInfo);
2793
2812
  const isAlwaysTrue = (0, types_1.isNever)(narrowedTypeNegative);
2794
2813
  const isNeverTrue = (0, types_1.isNever)(narrowedTypePositive);
2795
2814
  if (isAlwaysTrue || isNeverTrue) {
@@ -3127,7 +3146,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3127
3146
  if (node.parent?.nodeType === 1 /* ParseNodeType.Argument */ && node.parent.d.name === node) {
3128
3147
  return;
3129
3148
  }
3130
- if (!AnalyzerNodeInfo.isCodeUnreachable(node)) {
3149
+ if (!this._nodeInfo.isCodeUnreachable(node)) {
3131
3150
  const type = this._evaluator.getType(node);
3132
3151
  if (type) {
3133
3152
  if ((0, types_1.isUnbound)(type)) {
@@ -3243,7 +3262,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3243
3262
  // enum class that has already defined values.
3244
3263
  _validateEnumClassOverride(node, classType) {
3245
3264
  classType.shared.baseClasses.forEach((baseClass, index) => {
3246
- if ((0, types_1.isClass)(baseClass) && (0, enums_1.isEnumClassWithMembers)(this._evaluator, baseClass)) {
3265
+ if ((0, types_1.isClass)(baseClass) && (0, enums_1.isEnumClassWithMembers)(this._evaluator, baseClass, this._nodeInfo)) {
3247
3266
  this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.enumClassOverride().format({ name: baseClass.shared.name }), node.d.arguments[index]);
3248
3267
  }
3249
3268
  });
@@ -3255,8 +3274,9 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3255
3274
  const emitBadStatementError = (node) => {
3256
3275
  this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.typedDictBadVar(), node);
3257
3276
  };
3277
+ const nodeInfo = this._nodeInfo;
3258
3278
  function validateStatement(statement) {
3259
- if (AnalyzerNodeInfo.isCodeUnreachable(statement)) {
3279
+ if (nodeInfo.isCodeUnreachable(statement)) {
3260
3280
  return;
3261
3281
  }
3262
3282
  if (statement.nodeType === 47 /* ParseNodeType.StatementList */) {
@@ -3271,7 +3291,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3271
3291
  return;
3272
3292
  }
3273
3293
  if (statement.nodeType === 22 /* ParseNodeType.If */) {
3274
- const conditionValue = AnalyzerNodeInfo.getStaticConditionValue(statement);
3294
+ const conditionValue = nodeInfo.getStaticConditionValue(statement);
3275
3295
  if (conditionValue === undefined) {
3276
3296
  emitBadStatementError(statement);
3277
3297
  return;
@@ -3297,12 +3317,16 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3297
3317
  if (!returnType) {
3298
3318
  return;
3299
3319
  }
3300
- if (!(0, types_1.isClassInstance)(returnType) || !returnType.priv.typeArgs || returnType.priv.typeArgs.length < 1) {
3301
- return;
3302
- }
3303
- const isTypeGuard = types_1.ClassType.isBuiltIn(returnType, 'TypeGuard');
3304
- const isTypeIs = types_1.ClassType.isBuiltIn(returnType, 'TypeIs');
3305
- if (!isTypeGuard && !isTypeIs) {
3320
+ const guardSubtypes = [];
3321
+ (0, typeUtils_1.doForEachSubtype)(returnType, (subtype) => {
3322
+ if ((0, types_1.isClassInstance)(subtype) &&
3323
+ (types_1.ClassType.isBuiltIn(subtype, 'TypeGuard') || types_1.ClassType.isBuiltIn(subtype, 'TypeIs')) &&
3324
+ subtype.priv.typeArgs &&
3325
+ subtype.priv.typeArgs.length >= 1) {
3326
+ guardSubtypes.push(subtype);
3327
+ }
3328
+ });
3329
+ if (guardSubtypes.length === 0) {
3306
3330
  return;
3307
3331
  }
3308
3332
  // Make sure there's at least one input parameter provided.
@@ -3317,25 +3341,27 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3317
3341
  if (paramCount < 1) {
3318
3342
  this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.typeGuardParamCount(), node.d.name);
3319
3343
  }
3320
- if (isTypeIs) {
3321
- const scopeIds = (0, typeUtils_1.getTypeVarScopeIds)(functionType);
3322
- const narrowedType = returnType.priv.typeArgs[0];
3323
- let typeGuardType = (0, typeUtils_1.makeTypeVarsBound)(narrowedType, scopeIds);
3324
- typeGuardType = types_1.TypeBase.cloneWithTypeForm(typeGuardType, typeGuardType);
3325
- // Determine the type of the first parameter.
3326
- const paramIndex = isMethod && !types_1.FunctionType.isStaticMethod(functionType) ? 1 : 0;
3327
- if (paramIndex >= functionType.shared.parameters.length) {
3328
- return;
3329
- }
3330
- const paramType = (0, typeUtils_1.makeTypeVarsBound)(types_1.FunctionType.getParamType(functionType, paramIndex), scopeIds);
3331
- // Verify that the typeGuardType is a narrower type than the paramType.
3332
- if (!this._evaluator.assignType(paramType, typeGuardType)) {
3333
- const returnAnnotation = node.d.returnAnnotation || node.d.funcAnnotationComment?.d.returnAnnotation;
3334
- if (returnAnnotation) {
3335
- this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.typeIsReturnType().format({
3336
- type: this._evaluator.printType(paramType),
3337
- returnType: this._evaluator.printType(narrowedType),
3338
- }), returnAnnotation);
3344
+ const scopeIds = (0, typeUtils_1.getTypeVarScopeIds)(functionType);
3345
+ // Determine the type of the first parameter.
3346
+ const paramIndex = isMethod && !types_1.FunctionType.isStaticMethod(functionType) ? 1 : 0;
3347
+ if (paramIndex >= functionType.shared.parameters.length) {
3348
+ return;
3349
+ }
3350
+ const paramType = (0, typeUtils_1.makeTypeVarsBound)(types_1.FunctionType.getParamType(functionType, paramIndex), scopeIds);
3351
+ for (const guardSubtype of guardSubtypes) {
3352
+ if (types_1.ClassType.isBuiltIn(guardSubtype, 'TypeIs')) {
3353
+ const narrowedType = guardSubtype.priv.typeArgs[0];
3354
+ let typeGuardType = (0, typeUtils_1.makeTypeVarsBound)(narrowedType, scopeIds);
3355
+ typeGuardType = types_1.TypeBase.cloneWithTypeForm(typeGuardType, typeGuardType);
3356
+ // Verify that the typeGuardType is a narrower type than the paramType.
3357
+ if (!this._evaluator.assignType(paramType, typeGuardType)) {
3358
+ const returnAnnotation = node.d.returnAnnotation || node.d.funcAnnotationComment?.d.returnAnnotation;
3359
+ if (returnAnnotation) {
3360
+ this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.typeIsReturnType().format({
3361
+ type: this._evaluator.printType(paramType),
3362
+ returnType: this._evaluator.printType(narrowedType),
3363
+ }), returnAnnotation);
3364
+ }
3339
3365
  }
3340
3366
  }
3341
3367
  }
@@ -3375,7 +3401,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3375
3401
  if (declaredReturnType) {
3376
3402
  this._reportUnknownReturnResult(node, declaredReturnType);
3377
3403
  this._validateReturnTypeIsNotContravariant(declaredReturnType, returnAnnotation);
3378
- const liveScopes = ParseTreeUtils.getTypeVarScopesForNode(node);
3404
+ const liveScopes = ParseTreeUtils.getTypeVarScopesForNode(node, this._nodeInfo);
3379
3405
  declaredReturnType = (0, typeUtils_1.makeTypeVarsBound)(declaredReturnType, liveScopes);
3380
3406
  }
3381
3407
  // Wrap the declared type in a generator type if the function is a generator.
@@ -3503,7 +3529,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3503
3529
  // type checking perspective, if the runtime treats the assignment
3504
3530
  // as an enum member but there is a type annotation present, it is
3505
3531
  // considered a type checking error.
3506
- const symbolType = (0, enums_1.transformTypeForEnumMember)(this._evaluator, classType, name,
3532
+ const symbolType = (0, enums_1.transformTypeForEnumMember)(this._evaluator, classType, name, this._nodeInfo,
3507
3533
  /* ignoreAnnotation */ true);
3508
3534
  // Is this symbol a literal instance of the enum class?
3509
3535
  if (!symbolType ||
@@ -5299,7 +5325,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
5299
5325
  if (!declaredReturnType) {
5300
5326
  return;
5301
5327
  }
5302
- const liveScopes = ParseTreeUtils.getTypeVarScopesForNode(node);
5328
+ const liveScopes = ParseTreeUtils.getTypeVarScopesForNode(node, this._nodeInfo);
5303
5329
  declaredReturnType = (0, typeUtils_1.makeTypeVarsBound)(declaredReturnType, liveScopes);
5304
5330
  let generatorType;
5305
5331
  if (!enclosingFunctionNode.d.isAsync &&
@@ -5406,7 +5432,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
5406
5432
  });
5407
5433
  }
5408
5434
  _reportDuplicateImports() {
5409
- const importStatements = (0, importStatementUtils_1.getTopLevelImports)(this._moduleNode);
5435
+ const importStatements = (0, importStatementUtils_1.getTopLevelImports)(this._moduleNode,
5436
+ /* includeImplicitImports */ false, this._nodeInfo);
5410
5437
  const importModuleMap = new Map();
5411
5438
  importStatements.orderedImports.forEach((importStatement) => {
5412
5439
  if (importStatement.node.nodeType === 25 /* ParseNodeType.ImportFrom */) {