@zzzen/pyright-internal 1.2.0-dev.20260809 → 1.2.0-dev.20260823

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 (365) hide show
  1. package/dist/analyzer/analyzerNodeInfo.d.ts +119 -24
  2. package/dist/analyzer/analyzerNodeInfo.js +408 -89
  3. package/dist/analyzer/analyzerNodeInfo.js.map +1 -1
  4. package/dist/analyzer/binder.d.ts +6 -3
  5. package/dist/analyzer/binder.js +157 -70
  6. package/dist/analyzer/binder.js.map +1 -1
  7. package/dist/analyzer/checker.d.ts +5 -2
  8. package/dist/analyzer/checker.js +92 -34
  9. package/dist/analyzer/checker.js.map +1 -1
  10. package/dist/analyzer/codeFlowEngine.d.ts +2 -1
  11. package/dist/analyzer/codeFlowEngine.js +12 -10
  12. package/dist/analyzer/codeFlowEngine.js.map +1 -1
  13. package/dist/analyzer/codeFlowUtils.d.ts +2 -1
  14. package/dist/analyzer/codeFlowUtils.js +2 -3
  15. package/dist/analyzer/codeFlowUtils.js.map +1 -1
  16. package/dist/analyzer/constraintSolver.js +47 -7
  17. package/dist/analyzer/constraintSolver.js.map +1 -1
  18. package/dist/analyzer/constructors.js +18 -8
  19. package/dist/analyzer/constructors.js.map +1 -1
  20. package/dist/analyzer/dataClasses.d.ts +6 -4
  21. package/dist/analyzer/dataClasses.js +119 -75
  22. package/dist/analyzer/dataClasses.js.map +1 -1
  23. package/dist/analyzer/declarationUtils.d.ts +2 -1
  24. package/dist/analyzer/declarationUtils.js +2 -2
  25. package/dist/analyzer/declarationUtils.js.map +1 -1
  26. package/dist/analyzer/decorators.d.ts +5 -4
  27. package/dist/analyzer/decorators.js +38 -21
  28. package/dist/analyzer/decorators.js.map +1 -1
  29. package/dist/analyzer/enums.d.ts +5 -4
  30. package/dist/analyzer/enums.js +11 -10
  31. package/dist/analyzer/enums.js.map +1 -1
  32. package/dist/analyzer/importResolver.d.ts +1 -1
  33. package/dist/analyzer/importResolver.js +5 -3
  34. package/dist/analyzer/importResolver.js.map +1 -1
  35. package/dist/analyzer/importStatementUtils.d.ts +3 -1
  36. package/dist/analyzer/importStatementUtils.js +14 -7
  37. package/dist/analyzer/importStatementUtils.js.map +1 -1
  38. package/dist/analyzer/namedTuples.d.ts +2 -1
  39. package/dist/analyzer/namedTuples.js +3 -4
  40. package/dist/analyzer/namedTuples.js.map +1 -1
  41. package/dist/analyzer/operations.d.ts +3 -2
  42. package/dist/analyzer/operations.js +8 -8
  43. package/dist/analyzer/operations.js.map +1 -1
  44. package/dist/analyzer/packageTypeVerifier.js +2 -2
  45. package/dist/analyzer/packageTypeVerifier.js.map +1 -1
  46. package/dist/analyzer/parseTreeUtils.d.ts +13 -11
  47. package/dist/analyzer/parseTreeUtils.js +62 -36
  48. package/dist/analyzer/parseTreeUtils.js.map +1 -1
  49. package/dist/analyzer/parseTreeWalker.d.ts +7 -2
  50. package/dist/analyzer/parseTreeWalker.js +29 -175
  51. package/dist/analyzer/parseTreeWalker.js.map +1 -1
  52. package/dist/analyzer/patternMatching.d.ts +4 -3
  53. package/dist/analyzer/patternMatching.js +47 -43
  54. package/dist/analyzer/patternMatching.js.map +1 -1
  55. package/dist/analyzer/program.d.ts +12 -0
  56. package/dist/analyzer/program.js +235 -29
  57. package/dist/analyzer/program.js.map +1 -1
  58. package/dist/analyzer/properties.d.ts +4 -3
  59. package/dist/analyzer/properties.js +7 -8
  60. package/dist/analyzer/properties.js.map +1 -1
  61. package/dist/analyzer/protocols.js +14 -2
  62. package/dist/analyzer/protocols.js.map +1 -1
  63. package/dist/analyzer/scope.d.ts +3 -0
  64. package/dist/analyzer/scope.js +10 -0
  65. package/dist/analyzer/scope.js.map +1 -1
  66. package/dist/analyzer/scopeUtils.d.ts +4 -3
  67. package/dist/analyzer/scopeUtils.js +8 -8
  68. package/dist/analyzer/scopeUtils.js.map +1 -1
  69. package/dist/analyzer/sentinel.d.ts +2 -1
  70. package/dist/analyzer/sentinel.js +2 -3
  71. package/dist/analyzer/sentinel.js.map +1 -1
  72. package/dist/analyzer/service.js +28 -10
  73. package/dist/analyzer/service.js.map +1 -1
  74. package/dist/analyzer/sourceEnumerator.d.ts +5 -0
  75. package/dist/analyzer/sourceEnumerator.js +57 -3
  76. package/dist/analyzer/sourceEnumerator.js.map +1 -1
  77. package/dist/analyzer/sourceFile.d.ts +12 -6
  78. package/dist/analyzer/sourceFile.js +73 -50
  79. package/dist/analyzer/sourceFile.js.map +1 -1
  80. package/dist/analyzer/sourceFileInfoUtils.d.ts +1 -0
  81. package/dist/analyzer/sourceFileInfoUtils.js +8 -0
  82. package/dist/analyzer/sourceFileInfoUtils.js.map +1 -1
  83. package/dist/analyzer/sourceMapper.d.ts +4 -1
  84. package/dist/analyzer/sourceMapper.js +14 -8
  85. package/dist/analyzer/sourceMapper.js.map +1 -1
  86. package/dist/analyzer/symbol.d.ts +4 -1
  87. package/dist/analyzer/symbol.js +8 -0
  88. package/dist/analyzer/symbol.js.map +1 -1
  89. package/dist/analyzer/testWalker.js +2 -1
  90. package/dist/analyzer/testWalker.js.map +1 -1
  91. package/dist/analyzer/tracePrinter.d.ts +2 -1
  92. package/dist/analyzer/tracePrinter.js +2 -2
  93. package/dist/analyzer/tracePrinter.js.map +1 -1
  94. package/dist/analyzer/tuples.d.ts +3 -2
  95. package/dist/analyzer/tuples.js +5 -5
  96. package/dist/analyzer/tuples.js.map +1 -1
  97. package/dist/analyzer/typeCacheUtils.d.ts +6 -2
  98. package/dist/analyzer/typeCacheUtils.js +16 -37
  99. package/dist/analyzer/typeCacheUtils.js.map +1 -1
  100. package/dist/analyzer/typeDocStringUtils.d.ts +5 -7
  101. package/dist/analyzer/typeDocStringUtils.js +229 -132
  102. package/dist/analyzer/typeDocStringUtils.js.map +1 -1
  103. package/dist/analyzer/typeEvaluator.d.ts +2 -0
  104. package/dist/analyzer/typeEvaluator.js +1280 -302
  105. package/dist/analyzer/typeEvaluator.js.map +1 -1
  106. package/dist/analyzer/typeEvaluatorTypes.d.ts +2 -0
  107. package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
  108. package/dist/analyzer/typeGuards.d.ts +3 -2
  109. package/dist/analyzer/typeGuards.js +37 -33
  110. package/dist/analyzer/typeGuards.js.map +1 -1
  111. package/dist/analyzer/typeStubWriter.js +12 -9
  112. package/dist/analyzer/typeStubWriter.js.map +1 -1
  113. package/dist/analyzer/typeUtils.js +3 -1
  114. package/dist/analyzer/typeUtils.js.map +1 -1
  115. package/dist/analyzer/typedDicts.d.ts +4 -3
  116. package/dist/analyzer/typedDicts.js +15 -14
  117. package/dist/analyzer/typedDicts.js.map +1 -1
  118. package/dist/analyzer/types.d.ts +11 -1
  119. package/dist/analyzer/types.js +48 -0
  120. package/dist/analyzer/types.js.map +1 -1
  121. package/dist/commands/dumpFileDebugInfoCommand.js +1 -1
  122. package/dist/commands/dumpFileDebugInfoCommand.js.map +1 -1
  123. package/dist/common/collectionUtils.js +15 -6
  124. package/dist/common/collectionUtils.js.map +1 -1
  125. package/dist/common/commandLineOptions.d.ts +1 -0
  126. package/dist/common/commandLineOptions.js.map +1 -1
  127. package/dist/common/configOptions.d.ts +4 -1
  128. package/dist/common/configOptions.js +68 -12
  129. package/dist/common/configOptions.js.map +1 -1
  130. package/dist/common/envVarUtils.d.ts +1 -0
  131. package/dist/common/envVarUtils.js +41 -10
  132. package/dist/common/envVarUtils.js.map +1 -1
  133. package/dist/common/extensibility.d.ts +3 -1
  134. package/dist/common/extensibility.js.map +1 -1
  135. package/dist/common/extraPathGlob.d.ts +12 -0
  136. package/dist/common/extraPathGlob.js +315 -0
  137. package/dist/common/extraPathGlob.js.map +1 -0
  138. package/dist/common/host.d.ts +2 -0
  139. package/dist/common/host.js.map +1 -1
  140. package/dist/common/languageServerInterface.d.ts +2 -1
  141. package/dist/common/languageServerInterface.js.map +1 -1
  142. package/dist/common/pathConsts.d.ts +1 -0
  143. package/dist/common/pathConsts.js +11 -1
  144. package/dist/common/pathConsts.js.map +1 -1
  145. package/dist/common/processUtils.d.ts +4 -2
  146. package/dist/common/processUtils.js +3 -0
  147. package/dist/common/processUtils.js.map +1 -1
  148. package/dist/common/stringUtils.d.ts +6 -0
  149. package/dist/common/stringUtils.js +87 -5
  150. package/dist/common/stringUtils.js.map +1 -1
  151. package/dist/common/textEditTracker.d.ts +3 -1
  152. package/dist/common/textEditTracker.js +8 -6
  153. package/dist/common/textEditTracker.js.map +1 -1
  154. package/dist/common/textRangeCollection.d.ts +1 -0
  155. package/dist/common/textRangeCollection.js +32 -1
  156. package/dist/common/textRangeCollection.js.map +1 -1
  157. package/dist/common/uri/uriUtils.d.ts +3 -0
  158. package/dist/common/uri/uriUtils.js +65 -15
  159. package/dist/common/uri/uriUtils.js.map +1 -1
  160. package/dist/fileSystemMapping.d.ts +10 -0
  161. package/dist/fileSystemMapping.js +176 -0
  162. package/dist/fileSystemMapping.js.map +1 -0
  163. package/dist/languageService/analyzerServiceExecutor.js +2 -1
  164. package/dist/languageService/analyzerServiceExecutor.js.map +1 -1
  165. package/dist/languageService/autoImporter.d.ts +1 -0
  166. package/dist/languageService/autoImporter.js +32 -5
  167. package/dist/languageService/autoImporter.js.map +1 -1
  168. package/dist/languageService/callHierarchyProvider.d.ts +7 -0
  169. package/dist/languageService/callHierarchyProvider.js +97 -11
  170. package/dist/languageService/callHierarchyProvider.js.map +1 -1
  171. package/dist/languageService/completionProvider.d.ts +30 -8
  172. package/dist/languageService/completionProvider.js +298 -93
  173. package/dist/languageService/completionProvider.js.map +1 -1
  174. package/dist/languageService/definitionProvider.js +7 -6
  175. package/dist/languageService/definitionProvider.js.map +1 -1
  176. package/dist/languageService/documentHighlightProvider.js +2 -1
  177. package/dist/languageService/documentHighlightProvider.js.map +1 -1
  178. package/dist/languageService/documentSymbolCollector.d.ts +3 -1
  179. package/dist/languageService/documentSymbolCollector.js +78 -14
  180. package/dist/languageService/documentSymbolCollector.js.map +1 -1
  181. package/dist/languageService/documentSymbolProvider.js +3 -2
  182. package/dist/languageService/documentSymbolProvider.js.map +1 -1
  183. package/dist/languageService/fileWatcherDynamicFeature.js +28 -1
  184. package/dist/languageService/fileWatcherDynamicFeature.js.map +1 -1
  185. package/dist/languageService/hoverProvider.d.ts +2 -1
  186. package/dist/languageService/hoverProvider.js +48 -16
  187. package/dist/languageService/hoverProvider.js.map +1 -1
  188. package/dist/languageService/importSorter.d.ts +3 -1
  189. package/dist/languageService/importSorter.js +4 -2
  190. package/dist/languageService/importSorter.js.map +1 -1
  191. package/dist/languageService/importStatementCandidates.js +4 -2
  192. package/dist/languageService/importStatementCandidates.js.map +1 -1
  193. package/dist/languageService/quickActions.js +2 -1
  194. package/dist/languageService/quickActions.js.map +1 -1
  195. package/dist/languageService/referencesProvider.js +12 -5
  196. package/dist/languageService/referencesProvider.js.map +1 -1
  197. package/dist/languageService/signatureHelpProvider.d.ts +3 -0
  198. package/dist/languageService/signatureHelpProvider.js +56 -18
  199. package/dist/languageService/signatureHelpProvider.js.map +1 -1
  200. package/dist/languageService/symbolIndexer.d.ts +2 -1
  201. package/dist/languageService/symbolIndexer.js +7 -7
  202. package/dist/languageService/symbolIndexer.js.map +1 -1
  203. package/dist/languageService/tooltipUtils.d.ts +1 -1
  204. package/dist/languageService/tooltipUtils.js +103 -35
  205. package/dist/languageService/tooltipUtils.js.map +1 -1
  206. package/dist/languageService/workspaceSymbolProvider.js +3 -2
  207. package/dist/languageService/workspaceSymbolProvider.js.map +1 -1
  208. package/dist/localization/localize.d.ts +12 -0
  209. package/dist/localization/localize.js +14 -0
  210. package/dist/localization/localize.js.map +1 -1
  211. package/dist/localization/package.nls.cs.json +11 -0
  212. package/dist/localization/package.nls.de.json +11 -0
  213. package/dist/localization/package.nls.en-us.json +18 -0
  214. package/dist/localization/package.nls.es.json +11 -0
  215. package/dist/localization/package.nls.fr.json +11 -0
  216. package/dist/localization/package.nls.it.json +11 -0
  217. package/dist/localization/package.nls.ja.json +11 -0
  218. package/dist/localization/package.nls.ko.json +11 -0
  219. package/dist/localization/package.nls.pl.json +11 -0
  220. package/dist/localization/package.nls.pt-br.json +11 -0
  221. package/dist/localization/package.nls.qps-ploc.json +11 -0
  222. package/dist/localization/package.nls.ru.json +11 -0
  223. package/dist/localization/package.nls.tr.json +11 -0
  224. package/dist/localization/package.nls.zh-cn.json +12 -1
  225. package/dist/localization/package.nls.zh-tw.json +13 -2
  226. package/dist/parser/parseNodes.d.ts +85 -80
  227. package/dist/parser/parseNodes.js +182 -159
  228. package/dist/parser/parseNodes.js.map +1 -1
  229. package/dist/parser/parseTreeUtils.d.ts +3 -0
  230. package/dist/parser/parseTreeUtils.js +209 -0
  231. package/dist/parser/parseTreeUtils.js.map +1 -0
  232. package/dist/parser/parser.d.ts +16 -6
  233. package/dist/parser/parser.js +210 -144
  234. package/dist/parser/parser.js.map +1 -1
  235. package/dist/parser/stringAnnotationInfo.d.ts +16 -0
  236. package/dist/parser/stringAnnotationInfo.js +26 -0
  237. package/dist/parser/stringAnnotationInfo.js.map +1 -0
  238. package/dist/readonlyAugmentedFileSystem.d.ts +2 -9
  239. package/dist/readonlyAugmentedFileSystem.js +17 -144
  240. package/dist/readonlyAugmentedFileSystem.js.map +1 -1
  241. package/dist/server.js +2 -2
  242. package/dist/server.js.map +1 -1
  243. package/dist/tests/analyzerNodeInfo.test.d.ts +1 -0
  244. package/dist/tests/analyzerNodeInfo.test.js +113 -0
  245. package/dist/tests/analyzerNodeInfo.test.js.map +1 -0
  246. package/dist/tests/collectionUtils.test.js +46 -0
  247. package/dist/tests/collectionUtils.test.js.map +1 -1
  248. package/dist/tests/completions.test.js +34 -0
  249. package/dist/tests/completions.test.js.map +1 -1
  250. package/dist/tests/config.test.js +131 -6
  251. package/dist/tests/config.test.js.map +1 -1
  252. package/dist/tests/extraPathGlob.test.d.ts +1 -0
  253. package/dist/tests/extraPathGlob.test.js +434 -0
  254. package/dist/tests/extraPathGlob.test.js.map +1 -0
  255. package/dist/tests/fileSystemMapping.test.d.ts +1 -0
  256. package/dist/tests/fileSystemMapping.test.js +458 -0
  257. package/dist/tests/fileSystemMapping.test.js.map +1 -0
  258. package/dist/tests/fourslash/completions.call.typedDict.fourslash.js +23 -0
  259. package/dist/tests/fourslash/completions.call.typedDict.fourslash.js.map +1 -1
  260. package/dist/tests/fourslash/completions.call.typedDict.list.fourslash.js +14 -0
  261. package/dist/tests/fourslash/completions.call.typedDict.list.fourslash.js.map +1 -1
  262. package/dist/tests/fourslash/completions.call.typedDict.states.fourslash.js +7 -0
  263. package/dist/tests/fourslash/completions.call.typedDict.states.fourslash.js.map +1 -1
  264. package/dist/tests/fourslash/completions.callSite.isinstanceNarrowing.fourslash.d.ts +1 -0
  265. package/dist/tests/fourslash/completions.callSite.isinstanceNarrowing.fourslash.js +41 -0
  266. package/dist/tests/fourslash/completions.callSite.isinstanceNarrowing.fourslash.js.map +1 -0
  267. package/dist/tests/fourslash/completions.dictionary.keys.literalTypes.fourslash.js +2 -0
  268. package/dist/tests/fourslash/completions.dictionary.keys.literalTypes.fourslash.js.map +1 -1
  269. package/dist/tests/fourslash/completions.fstring.stringLiteral.fourslash.js +5 -0
  270. package/dist/tests/fourslash/completions.fstring.stringLiteral.fourslash.js.map +1 -1
  271. package/dist/tests/fourslash/completions.stringLiteral.fourslash.js +4 -0
  272. package/dist/tests/fourslash/completions.stringLiteral.fourslash.js.map +1 -1
  273. package/dist/tests/fourslash/findallreferences.protocolMemberVariable.fourslash.d.ts +1 -0
  274. package/dist/tests/fourslash/findallreferences.protocolMemberVariable.fourslash.js +48 -0
  275. package/dist/tests/fourslash/findallreferences.protocolMemberVariable.fourslash.js.map +1 -0
  276. package/dist/tests/fourslash/hover.inherited.docFromSrc.fourslash.js +8 -2
  277. package/dist/tests/fourslash/hover.inherited.docFromSrc.fourslash.js.map +1 -1
  278. package/dist/tests/fourslash/hover.inherited.docFromStub.fourslash.js +5 -2
  279. package/dist/tests/fourslash/hover.inherited.docFromStub.fourslash.js.map +1 -1
  280. package/dist/tests/fourslash/signature.docstrings.overloaded.fourslash.js +2 -2
  281. package/dist/tests/fourslash/signature.docstrings.overloaded.fourslash.js.map +1 -1
  282. package/dist/tests/harness/fourslash/testState.js +1 -1
  283. package/dist/tests/harness/fourslash/testState.js.map +1 -1
  284. package/dist/tests/hoverProvider.test.js +38 -0
  285. package/dist/tests/hoverProvider.test.js.map +1 -1
  286. package/dist/tests/importStatementUtils.test.js +6 -3
  287. package/dist/tests/importStatementUtils.test.js.map +1 -1
  288. package/dist/tests/ipythonMode.test.js +38 -0
  289. package/dist/tests/ipythonMode.test.js.map +1 -1
  290. package/dist/tests/parseTreeUtils.test.js +88 -0
  291. package/dist/tests/parseTreeUtils.test.js.map +1 -1
  292. package/dist/tests/parser.test.js +60 -3
  293. package/dist/tests/parser.test.js.map +1 -1
  294. package/dist/tests/positionUtils.test.js +23 -0
  295. package/dist/tests/positionUtils.test.js.map +1 -1
  296. package/dist/tests/pyrightFileSystem.test.js +41 -0
  297. package/dist/tests/pyrightFileSystem.test.js.map +1 -1
  298. package/dist/tests/service.test.js +77 -0
  299. package/dist/tests/service.test.js.map +1 -1
  300. package/dist/tests/sourceEnumeratorSymlink.test.d.ts +1 -0
  301. package/dist/tests/sourceEnumeratorSymlink.test.js +203 -0
  302. package/dist/tests/sourceEnumeratorSymlink.test.js.map +1 -0
  303. package/dist/tests/stringUtils.test.js +84 -0
  304. package/dist/tests/stringUtils.test.js.map +1 -1
  305. package/dist/tests/symlinkAliasInvalidation.test.d.ts +1 -0
  306. package/dist/tests/symlinkAliasInvalidation.test.js +471 -0
  307. package/dist/tests/symlinkAliasInvalidation.test.js.map +1 -0
  308. package/dist/tests/testUtils.d.ts +2 -0
  309. package/dist/tests/testUtils.js +7 -1
  310. package/dist/tests/testUtils.js.map +1 -1
  311. package/dist/tests/textEditUtil.test.js +2 -2
  312. package/dist/tests/textEditUtil.test.js.map +1 -1
  313. package/dist/tests/textRangeCollection.test.d.ts +1 -0
  314. package/dist/tests/textRangeCollection.test.js +137 -0
  315. package/dist/tests/textRangeCollection.test.js.map +1 -0
  316. package/dist/tests/typeCacheUtils.test.d.ts +1 -0
  317. package/dist/tests/typeCacheUtils.test.js +69 -0
  318. package/dist/tests/typeCacheUtils.test.js.map +1 -0
  319. package/dist/tests/typeEvaluator1.test.js +24 -3
  320. package/dist/tests/typeEvaluator1.test.js.map +1 -1
  321. package/dist/tests/typeEvaluator3.test.js +8 -0
  322. package/dist/tests/typeEvaluator3.test.js.map +1 -1
  323. package/dist/tests/typeEvaluator4.test.js +4 -0
  324. package/dist/tests/typeEvaluator4.test.js.map +1 -1
  325. package/dist/tests/typeEvaluator5.test.js +12 -0
  326. package/dist/tests/typeEvaluator5.test.js.map +1 -1
  327. package/dist/tests/typeEvaluator6.test.js +33 -1
  328. package/dist/tests/typeEvaluator6.test.js.map +1 -1
  329. package/dist/tests/typeEvaluator7.test.js +29 -0
  330. package/dist/tests/typeEvaluator7.test.js.map +1 -1
  331. package/dist/tests/typeEvaluator8.test.js +318 -4
  332. package/dist/tests/typeEvaluator8.test.js.map +1 -1
  333. package/dist/tests/typeServer/typeCache.test.d.ts +1 -0
  334. package/dist/tests/typeServer/typeCache.test.js +69 -0
  335. package/dist/tests/typeServer/typeCache.test.js.map +1 -0
  336. package/dist/tests/typeServer/typeServer.virtualFileRedirect.test.js +18 -0
  337. package/dist/tests/typeServer/typeServer.virtualFileRedirect.test.js.map +1 -1
  338. package/dist/tests/types.test.d.ts +1 -0
  339. package/dist/{analyzer/parseTreeCleaner.js → tests/types.test.js} +23 -25
  340. package/dist/tests/types.test.js.map +1 -0
  341. package/dist/tests/uri.test.js +51 -0
  342. package/dist/tests/uri.test.js.map +1 -1
  343. package/dist/typeServer/notebookDocumentHandler.d.ts +9 -2
  344. package/dist/typeServer/notebookDocumentHandler.js +16 -6
  345. package/dist/typeServer/notebookDocumentHandler.js.map +1 -1
  346. package/dist/typeServer/programWrapper.d.ts +1 -0
  347. package/dist/typeServer/programWrapper.js +28 -15
  348. package/dist/typeServer/programWrapper.js.map +1 -1
  349. package/dist/typeServer/protocol/tspSupplemental.d.ts +1 -1
  350. package/dist/typeServer/protocol/tspSupplemental.js +2 -2
  351. package/dist/typeServer/server.d.ts +13 -2
  352. package/dist/typeServer/server.js +36 -23
  353. package/dist/typeServer/server.js.map +1 -1
  354. package/dist/typeServer/typeCache.d.ts +8 -4
  355. package/dist/typeServer/typeCache.js +33 -5
  356. package/dist/typeServer/typeCache.js.map +1 -1
  357. package/dist/typeServer/typeEvalUtils.d.ts +2 -1
  358. package/dist/typeServer/typeEvalUtils.js +7 -3
  359. package/dist/typeServer/typeEvalUtils.js.map +1 -1
  360. package/dist/typeServer/typeServerFileSystem.d.ts +10 -9
  361. package/dist/typeServer/typeServerFileSystem.js +16 -12
  362. package/dist/typeServer/typeServerFileSystem.js.map +1 -1
  363. package/package.json +7 -5
  364. package/dist/analyzer/parseTreeCleaner.d.ts +0 -8
  365. package/dist/analyzer/parseTreeCleaner.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;
@@ -132,6 +134,7 @@ export declare class Checker extends ParseTreeWalker {
132
134
  private _validateProtocolTypeParamVariance;
133
135
  private _validateSlotsClassVarConflict;
134
136
  private _validateConstructorConsistency;
137
+ private _validateDisjointBaseClass;
135
138
  private _validateMultipleInheritanceBaseClasses;
136
139
  private _validateMultipleInheritanceCompatibility;
137
140
  private _validateMultipleInheritanceOverride;
@@ -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 {
@@ -192,6 +199,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
192
199
  this._validateBaseClassOverrides(classTypeResult.classType);
193
200
  this._validateTypedDictOverrides(classTypeResult.classType);
194
201
  this._validateOverloadDecoratorConsistency(classTypeResult.classType);
202
+ this._validateDisjointBaseClass(classTypeResult.classType, node.d.name);
195
203
  this._validateMultipleInheritanceBaseClasses(classTypeResult.classType, node.d.name);
196
204
  this._validateMultipleInheritanceCompatibility(classTypeResult.classType, node.d.name);
197
205
  this._validateConstructorConsistency(classTypeResult.classType, node.d.name);
@@ -391,7 +399,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
391
399
  this.walk(param.d.name);
392
400
  }
393
401
  });
394
- const codeComplexity = AnalyzerNodeInfo.getCodeFlowComplexity(node);
402
+ const codeComplexity = this._nodeInfo.getCodeFlowComplexity(node);
395
403
  const isTooComplexToAnalyze = codeComplexity > typeEvaluator_1.maxCodeComplexity;
396
404
  if (isPrintCodeComplexityEnabled) {
397
405
  console.log(`Code complexity of function ${node.d.name.d.value} is ${codeComplexity.toString()}`);
@@ -423,7 +431,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
423
431
  // if there is a '__getattr__' function defined when in strict mode.
424
432
  // This signifies an incomplete stub file that obscures type errors.
425
433
  if (this._fileInfo.isStubFile && node.d.name.d.value === '__getattr__') {
426
- const scope = (0, scopeUtils_1.getScopeForNode)(node);
434
+ const scope = (0, scopeUtils_1.getScopeForNode)(node, this._nodeInfo);
427
435
  if (scope?.type === 4 /* ScopeType.Module */) {
428
436
  this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportIncompleteStub, localize_1.LocMessage.stubUsesGetAttr(), node.d.name);
429
437
  }
@@ -586,7 +594,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
586
594
  // statement is not allowed to have an argument. A syntax error occurs
587
595
  // at runtime in this case.
588
596
  if (enclosingFunctionNode?.d.isAsync && node.d.expr) {
589
- const functionDecl = AnalyzerNodeInfo.getDeclaration(enclosingFunctionNode);
597
+ const functionDecl = this._nodeInfo.getDeclaration(enclosingFunctionNode);
590
598
  if (functionDecl?.type === 5 /* DeclarationType.Function */ && functionDecl.isGenerator) {
591
599
  this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.returnInAsyncGenerator(), node.d.expr);
592
600
  }
@@ -597,7 +605,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
597
605
  this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.noReturnContainsReturn(), node);
598
606
  }
599
607
  else {
600
- const liveScopes = ParseTreeUtils.getTypeVarScopesForNode(node);
608
+ const liveScopes = ParseTreeUtils.getTypeVarScopesForNode(node, this._nodeInfo);
601
609
  declaredReturnType = this._evaluator.stripTypeGuard(declaredReturnType);
602
610
  let adjReturnType = (0, typeUtils_1.makeTypeVarsBound)(declaredReturnType, liveScopes);
603
611
  let diagAddendum = new diagnostic_1.DiagnosticAddendum();
@@ -740,7 +748,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
740
748
  if (node.d.leftExpr.nodeType === 54 /* ParseNodeType.TypeAnnotation */) {
741
749
  const annotationType = this._evaluator.getTypeOfAnnotation(node.d.leftExpr.d.annotation);
742
750
  if ((0, types_1.isClassInstance)(annotationType) && types_1.ClassType.isBuiltIn(annotationType, 'TypeAlias')) {
743
- const scope = (0, scopeUtils_1.getScopeForNode)(node);
751
+ const scope = (0, scopeUtils_1.getScopeForNode)(node, this._nodeInfo);
744
752
  if (scope) {
745
753
  if (scope.type !== 3 /* ScopeType.Class */ &&
746
754
  scope.type !== 4 /* ScopeType.Module */ &&
@@ -900,7 +908,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
900
908
  }
901
909
  }
902
910
  }
903
- if (node.d.annotation) {
911
+ if (AnalyzerNodeInfo.getStringAnnotation(node, AnalyzerNodeInfo.getInfoReader(this._evaluator))) {
904
912
  this._evaluator.getType(node);
905
913
  }
906
914
  if (node.d.strings.length > 1 && !node.d.hasParens) {
@@ -994,7 +1002,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
994
1002
  }
995
1003
  else {
996
1004
  this._evaluator.evaluateTypesForStatement(node);
997
- const importInfo = AnalyzerNodeInfo.getImportInfo(node.d.module);
1005
+ const importInfo = this._nodeInfo.getImportInfo(node.d.module);
998
1006
  if (importInfo &&
999
1007
  importInfo.isImportFound &&
1000
1008
  importInfo.importType !== 2 /* ImportType.Local */ &&
@@ -1046,7 +1054,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1046
1054
  if (this._fileInfo.isStubFile) {
1047
1055
  return false;
1048
1056
  }
1049
- const importResult = AnalyzerNodeInfo.getImportInfo(node);
1057
+ const importResult = this._nodeInfo.getImportInfo(node);
1050
1058
  (0, debug_1.assert)(importResult !== undefined);
1051
1059
  this._addMissingModuleSourceDiagnosticIfNeeded(importResult, node);
1052
1060
  return false;
@@ -1087,7 +1095,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1087
1095
  return false;
1088
1096
  }
1089
1097
  visitTypeAlias(node) {
1090
- const scope = (0, scopeUtils_1.getScopeForNode)(node);
1098
+ const scope = (0, scopeUtils_1.getScopeForNode)(node, this._nodeInfo);
1091
1099
  if (scope) {
1092
1100
  if (scope.type !== 3 /* ScopeType.Class */ && scope.type !== 4 /* ScopeType.Module */ && scope.type !== 5 /* ScopeType.Builtin */) {
1093
1101
  this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.typeAliasStatementBadScope(), node.d.name);
@@ -1577,7 +1585,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1577
1585
  const nameType = this._evaluator.getType(nameNode);
1578
1586
  if (nameType && (0, types_1.isTypeVar)(nameType) && !types_1.TypeVarType.isSelf(nameType)) {
1579
1587
  // Does this name refer to a TypeVar that is scoped to this function?
1580
- if (nameType.priv.scopeId === ParseTreeUtils.getScopeIdForNode(node)) {
1588
+ if (nameType.priv.scopeId === ParseTreeUtils.getScopeIdForNode(node, this._nodeInfo)) {
1581
1589
  // We exempt constrained TypeVars, TypeVars that are type arguments of
1582
1590
  // other types, and ParamSpecs. There are legitimate uses for singleton
1583
1591
  // instances in these particular cases.
@@ -1863,14 +1871,14 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1863
1871
  }
1864
1872
  const functionNode = functionType.shared.declaration?.node;
1865
1873
  if (functionNode) {
1866
- const liveTypeVars = ParseTreeUtils.getTypeVarScopesForNode(functionNode);
1874
+ const liveTypeVars = ParseTreeUtils.getTypeVarScopesForNode(functionNode, this._nodeInfo);
1867
1875
  functionType = (0, typeUtils_1.makeTypeVarsBound)(functionType, liveTypeVars);
1868
1876
  }
1869
1877
  // Use the parent node of the declaration in this case so we don't transform
1870
1878
  // function-local type variables into bound type variables.
1871
1879
  const prevOverloadNode = prevOverload.shared.declaration?.node?.parent;
1872
1880
  if (prevOverloadNode) {
1873
- const liveTypeVars = ParseTreeUtils.getTypeVarScopesForNode(prevOverloadNode);
1881
+ const liveTypeVars = ParseTreeUtils.getTypeVarScopesForNode(prevOverloadNode, this._nodeInfo);
1874
1882
  prevOverload = (0, typeUtils_1.makeTypeVarsBound)(prevOverload, liveTypeVars);
1875
1883
  }
1876
1884
  return this._evaluator.assignType(functionType, prevOverload,
@@ -1887,12 +1895,12 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1887
1895
  let overloadBound = overload;
1888
1896
  const implNode = implementation.shared.declaration?.node?.parent;
1889
1897
  if (implNode) {
1890
- const liveScopeIds = ParseTreeUtils.getTypeVarScopesForNode(implNode);
1898
+ const liveScopeIds = ParseTreeUtils.getTypeVarScopesForNode(implNode, this._nodeInfo);
1891
1899
  implBound = (0, typeUtils_1.makeTypeVarsBound)(implementation, liveScopeIds);
1892
1900
  }
1893
1901
  const overloadNode = overload.shared.declaration?.node;
1894
1902
  if (overloadNode) {
1895
- const liveScopeIds = ParseTreeUtils.getTypeVarScopesForNode(overloadNode);
1903
+ const liveScopeIds = ParseTreeUtils.getTypeVarScopesForNode(overloadNode, this._nodeInfo);
1896
1904
  overloadBound = (0, typeUtils_1.makeTypeVarsBound)(overload, liveScopeIds);
1897
1905
  }
1898
1906
  // First check the parameters to see if they are assignable.
@@ -2085,7 +2093,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2085
2093
  if (this._fileInfo.diagnosticRuleSet.reportUnsupportedDunderAll === 'none') {
2086
2094
  return;
2087
2095
  }
2088
- const moduleScope = AnalyzerNodeInfo.getScope(this._moduleNode);
2096
+ const moduleScope = this._nodeInfo.getScope(this._moduleNode);
2089
2097
  if (!moduleScope) {
2090
2098
  return;
2091
2099
  }
@@ -2096,9 +2104,9 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2096
2104
  });
2097
2105
  }
2098
2106
  _validateSymbolTables() {
2099
- const dependentFileInfo = this._dependentFiles?.map((p) => AnalyzerNodeInfo.getFileInfo(p.parseTree));
2107
+ const dependentFileInfo = this._dependentFiles?.map((p) => this._nodeInfo.getFileInfo(p.parseTree));
2100
2108
  for (const scopedNode of this._scopedNodes) {
2101
- const scope = AnalyzerNodeInfo.getScope(scopedNode);
2109
+ const scope = this._nodeInfo.getScope(scopedNode);
2102
2110
  if (scope) {
2103
2111
  scope.symbolTable.forEach((symbol, name) => {
2104
2112
  this._conditionallyReportUnusedSymbol(name, symbol, scope.type, dependentFileInfo);
@@ -2115,7 +2123,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2115
2123
  // Report unaccessed type parameters.
2116
2124
  const accessedSymbolSet = this._fileInfo.accessedSymbolSet;
2117
2125
  for (const paramList of this._typeParamLists) {
2118
- const typeParamScope = AnalyzerNodeInfo.getScope(paramList);
2126
+ const typeParamScope = this._nodeInfo.getScope(paramList);
2119
2127
  for (const param of paramList.d.params) {
2120
2128
  const symbol = typeParamScope?.symbolTable.get(param.d.name.d.value);
2121
2129
  if (!symbol) {
@@ -2662,6 +2670,12 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2662
2670
  if (this._fileInfo.isStubFile) {
2663
2671
  return;
2664
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
+ }
2665
2679
  diagnosticLevel = this._fileInfo.diagnosticRuleSet.reportUnusedClass;
2666
2680
  nameNode = decl.node.d.name;
2667
2681
  rule = diagnosticRules_1.DiagnosticRule.reportUnusedClass;
@@ -2676,6 +2690,12 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2676
2690
  if (this._fileInfo.isStubFile) {
2677
2691
  return;
2678
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
+ }
2679
2699
  diagnosticLevel = this._fileInfo.diagnosticRuleSet.reportUnusedFunction;
2680
2700
  nameNode = decl.node.d.name;
2681
2701
  rule = diagnosticRules_1.DiagnosticRule.reportUnusedFunction;
@@ -2785,10 +2805,10 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2785
2805
  if (this._fileInfo.diagnosticRuleSet.reportUnnecessaryIsInstance !== 'none') {
2786
2806
  const narrowedTypeNegative = (0, typeGuards_1.narrowTypeForInstanceOrSubclass)(this._evaluator, arg0Type, classTypeList, isInstanceCheck,
2787
2807
  /* isTypeIsCheck */ false,
2788
- /* isPositiveTest */ false, node);
2808
+ /* isPositiveTest */ false, node, this._nodeInfo);
2789
2809
  const narrowedTypePositive = (0, typeGuards_1.narrowTypeForInstanceOrSubclass)(this._evaluator, arg0Type, classTypeList, isInstanceCheck,
2790
2810
  /* isTypeIsCheck */ false,
2791
- /* isPositiveTest */ true, node);
2811
+ /* isPositiveTest */ true, node, this._nodeInfo);
2792
2812
  const isAlwaysTrue = (0, types_1.isNever)(narrowedTypeNegative);
2793
2813
  const isNeverTrue = (0, types_1.isNever)(narrowedTypePositive);
2794
2814
  if (isAlwaysTrue || isNeverTrue) {
@@ -3126,7 +3146,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3126
3146
  if (node.parent?.nodeType === 1 /* ParseNodeType.Argument */ && node.parent.d.name === node) {
3127
3147
  return;
3128
3148
  }
3129
- if (!AnalyzerNodeInfo.isCodeUnreachable(node)) {
3149
+ if (!this._nodeInfo.isCodeUnreachable(node)) {
3130
3150
  const type = this._evaluator.getType(node);
3131
3151
  if (type) {
3132
3152
  if ((0, types_1.isUnbound)(type)) {
@@ -3242,7 +3262,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3242
3262
  // enum class that has already defined values.
3243
3263
  _validateEnumClassOverride(node, classType) {
3244
3264
  classType.shared.baseClasses.forEach((baseClass, index) => {
3245
- 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)) {
3246
3266
  this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.enumClassOverride().format({ name: baseClass.shared.name }), node.d.arguments[index]);
3247
3267
  }
3248
3268
  });
@@ -3254,8 +3274,9 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3254
3274
  const emitBadStatementError = (node) => {
3255
3275
  this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.typedDictBadVar(), node);
3256
3276
  };
3277
+ const nodeInfo = this._nodeInfo;
3257
3278
  function validateStatement(statement) {
3258
- if (AnalyzerNodeInfo.isCodeUnreachable(statement)) {
3279
+ if (nodeInfo.isCodeUnreachable(statement)) {
3259
3280
  return;
3260
3281
  }
3261
3282
  if (statement.nodeType === 47 /* ParseNodeType.StatementList */) {
@@ -3270,7 +3291,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3270
3291
  return;
3271
3292
  }
3272
3293
  if (statement.nodeType === 22 /* ParseNodeType.If */) {
3273
- const conditionValue = AnalyzerNodeInfo.getStaticConditionValue(statement);
3294
+ const conditionValue = nodeInfo.getStaticConditionValue(statement);
3274
3295
  if (conditionValue === undefined) {
3275
3296
  emitBadStatementError(statement);
3276
3297
  return;
@@ -3374,7 +3395,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3374
3395
  if (declaredReturnType) {
3375
3396
  this._reportUnknownReturnResult(node, declaredReturnType);
3376
3397
  this._validateReturnTypeIsNotContravariant(declaredReturnType, returnAnnotation);
3377
- const liveScopes = ParseTreeUtils.getTypeVarScopesForNode(node);
3398
+ const liveScopes = ParseTreeUtils.getTypeVarScopesForNode(node, this._nodeInfo);
3378
3399
  declaredReturnType = (0, typeUtils_1.makeTypeVarsBound)(declaredReturnType, liveScopes);
3379
3400
  }
3380
3401
  // Wrap the declared type in a generator type if the function is a generator.
@@ -3502,7 +3523,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3502
3523
  // type checking perspective, if the runtime treats the assignment
3503
3524
  // as an enum member but there is a type annotation present, it is
3504
3525
  // considered a type checking error.
3505
- const symbolType = (0, enums_1.transformTypeForEnumMember)(this._evaluator, classType, name,
3526
+ const symbolType = (0, enums_1.transformTypeForEnumMember)(this._evaluator, classType, name, this._nodeInfo,
3506
3527
  /* ignoreAnnotation */ true);
3507
3528
  // Is this symbol a literal instance of the enum class?
3508
3529
  if (!symbolType ||
@@ -3997,6 +4018,42 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3997
4018
  }
3998
4019
  }
3999
4020
  }
4021
+ // Verifies that a class has a unique most-derived disjoint base.
4022
+ _validateDisjointBaseClass(classType, errorNode) {
4023
+ if (classType.shared.baseClasses.length < 2) {
4024
+ return;
4025
+ }
4026
+ const candidates = [];
4027
+ for (const baseClass of classType.shared.baseClasses) {
4028
+ if (!(0, types_1.isInstantiableClass)(baseClass)) {
4029
+ // An unknown base may introduce an unknown disjoint base, but it
4030
+ // cannot make two already-incompatible known bases compatible,
4031
+ // so keep collecting the known candidates.
4032
+ continue;
4033
+ }
4034
+ const candidate = types_1.ClassType.getDisjointBase(baseClass);
4035
+ if (!candidate) {
4036
+ // The base class is invalid or its disjoint base is unknown; an
4037
+ // unknown disjoint base cannot relate two otherwise-incompatible
4038
+ // known candidates, so keep collecting the known candidates.
4039
+ continue;
4040
+ }
4041
+ if (!candidates.some((existingCandidate) => types_1.ClassType.isSameGenericClass(existingCandidate, candidate))) {
4042
+ candidates.push(candidate);
4043
+ }
4044
+ }
4045
+ if (candidates.length > 1 && !types_1.ClassType.getMostDerivedDisjointBase(candidates)) {
4046
+ this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.disjointBaseIncompatible().format({
4047
+ // `object` is a disjoint base but is compatible with every
4048
+ // other disjoint base, so including it in the reported names
4049
+ // would be misleading. Filter it out.
4050
+ bases: candidates
4051
+ .filter((candidate) => !types_1.ClassType.isBuiltIn(candidate, 'object'))
4052
+ .map((candidate) => `"${candidate.shared.name}"`)
4053
+ .join(', '),
4054
+ }), errorNode);
4055
+ }
4056
+ }
4000
4057
  // Verifies that classes that have more than one base class do not have
4001
4058
  // have conflicting type arguments.
4002
4059
  _validateMultipleInheritanceBaseClasses(classType, errorNode) {
@@ -5262,7 +5319,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
5262
5319
  if (!declaredReturnType) {
5263
5320
  return;
5264
5321
  }
5265
- const liveScopes = ParseTreeUtils.getTypeVarScopesForNode(node);
5322
+ const liveScopes = ParseTreeUtils.getTypeVarScopesForNode(node, this._nodeInfo);
5266
5323
  declaredReturnType = (0, typeUtils_1.makeTypeVarsBound)(declaredReturnType, liveScopes);
5267
5324
  let generatorType;
5268
5325
  if (!enclosingFunctionNode.d.isAsync &&
@@ -5369,7 +5426,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
5369
5426
  });
5370
5427
  }
5371
5428
  _reportDuplicateImports() {
5372
- const importStatements = (0, importStatementUtils_1.getTopLevelImports)(this._moduleNode);
5429
+ const importStatements = (0, importStatementUtils_1.getTopLevelImports)(this._moduleNode,
5430
+ /* includeImplicitImports */ false, this._nodeInfo);
5373
5431
  const importModuleMap = new Map();
5374
5432
  importStatements.orderedImports.forEach((importStatement) => {
5375
5433
  if (importStatement.node.nodeType === 25 /* ParseNodeType.ImportFrom */) {