@zzzen/pyright-internal 1.2.0-dev.20231112 → 1.2.0-dev.20231126

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 (400) hide show
  1. package/dist/analyzer/analysis.d.ts +1 -1
  2. package/dist/analyzer/analysis.js +5 -1
  3. package/dist/analyzer/analysis.js.map +1 -1
  4. package/dist/analyzer/analyzerFileInfo.d.ts +1 -1
  5. package/dist/analyzer/analyzerNodeInfo.d.ts +1 -1
  6. package/dist/analyzer/analyzerNodeInfo.js +1 -1
  7. package/dist/analyzer/analyzerNodeInfo.js.map +1 -1
  8. package/dist/analyzer/backgroundAnalysisProgram.d.ts +1 -1
  9. package/dist/analyzer/backgroundAnalysisProgram.js +1 -1
  10. package/dist/analyzer/backgroundAnalysisProgram.js.map +1 -1
  11. package/dist/analyzer/binder.js +198 -194
  12. package/dist/analyzer/binder.js.map +1 -1
  13. package/dist/analyzer/cacheManager.js +1 -1
  14. package/dist/analyzer/cacheManager.js.map +1 -1
  15. package/dist/analyzer/checker.d.ts +1 -0
  16. package/dist/analyzer/checker.js +286 -256
  17. package/dist/analyzer/checker.js.map +1 -1
  18. package/dist/analyzer/codeFlowEngine.d.ts +1 -1
  19. package/dist/analyzer/codeFlowEngine.js +26 -26
  20. package/dist/analyzer/codeFlowEngine.js.map +1 -1
  21. package/dist/analyzer/codeFlowTypes.d.ts +1 -1
  22. package/dist/analyzer/codeFlowTypes.js +23 -23
  23. package/dist/analyzer/codeFlowTypes.js.map +1 -1
  24. package/dist/analyzer/codeFlowUtils.js +39 -37
  25. package/dist/analyzer/codeFlowUtils.js.map +1 -1
  26. package/dist/analyzer/constraintSolver.js +48 -45
  27. package/dist/analyzer/constraintSolver.js.map +1 -1
  28. package/dist/analyzer/constructorTransform.js +8 -8
  29. package/dist/analyzer/constructorTransform.js.map +1 -1
  30. package/dist/analyzer/constructors.js +33 -31
  31. package/dist/analyzer/constructors.js.map +1 -1
  32. package/dist/analyzer/dataClasses.js +67 -63
  33. package/dist/analyzer/dataClasses.js.map +1 -1
  34. package/dist/analyzer/declaration.d.ts +2 -2
  35. package/dist/analyzer/declaration.js +10 -10
  36. package/dist/analyzer/declaration.js.map +1 -1
  37. package/dist/analyzer/declarationUtils.js +44 -41
  38. package/dist/analyzer/declarationUtils.js.map +1 -1
  39. package/dist/analyzer/decorators.js +51 -51
  40. package/dist/analyzer/decorators.js.map +1 -1
  41. package/dist/analyzer/docStringConversion.js +1 -1
  42. package/dist/analyzer/docStringConversion.js.map +1 -1
  43. package/dist/analyzer/docStringUtils.js +1 -1
  44. package/dist/analyzer/enums.js +27 -27
  45. package/dist/analyzer/enums.js.map +1 -1
  46. package/dist/analyzer/functionTransform.js +4 -4
  47. package/dist/analyzer/functionTransform.js.map +1 -1
  48. package/dist/analyzer/importResolver.d.ts +1 -1
  49. package/dist/analyzer/importResolver.js +27 -18
  50. package/dist/analyzer/importResolver.js.map +1 -1
  51. package/dist/analyzer/importResult.js +1 -1
  52. package/dist/analyzer/importResult.js.map +1 -1
  53. package/dist/analyzer/importStatementUtils.js +31 -27
  54. package/dist/analyzer/importStatementUtils.js.map +1 -1
  55. package/dist/analyzer/namedTuples.js +36 -32
  56. package/dist/analyzer/namedTuples.js.map +1 -1
  57. package/dist/analyzer/operations.js +78 -78
  58. package/dist/analyzer/operations.js.map +1 -1
  59. package/dist/analyzer/packageTypeReport.d.ts +1 -1
  60. package/dist/analyzer/packageTypeReport.js +2 -2
  61. package/dist/analyzer/packageTypeReport.js.map +1 -1
  62. package/dist/analyzer/packageTypeVerifier.js +90 -90
  63. package/dist/analyzer/packageTypeVerifier.js.map +1 -1
  64. package/dist/analyzer/parameterUtils.js +14 -14
  65. package/dist/analyzer/parameterUtils.js.map +1 -1
  66. package/dist/analyzer/parentDirectoryCache.d.ts +2 -2
  67. package/dist/analyzer/parseTreeCleaner.js +5 -1
  68. package/dist/analyzer/parseTreeCleaner.js.map +1 -1
  69. package/dist/analyzer/parseTreeUtils.d.ts +1 -1
  70. package/dist/analyzer/parseTreeUtils.js +383 -379
  71. package/dist/analyzer/parseTreeUtils.js.map +1 -1
  72. package/dist/analyzer/parseTreeWalker.js +161 -157
  73. package/dist/analyzer/parseTreeWalker.js.map +1 -1
  74. package/dist/analyzer/patternMatching.d.ts +1 -1
  75. package/dist/analyzer/patternMatching.js +71 -64
  76. package/dist/analyzer/patternMatching.js.map +1 -1
  77. package/dist/analyzer/program.d.ts +1 -1
  78. package/dist/analyzer/program.js +20 -17
  79. package/dist/analyzer/program.js.map +1 -1
  80. package/dist/analyzer/properties.js +53 -44
  81. package/dist/analyzer/properties.js.map +1 -1
  82. package/dist/analyzer/protocols.js +14 -14
  83. package/dist/analyzer/protocols.js.map +1 -1
  84. package/dist/analyzer/pythonPathUtils.js +5 -1
  85. package/dist/analyzer/pythonPathUtils.js.map +1 -1
  86. package/dist/analyzer/regions.js +3 -3
  87. package/dist/analyzer/regions.js.map +1 -1
  88. package/dist/analyzer/scope.js +8 -8
  89. package/dist/analyzer/scope.js.map +1 -1
  90. package/dist/analyzer/scopeUtils.js +1 -1
  91. package/dist/analyzer/scopeUtils.js.map +1 -1
  92. package/dist/analyzer/service.js +5 -1
  93. package/dist/analyzer/service.js.map +1 -1
  94. package/dist/analyzer/sourceFile.js +25 -21
  95. package/dist/analyzer/sourceFile.js.map +1 -1
  96. package/dist/analyzer/sourceMapper.d.ts +2 -2
  97. package/dist/analyzer/sourceMapper.js +15 -8
  98. package/dist/analyzer/sourceMapper.js.map +1 -1
  99. package/dist/analyzer/staticExpressions.js +40 -40
  100. package/dist/analyzer/staticExpressions.js.map +1 -1
  101. package/dist/analyzer/symbol.d.ts +1 -1
  102. package/dist/analyzer/symbol.js +26 -26
  103. package/dist/analyzer/symbol.js.map +1 -1
  104. package/dist/analyzer/symbolUtils.js +1 -1
  105. package/dist/analyzer/symbolUtils.js.map +1 -1
  106. package/dist/analyzer/testWalker.js +5 -5
  107. package/dist/analyzer/testWalker.js.map +1 -1
  108. package/dist/analyzer/tracePrinter.d.ts +1 -1
  109. package/dist/analyzer/tracePrinter.js +35 -31
  110. package/dist/analyzer/tracePrinter.js.map +1 -1
  111. package/dist/analyzer/typeCacheUtils.js +5 -1
  112. package/dist/analyzer/typeCacheUtils.js.map +1 -1
  113. package/dist/analyzer/typeDocStringUtils.js +13 -9
  114. package/dist/analyzer/typeDocStringUtils.js.map +1 -1
  115. package/dist/analyzer/typeEvaluator.js +1272 -1176
  116. package/dist/analyzer/typeEvaluator.js.map +1 -1
  117. package/dist/analyzer/typeEvaluatorTypes.d.ts +3 -1
  118. package/dist/analyzer/typeEvaluatorTypes.js +3 -1
  119. package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
  120. package/dist/analyzer/typeGuards.d.ts +1 -1
  121. package/dist/analyzer/typeGuards.js +95 -67
  122. package/dist/analyzer/typeGuards.js.map +1 -1
  123. package/dist/analyzer/typePrinter.d.ts +1 -1
  124. package/dist/analyzer/typePrinter.js +80 -76
  125. package/dist/analyzer/typePrinter.js.map +1 -1
  126. package/dist/analyzer/typeStubWriter.js +26 -22
  127. package/dist/analyzer/typeStubWriter.js.map +1 -1
  128. package/dist/analyzer/typeUtils.js +163 -123
  129. package/dist/analyzer/typeUtils.js.map +1 -1
  130. package/dist/analyzer/typeVarContext.d.ts +1 -0
  131. package/dist/analyzer/typeVarContext.js +12 -9
  132. package/dist/analyzer/typeVarContext.js.map +1 -1
  133. package/dist/analyzer/typeWalker.js +10 -10
  134. package/dist/analyzer/typedDicts.js +74 -70
  135. package/dist/analyzer/typedDicts.js.map +1 -1
  136. package/dist/analyzer/types.d.ts +17 -12
  137. package/dist/analyzer/types.js +191 -181
  138. package/dist/analyzer/types.js.map +1 -1
  139. package/dist/backgroundAnalysisBase.d.ts +2 -2
  140. package/dist/backgroundAnalysisBase.js +5 -1
  141. package/dist/backgroundAnalysisBase.js.map +1 -1
  142. package/dist/backgroundThreadBase.js +5 -1
  143. package/dist/backgroundThreadBase.js.map +1 -1
  144. package/dist/commands/commandController.js +7 -7
  145. package/dist/commands/commandController.js.map +1 -1
  146. package/dist/commands/commandResult.js +1 -1
  147. package/dist/commands/commandResult.js.map +1 -1
  148. package/dist/commands/commands.js +1 -1
  149. package/dist/commands/commands.js.map +1 -1
  150. package/dist/commands/dumpFileDebugInfoCommand.js +196 -196
  151. package/dist/commands/dumpFileDebugInfoCommand.js.map +1 -1
  152. package/dist/commands/quickActionCommand.js +1 -1
  153. package/dist/commands/quickActionCommand.js.map +1 -1
  154. package/dist/common/charCodes.js +1 -1
  155. package/dist/common/charCodes.js.map +1 -1
  156. package/dist/common/chokidarFileWatcherProvider.js +5 -1
  157. package/dist/common/chokidarFileWatcherProvider.js.map +1 -1
  158. package/dist/common/collectionUtils.d.ts +3 -3
  159. package/dist/common/collectionUtils.js +3 -3
  160. package/dist/common/collectionUtils.js.map +1 -1
  161. package/dist/common/commandLineOptions.d.ts +1 -1
  162. package/dist/common/commandLineOptions.js +5 -5
  163. package/dist/common/commandLineOptions.js.map +1 -1
  164. package/dist/common/configOptions.d.ts +1 -1
  165. package/dist/common/configOptions.js +11 -7
  166. package/dist/common/configOptions.js.map +1 -1
  167. package/dist/common/console.js +7 -3
  168. package/dist/common/console.js.map +1 -1
  169. package/dist/common/core.d.ts +2 -2
  170. package/dist/common/core.js +6 -6
  171. package/dist/common/core.js.map +1 -1
  172. package/dist/common/diagnostic.js +6 -6
  173. package/dist/common/diagnostic.js.map +1 -1
  174. package/dist/common/diagnosticRules.js +1 -1
  175. package/dist/common/diagnosticRules.js.map +1 -1
  176. package/dist/common/diagnosticSink.js +12 -12
  177. package/dist/common/diagnosticSink.js.map +1 -1
  178. package/dist/common/editAction.d.ts +1 -1
  179. package/dist/common/editAction.js +2 -2
  180. package/dist/common/editAction.js.map +1 -1
  181. package/dist/common/envVarUtils.js +5 -1
  182. package/dist/common/envVarUtils.js.map +1 -1
  183. package/dist/common/extensibility.js +1 -1
  184. package/dist/common/extensibility.js.map +1 -1
  185. package/dist/common/fileBasedCancellationUtils.js +5 -1
  186. package/dist/common/fileBasedCancellationUtils.js.map +1 -1
  187. package/dist/common/fileSystem.d.ts +1 -0
  188. package/dist/common/fileSystem.js +2 -2
  189. package/dist/common/fileSystem.js.map +1 -1
  190. package/dist/common/fileWatcher.d.ts +2 -2
  191. package/dist/common/fullAccessHost.js +10 -6
  192. package/dist/common/fullAccessHost.js.map +1 -1
  193. package/dist/common/host.d.ts +1 -1
  194. package/dist/common/host.js +2 -2
  195. package/dist/common/host.js.map +1 -1
  196. package/dist/common/lspUtils.js +7 -7
  197. package/dist/common/lspUtils.js.map +1 -1
  198. package/dist/common/memUtils.d.ts +1 -1
  199. package/dist/common/pathUtils.js +12 -8
  200. package/dist/common/pathUtils.js.map +1 -1
  201. package/dist/common/pythonVersion.js +1 -1
  202. package/dist/common/pythonVersion.js.map +1 -1
  203. package/dist/common/realFileSystem.js +5 -1
  204. package/dist/common/realFileSystem.js.map +1 -1
  205. package/dist/common/serviceProvider.d.ts +1 -1
  206. package/dist/common/serviceProvider.js +5 -1
  207. package/dist/common/serviceProvider.js.map +1 -1
  208. package/dist/common/serviceProviderExtensions.js +1 -1
  209. package/dist/common/serviceProviderExtensions.js.map +1 -1
  210. package/dist/common/stringUtils.js +5 -5
  211. package/dist/common/stringUtils.js.map +1 -1
  212. package/dist/common/textEditTracker.js +11 -7
  213. package/dist/common/textEditTracker.js.map +1 -1
  214. package/dist/common/textRange.js +3 -3
  215. package/dist/common/textRange.js.map +1 -1
  216. package/dist/languageServerBase.d.ts +3 -3
  217. package/dist/languageServerBase.js +19 -19
  218. package/dist/languageServerBase.js.map +1 -1
  219. package/dist/languageService/autoImporter.d.ts +3 -3
  220. package/dist/languageService/autoImporter.js +12 -8
  221. package/dist/languageService/autoImporter.js.map +1 -1
  222. package/dist/languageService/callHierarchyProvider.js +27 -23
  223. package/dist/languageService/callHierarchyProvider.js.map +1 -1
  224. package/dist/languageService/codeActionProvider.js +8 -8
  225. package/dist/languageService/codeActionProvider.js.map +1 -1
  226. package/dist/languageService/completionProvider.js +171 -173
  227. package/dist/languageService/completionProvider.js.map +1 -1
  228. package/dist/languageService/completionProviderUtils.js +9 -9
  229. package/dist/languageService/completionProviderUtils.js.map +1 -1
  230. package/dist/languageService/definitionProvider.js +14 -10
  231. package/dist/languageService/definitionProvider.js.map +1 -1
  232. package/dist/languageService/documentHighlightProvider.js +7 -3
  233. package/dist/languageService/documentHighlightProvider.js.map +1 -1
  234. package/dist/languageService/documentSymbolCollector.d.ts +1 -1
  235. package/dist/languageService/documentSymbolCollector.js +21 -17
  236. package/dist/languageService/documentSymbolCollector.js.map +1 -1
  237. package/dist/languageService/hoverProvider.js +30 -26
  238. package/dist/languageService/hoverProvider.js.map +1 -1
  239. package/dist/languageService/importSorter.js +1 -1
  240. package/dist/languageService/importSorter.js.map +1 -1
  241. package/dist/languageService/quickActions.js +10 -6
  242. package/dist/languageService/quickActions.js.map +1 -1
  243. package/dist/languageService/referencesProvider.d.ts +1 -1
  244. package/dist/languageService/referencesProvider.js +24 -20
  245. package/dist/languageService/referencesProvider.js.map +1 -1
  246. package/dist/languageService/signatureHelpProvider.js +8 -4
  247. package/dist/languageService/signatureHelpProvider.js.map +1 -1
  248. package/dist/languageService/symbolIndexer.js +8 -4
  249. package/dist/languageService/symbolIndexer.js.map +1 -1
  250. package/dist/languageService/tooltipUtils.js +20 -16
  251. package/dist/languageService/tooltipUtils.js.map +1 -1
  252. package/dist/languageService/workspaceSymbolProvider.js +5 -1
  253. package/dist/languageService/workspaceSymbolProvider.js.map +1 -1
  254. package/dist/localization/localize.d.ts +10 -12
  255. package/dist/localization/localize.js +8 -5
  256. package/dist/localization/localize.js.map +1 -1
  257. package/dist/localization/package.nls.cs.json +5 -8
  258. package/dist/localization/package.nls.de.json +5 -8
  259. package/dist/localization/package.nls.en-us.json +12 -9
  260. package/dist/localization/package.nls.es.json +5 -8
  261. package/dist/localization/package.nls.fr.json +5 -8
  262. package/dist/localization/package.nls.it.json +5 -8
  263. package/dist/localization/package.nls.ja.json +5 -8
  264. package/dist/localization/package.nls.ko.json +5 -8
  265. package/dist/localization/package.nls.pl.json +5 -8
  266. package/dist/localization/package.nls.pt-br.json +5 -8
  267. package/dist/localization/package.nls.qps-ploc.json +2 -5
  268. package/dist/localization/package.nls.ru.json +5 -8
  269. package/dist/localization/package.nls.tr.json +5 -8
  270. package/dist/localization/package.nls.zh-cn.json +5 -8
  271. package/dist/localization/package.nls.zh-tw.json +5 -8
  272. package/dist/parser/characterStream.js +3 -3
  273. package/dist/parser/characterStream.js.map +1 -1
  274. package/dist/parser/characters.js +13 -9
  275. package/dist/parser/characters.js.map +1 -1
  276. package/dist/parser/parseNodes.d.ts +12 -12
  277. package/dist/parser/parseNodes.js +193 -193
  278. package/dist/parser/parseNodes.js.map +1 -1
  279. package/dist/parser/parser.js +563 -559
  280. package/dist/parser/parser.js.map +1 -1
  281. package/dist/parser/stringTokenUtils.js +47 -47
  282. package/dist/parser/stringTokenUtils.js.map +1 -1
  283. package/dist/parser/tokenizer.js +288 -288
  284. package/dist/parser/tokenizer.js.map +1 -1
  285. package/dist/parser/tokenizerTypes.js +35 -35
  286. package/dist/parser/tokenizerTypes.js.map +1 -1
  287. package/dist/parser/unicode.d.ts +3 -3
  288. package/dist/pyright.js +38 -18
  289. package/dist/pyright.js.map +1 -1
  290. package/dist/pyrightFileSystem.d.ts +1 -0
  291. package/dist/pyrightFileSystem.js +1 -1
  292. package/dist/pyrightFileSystem.js.map +1 -1
  293. package/dist/readonlyAugmentedFileSystem.d.ts +1 -0
  294. package/dist/tests/chainedSourceFiles.test.js +5 -1
  295. package/dist/tests/chainedSourceFiles.test.js.map +1 -1
  296. package/dist/tests/checker.test.js +5 -1
  297. package/dist/tests/checker.test.js.map +1 -1
  298. package/dist/tests/collectionUtils.test.js +5 -1
  299. package/dist/tests/collectionUtils.test.js.map +1 -1
  300. package/dist/tests/common.test.js +5 -1
  301. package/dist/tests/common.test.js.map +1 -1
  302. package/dist/tests/config.test.js +7 -5
  303. package/dist/tests/config.test.js.map +1 -1
  304. package/dist/tests/debug.test.js +8 -4
  305. package/dist/tests/debug.test.js.map +1 -1
  306. package/dist/tests/deferred.test.js +5 -1
  307. package/dist/tests/deferred.test.js.map +1 -1
  308. package/dist/tests/diagnosticOverrides.test.js +5 -1
  309. package/dist/tests/diagnosticOverrides.test.js.map +1 -1
  310. package/dist/tests/docStringConversion.test.js +0 -22
  311. package/dist/tests/docStringConversion.test.js.map +1 -1
  312. package/dist/tests/docStringUtils.test.js +5 -1
  313. package/dist/tests/docStringUtils.test.js.map +1 -1
  314. package/dist/tests/filesystem.test.js +5 -1
  315. package/dist/tests/filesystem.test.js.map +1 -1
  316. package/dist/tests/fourSlashParser.test.js +5 -1
  317. package/dist/tests/fourSlashParser.test.js.map +1 -1
  318. package/dist/tests/fourSlashRunner.test.js +5 -1
  319. package/dist/tests/fourSlashRunner.test.js.map +1 -1
  320. package/dist/tests/fourslash/completions.params.fourslash.js +11 -0
  321. package/dist/tests/fourslash/completions.params.fourslash.js.map +1 -1
  322. package/dist/tests/fourslash/hover.docstring.split.fourslash.js +10 -0
  323. package/dist/tests/fourslash/hover.docstring.split.fourslash.js.map +1 -1
  324. package/dist/tests/harness/fourslash/fourSlashParser.js +13 -13
  325. package/dist/tests/harness/fourslash/fourSlashParser.js.map +1 -1
  326. package/dist/tests/harness/fourslash/fourSlashTypes.js +11 -7
  327. package/dist/tests/harness/fourslash/fourSlashTypes.js.map +1 -1
  328. package/dist/tests/harness/fourslash/runner.d.ts +1 -1
  329. package/dist/tests/harness/fourslash/runner.js +5 -1
  330. package/dist/tests/harness/fourslash/runner.js.map +1 -1
  331. package/dist/tests/harness/fourslash/testLanguageService.js +5 -1
  332. package/dist/tests/harness/fourslash/testLanguageService.js.map +1 -1
  333. package/dist/tests/harness/fourslash/testState.Consts.js +6 -2
  334. package/dist/tests/harness/fourslash/testState.Consts.js.map +1 -1
  335. package/dist/tests/harness/fourslash/testState.js +17 -13
  336. package/dist/tests/harness/fourslash/testState.js.map +1 -1
  337. package/dist/tests/harness/fourslash/testStateUtils.js +9 -5
  338. package/dist/tests/harness/fourslash/testStateUtils.js.map +1 -1
  339. package/dist/tests/harness/fourslash/workspaceEditTestUtils.js +5 -1
  340. package/dist/tests/harness/fourslash/workspaceEditTestUtils.js.map +1 -1
  341. package/dist/tests/harness/testHost.js +5 -1
  342. package/dist/tests/harness/testHost.js.map +1 -1
  343. package/dist/tests/harness/utils.d.ts +13 -12
  344. package/dist/tests/harness/utils.js.map +1 -1
  345. package/dist/tests/harness/vfs/factory.js +6 -2
  346. package/dist/tests/harness/vfs/factory.js.map +1 -1
  347. package/dist/tests/harness/vfs/filesystem.d.ts +4 -3
  348. package/dist/tests/harness/vfs/filesystem.js +11 -7
  349. package/dist/tests/harness/vfs/filesystem.js.map +1 -1
  350. package/dist/tests/harness/vfs/pathValidation.js +30 -26
  351. package/dist/tests/harness/vfs/pathValidation.js.map +1 -1
  352. package/dist/tests/importStatementUtils.test.js +25 -25
  353. package/dist/tests/importStatementUtils.test.js.map +1 -1
  354. package/dist/tests/ipythonMode.test.js +6 -6
  355. package/dist/tests/ipythonMode.test.js.map +1 -1
  356. package/dist/tests/localizer.test.js +5 -1
  357. package/dist/tests/localizer.test.js.map +1 -1
  358. package/dist/tests/logger.test.js +5 -1
  359. package/dist/tests/logger.test.js.map +1 -1
  360. package/dist/tests/parseTreeUtils.test.js +10 -10
  361. package/dist/tests/parseTreeUtils.test.js.map +1 -1
  362. package/dist/tests/parser.test.js +13 -9
  363. package/dist/tests/parser.test.js.map +1 -1
  364. package/dist/tests/pathUtils.test.js +5 -1
  365. package/dist/tests/pathUtils.test.js.map +1 -1
  366. package/dist/tests/sourceFile.test.js +5 -1
  367. package/dist/tests/sourceFile.test.js.map +1 -1
  368. package/dist/tests/sourceMapperUtils.test.js +5 -1
  369. package/dist/tests/sourceMapperUtils.test.js.map +1 -1
  370. package/dist/tests/stringUtils.test.js +10 -6
  371. package/dist/tests/stringUtils.test.js.map +1 -1
  372. package/dist/tests/symbolNameUtils.test.js +5 -1
  373. package/dist/tests/symbolNameUtils.test.js.map +1 -1
  374. package/dist/tests/testState.test.js +5 -1
  375. package/dist/tests/testState.test.js.map +1 -1
  376. package/dist/tests/testUtils.js +11 -7
  377. package/dist/tests/testUtils.js.map +1 -1
  378. package/dist/tests/textRange.test.js +5 -1
  379. package/dist/tests/textRange.test.js.map +1 -1
  380. package/dist/tests/tokenizer.test.js +463 -459
  381. package/dist/tests/tokenizer.test.js.map +1 -1
  382. package/dist/tests/typeEvaluator1.test.js +18 -2
  383. package/dist/tests/typeEvaluator1.test.js.map +1 -1
  384. package/dist/tests/typeEvaluator2.test.js +19 -3
  385. package/dist/tests/typeEvaluator2.test.js.map +1 -1
  386. package/dist/tests/typeEvaluator3.test.js +11 -3
  387. package/dist/tests/typeEvaluator3.test.js.map +1 -1
  388. package/dist/tests/typeEvaluator4.test.js +11 -3
  389. package/dist/tests/typeEvaluator4.test.js.map +1 -1
  390. package/dist/tests/typeEvaluator5.test.js +5 -1
  391. package/dist/tests/typeEvaluator5.test.js.map +1 -1
  392. package/dist/tests/typePrinter.test.js +44 -40
  393. package/dist/tests/typePrinter.test.js.map +1 -1
  394. package/dist/tests/workspaceEditUtils.test.js +5 -1
  395. package/dist/tests/workspaceEditUtils.test.js.map +1 -1
  396. package/dist/tests/zipfs.test.js +5 -1
  397. package/dist/tests/zipfs.test.js.map +1 -1
  398. package/dist/workspaceFactory.js +2 -2
  399. package/dist/workspaceFactory.js.map +1 -1
  400. package/package.json +2 -2
@@ -14,7 +14,11 @@
14
14
  */
15
15
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
16
16
  if (k2 === undefined) k2 = k;
17
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
17
+ var desc = Object.getOwnPropertyDescriptor(m, k);
18
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
19
+ desc = { enumerable: true, get: function() { return m[k]; } };
20
+ }
21
+ Object.defineProperty(o, k2, desc);
18
22
  }) : (function(o, m, k, k2) {
19
23
  if (k2 === undefined) k2 = k;
20
24
  o[k2] = m[k];
@@ -216,14 +220,14 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
216
220
  // Report any unknown or missing parameter types.
217
221
  node.parameters.forEach((param, index) => {
218
222
  if (param.name) {
219
- if (param.category === 0 /* Simple */ && index >= paramDetails.positionOnlyParamCount) {
223
+ if (param.category === 0 /* ParameterCategory.Simple */ && index >= paramDetails.positionOnlyParamCount) {
220
224
  keywordNames.add(param.name.value);
221
225
  }
222
226
  // Determine whether this is a P.args parameter.
223
- if (param.category === 1 /* ArgsList */) {
227
+ if (param.category === 1 /* ParameterCategory.ArgsList */) {
224
228
  const annotationExpr = param.typeAnnotation || param.typeAnnotationComment;
225
229
  if (annotationExpr &&
226
- annotationExpr.nodeType === 35 /* MemberAccess */ &&
230
+ annotationExpr.nodeType === 35 /* ParseNodeType.MemberAccess */ &&
227
231
  annotationExpr.memberName.value === 'args') {
228
232
  const baseType = this._evaluator.getType(annotationExpr.leftExpression);
229
233
  if (baseType && (0, types_1.isTypeVar)(baseType) && baseType.details.isParamSpec) {
@@ -231,11 +235,11 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
231
235
  }
232
236
  }
233
237
  }
234
- else if (param.category === 2 /* KwargsDict */) {
238
+ else if (param.category === 2 /* ParameterCategory.KwargsDict */) {
235
239
  sawParamSpecArgs = false;
236
240
  }
237
241
  }
238
- if (param.name && param.category === 0 /* Simple */ && sawParamSpecArgs) {
242
+ if (param.name && param.category === 0 /* ParameterCategory.Simple */ && sawParamSpecArgs) {
239
243
  this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.namedParamAfterParamSpecArgs().format({ name: param.name.value }), param.name);
240
244
  }
241
245
  // Allow unknown and missing param types if the param is named '_'.
@@ -297,7 +301,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
297
301
  // Check for invalid use of ParamSpec P.args and P.kwargs.
298
302
  const paramSpecParams = functionTypeResult.functionType.details.parameters.filter((param) => {
299
303
  if (param.typeAnnotation && (0, types_1.isTypeVar)(param.type) && (0, types_1.isParamSpec)(param.type)) {
300
- if (param.category !== 0 /* Simple */ && param.name && param.type.paramSpecAccess) {
304
+ if (param.category !== 0 /* ParameterCategory.Simple */ && param.name && param.type.paramSpecAccess) {
301
305
  return true;
302
306
  }
303
307
  }
@@ -335,7 +339,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
335
339
  const exemptMethods = ['__init__', '__new__'];
336
340
  if (containingClassNode &&
337
341
  (0, types_1.isTypeVar)(paramType) &&
338
- paramType.details.declaredVariance === 3 /* Covariant */ &&
342
+ paramType.details.declaredVariance === 3 /* Variance.Covariant */ &&
339
343
  !paramType.details.isSynthesized &&
340
344
  !exemptMethods.some((name) => name === functionTypeResult.functionType.details.name)) {
341
345
  this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.paramTypeCovariant(), annotationNode);
@@ -387,7 +391,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
387
391
  // This signifies an incomplete stub file that obscures type errors.
388
392
  if (this._fileInfo.isStubFile && node.name.value === '__getattr__') {
389
393
  const scope = (0, scopeUtils_1.getScopeForNode)(node);
390
- if ((scope === null || scope === void 0 ? void 0 : scope.type) === 3 /* Module */) {
394
+ if ((scope === null || scope === void 0 ? void 0 : scope.type) === 3 /* ScopeType.Module */) {
391
395
  this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompleteStub, diagnosticRules_1.DiagnosticRule.reportIncompleteStub, localize_1.Localizer.Diagnostic.stubUsesGetAttr(), node.name);
392
396
  }
393
397
  }
@@ -449,8 +453,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
449
453
  this._validateStandardCollectionInstantiation(node);
450
454
  if (this._fileInfo.diagnosticRuleSet.reportUnusedCallResult !== 'none' ||
451
455
  this._fileInfo.diagnosticRuleSet.reportUnusedCoroutine !== 'none') {
452
- if (((_a = node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 47 /* StatementList */) {
453
- const isRevealTypeCall = node.leftExpression.nodeType === 38 /* Name */ && node.leftExpression.value === 'reveal_type';
456
+ if (((_a = node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 47 /* ParseNodeType.StatementList */) {
457
+ const isRevealTypeCall = node.leftExpression.nodeType === 38 /* ParseNodeType.Name */ && node.leftExpression.value === 'reveal_type';
454
458
  const returnType = this._evaluator.getType(node);
455
459
  if (!isRevealTypeCall && returnType && this._isTypeValidForUnusedValueTest(returnType)) {
456
460
  this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportUnusedCallResult, diagnosticRules_1.DiagnosticRule.reportUnusedCallResult, localize_1.Localizer.Diagnostic.unusedCallResult().format({
@@ -467,8 +471,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
467
471
  visitAwait(node) {
468
472
  var _a;
469
473
  if (this._fileInfo.diagnosticRuleSet.reportUnusedCallResult !== 'none') {
470
- if (((_a = node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 47 /* StatementList */ &&
471
- node.expression.nodeType === 9 /* Call */) {
474
+ if (((_a = node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 47 /* ParseNodeType.StatementList */ &&
475
+ node.expression.nodeType === 9 /* ParseNodeType.Call */) {
472
476
  const returnType = this._evaluator.getType(node);
473
477
  if (returnType && this._isTypeValidForUnusedValueTest(returnType)) {
474
478
  this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportUnusedCallResult, diagnosticRules_1.DiagnosticRule.reportUnusedCallResult, localize_1.Localizer.Diagnostic.unusedCallResult().format({
@@ -545,7 +549,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
545
549
  // at runtime in this case.
546
550
  if ((enclosingFunctionNode === null || enclosingFunctionNode === void 0 ? void 0 : enclosingFunctionNode.isAsync) && node.returnExpression) {
547
551
  const functionDecl = AnalyzerNodeInfo.getDeclaration(enclosingFunctionNode);
548
- if ((functionDecl === null || functionDecl === void 0 ? void 0 : functionDecl.type) === 5 /* Function */ && functionDecl.isGenerator) {
552
+ if ((functionDecl === null || functionDecl === void 0 ? void 0 : functionDecl.type) === 5 /* DeclarationType.Function */ && functionDecl.isGenerator) {
549
553
  this._evaluator.addError(localize_1.Localizer.Diagnostic.returnInAsyncGenerator(), node.returnExpression);
550
554
  }
551
555
  }
@@ -558,7 +562,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
558
562
  let diagAddendum = new diagnostic_1.DiagnosticAddendum();
559
563
  let returnTypeMatches = false;
560
564
  if (this._evaluator.assignType(declaredReturnType, returnTypeResult.type, diagAddendum, new typeVarContext_1.TypeVarContext(),
561
- /* srcTypeVarContext */ undefined, 64 /* AllowBoolTypeGuard */)) {
565
+ /* srcTypeVarContext */ undefined, 64 /* AssignTypeFlags.AllowBoolTypeGuard */)) {
562
566
  returnTypeMatches = true;
563
567
  }
564
568
  else {
@@ -581,7 +585,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
581
585
  const adjustedReturnType = (0, typeUtils_1.applySolvedTypeVars)(declaredReturnType, typeVarContext);
582
586
  if (this._evaluator.assignType(adjustedReturnType, returnTypeResult.type, diagAddendum,
583
587
  /* destTypeVarContext */ undefined,
584
- /* srcTypeVarContext */ undefined, 64 /* AllowBoolTypeGuard */)) {
588
+ /* srcTypeVarContext */ undefined, 64 /* AssignTypeFlags.AllowBoolTypeGuard */)) {
585
589
  returnTypeMatches = true;
586
590
  }
587
591
  }
@@ -719,14 +723,14 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
719
723
  }
720
724
  }
721
725
  // If this isn't a class or global scope, explicit type aliases are not allowed.
722
- if (node.leftExpression.nodeType === 54 /* TypeAnnotation */) {
726
+ if (node.leftExpression.nodeType === 54 /* ParseNodeType.TypeAnnotation */) {
723
727
  const annotationType = this._evaluator.getTypeOfAnnotation(node.leftExpression.typeAnnotation);
724
728
  if ((0, types_1.isClassInstance)(annotationType) && types_1.ClassType.isBuiltIn(annotationType, 'TypeAlias')) {
725
729
  const scope = (0, scopeUtils_1.getScopeForNode)(node);
726
730
  if (scope) {
727
- if (scope.type !== 2 /* Class */ &&
728
- scope.type !== 3 /* Module */ &&
729
- scope.type !== 4 /* Builtin */) {
731
+ if (scope.type !== 2 /* ScopeType.Class */ &&
732
+ scope.type !== 3 /* ScopeType.Module */ &&
733
+ scope.type !== 4 /* ScopeType.Builtin */) {
730
734
  this._evaluator.addError(localize_1.Localizer.Diagnostic.typeAliasNotInModuleOrClass(), node.leftExpression.typeAnnotation);
731
735
  }
732
736
  }
@@ -756,7 +760,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
756
760
  const tupleLength = subtype.tupleTypeArguments.length;
757
761
  if (node.items.length === 1 &&
758
762
  !node.trailingComma &&
759
- node.items[0].argumentCategory === 0 /* Simple */ &&
763
+ node.items[0].argumentCategory === 0 /* ArgumentCategory.Simple */ &&
760
764
  !node.items[0].name) {
761
765
  const subscriptType = this._evaluator.getType(node.items[0].valueExpression);
762
766
  if (subscriptType &&
@@ -779,23 +783,23 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
779
783
  return true;
780
784
  }
781
785
  visitBinaryOperation(node) {
782
- if (node.operator === 36 /* And */ || node.operator === 37 /* Or */) {
786
+ if (node.operator === 36 /* OperatorType.And */ || node.operator === 37 /* OperatorType.Or */) {
783
787
  this._validateConditionalIsBool(node.leftExpression);
784
788
  this._validateConditionalIsBool(node.rightExpression);
785
789
  }
786
- if (node.operator === 12 /* Equals */ || node.operator === 28 /* NotEquals */) {
790
+ if (node.operator === 12 /* OperatorType.Equals */ || node.operator === 28 /* OperatorType.NotEquals */) {
787
791
  // Don't apply this rule if it's within an assert.
788
792
  if (!ParseTreeUtils.isWithinAssertExpression(node)) {
789
793
  this._validateComparisonTypes(node);
790
794
  }
791
795
  }
792
- else if (node.operator === 39 /* Is */ || node.operator === 40 /* IsNot */) {
796
+ else if (node.operator === 39 /* OperatorType.Is */ || node.operator === 40 /* OperatorType.IsNot */) {
793
797
  // Don't apply this rule if it's within an assert.
794
798
  if (!ParseTreeUtils.isWithinAssertExpression(node)) {
795
799
  this._validateComparisonTypesForIsOperator(node);
796
800
  }
797
801
  }
798
- else if (node.operator === 41 /* In */ || node.operator === 42 /* NotIn */) {
802
+ else if (node.operator === 41 /* OperatorType.In */ || node.operator === 42 /* OperatorType.NotIn */) {
799
803
  // Don't apply this rule if it's within an assert.
800
804
  if (!ParseTreeUtils.isWithinAssertExpression(node)) {
801
805
  this._validateContainmentTypes(node);
@@ -817,7 +821,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
817
821
  return true;
818
822
  }
819
823
  visitUnaryOperation(node) {
820
- if (node.operator === 38 /* Not */) {
824
+ if (node.operator === 38 /* OperatorType.Not */) {
821
825
  this._validateConditionalIsBool(node.expression);
822
826
  }
823
827
  this._evaluator.getType(node);
@@ -837,22 +841,22 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
837
841
  if (this._fileInfo.executionEnvironment.pythonVersion < pythonVersion_1.PythonVersion.V3_12) {
838
842
  let curNode = node;
839
843
  while (curNode) {
840
- if (curNode.nodeType === 27 /* FormatString */) {
844
+ if (curNode.nodeType === 27 /* ParseNodeType.FormatString */) {
841
845
  fStringContainers.push(curNode);
842
846
  }
843
847
  curNode = curNode.parent;
844
848
  }
845
849
  }
846
850
  for (const stringNode of node.strings) {
847
- const stringTokens = stringNode.nodeType === 49 /* String */ ? [stringNode.token] : stringNode.middleTokens;
851
+ const stringTokens = stringNode.nodeType === 49 /* ParseNodeType.String */ ? [stringNode.token] : stringNode.middleTokens;
848
852
  stringTokens.forEach((token) => {
849
853
  const unescapedResult = (0, stringTokenUtils_1.getUnescapedString)(token);
850
854
  let start = token.start;
851
- if (token.type === 5 /* String */) {
855
+ if (token.type === 5 /* TokenType.String */) {
852
856
  start += token.prefixLength + token.quoteMarkLength;
853
857
  }
854
858
  unescapedResult.unescapeErrors.forEach((error) => {
855
- if (error.errorType === 0 /* InvalidEscapeSequence */) {
859
+ if (error.errorType === 0 /* UnescapeErrorType.InvalidEscapeSequence */) {
856
860
  this._evaluator.addDiagnosticForTextRange(this._fileInfo, this._fileInfo.diagnosticRuleSet.reportInvalidStringEscapeSequence, diagnosticRules_1.DiagnosticRule.reportInvalidStringEscapeSequence, localize_1.Localizer.Diagnostic.stringUnsupportedEscape(), { start: start + error.offset, length: error.length });
857
861
  }
858
862
  });
@@ -867,7 +871,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
867
871
  // Prior to Python 3.12, it was not allowed to nest strings that
868
872
  // used the same quote scheme within an f-string.
869
873
  if (fStringContainers.length > 0) {
870
- const quoteTypeMask = 1 /* SingleQuote */ | 2 /* DoubleQuote */ | 4 /* Triplicate */;
874
+ const quoteTypeMask = 1 /* StringTokenFlags.SingleQuote */ | 2 /* StringTokenFlags.DoubleQuote */ | 4 /* StringTokenFlags.Triplicate */;
871
875
  if (fStringContainers.some((fStringContainer) => (fStringContainer.token.flags & quoteTypeMask) === (stringNode.token.flags & quoteTypeMask))) {
872
876
  this._evaluator.addError(localize_1.Localizer.Diagnostic.formatStringNestedQuote(), stringNode);
873
877
  }
@@ -966,7 +970,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
966
970
  const importInfo = AnalyzerNodeInfo.getImportInfo(node.module);
967
971
  if (importInfo &&
968
972
  importInfo.isImportFound &&
969
- importInfo.importType !== 2 /* Local */ &&
973
+ importInfo.importType !== 2 /* ImportType.Local */ &&
970
974
  !this._fileInfo.isStubFile) {
971
975
  this._evaluator.addDiagnosticForTextRange(this._fileInfo, this._fileInfo.diagnosticRuleSet.reportWildcardImportFromLibrary, diagnosticRules_1.DiagnosticRule.reportWildcardImportFromLibrary, localize_1.Localizer.Diagnostic.wildcardLibraryImport(), node.wildcardToken || node);
972
976
  }
@@ -999,7 +1003,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
999
1003
  break;
1000
1004
  }
1001
1005
  let isImportFromTyping = false;
1002
- if (((_a = node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 22 /* ImportFrom */) {
1006
+ if (((_a = node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 22 /* ParseNodeType.ImportFrom */) {
1003
1007
  if (node.parent.module.leadingDots === 0 && node.parent.module.nameParts.length === 1) {
1004
1008
  if (node.parent.module.nameParts[0].value === 'typing') {
1005
1009
  isImportFromTyping = true;
@@ -1074,7 +1078,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1074
1078
  _addMissingModuleSourceDiagnosticIfNeeded(importResult, node) {
1075
1079
  if (importResult.isNativeLib ||
1076
1080
  !importResult.isStubFile ||
1077
- importResult.importType === 0 /* BuiltIn */ ||
1081
+ importResult.importType === 0 /* ImportType.BuiltIn */ ||
1078
1082
  !importResult.nonStubImportResult ||
1079
1083
  importResult.nonStubImportResult.isImportFound) {
1080
1084
  return;
@@ -1124,15 +1128,15 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1124
1128
  }
1125
1129
  }
1126
1130
  _reportUnnecessaryConditionExpression(expression) {
1127
- if (expression.nodeType === 7 /* BinaryOperation */) {
1128
- if (expression.operator === 36 /* And */ || expression.operator === 37 /* Or */) {
1131
+ if (expression.nodeType === 7 /* ParseNodeType.BinaryOperation */) {
1132
+ if (expression.operator === 36 /* OperatorType.And */ || expression.operator === 37 /* OperatorType.Or */) {
1129
1133
  this._reportUnnecessaryConditionExpression(expression.leftExpression);
1130
1134
  this._reportUnnecessaryConditionExpression(expression.rightExpression);
1131
1135
  }
1132
1136
  return;
1133
1137
  }
1134
- else if (expression.nodeType === 55 /* UnaryOperation */) {
1135
- if (expression.operator === 38 /* Not */) {
1138
+ else if (expression.nodeType === 55 /* ParseNodeType.UnaryOperation */) {
1139
+ if (expression.operator === 38 /* OperatorType.Not */) {
1136
1140
  this._reportUnnecessaryConditionExpression(expression.expression);
1137
1141
  }
1138
1142
  return;
@@ -1162,30 +1166,30 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1162
1166
  return;
1163
1167
  }
1164
1168
  const simpleExpressionTypes = [
1165
- 55 /* UnaryOperation */,
1166
- 7 /* BinaryOperation */,
1167
- 40 /* Number */,
1168
- 11 /* Constant */,
1169
- 38 /* Name */,
1170
- 52 /* Tuple */,
1169
+ 55 /* ParseNodeType.UnaryOperation */,
1170
+ 7 /* ParseNodeType.BinaryOperation */,
1171
+ 40 /* ParseNodeType.Number */,
1172
+ 11 /* ParseNodeType.Constant */,
1173
+ 38 /* ParseNodeType.Name */,
1174
+ 52 /* ParseNodeType.Tuple */,
1171
1175
  ];
1172
1176
  let reportAsUnused = false;
1173
1177
  if (simpleExpressionTypes.some((nodeType) => nodeType === node.nodeType)) {
1174
1178
  reportAsUnused = true;
1175
1179
  }
1176
- else if (node.nodeType === 31 /* List */ ||
1177
- node.nodeType === 45 /* Set */ ||
1178
- node.nodeType === 15 /* Dictionary */) {
1180
+ else if (node.nodeType === 31 /* ParseNodeType.List */ ||
1181
+ node.nodeType === 45 /* ParseNodeType.Set */ ||
1182
+ node.nodeType === 15 /* ParseNodeType.Dictionary */) {
1179
1183
  // Exclude comprehensions.
1180
- if (!node.entries.some((entry) => entry.nodeType === 32 /* ListComprehension */)) {
1184
+ if (!node.entries.some((entry) => entry.nodeType === 32 /* ParseNodeType.ListComprehension */)) {
1181
1185
  reportAsUnused = true;
1182
1186
  }
1183
1187
  }
1184
1188
  if (reportAsUnused &&
1185
1189
  this._fileInfo.ipythonMode === sourceFile_1.IPythonMode.CellDocs &&
1186
- ((_a = node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 47 /* StatementList */ &&
1190
+ ((_a = node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 47 /* ParseNodeType.StatementList */ &&
1187
1191
  node.parent.statements[node.parent.statements.length - 1] === node &&
1188
- ((_b = node.parent.parent) === null || _b === void 0 ? void 0 : _b.nodeType) === 36 /* Module */ &&
1192
+ ((_b = node.parent.parent) === null || _b === void 0 ? void 0 : _b.nodeType) === 36 /* ParseNodeType.Module */ &&
1189
1193
  node.parent.parent.statements[node.parent.parent.statements.length - 1] === node.parent) {
1190
1194
  // Exclude an expression at the end of a notebook cell, as that is treated as
1191
1195
  // the cell's value.
@@ -1262,7 +1266,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1262
1266
  const narrowedType = (0, typeGuards_1.narrowTypeForContainerElementType)(this._evaluator, leftType, this._evaluator.makeTopLevelTypeVarsConcrete(elementType));
1263
1267
  if ((0, types_1.isNever)(narrowedType)) {
1264
1268
  const getMessage = () => {
1265
- return node.operator === 41 /* In */
1269
+ return node.operator === 41 /* OperatorType.In */
1266
1270
  ? localize_1.Localizer.Diagnostic.containmentAlwaysFalse()
1267
1271
  : localize_1.Localizer.Diagnostic.containmentAlwaysTrue();
1268
1272
  };
@@ -1291,7 +1295,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1291
1295
  }
1292
1296
  });
1293
1297
  const getMessage = () => {
1294
- return node.operator === 39 /* Is */
1298
+ return node.operator === 39 /* OperatorType.Is */
1295
1299
  ? localize_1.Localizer.Diagnostic.comparisonAlwaysFalse()
1296
1300
  : localize_1.Localizer.Diagnostic.comparisonAlwaysTrue();
1297
1301
  };
@@ -1307,7 +1311,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1307
1311
  _validateComparisonTypes(node) {
1308
1312
  let rightExpression = node.rightExpression;
1309
1313
  // Check for chained comparisons.
1310
- if (rightExpression.nodeType === 7 /* BinaryOperation */ &&
1314
+ if (rightExpression.nodeType === 7 /* ParseNodeType.BinaryOperation */ &&
1311
1315
  !rightExpression.parenthesized &&
1312
1316
  ParseTreeUtils.operatorSupportsChaining(rightExpression.operator)) {
1313
1317
  // Use the left side of the right expression for comparison purposes.
@@ -1322,7 +1326,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1322
1326
  return;
1323
1327
  }
1324
1328
  const getMessage = () => {
1325
- return node.operator === 12 /* Equals */
1329
+ return node.operator === 12 /* OperatorType.Equals */
1326
1330
  ? localize_1.Localizer.Diagnostic.comparisonAlwaysFalse()
1327
1331
  : localize_1.Localizer.Diagnostic.comparisonAlwaysTrue();
1328
1332
  };
@@ -1408,7 +1412,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1408
1412
  // Does the class have an operator overload for eq?
1409
1413
  const metaclass = leftType.details.effectiveMetaclass;
1410
1414
  if (metaclass && (0, types_1.isClass)(metaclass)) {
1411
- if ((0, typeUtils_1.lookUpClassMember)(metaclass, '__eq__', 4 /* SkipObjectBaseClass */)) {
1415
+ if ((0, typeUtils_1.lookUpClassMember)(metaclass, '__eq__', 4 /* MemberAccessFlags.SkipObjectBaseClass */)) {
1412
1416
  return true;
1413
1417
  }
1414
1418
  }
@@ -1433,7 +1437,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1433
1437
  }
1434
1438
  }
1435
1439
  // Does the class have an operator overload for eq?
1436
- const eqMethod = (0, typeUtils_1.lookUpClassMember)(types_1.ClassType.cloneAsInstantiable(leftType), '__eq__', 4 /* SkipObjectBaseClass */);
1440
+ const eqMethod = (0, typeUtils_1.lookUpClassMember)(types_1.ClassType.cloneAsInstantiable(leftType), '__eq__', 4 /* MemberAccessFlags.SkipObjectBaseClass */);
1437
1441
  if (eqMethod) {
1438
1442
  // If this is a synthesized method for a dataclass, we can assume
1439
1443
  // that other dataclass types will not be comparable.
@@ -1509,7 +1513,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1509
1513
  let constructorClass;
1510
1514
  if (types_1.FunctionType.isInstanceMethod(type) && node.name.value === '__init__') {
1511
1515
  const containingClassNode = ParseTreeUtils.getEnclosingClassOrFunction(node);
1512
- if (containingClassNode && containingClassNode.nodeType === 10 /* Class */) {
1516
+ if (containingClassNode && containingClassNode.nodeType === 10 /* ParseNodeType.Class */) {
1513
1517
  const classType = this._evaluator.getTypeOfClass(containingClassNode);
1514
1518
  if (classType && (0, types_1.isClass)(classType.classType)) {
1515
1519
  constructorClass = classType.classType;
@@ -1523,14 +1527,12 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1523
1527
  if (nameType && (0, types_1.isTypeVar)(nameType) && !nameType.details.isSynthesizedSelf) {
1524
1528
  // Does this name refer to a TypeVar that is scoped to this function?
1525
1529
  if (nameType.scopeId === ParseTreeUtils.getScopeIdForNode(node)) {
1526
- // We exempt constrained TypeVars, bound TypeVars that are type arguments of
1530
+ // We exempt constrained TypeVars, TypeVars that are type arguments of
1527
1531
  // other types, and ParamSpecs. There are legitimate uses for singleton
1528
1532
  // instances in these particular cases.
1529
1533
  let isExempt = nameType.details.constraints.length > 0 ||
1530
1534
  !!nameType.details.defaultType ||
1531
- (exemptBoundTypeVar &&
1532
- nameType.details.boundType !== undefined &&
1533
- subscriptIndex !== undefined) ||
1535
+ (exemptBoundTypeVar && subscriptIndex !== undefined) ||
1534
1536
  (0, types_1.isParamSpec)(nameType);
1535
1537
  if (!isExempt && baseExpression && subscriptIndex !== undefined) {
1536
1538
  // Is this a type argument for a generic type alias? If so,
@@ -1544,10 +1546,11 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1544
1546
  }
1545
1547
  }
1546
1548
  const existingEntry = localTypeVarUsage.get(nameType.details.name);
1547
- const isParamTypeWithEllipsisUsage = ((_a = curParamNode === null || curParamNode === void 0 ? void 0 : curParamNode.defaultValue) === null || _a === void 0 ? void 0 : _a.nodeType) === 18 /* Ellipsis */;
1549
+ const isParamTypeWithEllipsisUsage = ((_a = curParamNode === null || curParamNode === void 0 ? void 0 : curParamNode.defaultValue) === null || _a === void 0 ? void 0 : _a.nodeType) === 18 /* ParseNodeType.Ellipsis */;
1548
1550
  if (!existingEntry) {
1549
1551
  localTypeVarUsage.set(nameType.details.name, {
1550
1552
  nodes: [nameNode],
1553
+ typeVar: nameType,
1551
1554
  paramTypeUsageCount: curParamNode !== undefined ? 1 : 0,
1552
1555
  paramTypeWithEllipsisUsageCount: isParamTypeWithEllipsisUsage ? 1 : 0,
1553
1556
  returnTypeUsageCount: curParamNode === undefined ? 1 : 0,
@@ -1575,10 +1578,11 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1575
1578
  // this constructor method?
1576
1579
  if (constructorClass && nameType.scopeId === constructorClass.details.typeVarScopeId) {
1577
1580
  const existingEntry = classTypeVarUsage.get(nameType.details.name);
1578
- const isParamTypeWithEllipsisUsage = ((_d = curParamNode === null || curParamNode === void 0 ? void 0 : curParamNode.defaultValue) === null || _d === void 0 ? void 0 : _d.nodeType) === 18 /* Ellipsis */;
1581
+ const isParamTypeWithEllipsisUsage = ((_d = curParamNode === null || curParamNode === void 0 ? void 0 : curParamNode.defaultValue) === null || _d === void 0 ? void 0 : _d.nodeType) === 18 /* ParseNodeType.Ellipsis */;
1579
1582
  const isExempt = !!nameType.details.defaultType;
1580
1583
  if (!existingEntry) {
1581
1584
  classTypeVarUsage.set(nameType.details.name, {
1585
+ typeVar: nameType,
1582
1586
  nodes: [nameNode],
1583
1587
  paramTypeUsageCount: curParamNode !== undefined ? 1 : 0,
1584
1588
  paramTypeWithEllipsisUsageCount: isParamTypeWithEllipsisUsage ? 1 : 0,
@@ -1622,9 +1626,23 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1622
1626
  var _a;
1623
1627
  // Report error for local type variable that appears only once.
1624
1628
  if (usage.nodes.length === 1 && !usage.isExempt) {
1629
+ let altTypeText;
1630
+ if (usage.typeVar.details.isVariadic) {
1631
+ altTypeText = '"tuple[object, ...]"';
1632
+ }
1633
+ else if (usage.typeVar.details.boundType) {
1634
+ altTypeText = `"${this._evaluator.printType((0, typeUtils_1.convertToInstance)(usage.typeVar.details.boundType))}"`;
1635
+ }
1636
+ else {
1637
+ altTypeText = '"object"';
1638
+ }
1639
+ const diag = new diagnostic_1.DiagnosticAddendum();
1640
+ diag.addMessage(localize_1.Localizer.DiagnosticAddendum.typeVarUnnecessarySuggestion().format({
1641
+ type: altTypeText,
1642
+ }));
1625
1643
  this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportInvalidTypeVarUse, diagnosticRules_1.DiagnosticRule.reportInvalidTypeVarUse, localize_1.Localizer.Diagnostic.typeVarUsedOnlyOnce().format({
1626
1644
  name: usage.nodes[0].value,
1627
- }), usage.nodes[0]);
1645
+ }) + diag.getString(), usage.nodes[0]);
1628
1646
  }
1629
1647
  // Report error for local type variable that appears in return type
1630
1648
  // (but not as a top-level TypeVar within a union) and appears only
@@ -1694,7 +1712,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1694
1712
  returnType &&
1695
1713
  !this._evaluator.assignType(returnType, prevReturnType,
1696
1714
  /* diag */ undefined, new typeVarContext_1.TypeVarContext(),
1697
- /* srcTypeVarContext */ undefined, 8 /* SkipSolveTypeVars */ | 512 /* IgnoreTypeVarScope */)) {
1715
+ /* srcTypeVarContext */ undefined, 8 /* AssignTypeFlags.SkipSolveTypeVars */ | 512 /* AssignTypeFlags.IgnoreTypeVarScope */)) {
1698
1716
  const altNode = this._findNodeForOverload(node, prevOverload);
1699
1717
  this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportOverlappingOverload, diagnosticRules_1.DiagnosticRule.reportOverlappingOverload, localize_1.Localizer.Diagnostic.overloadReturnTypeMismatch().format({
1700
1718
  name: node.name.value,
@@ -1715,7 +1733,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1715
1733
  return undefined;
1716
1734
  }
1717
1735
  for (const decl of decls) {
1718
- if (decl.type === 5 /* Function */) {
1736
+ if (decl.type === 5 /* DeclarationType.Function */) {
1719
1737
  const functionType = this._evaluator.getTypeOfFunction(decl.node);
1720
1738
  if ((functionType === null || functionType === void 0 ? void 0 : functionType.functionType) === overloadType) {
1721
1739
  return decl.node;
@@ -1735,22 +1753,22 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1735
1753
  }
1736
1754
  return this._evaluator.assignType(functionType, prevOverload,
1737
1755
  /* diag */ undefined, new typeVarContext_1.TypeVarContext((0, typeUtils_1.getTypeVarScopeId)(functionType)),
1738
- /* srcTypeVarContext */ undefined, 32 /* SkipFunctionReturnTypeCheck */ | 16 /* OverloadOverlapCheck */);
1756
+ /* srcTypeVarContext */ undefined, 32 /* AssignTypeFlags.SkipFunctionReturnTypeCheck */ | 16 /* AssignTypeFlags.OverloadOverlapCheck */);
1739
1757
  }
1740
1758
  _isLegalOverloadImplementation(overload, implementation, diag) {
1741
1759
  var _a;
1742
1760
  const implTypeVarContext = new typeVarContext_1.TypeVarContext((0, typeUtils_1.getTypeVarScopeId)(implementation));
1743
1761
  const overloadTypeVarContext = new typeVarContext_1.TypeVarContext((0, typeUtils_1.getTypeVarScopeId)(overload));
1744
1762
  // First check the parameters to see if they are assignable.
1745
- let isLegal = this._evaluator.assignType(overload, implementation, diag, overloadTypeVarContext, implTypeVarContext, 32 /* SkipFunctionReturnTypeCheck */ |
1746
- 2 /* ReverseTypeVarMatching */ |
1747
- 256 /* SkipSelfClsTypeCheck */);
1763
+ let isLegal = this._evaluator.assignType(overload, implementation, diag, overloadTypeVarContext, implTypeVarContext, 32 /* AssignTypeFlags.SkipFunctionReturnTypeCheck */ |
1764
+ 2 /* AssignTypeFlags.ReverseTypeVarMatching */ |
1765
+ 256 /* AssignTypeFlags.SkipSelfClsTypeCheck */);
1748
1766
  // Now check the return types.
1749
1767
  const overloadReturnType = (_a = overload.details.declaredReturnType) !== null && _a !== void 0 ? _a : this._evaluator.getFunctionInferredReturnType(overload);
1750
1768
  const implementationReturnType = (0, typeUtils_1.applySolvedTypeVars)(implementation.details.declaredReturnType || this._evaluator.getFunctionInferredReturnType(implementation), implTypeVarContext);
1751
1769
  const returnDiag = new diagnostic_1.DiagnosticAddendum();
1752
1770
  if (!(0, types_1.isNever)(overloadReturnType) &&
1753
- !this._evaluator.assignType(implementationReturnType, overloadReturnType, returnDiag.createAddendum(), implTypeVarContext, overloadTypeVarContext, 8 /* SkipSolveTypeVars */)) {
1771
+ !this._evaluator.assignType(implementationReturnType, overloadReturnType, returnDiag.createAddendum(), implTypeVarContext, overloadTypeVarContext, 8 /* AssignTypeFlags.SkipSolveTypeVars */)) {
1754
1772
  returnDiag.addMessage(localize_1.Localizer.DiagnosticAddendum.functionReturnTypeMismatch().format({
1755
1773
  sourceType: this._evaluator.printType(overloadReturnType),
1756
1774
  destType: this._evaluator.printType(implementationReturnType),
@@ -1786,72 +1804,72 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1786
1804
  }
1787
1805
  _validateStubStatement(statement) {
1788
1806
  switch (statement.nodeType) {
1789
- case 19 /* If */:
1790
- case 28 /* Function */:
1791
- case 10 /* Class */:
1792
- case 0 /* Error */: {
1807
+ case 19 /* ParseNodeType.If */:
1808
+ case 28 /* ParseNodeType.Function */:
1809
+ case 10 /* ParseNodeType.Class */:
1810
+ case 0 /* ParseNodeType.Error */: {
1793
1811
  // These are allowed in a stub file.
1794
1812
  break;
1795
1813
  }
1796
- case 57 /* While */:
1797
- case 26 /* For */:
1798
- case 53 /* Try */:
1799
- case 58 /* With */: {
1814
+ case 57 /* ParseNodeType.While */:
1815
+ case 26 /* ParseNodeType.For */:
1816
+ case 53 /* ParseNodeType.Try */:
1817
+ case 58 /* ParseNodeType.With */: {
1800
1818
  // These are not allowed.
1801
1819
  this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportInvalidStubStatement, diagnosticRules_1.DiagnosticRule.reportInvalidStubStatement, localize_1.Localizer.Diagnostic.invalidStubStatement(), statement);
1802
1820
  break;
1803
1821
  }
1804
- case 47 /* StatementList */: {
1822
+ case 47 /* ParseNodeType.StatementList */: {
1805
1823
  for (const substatement of statement.statements) {
1806
1824
  let isValid = true;
1807
1825
  switch (substatement.nodeType) {
1808
- case 2 /* Assert */:
1809
- case 4 /* AssignmentExpression */:
1810
- case 6 /* Await */:
1811
- case 7 /* BinaryOperation */:
1812
- case 11 /* Constant */:
1813
- case 14 /* Del */:
1814
- case 15 /* Dictionary */:
1815
- case 24 /* Index */:
1816
- case 26 /* For */:
1817
- case 27 /* FormatString */:
1818
- case 29 /* Global */:
1819
- case 30 /* Lambda */:
1820
- case 31 /* List */:
1821
- case 35 /* MemberAccess */:
1822
- case 38 /* Name */:
1823
- case 39 /* Nonlocal */:
1824
- case 40 /* Number */:
1825
- case 43 /* Raise */:
1826
- case 44 /* Return */:
1827
- case 45 /* Set */:
1828
- case 46 /* Slice */:
1829
- case 51 /* Ternary */:
1830
- case 52 /* Tuple */:
1831
- case 53 /* Try */:
1832
- case 55 /* UnaryOperation */:
1833
- case 56 /* Unpack */:
1834
- case 57 /* While */:
1835
- case 58 /* With */:
1836
- case 59 /* WithItem */:
1837
- case 60 /* Yield */:
1838
- case 61 /* YieldFrom */: {
1826
+ case 2 /* ParseNodeType.Assert */:
1827
+ case 4 /* ParseNodeType.AssignmentExpression */:
1828
+ case 6 /* ParseNodeType.Await */:
1829
+ case 7 /* ParseNodeType.BinaryOperation */:
1830
+ case 11 /* ParseNodeType.Constant */:
1831
+ case 14 /* ParseNodeType.Del */:
1832
+ case 15 /* ParseNodeType.Dictionary */:
1833
+ case 24 /* ParseNodeType.Index */:
1834
+ case 26 /* ParseNodeType.For */:
1835
+ case 27 /* ParseNodeType.FormatString */:
1836
+ case 29 /* ParseNodeType.Global */:
1837
+ case 30 /* ParseNodeType.Lambda */:
1838
+ case 31 /* ParseNodeType.List */:
1839
+ case 35 /* ParseNodeType.MemberAccess */:
1840
+ case 38 /* ParseNodeType.Name */:
1841
+ case 39 /* ParseNodeType.Nonlocal */:
1842
+ case 40 /* ParseNodeType.Number */:
1843
+ case 43 /* ParseNodeType.Raise */:
1844
+ case 44 /* ParseNodeType.Return */:
1845
+ case 45 /* ParseNodeType.Set */:
1846
+ case 46 /* ParseNodeType.Slice */:
1847
+ case 51 /* ParseNodeType.Ternary */:
1848
+ case 52 /* ParseNodeType.Tuple */:
1849
+ case 53 /* ParseNodeType.Try */:
1850
+ case 55 /* ParseNodeType.UnaryOperation */:
1851
+ case 56 /* ParseNodeType.Unpack */:
1852
+ case 57 /* ParseNodeType.While */:
1853
+ case 58 /* ParseNodeType.With */:
1854
+ case 59 /* ParseNodeType.WithItem */:
1855
+ case 60 /* ParseNodeType.Yield */:
1856
+ case 61 /* ParseNodeType.YieldFrom */: {
1839
1857
  isValid = false;
1840
1858
  break;
1841
1859
  }
1842
- case 5 /* AugmentedAssignment */: {
1860
+ case 5 /* ParseNodeType.AugmentedAssignment */: {
1843
1861
  // Exempt __all__ manipulations.
1844
1862
  isValid =
1845
- substatement.operator === 1 /* AddEqual */ &&
1846
- substatement.leftExpression.nodeType === 38 /* Name */ &&
1863
+ substatement.operator === 1 /* OperatorType.AddEqual */ &&
1864
+ substatement.leftExpression.nodeType === 38 /* ParseNodeType.Name */ &&
1847
1865
  substatement.leftExpression.value === '__all__';
1848
1866
  break;
1849
1867
  }
1850
- case 9 /* Call */: {
1868
+ case 9 /* ParseNodeType.Call */: {
1851
1869
  // Exempt __all__ manipulations.
1852
1870
  isValid =
1853
- substatement.leftExpression.nodeType === 35 /* MemberAccess */ &&
1854
- substatement.leftExpression.leftExpression.nodeType === 38 /* Name */ &&
1871
+ substatement.leftExpression.nodeType === 35 /* ParseNodeType.MemberAccess */ &&
1872
+ substatement.leftExpression.leftExpression.nodeType === 38 /* ParseNodeType.Name */ &&
1855
1873
  substatement.leftExpression.leftExpression.value === '__all__';
1856
1874
  break;
1857
1875
  }
@@ -1966,7 +1984,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1966
1984
  const typedDecls = symbol.getTypedDeclarations();
1967
1985
  if (typedDecls.length >= 1) {
1968
1986
  const primaryDecl = typedDecls[0];
1969
- if (primaryDecl.type === 5 /* Function */) {
1987
+ if (primaryDecl.type === 5 /* DeclarationType.Function */) {
1970
1988
  const type = this._evaluator.getEffectiveTypeOfSymbol(symbol);
1971
1989
  const overloadedFunctions = (0, types_1.isOverloadedFunction)(type)
1972
1990
  ? types_1.OverloadedFunctionType.getOverloads(type)
@@ -1990,7 +2008,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1990
2008
  if (!implementationFunction) {
1991
2009
  let exemptMissingImplementation = false;
1992
2010
  const containingClassNode = ParseTreeUtils.getEnclosingClassOrFunction(primaryDecl.node);
1993
- if (containingClassNode && containingClassNode.nodeType === 10 /* Class */) {
2011
+ if (containingClassNode && containingClassNode.nodeType === 10 /* ParseNodeType.Class */) {
1994
2012
  const classType = this._evaluator.getTypeOfClass(containingClassNode);
1995
2013
  if (classType) {
1996
2014
  if (types_1.ClassType.isProtocolClass(classType.classType)) {
@@ -2048,13 +2066,13 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2048
2066
  }
2049
2067
  sawFinal = true;
2050
2068
  }
2051
- if (decl.type === 1 /* Variable */ && decl.inferredTypeSource) {
2069
+ if (decl.type === 1 /* DeclarationType.Variable */ && decl.inferredTypeSource) {
2052
2070
  if (sawAssignment) {
2053
2071
  // We check for assignment of Final instance and class variables
2054
2072
  // the type evaluator because we need to take into account whether
2055
2073
  // the assignment is within an `__init__` method, so ignore class
2056
2074
  // scopes here.
2057
- if (scopeType !== 2 /* Class */) {
2075
+ if (scopeType !== 2 /* ScopeType.Class */) {
2058
2076
  this._evaluator.addError(localize_1.Localizer.Diagnostic.finalReassigned().format({ name }), decl.node);
2059
2077
  }
2060
2078
  }
@@ -2063,7 +2081,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2063
2081
  });
2064
2082
  // If it's not a stub file, an assignment must be provided.
2065
2083
  if (!sawAssignment && !this._fileInfo.isStubFile) {
2066
- const firstDecl = decls.find((decl) => decl.type === 1 /* Variable */ && decl.isFinal);
2084
+ const firstDecl = decls.find((decl) => decl.type === 1 /* DeclarationType.Variable */ && decl.isFinal);
2067
2085
  if (firstDecl) {
2068
2086
  // Is this an instance variable declared within a dataclass? If so, it
2069
2087
  // is implicitly initialized by the synthesized `__init__` method and
@@ -2122,10 +2140,10 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2122
2140
  let otherDecls = symbol.getDeclarations().filter((decl) => decl !== primaryDecl);
2123
2141
  // If it's a function, we can skip any other declarations
2124
2142
  // that are overloads or property setters/deleters.
2125
- if (primaryDecl.type === 5 /* Function */) {
2143
+ if (primaryDecl.type === 5 /* DeclarationType.Function */) {
2126
2144
  const primaryDeclTypeInfo = this._evaluator.getTypeOfFunction(primaryDecl.node);
2127
2145
  otherDecls = otherDecls.filter((decl) => {
2128
- if (decl.type !== 5 /* Function */) {
2146
+ if (decl.type !== 5 /* DeclarationType.Function */) {
2129
2147
  return true;
2130
2148
  }
2131
2149
  const funcTypeInfo = this._evaluator.getTypeOfFunction(decl.node);
@@ -2153,7 +2171,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2153
2171
  return;
2154
2172
  }
2155
2173
  let primaryDeclInfo;
2156
- if (primaryDecl.type === 5 /* Function */) {
2174
+ if (primaryDecl.type === 5 /* DeclarationType.Function */) {
2157
2175
  if (primaryDecl.isMethod) {
2158
2176
  primaryDeclInfo = localize_1.Localizer.DiagnosticAddendum.seeMethodDeclaration();
2159
2177
  }
@@ -2161,16 +2179,16 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2161
2179
  primaryDeclInfo = localize_1.Localizer.DiagnosticAddendum.seeFunctionDeclaration();
2162
2180
  }
2163
2181
  }
2164
- else if (primaryDecl.type === 6 /* Class */) {
2182
+ else if (primaryDecl.type === 6 /* DeclarationType.Class */) {
2165
2183
  primaryDeclInfo = localize_1.Localizer.DiagnosticAddendum.seeClassDeclaration();
2166
2184
  }
2167
- else if (primaryDecl.type === 2 /* Parameter */) {
2185
+ else if (primaryDecl.type === 2 /* DeclarationType.Parameter */) {
2168
2186
  primaryDeclInfo = localize_1.Localizer.DiagnosticAddendum.seeParameterDeclaration();
2169
2187
  }
2170
- else if (primaryDecl.type === 1 /* Variable */) {
2188
+ else if (primaryDecl.type === 1 /* DeclarationType.Variable */) {
2171
2189
  primaryDeclInfo = localize_1.Localizer.DiagnosticAddendum.seeVariableDeclaration();
2172
2190
  }
2173
- else if (primaryDecl.type === 4 /* TypeAlias */) {
2191
+ else if (primaryDecl.type === 4 /* DeclarationType.TypeAlias */) {
2174
2192
  primaryDeclInfo = localize_1.Localizer.DiagnosticAddendum.seeTypeAliasDeclaration();
2175
2193
  }
2176
2194
  else {
@@ -2179,16 +2197,16 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2179
2197
  const addPrimaryDeclInfo = (diag) => {
2180
2198
  if (diag) {
2181
2199
  let primaryDeclNode;
2182
- if (primaryDecl.type === 5 /* Function */ || primaryDecl.type === 6 /* Class */) {
2200
+ if (primaryDecl.type === 5 /* DeclarationType.Function */ || primaryDecl.type === 6 /* DeclarationType.Class */) {
2183
2201
  primaryDeclNode = primaryDecl.node.name;
2184
2202
  }
2185
- else if (primaryDecl.type === 1 /* Variable */) {
2186
- if (primaryDecl.node.nodeType === 38 /* Name */) {
2203
+ else if (primaryDecl.type === 1 /* DeclarationType.Variable */) {
2204
+ if (primaryDecl.node.nodeType === 38 /* ParseNodeType.Name */) {
2187
2205
  primaryDeclNode = primaryDecl.node;
2188
2206
  }
2189
2207
  }
2190
- else if (primaryDecl.type === 2 /* Parameter */ ||
2191
- primaryDecl.type === 3 /* TypeParameter */) {
2208
+ else if (primaryDecl.type === 2 /* DeclarationType.Parameter */ ||
2209
+ primaryDecl.type === 3 /* DeclarationType.TypeParameter */) {
2192
2210
  if (primaryDecl.node.name) {
2193
2211
  primaryDeclNode = primaryDecl.node.name;
2194
2212
  }
@@ -2199,9 +2217,9 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2199
2217
  }
2200
2218
  };
2201
2219
  for (const otherDecl of otherDecls) {
2202
- if (otherDecl.type === 6 /* Class */) {
2220
+ if (otherDecl.type === 6 /* DeclarationType.Class */) {
2203
2221
  let duplicateIsOk = false;
2204
- if (primaryDecl.type === 3 /* TypeParameter */) {
2222
+ if (primaryDecl.type === 3 /* DeclarationType.TypeParameter */) {
2205
2223
  // The error will be reported elsewhere if a type parameter is
2206
2224
  // involved, so don't report it here.
2207
2225
  duplicateIsOk = true;
@@ -2211,7 +2229,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2211
2229
  addPrimaryDeclInfo(diag);
2212
2230
  }
2213
2231
  }
2214
- else if (otherDecl.type === 5 /* Function */) {
2232
+ else if (otherDecl.type === 5 /* DeclarationType.Function */) {
2215
2233
  const primaryType = (_a = this._evaluator.getTypeForDeclaration(primaryDecl)) === null || _a === void 0 ? void 0 : _a.type;
2216
2234
  let duplicateIsOk = false;
2217
2235
  // If the return type has not yet been inferred, do so now.
@@ -2234,7 +2252,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2234
2252
  if (!isInSameStatementList && primaryType && otherType && (0, types_1.isTypeSame)(primaryType, otherType)) {
2235
2253
  duplicateIsOk = true;
2236
2254
  }
2237
- if (primaryDecl.type === 3 /* TypeParameter */) {
2255
+ if (primaryDecl.type === 3 /* DeclarationType.TypeParameter */) {
2238
2256
  // The error will be reported elsewhere if a type parameter is
2239
2257
  // involved, so don't report it here.
2240
2258
  duplicateIsOk = true;
@@ -2246,10 +2264,10 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2246
2264
  addPrimaryDeclInfo(diag);
2247
2265
  }
2248
2266
  }
2249
- else if (otherDecl.type === 2 /* Parameter */) {
2267
+ else if (otherDecl.type === 2 /* DeclarationType.Parameter */) {
2250
2268
  if (otherDecl.node.name) {
2251
2269
  let duplicateIsOk = false;
2252
- if (primaryDecl.type === 3 /* TypeParameter */) {
2270
+ if (primaryDecl.type === 3 /* DeclarationType.TypeParameter */) {
2253
2271
  // The error will be reported elsewhere if a type parameter is
2254
2272
  // involved, so don't report it here.
2255
2273
  duplicateIsOk = true;
@@ -2261,17 +2279,17 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2261
2279
  }
2262
2280
  }
2263
2281
  }
2264
- else if (otherDecl.type === 1 /* Variable */) {
2282
+ else if (otherDecl.type === 1 /* DeclarationType.Variable */) {
2265
2283
  const primaryType = (_c = this._evaluator.getTypeForDeclaration(primaryDecl)) === null || _c === void 0 ? void 0 : _c.type;
2266
2284
  if (otherDecl.typeAnnotationNode) {
2267
- if (otherDecl.node.nodeType === 38 /* Name */) {
2285
+ if (otherDecl.node.nodeType === 38 /* ParseNodeType.Name */) {
2268
2286
  let duplicateIsOk = false;
2269
2287
  // It's OK if they both have the same declared type.
2270
2288
  const otherType = (_d = this._evaluator.getTypeForDeclaration(otherDecl)) === null || _d === void 0 ? void 0 : _d.type;
2271
2289
  if (primaryType && otherType && (0, types_1.isTypeSame)(primaryType, otherType)) {
2272
2290
  duplicateIsOk = true;
2273
2291
  }
2274
- if (primaryDecl.type === 3 /* TypeParameter */) {
2292
+ if (primaryDecl.type === 3 /* DeclarationType.TypeParameter */) {
2275
2293
  // The error will be reported elsewhere if a type parameter is
2276
2294
  // involved, so don't report it here.
2277
2295
  duplicateIsOk = true;
@@ -2283,7 +2301,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2283
2301
  }
2284
2302
  }
2285
2303
  }
2286
- else if (otherDecl.type === 4 /* TypeAlias */) {
2304
+ else if (otherDecl.type === 4 /* DeclarationType.TypeAlias */) {
2287
2305
  const diag = this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.obscuredTypeAliasDeclaration().format({ name }), otherDecl.node.name);
2288
2306
  addPrimaryDeclInfo(diag);
2289
2307
  }
@@ -2319,10 +2337,10 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2319
2337
  let message;
2320
2338
  let rule;
2321
2339
  switch (decl.type) {
2322
- case 8 /* Alias */:
2340
+ case 8 /* DeclarationType.Alias */:
2323
2341
  diagnosticLevel = this._fileInfo.diagnosticRuleSet.reportUnusedImport;
2324
2342
  rule = diagnosticRules_1.DiagnosticRule.reportUnusedImport;
2325
- if (decl.node.nodeType === 21 /* ImportAs */) {
2343
+ if (decl.node.nodeType === 21 /* ParseNodeType.ImportAs */) {
2326
2344
  if (decl.node.alias) {
2327
2345
  // For statements of the form "import x as x", don't mark "x" as unaccessed
2328
2346
  // because it's assumed to be re-exported.
@@ -2338,13 +2356,13 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2338
2356
  const multipartName = nameParts.map((np) => np.value).join('.');
2339
2357
  let textRange = { start: nameParts[0].start, length: nameParts[0].length };
2340
2358
  textRange = textRange_1.TextRange.extend(textRange, nameParts[nameParts.length - 1]);
2341
- this._fileInfo.diagnosticSink.addUnusedCodeWithTextRange(localize_1.Localizer.Diagnostic.unaccessedSymbol().format({ name: multipartName }), textRange, { action: "pyright.unusedImport" /* unusedImport */ });
2359
+ this._fileInfo.diagnosticSink.addUnusedCodeWithTextRange(localize_1.Localizer.Diagnostic.unaccessedSymbol().format({ name: multipartName }), textRange, { action: "pyright.unusedImport" /* Commands.unusedImport */ });
2342
2360
  this._evaluator.addDiagnosticForTextRange(this._fileInfo, this._fileInfo.diagnosticRuleSet.reportUnusedImport, diagnosticRules_1.DiagnosticRule.reportUnusedImport, localize_1.Localizer.Diagnostic.unaccessedImport().format({ name: multipartName }), textRange);
2343
2361
  return;
2344
2362
  }
2345
2363
  }
2346
2364
  }
2347
- else if (decl.node.nodeType === 23 /* ImportFromAs */) {
2365
+ else if (decl.node.nodeType === 23 /* ParseNodeType.ImportFromAs */) {
2348
2366
  const importFrom = decl.node.parent;
2349
2367
  // For statements of the form "from y import x as x", don't mark "x" as
2350
2368
  // unaccessed because it's assumed to be re-exported.
@@ -2360,9 +2378,9 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2360
2378
  message = localize_1.Localizer.Diagnostic.unaccessedImport().format({ name: nameNode.value });
2361
2379
  }
2362
2380
  break;
2363
- case 4 /* TypeAlias */:
2364
- case 1 /* Variable */:
2365
- case 2 /* Parameter */:
2381
+ case 4 /* DeclarationType.TypeAlias */:
2382
+ case 1 /* DeclarationType.Variable */:
2383
+ case 2 /* DeclarationType.Parameter */:
2366
2384
  if (!isPrivate) {
2367
2385
  return;
2368
2386
  }
@@ -2372,7 +2390,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2372
2390
  return;
2373
2391
  }
2374
2392
  diagnosticLevel = this._fileInfo.diagnosticRuleSet.reportUnusedVariable;
2375
- if (decl.node.nodeType === 38 /* Name */) {
2393
+ if (decl.node.nodeType === 38 /* ParseNodeType.Name */) {
2376
2394
  nameNode = decl.node;
2377
2395
  // Don't emit a diagnostic if the name starts with an underscore.
2378
2396
  // This indicates that the variable is unused.
@@ -2380,7 +2398,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2380
2398
  diagnosticLevel = 'none';
2381
2399
  }
2382
2400
  }
2383
- else if (decl.node.nodeType === 41 /* Parameter */) {
2401
+ else if (decl.node.nodeType === 41 /* ParseNodeType.Parameter */) {
2384
2402
  nameNode = decl.node.name;
2385
2403
  // Don't emit a diagnostic for unused parameters or type parameters.
2386
2404
  diagnosticLevel = 'none';
@@ -2390,7 +2408,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2390
2408
  message = localize_1.Localizer.Diagnostic.unaccessedVariable().format({ name: nameNode.value });
2391
2409
  }
2392
2410
  break;
2393
- case 6 /* Class */:
2411
+ case 6 /* DeclarationType.Class */:
2394
2412
  if (!isPrivate) {
2395
2413
  return;
2396
2414
  }
@@ -2404,7 +2422,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2404
2422
  rule = diagnosticRules_1.DiagnosticRule.reportUnusedClass;
2405
2423
  message = localize_1.Localizer.Diagnostic.unaccessedClass().format({ name: nameNode.value });
2406
2424
  break;
2407
- case 5 /* Function */:
2425
+ case 5 /* DeclarationType.Function */:
2408
2426
  if (!isPrivate) {
2409
2427
  return;
2410
2428
  }
@@ -2418,18 +2436,18 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2418
2436
  rule = diagnosticRules_1.DiagnosticRule.reportUnusedFunction;
2419
2437
  message = localize_1.Localizer.Diagnostic.unaccessedFunction().format({ name: nameNode.value });
2420
2438
  break;
2421
- case 3 /* TypeParameter */:
2439
+ case 3 /* DeclarationType.TypeParameter */:
2422
2440
  // Never report a diagnostic for an unused TypeParameter.
2423
2441
  diagnosticLevel = 'none';
2424
2442
  nameNode = decl.node.name;
2425
2443
  break;
2426
- case 0 /* Intrinsic */:
2427
- case 7 /* SpecialBuiltInClass */:
2444
+ case 0 /* DeclarationType.Intrinsic */:
2445
+ case 7 /* DeclarationType.SpecialBuiltInClass */:
2428
2446
  return;
2429
2447
  default:
2430
2448
  (0, debug_1.assertNever)(decl);
2431
2449
  }
2432
- const action = rule === diagnosticRules_1.DiagnosticRule.reportUnusedImport ? { action: "pyright.unusedImport" /* unusedImport */ } : undefined;
2450
+ const action = rule === diagnosticRules_1.DiagnosticRule.reportUnusedImport ? { action: "pyright.unusedImport" /* Commands.unusedImport */ } : undefined;
2433
2451
  if (nameNode) {
2434
2452
  this._fileInfo.diagnosticSink.addUnusedCodeWithTextRange(localize_1.Localizer.Diagnostic.unaccessedSymbol().format({ name: nameNode.value }), nameNode, action);
2435
2453
  if (rule !== undefined && message) {
@@ -2441,7 +2459,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2441
2459
  // common source of programming errors. Also validates that arguments passed
2442
2460
  // to isinstance or issubclass won't generate exceptions.
2443
2461
  _validateIsInstanceCall(node) {
2444
- if (node.leftExpression.nodeType !== 38 /* Name */ ||
2462
+ if (node.leftExpression.nodeType !== 38 /* ParseNodeType.Name */ ||
2445
2463
  (node.leftExpression.value !== 'isinstance' && node.leftExpression.value !== 'issubclass') ||
2446
2464
  node.arguments.length !== 2) {
2447
2465
  return;
@@ -2461,21 +2479,20 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2461
2479
  return;
2462
2480
  }
2463
2481
  let isValidType = true;
2482
+ const diag = new diagnostic_1.DiagnosticAddendum();
2464
2483
  (0, typeUtils_1.doForEachSubtype)(arg1Type, (arg1Subtype) => {
2465
2484
  if ((0, types_1.isClassInstance)(arg1Subtype) && types_1.ClassType.isTupleClass(arg1Subtype) && arg1Subtype.tupleTypeArguments) {
2466
- if (arg1Subtype.tupleTypeArguments.some((typeArg) => !this._isTypeSupportedTypeForIsInstance(typeArg.type, isInstanceCheck))) {
2485
+ if (arg1Subtype.tupleTypeArguments.some((typeArg) => !this._isTypeSupportedTypeForIsInstance(typeArg.type, isInstanceCheck, diag))) {
2467
2486
  isValidType = false;
2468
2487
  }
2469
2488
  }
2470
2489
  else {
2471
- if (!this._isTypeSupportedTypeForIsInstance(arg1Subtype, isInstanceCheck)) {
2490
+ if (!this._isTypeSupportedTypeForIsInstance(arg1Subtype, isInstanceCheck, diag)) {
2472
2491
  isValidType = false;
2473
2492
  }
2474
2493
  }
2475
2494
  });
2476
2495
  if (!isValidType) {
2477
- const diag = new diagnostic_1.DiagnosticAddendum();
2478
- diag.addMessage(localize_1.Localizer.DiagnosticAddendum.typeVarNotAllowed());
2479
2496
  this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, isInstanceCheck
2480
2497
  ? localize_1.Localizer.Diagnostic.isInstanceInvalidType().format({
2481
2498
  type: this._evaluator.printType(arg1Type),
@@ -2488,7 +2505,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2488
2505
  // it's unnecessary.
2489
2506
  let curNode = node;
2490
2507
  while (curNode) {
2491
- if (curNode.nodeType === 2 /* Assert */) {
2508
+ if (curNode.nodeType === 2 /* ParseNodeType.Assert */) {
2492
2509
  return;
2493
2510
  }
2494
2511
  curNode = curNode.parent;
@@ -2556,12 +2573,6 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2556
2573
  if (!isValidType) {
2557
2574
  return;
2558
2575
  }
2559
- // According to PEP 544, protocol classes cannot be used as the right-hand
2560
- // argument to isinstance or issubclass unless they are annotated as
2561
- // "runtime checkable".
2562
- if (classTypeList.some((type) => types_1.ClassType.isProtocolClass(type) && !types_1.ClassType.isRuntimeCheckable(type))) {
2563
- this._evaluator.addError(localize_1.Localizer.Diagnostic.protocolUsedInCall().format({ name: callName }), node.arguments[1].valueExpression);
2564
- }
2565
2576
  if ((0, typeUtils_1.derivesFromAnyOrUnknown)(arg0Type)) {
2566
2577
  return;
2567
2578
  }
@@ -2652,35 +2663,45 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2652
2663
  }
2653
2664
  // Determines whether the specified type is allowed as the second argument
2654
2665
  // to an isinstance or issubclass check.
2655
- _isTypeSupportedTypeForIsInstance(type, isInstanceCheck) {
2666
+ _isTypeSupportedTypeForIsInstance(type, isInstanceCheck, diag) {
2656
2667
  let isSupported = true;
2657
2668
  (0, typeUtils_1.doForEachSubtype)(type, (subtype) => {
2658
2669
  subtype = this._evaluator.makeTopLevelTypeVarsConcrete(subtype);
2659
2670
  subtype = (0, typeUtils_1.transformPossibleRecursiveTypeAlias)(subtype);
2660
2671
  switch (subtype.category) {
2661
- case 2 /* Any */:
2662
- case 1 /* Unknown */:
2663
- case 0 /* Unbound */:
2672
+ case 2 /* TypeCategory.Any */:
2673
+ case 1 /* TypeCategory.Unknown */:
2674
+ case 0 /* TypeCategory.Unbound */:
2664
2675
  break;
2665
- case 6 /* Class */:
2676
+ case 6 /* TypeCategory.Class */:
2666
2677
  if ((0, typeUtils_1.isNoneInstance)(subtype)) {
2678
+ diag.addMessage(localize_1.Localizer.DiagnosticAddendum.noneNotAllowed());
2667
2679
  isSupported = false;
2668
2680
  }
2669
2681
  else if (subtype.isTypeArgumentExplicit && !subtype.includeSubclasses) {
2670
2682
  // If it's a class, make sure that it has not been given explicit
2671
2683
  // type arguments. This will result in a TypeError exception.
2684
+ diag.addMessage(localize_1.Localizer.DiagnosticAddendum.genericClassNotAllowed());
2685
+ isSupported = false;
2686
+ }
2687
+ else if (types_1.ClassType.isProtocolClass(subtype) &&
2688
+ !types_1.ClassType.isRuntimeCheckable(subtype) &&
2689
+ !subtype.includeSubclasses) {
2690
+ // According to PEP 544, protocol classes cannot be used as the right-hand
2691
+ // argument to isinstance or issubclass unless they are annotated as
2692
+ // "runtime checkable".
2693
+ diag.addMessage(localize_1.Localizer.DiagnosticAddendum.protocolRequiresRuntimeCheckable());
2672
2694
  isSupported = false;
2673
2695
  }
2674
2696
  break;
2675
- case 4 /* Function */:
2697
+ case 4 /* TypeCategory.Function */:
2676
2698
  if (!types_1.TypeBase.isInstantiable(subtype) || subtype.isCallableWithTypeArgs) {
2699
+ diag.addMessage(localize_1.Localizer.DiagnosticAddendum.genericClassNotAllowed());
2677
2700
  isSupported = false;
2678
2701
  }
2679
2702
  break;
2680
- case 8 /* Union */:
2681
- isSupported = this._isTypeSupportedTypeForIsInstance(subtype, isInstanceCheck);
2682
- break;
2683
- default:
2703
+ case 9 /* TypeCategory.TypeVar */:
2704
+ diag.addMessage(localize_1.Localizer.DiagnosticAddendum.typeVarNotAllowed());
2684
2705
  isSupported = false;
2685
2706
  break;
2686
2707
  }
@@ -2690,7 +2711,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2690
2711
  _isSymbolPrivate(nameValue, scopeType) {
2691
2712
  // All variables within the scope of a function or a list
2692
2713
  // comprehension are considered private.
2693
- if (scopeType === 1 /* Function */ || scopeType === 0 /* ListComprehension */) {
2714
+ if (scopeType === 1 /* ScopeType.Function */ || scopeType === 0 /* ScopeType.ListComprehension */) {
2694
2715
  return true;
2695
2716
  }
2696
2717
  // See if the symbol is private.
@@ -2699,7 +2720,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2699
2720
  }
2700
2721
  if (SymbolNameUtils.isProtectedName(nameValue)) {
2701
2722
  // Protected names outside of a class scope are considered private.
2702
- const isClassScope = scopeType === 2 /* Class */;
2723
+ const isClassScope = scopeType === 2 /* ScopeType.Class */;
2703
2724
  return !isClassScope;
2704
2725
  }
2705
2726
  return false;
@@ -2741,7 +2762,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2741
2762
  let deprecatedMessage;
2742
2763
  function getDeprecatedMessageForFunction(functionType) {
2743
2764
  if (functionType.details.declaration &&
2744
- functionType.details.declaration.node.nodeType === 28 /* Function */) {
2765
+ functionType.details.declaration.node.nodeType === 28 /* ParseNodeType.Function */) {
2745
2766
  const containingClass = ParseTreeUtils.getEnclosingClass(functionType.details.declaration.node,
2746
2767
  /* stopAtFunction */ true);
2747
2768
  if (containingClass) {
@@ -2898,7 +2919,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2898
2919
  // Add a quick action that renames the file.
2899
2920
  if (diag) {
2900
2921
  const renameAction = {
2901
- action: "renameShadowedFile" /* RenameShadowedFileAction */,
2922
+ action: "renameShadowedFile" /* ActionKind.RenameShadowedFileAction */,
2902
2923
  oldFile: this._fileInfo.filePath,
2903
2924
  newFile: this._sourceMapper.getNextFileName(this._fileInfo.filePath),
2904
2925
  };
@@ -2912,8 +2933,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2912
2933
  return;
2913
2934
  }
2914
2935
  // Skip this check for relative imports.
2915
- const nodeModule = node.nodeType === 23 /* ImportFromAs */
2916
- ? ((_a = node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 22 /* ImportFrom */
2936
+ const nodeModule = node.nodeType === 23 /* ParseNodeType.ImportFromAs */
2937
+ ? ((_a = node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 22 /* ParseNodeType.ImportFrom */
2917
2938
  ? (_b = node.parent) === null || _b === void 0 ? void 0 : _b.module
2918
2939
  : undefined
2919
2940
  : node.module;
@@ -2921,9 +2942,9 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2921
2942
  return;
2922
2943
  }
2923
2944
  // Otherwise use the name to determine if a match for a stdlib module.
2924
- const namePartNodes = node.nodeType === 21 /* ImportAs */
2945
+ const namePartNodes = node.nodeType === 21 /* ParseNodeType.ImportAs */
2925
2946
  ? node.module.nameParts
2926
- : node.nodeType === 23 /* ImportFromAs */
2947
+ : node.nodeType === 23 /* ParseNodeType.ImportFromAs */
2927
2948
  ? [node.name]
2928
2949
  : node.module.nameParts;
2929
2950
  const nameParts = namePartNodes.map((n) => n.value);
@@ -2949,7 +2970,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2949
2970
  // Add a quick action that renames the file.
2950
2971
  if (diag) {
2951
2972
  const renameAction = {
2952
- action: "renameShadowedFile" /* RenameShadowedFileAction */,
2973
+ action: "renameShadowedFile" /* ActionKind.RenameShadowedFileAction */,
2953
2974
  oldFile: p,
2954
2975
  newFile: this._sourceMapper.getNextFileName(p),
2955
2976
  };
@@ -2969,7 +2990,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2969
2990
  return;
2970
2991
  }
2971
2992
  // Ignore privates in named arguments.
2972
- if (((_a = node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 1 /* Argument */ && node.parent.name === node) {
2993
+ if (((_a = node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 1 /* ParseNodeType.Argument */ && node.parent.name === node) {
2973
2994
  return;
2974
2995
  }
2975
2996
  const nameValue = node.value;
@@ -2985,7 +3006,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2985
3006
  if (!primaryDeclaration || primaryDeclaration.node === node) {
2986
3007
  return;
2987
3008
  }
2988
- if (primaryDeclaration.type === 8 /* Alias */) {
3009
+ if (primaryDeclaration.type === 8 /* DeclarationType.Alias */) {
2989
3010
  // If this symbol is an import alias (i.e. it's a local name rather than the
2990
3011
  // original imported name), skip the private check.
2991
3012
  if (primaryDeclaration.usesLocalName) {
@@ -3081,12 +3102,12 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3081
3102
  };
3082
3103
  suiteNode.statements.forEach((statement) => {
3083
3104
  if (!AnalyzerNodeInfo.isCodeUnreachable(statement)) {
3084
- if (statement.nodeType === 47 /* StatementList */) {
3105
+ if (statement.nodeType === 47 /* ParseNodeType.StatementList */) {
3085
3106
  for (const substatement of statement.statements) {
3086
- if (substatement.nodeType !== 54 /* TypeAnnotation */ &&
3087
- substatement.nodeType !== 18 /* Ellipsis */ &&
3088
- substatement.nodeType !== 48 /* StringList */ &&
3089
- substatement.nodeType !== 42 /* Pass */) {
3107
+ if (substatement.nodeType !== 54 /* ParseNodeType.TypeAnnotation */ &&
3108
+ substatement.nodeType !== 18 /* ParseNodeType.Ellipsis */ &&
3109
+ substatement.nodeType !== 48 /* ParseNodeType.StringList */ &&
3110
+ substatement.nodeType !== 42 /* ParseNodeType.Pass */) {
3090
3111
  emitBadStatementError(substatement);
3091
3112
  }
3092
3113
  }
@@ -3157,10 +3178,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3157
3178
  let declaredReturnType = functionType.details.declaredReturnType;
3158
3179
  if (declaredReturnType) {
3159
3180
  this._reportUnknownReturnResult(node, declaredReturnType);
3160
- if ((0, types_1.isTypeVar)(declaredReturnType) &&
3161
- declaredReturnType.details.declaredVariance === 4 /* Contravariant */) {
3162
- this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.returnTypeContravariant(), returnAnnotation);
3163
- }
3181
+ this._validateReturnTypeIsNotContravariant(declaredReturnType, returnAnnotation);
3164
3182
  }
3165
3183
  // Wrap the declared type in a generator type if the function is a generator.
3166
3184
  if (types_1.FunctionType.isGenerator(functionType)) {
@@ -3201,6 +3219,18 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3201
3219
  else {
3202
3220
  const inferredReturnType = this._evaluator.getFunctionInferredReturnType(functionType);
3203
3221
  this._reportUnknownReturnResult(node, inferredReturnType);
3222
+ this._validateReturnTypeIsNotContravariant(inferredReturnType, node.name);
3223
+ }
3224
+ }
3225
+ _validateReturnTypeIsNotContravariant(returnType, errorNode) {
3226
+ let isContraTypeVar = false;
3227
+ (0, typeUtils_1.doForEachSubtype)(returnType, (subtype) => {
3228
+ if ((0, types_1.isTypeVar)(subtype) && subtype.details.declaredVariance === 4 /* Variance.Contravariant */) {
3229
+ isContraTypeVar = true;
3230
+ }
3231
+ });
3232
+ if (isContraTypeVar) {
3233
+ this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.returnTypeContravariant(), errorNode);
3204
3234
  }
3205
3235
  }
3206
3236
  _reportUnknownReturnResult(node, returnType) {
@@ -3217,7 +3247,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3217
3247
  // as Final in parent classes.
3218
3248
  _validateFinalMemberOverrides(classType) {
3219
3249
  classType.details.fields.forEach((localSymbol, name) => {
3220
- const parentSymbol = (0, typeUtils_1.lookUpClassMember)(classType, name, 1 /* SkipOriginalClass */);
3250
+ const parentSymbol = (0, typeUtils_1.lookUpClassMember)(classType, name, 1 /* MemberAccessFlags.SkipOriginalClass */);
3221
3251
  if (parentSymbol &&
3222
3252
  (0, types_1.isInstantiableClass)(parentSymbol.classType) &&
3223
3253
  this._evaluator.isFinalVariable(parentSymbol.symbol) &&
@@ -3240,7 +3270,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3240
3270
  return;
3241
3271
  }
3242
3272
  const decls = symbol.getDeclarations();
3243
- if (decls.length >= 2 && decls[0].type === 1 /* Variable */) {
3273
+ if (decls.length >= 2 && decls[0].type === 1 /* DeclarationType.Variable */) {
3244
3274
  const symbolType = this._evaluator.getEffectiveTypeOfSymbol(symbol);
3245
3275
  // Is this symbol a literal instance of the enum class?
3246
3276
  if ((0, types_1.isClassInstance)(symbolType) &&
@@ -3275,10 +3305,10 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3275
3305
  if (decls.length === 0 || !(0, types_1.isClass)(member.classType)) {
3276
3306
  return;
3277
3307
  }
3278
- if (decls[0].type === 1 /* Variable */) {
3308
+ if (decls[0].type === 1 /* DeclarationType.Variable */) {
3279
3309
  // If none of the declarations involve assignments, assume it's
3280
3310
  // not implemented in the protocol.
3281
- if (!decls.some((decl) => decl.type === 1 /* Variable */ && !!decl.inferredTypeSource)) {
3311
+ if (!decls.some((decl) => decl.type === 1 /* DeclarationType.Variable */ && !!decl.inferredTypeSource)) {
3282
3312
  // This is a variable declaration that is not implemented in the
3283
3313
  // protocol base class. Make sure it's implemented in the derived class.
3284
3314
  if (!isSymbolImplemented(name)) {
@@ -3289,8 +3319,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3289
3319
  }
3290
3320
  }
3291
3321
  }
3292
- else if (decls[0].type === 5 /* Function */) {
3293
- if (decls.every((decl) => decl.type !== 5 /* Function */ || ParseTreeUtils.isSuiteEmpty(decl.node.suite))) {
3322
+ else if (decls[0].type === 5 /* DeclarationType.Function */) {
3323
+ if (decls.every((decl) => decl.type !== 5 /* DeclarationType.Function */ || ParseTreeUtils.isSuiteEmpty(decl.node.suite))) {
3294
3324
  if ((0, pathUtils_1.getFileExtension)(decls[0].path).toLowerCase() !== '.pyi') {
3295
3325
  if (!isSymbolImplemented(name)) {
3296
3326
  diagAddendum.addMessage(localize_1.Localizer.DiagnosticAddendum.missingProtocolMember().format({
@@ -3313,7 +3343,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3313
3343
  if (!types_1.ClassType.isDataClass(classType)) {
3314
3344
  return;
3315
3345
  }
3316
- const postInitMember = (0, typeUtils_1.lookUpClassMember)(classType, '__post_init__', 2 /* SkipBaseClasses */ | 64 /* DeclaredTypesOnly */);
3346
+ const postInitMember = (0, typeUtils_1.lookUpClassMember)(classType, '__post_init__', 2 /* MemberAccessFlags.SkipBaseClasses */ | 64 /* MemberAccessFlags.DeclaredTypesOnly */);
3317
3347
  // If there's no __post_init__ method, there's nothing to check.
3318
3348
  if (!postInitMember) {
3319
3349
  return;
@@ -3436,7 +3466,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3436
3466
  // variables. We need to make sure these are initialized.
3437
3467
  const abstractSymbols = new Map();
3438
3468
  if (types_1.ClassType.isFinal(classType)) {
3439
- (0, typeUtils_1.getProtocolSymbolsRecursive)(classType, abstractSymbols, 1024 /* SupportsAbstractMethods */);
3469
+ (0, typeUtils_1.getProtocolSymbolsRecursive)(classType, abstractSymbols, 1024 /* ClassTypeFlags.SupportsAbstractMethods */);
3440
3470
  }
3441
3471
  classType.details.fields.forEach((localSymbol, name) => {
3442
3472
  abstractSymbols.delete(name);
@@ -3453,14 +3483,14 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3453
3483
  if (!containingClass) {
3454
3484
  return true;
3455
3485
  }
3456
- if (containingClass.nodeType === 10 /* Class */) {
3486
+ if (containingClass.nodeType === 10 /* ParseNodeType.Class */) {
3457
3487
  // If this is part of an assignment statement, assume it has been
3458
3488
  // initialized as a class variable.
3459
- if (((_a = decl.node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 3 /* Assignment */) {
3489
+ if (((_a = decl.node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 3 /* ParseNodeType.Assignment */) {
3460
3490
  return true;
3461
3491
  }
3462
- if (((_b = decl.node.parent) === null || _b === void 0 ? void 0 : _b.nodeType) === 54 /* TypeAnnotation */ &&
3463
- ((_c = decl.node.parent.parent) === null || _c === void 0 ? void 0 : _c.nodeType) === 3 /* Assignment */) {
3492
+ if (((_b = decl.node.parent) === null || _b === void 0 ? void 0 : _b.nodeType) === 54 /* ParseNodeType.TypeAnnotation */ &&
3493
+ ((_c = decl.node.parent.parent) === null || _c === void 0 ? void 0 : _c.nodeType) === 3 /* ParseNodeType.Assignment */) {
3464
3494
  return true;
3465
3495
  }
3466
3496
  // If this is part of a dataclass or a class handled by a dataclass_transform,
@@ -3484,7 +3514,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3484
3514
  }
3485
3515
  // If the symbol is declared by its parent, we can assume it
3486
3516
  // is initialized there.
3487
- const parentSymbol = (0, typeUtils_1.lookUpClassMember)(classType, name, 1 /* SkipOriginalClass */);
3517
+ const parentSymbol = (0, typeUtils_1.lookUpClassMember)(classType, name, 1 /* MemberAccessFlags.SkipOriginalClass */);
3488
3518
  if (parentSymbol) {
3489
3519
  return;
3490
3520
  }
@@ -3499,10 +3529,10 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3499
3529
  if (decls.length === 0 || !(0, types_1.isClass)(member.classType)) {
3500
3530
  return;
3501
3531
  }
3502
- if (decls[0].type === 1 /* Variable */) {
3532
+ if (decls[0].type === 1 /* DeclarationType.Variable */) {
3503
3533
  // If none of the declarations involve assignments, assume it's
3504
3534
  // not implemented in the protocol.
3505
- if (!decls.some((decl) => decl.type === 1 /* Variable */ && !!decl.inferredTypeSource)) {
3535
+ if (!decls.some((decl) => decl.type === 1 /* DeclarationType.Variable */ && !!decl.inferredTypeSource)) {
3506
3536
  // This is a variable declaration that is not implemented in the
3507
3537
  // protocol base class. Make sure it's implemented in the derived class.
3508
3538
  diagAddendum.addMessage(localize_1.Localizer.DiagnosticAddendum.uninitializedAbstractVariable().format({
@@ -3540,7 +3570,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3540
3570
  return;
3541
3571
  }
3542
3572
  // Skip type variables with auto-variance.
3543
- if (param.details.declaredVariance === 0 /* Auto */) {
3573
+ if (param.details.declaredVariance === 0 /* Variance.Auto */) {
3544
3574
  return;
3545
3575
  }
3546
3576
  // Replace all type arguments with a dummy type except for the
@@ -3563,26 +3593,26 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3563
3593
  const isDestSubtypeOfSrc = this._evaluator.assignClassToSelf(srcType, destType);
3564
3594
  let expectedVariance;
3565
3595
  if (isDestSubtypeOfSrc) {
3566
- expectedVariance = 3 /* Covariant */;
3596
+ expectedVariance = 3 /* Variance.Covariant */;
3567
3597
  }
3568
3598
  else {
3569
3599
  const isSrcSubtypeOfDest = this._evaluator.assignClassToSelf(destType, srcType);
3570
3600
  if (isSrcSubtypeOfDest) {
3571
- expectedVariance = 4 /* Contravariant */;
3601
+ expectedVariance = 4 /* Variance.Contravariant */;
3572
3602
  }
3573
3603
  else {
3574
- expectedVariance = 2 /* Invariant */;
3604
+ expectedVariance = 2 /* Variance.Invariant */;
3575
3605
  }
3576
3606
  }
3577
3607
  if (expectedVariance !== classType.details.typeParameters[paramIndex].details.declaredVariance) {
3578
3608
  let message;
3579
- if (expectedVariance === 3 /* Covariant */) {
3609
+ if (expectedVariance === 3 /* Variance.Covariant */) {
3580
3610
  message = localize_1.Localizer.Diagnostic.protocolVarianceCovariant().format({
3581
3611
  variable: param.details.name,
3582
3612
  class: classType.details.name,
3583
3613
  });
3584
3614
  }
3585
- else if (expectedVariance === 4 /* Contravariant */) {
3615
+ else if (expectedVariance === 4 /* Variance.Contravariant */) {
3586
3616
  message = localize_1.Localizer.Diagnostic.protocolVarianceContravariant().format({
3587
3617
  variable: param.details.name,
3588
3618
  class: classType.details.name,
@@ -3612,13 +3642,13 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3612
3642
  }
3613
3643
  classType.details.fields.forEach((symbol, name) => {
3614
3644
  const decls = symbol.getDeclarations();
3615
- const isDefinedBySlots = decls.some((decl) => decl.type === 1 /* Variable */ && decl.isDefinedBySlots);
3645
+ const isDefinedBySlots = decls.some((decl) => decl.type === 1 /* DeclarationType.Variable */ && decl.isDefinedBySlots);
3616
3646
  if (isDefinedBySlots) {
3617
3647
  decls.forEach((decl) => {
3618
- if (decl.type === 1 /* Variable */ &&
3648
+ if (decl.type === 1 /* DeclarationType.Variable */ &&
3619
3649
  !decl.isDefinedBySlots &&
3620
3650
  !decl.isDefinedByMemberAccess) {
3621
- if (decl.node.nodeType === 38 /* Name */ && ParseTreeUtils.isWriteAccess(decl.node)) {
3651
+ if (decl.node.nodeType === 38 /* ParseNodeType.Name */ && ParseTreeUtils.isWriteAccess(decl.node)) {
3622
3652
  this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.slotsClassVarConflict().format({ name }), decl.node);
3623
3653
  }
3624
3654
  }
@@ -3684,25 +3714,25 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3684
3714
  // often has an *args and/or **kwargs. We'll also set the ParamSpecValue
3685
3715
  // because we don't care about the return type for this check.
3686
3716
  initMemberType = types_1.FunctionType.cloneWithNewFlags(initMemberType, initMemberType.details.flags |
3687
- 32768 /* SkipArgsKwargsCompatibilityCheck */ |
3688
- 65536 /* ParamSpecValue */);
3717
+ 32768 /* FunctionTypeFlags.SkipArgsKwargsCompatibilityCheck */ |
3718
+ 65536 /* FunctionTypeFlags.ParamSpecValue */);
3689
3719
  newMemberType = types_1.FunctionType.cloneWithNewFlags(newMemberType, initMemberType.details.flags |
3690
- 32768 /* SkipArgsKwargsCompatibilityCheck */ |
3691
- 65536 /* ParamSpecValue */);
3720
+ 32768 /* FunctionTypeFlags.SkipArgsKwargsCompatibilityCheck */ |
3721
+ 65536 /* FunctionTypeFlags.ParamSpecValue */);
3692
3722
  if (!this._evaluator.assignType(newMemberType, initMemberType,
3693
3723
  /* diag */ undefined,
3694
3724
  /* destTypeVarContext */ undefined,
3695
- /* srcTypeVarContext */ undefined, 32 /* SkipFunctionReturnTypeCheck */) ||
3725
+ /* srcTypeVarContext */ undefined, 32 /* AssignTypeFlags.SkipFunctionReturnTypeCheck */) ||
3696
3726
  !this._evaluator.assignType(initMemberType, newMemberType,
3697
3727
  /* diag */ undefined,
3698
3728
  /* destTypeVarContext */ undefined,
3699
- /* srcTypeVarContext */ undefined, 32 /* SkipFunctionReturnTypeCheck */)) {
3729
+ /* srcTypeVarContext */ undefined, 32 /* AssignTypeFlags.SkipFunctionReturnTypeCheck */)) {
3700
3730
  const displayOnInit = types_1.ClassType.isSameGenericClass(initMethodResult.classType, classType);
3701
3731
  const initDecl = initMemberType.details.declaration;
3702
3732
  const newDecl = newMemberType.details.declaration;
3703
3733
  if (initDecl && newDecl) {
3704
3734
  const mainDecl = displayOnInit ? initDecl : newDecl;
3705
- const mainDeclNode = mainDecl.node.nodeType === 28 /* Function */ ? mainDecl.node.name : mainDecl.node;
3735
+ const mainDeclNode = mainDecl.node.nodeType === 28 /* ParseNodeType.Function */ ? mainDecl.node.name : mainDecl.node;
3706
3736
  const diagAddendum = new diagnostic_1.DiagnosticAddendum();
3707
3737
  const initSignature = this._evaluator.printType(initMemberType);
3708
3738
  const newSignature = this._evaluator.printType(newMemberType);
@@ -3885,7 +3915,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3885
3915
  /* baseClass */ undefined, diagAddendum,
3886
3916
  /* enforceParamNameMatch */ true)) {
3887
3917
  const decl = overrideFunction.details.declaration;
3888
- if (decl && decl.type === 5 /* Function */) {
3918
+ if (decl && decl.type === 5 /* DeclarationType.Function */) {
3889
3919
  diag = this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleMethodOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleMethodOverride, localize_1.Localizer.Diagnostic.baseClassMethodTypeIncompatible().format({
3890
3920
  classType: childClassType.details.name,
3891
3921
  name: memberName,
@@ -3971,7 +4001,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3971
4001
  continue;
3972
4002
  }
3973
4003
  (0, debug_1.assert)((0, types_1.isClass)(mroBaseClass));
3974
- const baseClassAndSymbol = (0, typeUtils_1.lookUpClassMember)(mroBaseClass, name, 0 /* Default */);
4004
+ const baseClassAndSymbol = (0, typeUtils_1.lookUpClassMember)(mroBaseClass, name, 0 /* MemberAccessFlags.Default */);
3975
4005
  if (!baseClassAndSymbol) {
3976
4006
  continue;
3977
4007
  }
@@ -4001,8 +4031,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4001
4031
  overrideFunction = types_1.OverloadedFunctionType.getImplementation(overrideType);
4002
4032
  }
4003
4033
  else if ((0, types_1.isClassInstance)(overrideType) && types_1.ClassType.isPropertyClass(overrideType)) {
4004
- if (overrideType.fgetFunction) {
4005
- overrideFunction = overrideType.fgetFunction;
4034
+ if (overrideType.fgetInfo) {
4035
+ overrideFunction = overrideType.fgetInfo.methodType;
4006
4036
  }
4007
4037
  }
4008
4038
  if (!(overrideFunction === null || overrideFunction === void 0 ? void 0 : overrideFunction.details.declaration) || types_1.FunctionType.isOverridden(overrideFunction)) {
@@ -4035,8 +4065,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4035
4065
  overrideFunction = types_1.OverloadedFunctionType.getImplementation(overrideType);
4036
4066
  }
4037
4067
  else if ((0, types_1.isClassInstance)(overrideType) && types_1.ClassType.isPropertyClass(overrideType)) {
4038
- if (overrideType.fgetFunction) {
4039
- overrideFunction = overrideType.fgetFunction;
4068
+ if (overrideType.fgetInfo) {
4069
+ overrideFunction = overrideType.fgetInfo.methodType;
4040
4070
  }
4041
4071
  }
4042
4072
  if (!(overrideFunction === null || overrideFunction === void 0 ? void 0 : overrideFunction.details.declaration) || !types_1.FunctionType.isOverridden(overrideFunction)) {
@@ -4096,7 +4126,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4096
4126
  const diag = this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleMethodOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleMethodOverride, localize_1.Localizer.Diagnostic.incompatibleMethodOverride().format({
4097
4127
  name: memberName,
4098
4128
  className: baseClass.details.name,
4099
- }) + diagAddendum.getString(), decl.type === 5 /* Function */ ? decl.node.name : decl.node);
4129
+ }) + diagAddendum.getString(), decl.type === 5 /* DeclarationType.Function */ ? decl.node.name : decl.node);
4100
4130
  const origDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(baseClassAndSymbol.symbol);
4101
4131
  if (diag && origDecl) {
4102
4132
  diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.overriddenMethod(), origDecl.path, origDecl.range);
@@ -4108,7 +4138,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4108
4138
  // Private names (starting with double underscore) are exempt from this check.
4109
4139
  if (!SymbolNameUtils.isPrivateName(memberName) && types_1.FunctionType.isFinal(baseType)) {
4110
4140
  const decl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(overrideSymbol);
4111
- if (decl && decl.type === 5 /* Function */) {
4141
+ if (decl && decl.type === 5 /* DeclarationType.Function */) {
4112
4142
  const diag = this._evaluator.addError(localize_1.Localizer.Diagnostic.finalMethodOverride().format({
4113
4143
  name: memberName,
4114
4144
  className: baseClass.details.name,
@@ -4156,9 +4186,9 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4156
4186
  else {
4157
4187
  const baseClassType = baseClass;
4158
4188
  const propMethodInfo = [
4159
- ['fget', (c) => c.fgetFunction],
4160
- ['fset', (c) => c.fsetFunction],
4161
- ['fdel', (c) => c.fdelFunction],
4189
+ ['fget', (c) => { var _a; return (_a = c.fgetInfo) === null || _a === void 0 ? void 0 : _a.methodType; }],
4190
+ ['fset', (c) => { var _a; return (_a = c.fsetInfo) === null || _a === void 0 ? void 0 : _a.methodType; }],
4191
+ ['fdel', (c) => { var _a; return (_a = c.fdelInfo) === null || _a === void 0 ? void 0 : _a.methodType; }],
4162
4192
  ];
4163
4193
  propMethodInfo.forEach((info) => {
4164
4194
  const diagAddendum = new diagnostic_1.DiagnosticAddendum();
@@ -4194,7 +4224,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4194
4224
  name: methodName,
4195
4225
  }));
4196
4226
  const decl = subclassMethodType.details.declaration;
4197
- if (decl && decl.type === 5 /* Function */) {
4227
+ if (decl && decl.type === 5 /* DeclarationType.Function */) {
4198
4228
  const diag = this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleMethodOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleMethodOverride, localize_1.Localizer.Diagnostic.propertyOverridden().format({
4199
4229
  name: memberName,
4200
4230
  className: baseClassType.details.name,
@@ -4222,7 +4252,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4222
4252
  const primaryDecl = decls[0];
4223
4253
  // Verify that the override type is assignable to (same or narrower than)
4224
4254
  // the declared type of the base symbol.
4225
- let isInvariant = (primaryDecl === null || primaryDecl === void 0 ? void 0 : primaryDecl.type) === 1 /* Variable */ && !primaryDecl.isFinal;
4255
+ let isInvariant = (primaryDecl === null || primaryDecl === void 0 ? void 0 : primaryDecl.type) === 1 /* DeclarationType.Variable */ && !primaryDecl.isFinal;
4226
4256
  // If the entry is a member of a frozen dataclass, it is immutable,
4227
4257
  // so it does not need to be invariant.
4228
4258
  if (types_1.ClassType.isFrozenDataClass(baseClass) && baseClass.details.dataClassEntries) {
@@ -4234,7 +4264,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4234
4264
  let diagAddendum = new diagnostic_1.DiagnosticAddendum();
4235
4265
  if (!this._evaluator.assignType(baseType, overrideType, diagAddendum,
4236
4266
  /* destTypeVarContext */ undefined,
4237
- /* srcTypeVarContext */ undefined, isInvariant ? 1 /* EnforceInvariance */ : 0 /* Default */)) {
4267
+ /* srcTypeVarContext */ undefined, isInvariant ? 1 /* AssignTypeFlags.EnforceInvariance */ : 0 /* AssignTypeFlags.Default */)) {
4238
4268
  if (isInvariant) {
4239
4269
  diagAddendum = new diagnostic_1.DiagnosticAddendum();
4240
4270
  diagAddendum.addMessage(localize_1.Localizer.DiagnosticAddendum.overrideIsInvariant());
@@ -4277,7 +4307,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4277
4307
  }
4278
4308
  // If the subclass is declaring an inner class, we'll consider that
4279
4309
  // to be a ClassVar.
4280
- if (overrideSymbol.getTypedDeclarations().every((decl) => decl.type === 6 /* Class */)) {
4310
+ if (overrideSymbol.getTypedDeclarations().every((decl) => decl.type === 6 /* DeclarationType.Class */)) {
4281
4311
  isClassVar = true;
4282
4312
  }
4283
4313
  }
@@ -4367,7 +4397,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4367
4397
  if (node.parameters[0].name) {
4368
4398
  paramName = node.parameters[0].name.value;
4369
4399
  }
4370
- if (node.parameters[0].category !== 0 /* Simple */) {
4400
+ if (node.parameters[0].category !== 0 /* ParameterCategory.Simple */) {
4371
4401
  firstParamIsSimple = false;
4372
4402
  }
4373
4403
  }
@@ -4413,9 +4443,9 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4413
4443
  // it could be combined with other classes in a multi-inheritance
4414
4444
  // situation that effectively adds new superclasses that we don't know
4415
4445
  // about statically.
4416
- let effectiveFlags = 16 /* SkipInstanceMembers */ | 1 /* SkipOriginalClass */;
4446
+ let effectiveFlags = 16 /* MemberAccessFlags.SkipInstanceMembers */ | 1 /* MemberAccessFlags.SkipOriginalClass */;
4417
4447
  if (types_1.ClassType.isFinal(classType)) {
4418
- effectiveFlags |= 4 /* SkipObjectBaseClass */;
4448
+ effectiveFlags |= 4 /* MemberAccessFlags.SkipObjectBaseClass */;
4419
4449
  }
4420
4450
  const methodMember = (0, typeUtils_1.lookUpClassMember)(classType, methodType.details.name, effectiveFlags);
4421
4451
  if (!methodMember) {
@@ -4425,13 +4455,13 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4425
4455
  // Now scan the implementation of the method to determine whether
4426
4456
  // super().<method> has been called for all of the required base classes.
4427
4457
  const callNodeWalker = new ParseTreeUtils.CallNodeWalker((node) => {
4428
- if (node.leftExpression.nodeType === 35 /* MemberAccess */) {
4458
+ if (node.leftExpression.nodeType === 35 /* ParseNodeType.MemberAccess */) {
4429
4459
  // Is it accessing the method by the same name?
4430
4460
  if (node.leftExpression.memberName.value === methodType.details.name) {
4431
4461
  const memberBaseExpr = node.leftExpression.leftExpression;
4432
4462
  // Is it a "super" call?
4433
- if (memberBaseExpr.nodeType === 9 /* Call */ &&
4434
- memberBaseExpr.leftExpression.nodeType === 38 /* Name */ &&
4463
+ if (memberBaseExpr.nodeType === 9 /* ParseNodeType.Call */ &&
4464
+ memberBaseExpr.leftExpression.nodeType === 38 /* ParseNodeType.Name */ &&
4435
4465
  memberBaseExpr.leftExpression.value === 'super') {
4436
4466
  foundCallOfMember = true;
4437
4467
  }
@@ -4481,7 +4511,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4481
4511
  return;
4482
4512
  }
4483
4513
  // If the method starts with a `*args: P.args`, skip the check.
4484
- if (paramInfo.category === 1 /* ArgsList */ &&
4514
+ if (paramInfo.category === 1 /* ParameterCategory.ArgsList */ &&
4485
4515
  (0, types_1.isParamSpec)(paramInfo.type) &&
4486
4516
  paramInfo.type.paramSpecAccess === 'args') {
4487
4517
  return;
@@ -4633,7 +4663,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4633
4663
  const importStatements = (0, importStatementUtils_1.getTopLevelImports)(this._moduleNode);
4634
4664
  const importModuleMap = new Map();
4635
4665
  importStatements.orderedImports.forEach((importStatement) => {
4636
- if (importStatement.node.nodeType === 22 /* ImportFrom */) {
4666
+ if (importStatement.node.nodeType === 22 /* ParseNodeType.ImportFrom */) {
4637
4667
  const symbolMap = new Map();
4638
4668
  importStatement.node.imports.forEach((importFromAs) => {
4639
4669
  // Ignore duplicates if they're aliased.
@@ -4666,7 +4696,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4666
4696
  const regionComments = (0, regions_1.getRegionComments)(this._parseResults);
4667
4697
  const regionStack = [];
4668
4698
  regionComments.forEach((regionComment) => {
4669
- if (regionComment.type === 0 /* Region */) {
4699
+ if (regionComment.type === 0 /* RegionCommentType.Region */) {
4670
4700
  regionStack.push(regionComment);
4671
4701
  }
4672
4702
  else {