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

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 (383) hide show
  1. package/dist/analyzer/analyzerFileInfo.d.ts +4 -3
  2. package/dist/analyzer/analyzerFileInfo.js.map +1 -1
  3. package/dist/analyzer/backgroundAnalysisProgram.d.ts +15 -14
  4. package/dist/analyzer/backgroundAnalysisProgram.js +38 -38
  5. package/dist/analyzer/backgroundAnalysisProgram.js.map +1 -1
  6. package/dist/analyzer/binder.js +59 -52
  7. package/dist/analyzer/binder.js.map +1 -1
  8. package/dist/analyzer/checker.d.ts +4 -1
  9. package/dist/analyzer/checker.js +189 -42
  10. package/dist/analyzer/checker.js.map +1 -1
  11. package/dist/analyzer/circularDependency.d.ts +3 -2
  12. package/dist/analyzer/circularDependency.js.map +1 -1
  13. package/dist/analyzer/codeFlowEngine.js +36 -36
  14. package/dist/analyzer/codeFlowEngine.js.map +1 -1
  15. package/dist/analyzer/commentUtils.js +7 -0
  16. package/dist/analyzer/commentUtils.js.map +1 -1
  17. package/dist/analyzer/constraintSolver.js +14 -5
  18. package/dist/analyzer/constraintSolver.js.map +1 -1
  19. package/dist/analyzer/constructors.js +2 -1
  20. package/dist/analyzer/constructors.js.map +1 -1
  21. package/dist/analyzer/dataClasses.js +58 -47
  22. package/dist/analyzer/dataClasses.js.map +1 -1
  23. package/dist/analyzer/declaration.d.ts +5 -3
  24. package/dist/analyzer/declaration.js +3 -2
  25. package/dist/analyzer/declaration.js.map +1 -1
  26. package/dist/analyzer/declarationUtils.d.ts +3 -2
  27. package/dist/analyzer/declarationUtils.js +14 -12
  28. package/dist/analyzer/declarationUtils.js.map +1 -1
  29. package/dist/analyzer/enums.js +1 -1
  30. package/dist/analyzer/enums.js.map +1 -1
  31. package/dist/analyzer/importResolver.d.ts +29 -25
  32. package/dist/analyzer/importResolver.js +300 -301
  33. package/dist/analyzer/importResolver.js.map +1 -1
  34. package/dist/analyzer/importResult.d.ts +5 -4
  35. package/dist/analyzer/importResult.js.map +1 -1
  36. package/dist/analyzer/importStatementUtils.d.ts +5 -4
  37. package/dist/analyzer/importStatementUtils.js +23 -22
  38. package/dist/analyzer/importStatementUtils.js.map +1 -1
  39. package/dist/analyzer/namedTuples.js +3 -3
  40. package/dist/analyzer/namedTuples.js.map +1 -1
  41. package/dist/analyzer/operations.js +16 -14
  42. package/dist/analyzer/operations.js.map +1 -1
  43. package/dist/analyzer/packageTypeReport.d.ts +7 -6
  44. package/dist/analyzer/packageTypeReport.js +4 -4
  45. package/dist/analyzer/packageTypeReport.js.map +1 -1
  46. package/dist/analyzer/packageTypeVerifier.js +68 -64
  47. package/dist/analyzer/packageTypeVerifier.js.map +1 -1
  48. package/dist/analyzer/parentDirectoryCache.d.ts +7 -6
  49. package/dist/analyzer/parentDirectoryCache.js +9 -10
  50. package/dist/analyzer/parentDirectoryCache.js.map +1 -1
  51. package/dist/analyzer/parseTreeUtils.d.ts +1 -1
  52. package/dist/analyzer/parseTreeUtils.js +6 -3
  53. package/dist/analyzer/parseTreeUtils.js.map +1 -1
  54. package/dist/analyzer/patternMatching.js +79 -14
  55. package/dist/analyzer/patternMatching.js.map +1 -1
  56. package/dist/analyzer/program.d.ts +27 -26
  57. package/dist/analyzer/program.js +162 -156
  58. package/dist/analyzer/program.js.map +1 -1
  59. package/dist/analyzer/properties.js +3 -3
  60. package/dist/analyzer/properties.js.map +1 -1
  61. package/dist/analyzer/protocols.js +27 -13
  62. package/dist/analyzer/protocols.js.map +1 -1
  63. package/dist/analyzer/pyTypedUtils.d.ts +3 -2
  64. package/dist/analyzer/pyTypedUtils.js +4 -5
  65. package/dist/analyzer/pyTypedUtils.js.map +1 -1
  66. package/dist/analyzer/pythonPathUtils.d.ts +7 -6
  67. package/dist/analyzer/pythonPathUtils.js +21 -23
  68. package/dist/analyzer/pythonPathUtils.js.map +1 -1
  69. package/dist/analyzer/service.d.ts +24 -23
  70. package/dist/analyzer/service.js +187 -183
  71. package/dist/analyzer/service.js.map +1 -1
  72. package/dist/analyzer/sourceFile.d.ts +4 -5
  73. package/dist/analyzer/sourceFile.js +68 -56
  74. package/dist/analyzer/sourceFile.js.map +1 -1
  75. package/dist/analyzer/sourceFileInfoUtils.js +3 -3
  76. package/dist/analyzer/sourceFileInfoUtils.js.map +1 -1
  77. package/dist/analyzer/sourceMapper.d.ts +11 -10
  78. package/dist/analyzer/sourceMapper.js +59 -62
  79. package/dist/analyzer/sourceMapper.js.map +1 -1
  80. package/dist/analyzer/sourceMapperUtils.d.ts +2 -1
  81. package/dist/analyzer/sourceMapperUtils.js +2 -2
  82. package/dist/analyzer/sourceMapperUtils.js.map +1 -1
  83. package/dist/analyzer/tracePrinter.d.ts +3 -2
  84. package/dist/analyzer/tracePrinter.js +21 -23
  85. package/dist/analyzer/tracePrinter.js.map +1 -1
  86. package/dist/analyzer/typeDocStringUtils.d.ts +2 -1
  87. package/dist/analyzer/typeDocStringUtils.js +14 -17
  88. package/dist/analyzer/typeDocStringUtils.js.map +1 -1
  89. package/dist/analyzer/typeEvaluator.js +298 -231
  90. package/dist/analyzer/typeEvaluator.js.map +1 -1
  91. package/dist/analyzer/typeEvaluatorTypes.d.ts +1 -1
  92. package/dist/analyzer/typeEvaluatorTypes.js +1 -1
  93. package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
  94. package/dist/analyzer/typeGuards.js +3 -3
  95. package/dist/analyzer/typeGuards.js.map +1 -1
  96. package/dist/analyzer/typePrinter.d.ts +2 -0
  97. package/dist/analyzer/typePrinter.js +48 -8
  98. package/dist/analyzer/typePrinter.js.map +1 -1
  99. package/dist/analyzer/typeStubWriter.d.ts +2 -1
  100. package/dist/analyzer/typeStubWriter.js +2 -2
  101. package/dist/analyzer/typeStubWriter.js.map +1 -1
  102. package/dist/analyzer/typeUtils.d.ts +5 -3
  103. package/dist/analyzer/typeUtils.js +32 -17
  104. package/dist/analyzer/typeUtils.js.map +1 -1
  105. package/dist/analyzer/typeVarContext.d.ts +2 -0
  106. package/dist/analyzer/typeVarContext.js +27 -0
  107. package/dist/analyzer/typeVarContext.js.map +1 -1
  108. package/dist/analyzer/typedDicts.js +6 -36
  109. package/dist/analyzer/typedDicts.js.map +1 -1
  110. package/dist/analyzer/types.d.ts +8 -12
  111. package/dist/analyzer/types.js +13 -20
  112. package/dist/analyzer/types.js.map +1 -1
  113. package/dist/backgroundAnalysis.d.ts +1 -2
  114. package/dist/backgroundAnalysis.js +6 -4
  115. package/dist/backgroundAnalysis.js.map +1 -1
  116. package/dist/backgroundAnalysisBase.d.ts +22 -20
  117. package/dist/backgroundAnalysisBase.js +76 -55
  118. package/dist/backgroundAnalysisBase.js.map +1 -1
  119. package/dist/backgroundThreadBase.d.ts +1 -1
  120. package/dist/backgroundThreadBase.js +20 -11
  121. package/dist/backgroundThreadBase.js.map +1 -1
  122. package/dist/commands/commandController.js +1 -2
  123. package/dist/commands/commandController.js.map +1 -1
  124. package/dist/commands/commands.d.ts +0 -1
  125. package/dist/commands/commands.js +0 -1
  126. package/dist/commands/commands.js.map +1 -1
  127. package/dist/commands/createTypeStub.js +3 -2
  128. package/dist/commands/createTypeStub.js.map +1 -1
  129. package/dist/commands/dumpFileDebugInfoCommand.js +21 -20
  130. package/dist/commands/dumpFileDebugInfoCommand.js.map +1 -1
  131. package/dist/commands/quickActionCommand.js +5 -5
  132. package/dist/commands/quickActionCommand.js.map +1 -1
  133. package/dist/common/configOptions.d.ts +15 -13
  134. package/dist/common/configOptions.js +120 -30
  135. package/dist/common/configOptions.js.map +1 -1
  136. package/dist/common/diagnostic.d.ts +6 -9
  137. package/dist/common/diagnostic.js +2 -2
  138. package/dist/common/diagnostic.js.map +1 -1
  139. package/dist/common/diagnosticSink.d.ts +2 -1
  140. package/dist/common/diagnosticSink.js.map +1 -1
  141. package/dist/common/editAction.d.ts +6 -5
  142. package/dist/common/editAction.js +2 -2
  143. package/dist/common/editAction.js.map +1 -1
  144. package/dist/common/envVarUtils.d.ts +2 -1
  145. package/dist/common/envVarUtils.js +20 -28
  146. package/dist/common/envVarUtils.js.map +1 -1
  147. package/dist/common/extensibility.d.ts +19 -19
  148. package/dist/common/extensibility.js.map +1 -1
  149. package/dist/common/fileSystem.d.ts +29 -28
  150. package/dist/common/fileWatcher.d.ts +3 -2
  151. package/dist/common/fileWatcher.js.map +1 -1
  152. package/dist/common/fullAccessHost.d.ts +8 -7
  153. package/dist/common/fullAccessHost.js +21 -16
  154. package/dist/common/fullAccessHost.js.map +1 -1
  155. package/dist/common/host.d.ts +7 -6
  156. package/dist/common/host.js +1 -1
  157. package/dist/common/host.js.map +1 -1
  158. package/dist/common/logTracker.d.ts +2 -1
  159. package/dist/common/logTracker.js +4 -4
  160. package/dist/common/logTracker.js.map +1 -1
  161. package/dist/common/pathUtils.d.ts +1 -28
  162. package/dist/common/pathUtils.js +17 -366
  163. package/dist/common/pathUtils.js.map +1 -1
  164. package/dist/common/realFileSystem.d.ts +7 -3
  165. package/dist/common/realFileSystem.js +78 -60
  166. package/dist/common/realFileSystem.js.map +1 -1
  167. package/dist/common/serviceProviderExtensions.d.ts +2 -1
  168. package/dist/common/serviceProviderExtensions.js +5 -2
  169. package/dist/common/serviceProviderExtensions.js.map +1 -1
  170. package/dist/common/textEditTracker.d.ts +2 -1
  171. package/dist/common/textEditTracker.js +28 -28
  172. package/dist/common/textEditTracker.js.map +1 -1
  173. package/dist/common/textRange.d.ts +2 -1
  174. package/dist/common/textRange.js.map +1 -1
  175. package/dist/common/uri/baseUri.d.ts +51 -0
  176. package/dist/common/uri/baseUri.js +194 -0
  177. package/dist/common/uri/baseUri.js.map +1 -0
  178. package/dist/common/uri/emptyUri.d.ts +32 -0
  179. package/dist/common/uri/emptyUri.js +122 -0
  180. package/dist/common/uri/emptyUri.js.map +1 -0
  181. package/dist/common/uri/fileUri.d.ts +36 -0
  182. package/dist/common/uri/fileUri.js +180 -0
  183. package/dist/common/uri/fileUri.js.map +1 -0
  184. package/dist/common/uri/memoization.d.ts +3 -0
  185. package/dist/common/uri/memoization.js +72 -0
  186. package/dist/common/uri/memoization.js.map +1 -0
  187. package/dist/common/uri/uri.d.ts +50 -0
  188. package/dist/common/uri/uri.js +104 -0
  189. package/dist/common/uri/uri.js.map +1 -0
  190. package/dist/common/uri/uriUtils.d.ts +39 -0
  191. package/dist/common/uri/uriUtils.js +362 -0
  192. package/dist/common/uri/uriUtils.js.map +1 -0
  193. package/dist/common/uri/webUri.d.ts +36 -0
  194. package/dist/common/uri/webUri.js +207 -0
  195. package/dist/common/uri/webUri.js.map +1 -0
  196. package/dist/common/workspaceEditUtils.d.ts +8 -8
  197. package/dist/common/workspaceEditUtils.js +34 -37
  198. package/dist/common/workspaceEditUtils.js.map +1 -1
  199. package/dist/languageServerBase.d.ts +19 -22
  200. package/dist/languageServerBase.js +91 -95
  201. package/dist/languageServerBase.js.map +1 -1
  202. package/dist/languageService/analyzerServiceExecutor.d.ts +2 -1
  203. package/dist/languageService/analyzerServiceExecutor.js +14 -16
  204. package/dist/languageService/analyzerServiceExecutor.js.map +1 -1
  205. package/dist/languageService/autoImporter.d.ts +11 -9
  206. package/dist/languageService/autoImporter.js +45 -44
  207. package/dist/languageService/autoImporter.js.map +1 -1
  208. package/dist/languageService/callHierarchyProvider.d.ts +3 -2
  209. package/dist/languageService/callHierarchyProvider.js +23 -35
  210. package/dist/languageService/callHierarchyProvider.js.map +1 -1
  211. package/dist/languageService/codeActionProvider.d.ts +2 -1
  212. package/dist/languageService/codeActionProvider.js +8 -24
  213. package/dist/languageService/codeActionProvider.js.map +1 -1
  214. package/dist/languageService/completionProvider.d.ts +7 -6
  215. package/dist/languageService/completionProvider.js +32 -30
  216. package/dist/languageService/completionProvider.js.map +1 -1
  217. package/dist/languageService/completionProviderUtils.d.ts +2 -1
  218. package/dist/languageService/completionProviderUtils.js +1 -1
  219. package/dist/languageService/completionProviderUtils.js.map +1 -1
  220. package/dist/languageService/definitionProvider.d.ts +4 -3
  221. package/dist/languageService/definitionProvider.js +26 -24
  222. package/dist/languageService/definitionProvider.js.map +1 -1
  223. package/dist/languageService/documentHighlightProvider.d.ts +3 -2
  224. package/dist/languageService/documentHighlightProvider.js +3 -3
  225. package/dist/languageService/documentHighlightProvider.js.map +1 -1
  226. package/dist/languageService/documentSymbolCollector.js +8 -7
  227. package/dist/languageService/documentSymbolCollector.js.map +1 -1
  228. package/dist/languageService/documentSymbolProvider.d.ts +5 -4
  229. package/dist/languageService/documentSymbolProvider.js +9 -11
  230. package/dist/languageService/documentSymbolProvider.js.map +1 -1
  231. package/dist/languageService/hoverProvider.d.ts +4 -3
  232. package/dist/languageService/hoverProvider.js +6 -5
  233. package/dist/languageService/hoverProvider.js.map +1 -1
  234. package/dist/languageService/navigationUtils.d.ts +2 -1
  235. package/dist/languageService/navigationUtils.js +2 -3
  236. package/dist/languageService/navigationUtils.js.map +1 -1
  237. package/dist/languageService/quickActions.d.ts +2 -2
  238. package/dist/languageService/quickActions.js +3 -83
  239. package/dist/languageService/quickActions.js.map +1 -1
  240. package/dist/languageService/referencesProvider.d.ts +10 -9
  241. package/dist/languageService/referencesProvider.js +28 -28
  242. package/dist/languageService/referencesProvider.js.map +1 -1
  243. package/dist/languageService/renameProvider.d.ts +4 -3
  244. package/dist/languageService/renameProvider.js +17 -18
  245. package/dist/languageService/renameProvider.js.map +1 -1
  246. package/dist/languageService/signatureHelpProvider.d.ts +3 -2
  247. package/dist/languageService/signatureHelpProvider.js +4 -4
  248. package/dist/languageService/signatureHelpProvider.js.map +1 -1
  249. package/dist/languageService/symbolIndexer.d.ts +2 -1
  250. package/dist/languageService/symbolIndexer.js +1 -1
  251. package/dist/languageService/symbolIndexer.js.map +1 -1
  252. package/dist/languageService/tooltipUtils.js +10 -4
  253. package/dist/languageService/tooltipUtils.js.map +1 -1
  254. package/dist/languageService/workspaceSymbolProvider.d.ts +4 -3
  255. package/dist/languageService/workspaceSymbolProvider.js +10 -11
  256. package/dist/languageService/workspaceSymbolProvider.js.map +1 -1
  257. package/dist/localization/localize.d.ts +13 -9
  258. package/dist/localization/localize.js +7 -4
  259. package/dist/localization/localize.js.map +1 -1
  260. package/dist/localization/package.nls.cs.json +0 -4
  261. package/dist/localization/package.nls.de.json +0 -4
  262. package/dist/localization/package.nls.en-us.json +9 -6
  263. package/dist/localization/package.nls.es.json +2 -6
  264. package/dist/localization/package.nls.fr.json +0 -4
  265. package/dist/localization/package.nls.it.json +0 -4
  266. package/dist/localization/package.nls.ja.json +0 -4
  267. package/dist/localization/package.nls.ko.json +0 -4
  268. package/dist/localization/package.nls.pl.json +0 -4
  269. package/dist/localization/package.nls.pt-br.json +0 -4
  270. package/dist/localization/package.nls.qps-ploc.json +0 -4
  271. package/dist/localization/package.nls.ru.json +0 -4
  272. package/dist/localization/package.nls.tr.json +0 -4
  273. package/dist/localization/package.nls.zh-cn.json +0 -4
  274. package/dist/localization/package.nls.zh-tw.json +0 -4
  275. package/dist/pyright.js +18 -17
  276. package/dist/pyright.js.map +1 -1
  277. package/dist/pyrightFileSystem.d.ts +13 -13
  278. package/dist/pyrightFileSystem.js +39 -44
  279. package/dist/pyrightFileSystem.js.map +1 -1
  280. package/dist/readonlyAugmentedFileSystem.d.ts +29 -28
  281. package/dist/readonlyAugmentedFileSystem.js +68 -61
  282. package/dist/readonlyAugmentedFileSystem.js.map +1 -1
  283. package/dist/server.js +22 -21
  284. package/dist/server.js.map +1 -1
  285. package/dist/tests/chainedSourceFiles.test.js +39 -30
  286. package/dist/tests/chainedSourceFiles.test.js.map +1 -1
  287. package/dist/tests/checker.test.js +38 -29
  288. package/dist/tests/checker.test.js.map +1 -1
  289. package/dist/tests/completions.test.js +7 -3
  290. package/dist/tests/completions.test.js.map +1 -1
  291. package/dist/tests/config.test.js +24 -22
  292. package/dist/tests/config.test.js.map +1 -1
  293. package/dist/tests/documentSymbolCollector.test.js +3 -2
  294. package/dist/tests/documentSymbolCollector.test.js.map +1 -1
  295. package/dist/tests/filesystem.test.js +37 -35
  296. package/dist/tests/filesystem.test.js.map +1 -1
  297. package/dist/tests/fourSlashParser.test.js +4 -4
  298. package/dist/tests/fourSlashParser.test.js.map +1 -1
  299. package/dist/tests/fourslash/fourslash.d.ts +1 -2
  300. package/dist/tests/fourslash/hover.docstring.alias.fourslash.js +27 -11
  301. package/dist/tests/fourslash/hover.docstring.alias.fourslash.js.map +1 -1
  302. package/dist/tests/harness/fourslash/fourSlashParser.js +2 -2
  303. package/dist/tests/harness/fourslash/fourSlashParser.js.map +1 -1
  304. package/dist/tests/harness/fourslash/testLanguageService.d.ts +4 -5
  305. package/dist/tests/harness/fourslash/testLanguageService.js +9 -15
  306. package/dist/tests/harness/fourslash/testLanguageService.js.map +1 -1
  307. package/dist/tests/harness/fourslash/testState.Consts.d.ts +1 -2
  308. package/dist/tests/harness/fourslash/testState.Consts.js +0 -1
  309. package/dist/tests/harness/fourslash/testState.Consts.js.map +1 -1
  310. package/dist/tests/harness/fourslash/testState.d.ts +4 -4
  311. package/dist/tests/harness/fourslash/testState.js +92 -52
  312. package/dist/tests/harness/fourslash/testState.js.map +1 -1
  313. package/dist/tests/harness/testAccessHost.d.ts +3 -2
  314. package/dist/tests/harness/testAccessHost.js +2 -1
  315. package/dist/tests/harness/testAccessHost.js.map +1 -1
  316. package/dist/tests/harness/testHost.js +13 -11
  317. package/dist/tests/harness/testHost.js.map +1 -1
  318. package/dist/tests/harness/vfs/factory.d.ts +3 -2
  319. package/dist/tests/harness/vfs/factory.js +5 -4
  320. package/dist/tests/harness/vfs/factory.js.map +1 -1
  321. package/dist/tests/harness/vfs/filesystem.d.ts +32 -31
  322. package/dist/tests/harness/vfs/filesystem.js +47 -49
  323. package/dist/tests/harness/vfs/filesystem.js.map +1 -1
  324. package/dist/tests/harness/vfs/pathValidation.js +1 -10
  325. package/dist/tests/harness/vfs/pathValidation.js.map +1 -1
  326. package/dist/tests/importResolver.test.js +81 -58
  327. package/dist/tests/importResolver.test.js.map +1 -1
  328. package/dist/tests/importStatementUtils.test.js +10 -9
  329. package/dist/tests/importStatementUtils.test.js.map +1 -1
  330. package/dist/tests/ipythonMode.test.js +12 -11
  331. package/dist/tests/ipythonMode.test.js.map +1 -1
  332. package/dist/tests/logger.test.js +2 -1
  333. package/dist/tests/logger.test.js.map +1 -1
  334. package/dist/tests/parseTreeUtils.test.js +2 -1
  335. package/dist/tests/parseTreeUtils.test.js.map +1 -1
  336. package/dist/tests/pathUtils.test.js +3 -138
  337. package/dist/tests/pathUtils.test.js.map +1 -1
  338. package/dist/tests/pyrightFileSystem.test.js +76 -25
  339. package/dist/tests/pyrightFileSystem.test.js.map +1 -1
  340. package/dist/tests/service.test.js +37 -42
  341. package/dist/tests/service.test.js.map +1 -1
  342. package/dist/tests/signatureHelp.test.js +3 -2
  343. package/dist/tests/signatureHelp.test.js.map +1 -1
  344. package/dist/tests/sourceFile.test.js +8 -7
  345. package/dist/tests/sourceFile.test.js.map +1 -1
  346. package/dist/tests/sourceMapperUtils.test.js +13 -6
  347. package/dist/tests/sourceMapperUtils.test.js.map +1 -1
  348. package/dist/tests/testState.test.js +13 -9
  349. package/dist/tests/testState.test.js.map +1 -1
  350. package/dist/tests/testStateUtils.d.ts +2 -5
  351. package/dist/tests/testStateUtils.js +27 -64
  352. package/dist/tests/testStateUtils.js.map +1 -1
  353. package/dist/tests/testUtils.d.ts +3 -5
  354. package/dist/tests/testUtils.js +15 -64
  355. package/dist/tests/testUtils.js.map +1 -1
  356. package/dist/tests/textEditUtil.test.js +4 -3
  357. package/dist/tests/textEditUtil.test.js.map +1 -1
  358. package/dist/tests/typeEvaluator1.test.js +23 -19
  359. package/dist/tests/typeEvaluator1.test.js.map +1 -1
  360. package/dist/tests/typeEvaluator2.test.js +21 -12
  361. package/dist/tests/typeEvaluator2.test.js.map +1 -1
  362. package/dist/tests/typeEvaluator3.test.js +84 -70
  363. package/dist/tests/typeEvaluator3.test.js.map +1 -1
  364. package/dist/tests/typeEvaluator4.test.js +26 -21
  365. package/dist/tests/typeEvaluator4.test.js.map +1 -1
  366. package/dist/tests/typeEvaluator5.test.js +36 -31
  367. package/dist/tests/typeEvaluator5.test.js.map +1 -1
  368. package/dist/tests/typePrinter.test.js +4 -3
  369. package/dist/tests/typePrinter.test.js.map +1 -1
  370. package/dist/tests/uri.test.d.ts +1 -0
  371. package/dist/tests/uri.test.js +695 -0
  372. package/dist/tests/uri.test.js.map +1 -0
  373. package/dist/tests/workspaceEditUtils.test.js +28 -28
  374. package/dist/tests/workspaceEditUtils.test.js.map +1 -1
  375. package/dist/tests/zipfs.test.js +11 -11
  376. package/dist/tests/zipfs.test.js.map +1 -1
  377. package/dist/workspaceFactory.d.ts +13 -14
  378. package/dist/workspaceFactory.js +54 -55
  379. package/dist/workspaceFactory.js.map +1 -1
  380. package/package.json +2 -2
  381. package/dist/common/uriParser.d.ts +0 -24
  382. package/dist/common/uriParser.js +0 -45
  383. package/dist/common/uriParser.js.map +0 -1
@@ -42,9 +42,9 @@ const collectionUtils_1 = require("../common/collectionUtils");
42
42
  const debug_1 = require("../common/debug");
43
43
  const diagnostic_1 = require("../common/diagnostic");
44
44
  const diagnosticRules_1 = require("../common/diagnosticRules");
45
- const pathUtils_1 = require("../common/pathUtils");
46
45
  const pythonVersion_1 = require("../common/pythonVersion");
47
46
  const textRange_1 = require("../common/textRange");
47
+ const uri_1 = require("../common/uri/uri");
48
48
  const definitionProvider_1 = require("../languageService/definitionProvider");
49
49
  const localize_1 = require("../localization/localize");
50
50
  const parseNodes_1 = require("../parser/parseNodes");
@@ -98,7 +98,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
98
98
  // Report code complexity issues for the module.
99
99
  const codeComplexity = AnalyzerNodeInfo.getCodeFlowComplexity(this._moduleNode);
100
100
  if (isPrintCodeComplexityEnabled) {
101
- console.log(`Code complexity of module ${this._fileInfo.filePath} is ${codeComplexity.toString()}`);
101
+ console.log(`Code complexity of module ${this._fileInfo.fileUri.toUserVisibleString()} is ${codeComplexity.toString()}`);
102
102
  }
103
103
  if (codeComplexity > typeEvaluator_1.maxCodeComplexity) {
104
104
  this._evaluator.addDiagnosticForTextRange(this._fileInfo, this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.codeTooComplexToAnalyze(), { start: 0, length: 0 });
@@ -385,6 +385,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
385
385
  this._validateTypeGuardFunction(node, functionTypeResult.functionType, containingClassNode !== undefined);
386
386
  this._validateFunctionTypeVarUsage(node, functionTypeResult);
387
387
  this._validateGeneratorReturnType(node, functionTypeResult.functionType);
388
+ this._reportDeprecatedClassProperty(node, functionTypeResult);
388
389
  }
389
390
  // If we're at the module level within a stub file, report a diagnostic
390
391
  // if there is a '__getattr__' function defined when in strict mode.
@@ -412,6 +413,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
412
413
  }
413
414
  }
414
415
  }
416
+ this._validateOverloadAttributeConsistency(node, functionTypeResult.decoratedType);
415
417
  }
416
418
  return false;
417
419
  }
@@ -531,7 +533,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
531
533
  return true;
532
534
  }
533
535
  visitReturn(node) {
534
- var _a, _b;
536
+ var _a, _b, _c, _d, _e;
535
537
  let returnTypeResult;
536
538
  const enclosingFunctionNode = ParseTreeUtils.getEnclosingFunction(node);
537
539
  const declaredReturnType = enclosingFunctionNode
@@ -600,17 +602,17 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
600
602
  this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.returnTypeMismatch().format({
601
603
  exprType: this._evaluator.printType(returnTypeResult.type),
602
604
  returnType: this._evaluator.printType(declaredReturnType),
603
- }) + diagAddendum.getString(), node.returnExpression ? node.returnExpression : node, (_b = returnTypeResult.expectedTypeDiagAddendum) === null || _b === void 0 ? void 0 : _b.getEffectiveTextRange());
605
+ }) + diagAddendum.getString(), (_b = node.returnExpression) !== null && _b !== void 0 ? _b : node, (_c = returnTypeResult.expectedTypeDiagAddendum) === null || _c === void 0 ? void 0 : _c.getEffectiveTextRange());
604
606
  }
605
607
  }
606
608
  }
607
609
  if ((0, types_1.isUnknown)(returnTypeResult.type)) {
608
- this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportUnknownVariableType, diagnosticRules_1.DiagnosticRule.reportUnknownVariableType, localize_1.Localizer.Diagnostic.returnTypeUnknown(), node.returnExpression);
610
+ this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportUnknownVariableType, diagnosticRules_1.DiagnosticRule.reportUnknownVariableType, localize_1.Localizer.Diagnostic.returnTypeUnknown(), (_d = node.returnExpression) !== null && _d !== void 0 ? _d : node);
609
611
  }
610
612
  else if ((0, typeUtils_1.isPartlyUnknown)(returnTypeResult.type)) {
611
613
  this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportUnknownVariableType, diagnosticRules_1.DiagnosticRule.reportUnknownVariableType, localize_1.Localizer.Diagnostic.returnTypePartiallyUnknown().format({
612
614
  returnType: this._evaluator.printType(returnTypeResult.type, { expandTypeAlias: true }),
613
- }), node.returnExpression);
615
+ }), (_e = node.returnExpression) !== null && _e !== void 0 ? _e : node);
614
616
  }
615
617
  }
616
618
  return true;
@@ -992,10 +994,11 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
992
994
  continue;
993
995
  }
994
996
  const resolvedAlias = this._evaluator.resolveAliasDeclaration(decl, /* resolveLocalNames */ true);
995
- if (!(resolvedAlias === null || resolvedAlias === void 0 ? void 0 : resolvedAlias.path) || !(0, sourceMapper_1.isStubFile)(resolvedAlias.path)) {
997
+ const resolvedAliasUri = resolvedAlias === null || resolvedAlias === void 0 ? void 0 : resolvedAlias.uri;
998
+ if (!resolvedAliasUri || !(0, sourceMapper_1.isStubFile)(resolvedAliasUri)) {
996
999
  continue;
997
1000
  }
998
- const importResult = this._getImportResult(node, resolvedAlias.path);
1001
+ const importResult = this._getImportResult(node, resolvedAliasUri);
999
1002
  if (!importResult) {
1000
1003
  continue;
1001
1004
  }
@@ -1030,6 +1033,15 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1030
1033
  visitTypeParameter(node) {
1031
1034
  return false;
1032
1035
  }
1036
+ visitTypeAlias(node) {
1037
+ const scope = (0, scopeUtils_1.getScopeForNode)(node);
1038
+ if (scope) {
1039
+ if (scope.type !== 2 /* ScopeType.Class */ && scope.type !== 3 /* ScopeType.Module */ && scope.type !== 4 /* ScopeType.Builtin */) {
1040
+ this._evaluator.addError(localize_1.Localizer.Diagnostic.typeAliasStatementBadScope(), node.name);
1041
+ }
1042
+ }
1043
+ return true;
1044
+ }
1033
1045
  visitTypeAnnotation(node) {
1034
1046
  this._evaluator.getType(node.typeAnnotation);
1035
1047
  return true;
@@ -1063,17 +1075,17 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1063
1075
  // Don't explore further.
1064
1076
  return false;
1065
1077
  }
1066
- _getImportResult(node, filePath) {
1067
- const execEnv = this._importResolver.getConfigOptions().findExecEnvironment(filePath);
1078
+ _getImportResult(node, uri) {
1079
+ const execEnv = this._importResolver.getConfigOptions().findExecEnvironment(uri);
1068
1080
  const moduleNameNode = node.parent.module;
1069
1081
  // Handle both absolute and relative imports.
1070
1082
  const moduleName = moduleNameNode.leadingDots === 0
1071
- ? this._importResolver.getModuleNameForImport(filePath, execEnv).moduleName
1072
- : (0, importStatementUtils_1.getRelativeModuleName)(this._importResolver.fileSystem, this._fileInfo.filePath, filePath);
1083
+ ? this._importResolver.getModuleNameForImport(uri, execEnv).moduleName
1084
+ : (0, importStatementUtils_1.getRelativeModuleName)(this._importResolver.fileSystem, this._fileInfo.fileUri, uri);
1073
1085
  if (!moduleName) {
1074
1086
  return undefined;
1075
1087
  }
1076
- return this._importResolver.resolveImport(this._fileInfo.filePath, execEnv, (0, importResolver_1.createImportedModuleDescriptor)(moduleName));
1088
+ return this._importResolver.resolveImport(this._fileInfo.fileUri, execEnv, (0, importResolver_1.createImportedModuleDescriptor)(moduleName));
1077
1089
  }
1078
1090
  _addMissingModuleSourceDiagnosticIfNeeded(importResult, node) {
1079
1091
  if (importResult.isNativeLib ||
@@ -1691,6 +1703,31 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1691
1703
  }
1692
1704
  });
1693
1705
  }
1706
+ // Validates that overloads use @staticmethod and @classmethod consistently.
1707
+ _validateOverloadAttributeConsistency(node, functionType) {
1708
+ var _a, _b, _c, _d, _e, _f;
1709
+ let staticMethodCount = 0;
1710
+ let classMethodCount = 0;
1711
+ functionType.overloads.forEach((overload) => {
1712
+ if (types_1.FunctionType.isStaticMethod(overload)) {
1713
+ staticMethodCount++;
1714
+ }
1715
+ if (types_1.FunctionType.isClassMethod(overload)) {
1716
+ classMethodCount++;
1717
+ }
1718
+ });
1719
+ if (staticMethodCount > 0 && staticMethodCount < functionType.overloads.length) {
1720
+ this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.overloadStaticMethodInconsistent().format({
1721
+ name: node.name.value,
1722
+ }), (_c = (_b = (_a = functionType.overloads[0]) === null || _a === void 0 ? void 0 : _a.details.declaration) === null || _b === void 0 ? void 0 : _b.node.name) !== null && _c !== void 0 ? _c : node.name);
1723
+ }
1724
+ if (classMethodCount > 0 && classMethodCount < functionType.overloads.length) {
1725
+ this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.overloadClassMethodInconsistent().format({
1726
+ name: node.name.value,
1727
+ }), (_f = (_e = (_d = functionType.overloads[0]) === null || _d === void 0 ? void 0 : _d.details.declaration) === null || _e === void 0 ? void 0 : _e.node.name) !== null && _f !== void 0 ? _f : node.name);
1728
+ }
1729
+ }
1730
+ // Validates that overloads do not overlap with inconsistent return results.
1694
1731
  _validateOverloadConsistency(node, functionType, prevOverloads) {
1695
1732
  for (let i = 0; i < prevOverloads.length; i++) {
1696
1733
  const prevOverload = prevOverloads[i];
@@ -2042,7 +2079,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2042
2079
  index: index + 1,
2043
2080
  }) + diag.getString(), implementationFunction.details.declaration.node.name);
2044
2081
  if (diagnostic && overload.details.declaration) {
2045
- diagnostic.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.overloadSignature(), (_b = (_a = overload.details.declaration) === null || _a === void 0 ? void 0 : _a.path) !== null && _b !== void 0 ? _b : primaryDecl.path, (_d = (_c = overload.details.declaration) === null || _c === void 0 ? void 0 : _c.range) !== null && _d !== void 0 ? _d : primaryDecl.range);
2082
+ diagnostic.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.overloadSignature(), (_b = (_a = overload.details.declaration) === null || _a === void 0 ? void 0 : _a.uri) !== null && _b !== void 0 ? _b : primaryDecl.uri, (_d = (_c = overload.details.declaration) === null || _c === void 0 ? void 0 : _c.range) !== null && _d !== void 0 ? _d : primaryDecl.range);
2046
2083
  }
2047
2084
  }
2048
2085
  }
@@ -2212,7 +2249,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2212
2249
  }
2213
2250
  }
2214
2251
  if (primaryDeclNode) {
2215
- diag.addRelatedInfo(primaryDeclInfo, primaryDecl.path, primaryDecl.range);
2252
+ diag.addRelatedInfo(primaryDeclInfo, primaryDecl.uri, primaryDecl.range);
2216
2253
  }
2217
2254
  }
2218
2255
  };
@@ -2725,6 +2762,13 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2725
2762
  }
2726
2763
  return false;
2727
2764
  }
2765
+ _reportDeprecatedClassProperty(node, functionTypeResult) {
2766
+ if (!(0, types_1.isClassInstance)(functionTypeResult.decoratedType) ||
2767
+ !types_1.ClassType.isClassProperty(functionTypeResult.decoratedType)) {
2768
+ return;
2769
+ }
2770
+ this._reportDeprecatedDiagnostic(node.name, localize_1.Localizer.Diagnostic.classPropertyDeprecated());
2771
+ }
2728
2772
  _reportDeprecatedUseForMemberAccess(node, info) {
2729
2773
  let errorMessage;
2730
2774
  if (info.accessType === 'property') {
@@ -2838,6 +2882,15 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2838
2882
  // the call expression and determine whether any of them
2839
2883
  // are deprecated.
2840
2884
  getDeprecatedMessageForOverloadedCall(this._evaluator, subtype);
2885
+ // If there the implementation itself is deprecated, assume it
2886
+ // is deprecated even if it's outside of a call expression.
2887
+ const overloadImpl = types_1.OverloadedFunctionType.getImplementation(subtype);
2888
+ if ((overloadImpl === null || overloadImpl === void 0 ? void 0 : overloadImpl.details.deprecatedMessage) !== undefined) {
2889
+ if (!overloadImpl.details.name || node.value === overloadImpl.details.name) {
2890
+ deprecatedMessage = overloadImpl.details.deprecatedMessage;
2891
+ errorMessage = getDeprecatedMessageForFunction(overloadImpl);
2892
+ }
2893
+ }
2841
2894
  }
2842
2895
  });
2843
2896
  if (errorMessage) {
@@ -2910,18 +2963,18 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2910
2963
  const stdlibPath = this._importResolver.getTypeshedStdLibPath(this._fileInfo.executionEnvironment);
2911
2964
  if (stdlibPath &&
2912
2965
  this._importResolver.isStdlibModule(desc, this._fileInfo.executionEnvironment) &&
2913
- this._sourceMapper.isUserCode(this._fileInfo.filePath)) {
2966
+ this._sourceMapper.isUserCode(this._fileInfo.fileUri)) {
2914
2967
  // This means the user has a module that is overwriting the stdlib module.
2915
2968
  const diag = this._evaluator.addDiagnosticForTextRange(this._fileInfo, this._fileInfo.diagnosticRuleSet.reportShadowedImports, diagnosticRules_1.DiagnosticRule.reportShadowedImports, localize_1.Localizer.Diagnostic.stdlibModuleOverridden().format({
2916
2969
  name: moduleName,
2917
- path: this._fileInfo.filePath,
2970
+ path: this._fileInfo.fileUri.toUserVisibleString(),
2918
2971
  }), this._moduleNode);
2919
2972
  // Add a quick action that renames the file.
2920
2973
  if (diag) {
2921
2974
  const renameAction = {
2922
2975
  action: "renameShadowedFile" /* ActionKind.RenameShadowedFileAction */,
2923
- oldFile: this._fileInfo.filePath,
2924
- newFile: this._sourceMapper.getNextFileName(this._fileInfo.filePath),
2976
+ oldUri: this._fileInfo.fileUri,
2977
+ newUri: this._sourceMapper.getNextFileName(this._fileInfo.fileUri),
2925
2978
  };
2926
2979
  diag.addAction(renameAction);
2927
2980
  }
@@ -2959,20 +3012,20 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2959
3012
  if (stdlibPath && this._importResolver.isStdlibModule(module, this._fileInfo.executionEnvironment)) {
2960
3013
  // If the definition for this name is in 'user' module, it is overwriting the stdlib module.
2961
3014
  const definitions = definitionProvider_1.DefinitionProvider.getDefinitionsForNode(this._sourceMapper, this._evaluator, namePartNodes[namePartNodes.length - 1], namePartNodes[namePartNodes.length - 1].start, vscode_languageserver_1.CancellationToken.None);
2962
- const paths = definitions ? definitions.map((d) => d.path) : [];
3015
+ const paths = definitions ? definitions.map((d) => d.uri) : [];
2963
3016
  paths.forEach((p) => {
2964
3017
  if (!p.startsWith(stdlibPath) && !(0, sourceMapper_1.isStubFile)(p) && this._sourceMapper.isUserCode(p)) {
2965
3018
  // This means the user has a module that is overwriting the stdlib module.
2966
3019
  const diag = this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportShadowedImports, diagnosticRules_1.DiagnosticRule.reportShadowedImports, localize_1.Localizer.Diagnostic.stdlibModuleOverridden().format({
2967
3020
  name: nameParts.join('.'),
2968
- path: p,
3021
+ path: p.toUserVisibleString(),
2969
3022
  }), node);
2970
3023
  // Add a quick action that renames the file.
2971
3024
  if (diag) {
2972
3025
  const renameAction = {
2973
3026
  action: "renameShadowedFile" /* ActionKind.RenameShadowedFileAction */,
2974
- oldFile: p,
2975
- newFile: this._sourceMapper.getNextFileName(p),
3027
+ oldUri: p,
3028
+ newUri: this._sourceMapper.getNextFileName(p),
2976
3029
  };
2977
3030
  diag.addAction(renameAction);
2978
3031
  }
@@ -3281,14 +3334,21 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3281
3334
  }
3282
3335
  });
3283
3336
  }
3284
- // If a non-protocol class explicitly inherits from a protocol class, this method
3285
- // verifies that any class or instance variables declared but not assigned
3286
- // in the protocol class are implemented in the subclass. It also checks that any
3287
- // empty functions declared in the protocol are implemented in the subclass.
3337
+ // If a non-protocol class explicitly inherits from a protocol class and does
3338
+ // not explicit derive from ABC, this method verifies that any class or instance
3339
+ // variables declared but not assigned in the protocol class are implemented in
3340
+ // the subclass. It also checks that any empty functions declared in the protocol
3341
+ // are implemented in the subclass.
3288
3342
  _validateProtocolCompatibility(classType, errorNode) {
3289
3343
  if (types_1.ClassType.isProtocolClass(classType)) {
3290
3344
  return;
3291
3345
  }
3346
+ // If a class derives from ABC, exempt it from this check. This is used for
3347
+ // mixins that derive from a protocol but do not directly implement all
3348
+ // of the protocol's methods.
3349
+ if (classType.details.mro.some((mroClass) => (0, types_1.isClass)(mroClass) && types_1.ClassType.isBuiltIn(mroClass, 'ABC'))) {
3350
+ return;
3351
+ }
3292
3352
  const diagAddendum = new diagnostic_1.DiagnosticAddendum();
3293
3353
  const isSymbolImplemented = (name) => {
3294
3354
  return classType.details.mro.some((mroClass) => {
@@ -3321,7 +3381,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3321
3381
  }
3322
3382
  else if (decls[0].type === 5 /* DeclarationType.Function */) {
3323
3383
  if (decls.every((decl) => decl.type !== 5 /* DeclarationType.Function */ || ParseTreeUtils.isSuiteEmpty(decl.node.suite))) {
3324
- if ((0, pathUtils_1.getFileExtension)(decls[0].path).toLowerCase() !== '.pyi') {
3384
+ if (!decls[0].uri.hasExtension('.pyi')) {
3325
3385
  if (!isSymbolImplemented(name)) {
3326
3386
  diagAddendum.addMessage(localize_1.Localizer.DiagnosticAddendum.missingProtocolMember().format({
3327
3387
  name,
@@ -3401,7 +3461,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3401
3461
  if (diagnostic) {
3402
3462
  const fieldDecls = symbol.getTypedDeclarations();
3403
3463
  if (fieldDecls.length > 0) {
3404
- diagnostic.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.dataClassFieldLocation(), fieldDecls[0].path, fieldDecls[0].range);
3464
+ diagnostic.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.dataClassFieldLocation(), fieldDecls[0].uri, fieldDecls[0].range);
3405
3465
  }
3406
3466
  }
3407
3467
  }
@@ -3563,7 +3623,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3563
3623
  const updatedTypeParams = classType.details.typeParameters.map((typeParam) => types_1.TypeVarType.cloneAsInvariant(typeParam));
3564
3624
  const updatedClassType = types_1.ClassType.cloneWithNewTypeParameters(classType, updatedTypeParams);
3565
3625
  const objectObject = types_1.ClassType.cloneAsInstance(objectType);
3566
- const dummyTypeObject = types_1.ClassType.createInstantiable('__varianceDummy', '', '', '', 0, 0, undefined, undefined);
3626
+ const dummyTypeObject = types_1.ClassType.createInstantiable('__varianceDummy', '', '', uri_1.Uri.empty(), 0, 0, undefined, undefined);
3567
3627
  updatedTypeParams.forEach((param, paramIndex) => {
3568
3628
  // Skip variadics and ParamSpecs.
3569
3629
  if (param.details.isVariadic || param.details.isParamSpec) {
@@ -3751,7 +3811,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3751
3811
  ? localize_1.Localizer.DiagnosticAddendum.newMethodLocation()
3752
3812
  : localize_1.Localizer.DiagnosticAddendum.initMethodLocation()).format({
3753
3813
  type: this._evaluator.printType(types_1.ClassType.cloneAsInstance(displayOnInit ? newMethodResult.classType : initMethodResult.classType)),
3754
- }), secondaryDecl.path, secondaryDecl.range);
3814
+ }), secondaryDecl.uri, secondaryDecl.range);
3755
3815
  }
3756
3816
  }
3757
3817
  }
@@ -3947,12 +4007,63 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3947
4007
  // If the child class overrides this symbol with its own type, make sure
3948
4008
  // the override is compatible with the overridden symbol. Otherwise use the
3949
4009
  // override type.
3950
- if (!this._evaluator.assignType(overriddenType, childOverrideType !== null && childOverrideType !== void 0 ? childOverrideType : overrideType)) {
4010
+ // Verify that the override type is assignable to (same or narrower than)
4011
+ // the declared type of the base symbol.
4012
+ const primaryDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(overriddenClassAndSymbol.symbol);
4013
+ let isInvariant = (primaryDecl === null || primaryDecl === void 0 ? void 0 : primaryDecl.type) === 1 /* DeclarationType.Variable */ && !primaryDecl.isFinal;
4014
+ // If the entry is a member of a frozen dataclass, it is immutable,
4015
+ // so it does not need to be invariant.
4016
+ if (types_1.ClassType.isFrozenDataClass(overriddenClassAndSymbol.classType) &&
4017
+ overriddenClassAndSymbol.classType.details.dataClassEntries) {
4018
+ const dataclassEntry = overriddenClassAndSymbol.classType.details.dataClassEntries.find((entry) => entry.name === memberName);
4019
+ if (dataclassEntry) {
4020
+ isInvariant = false;
4021
+ }
4022
+ }
4023
+ let overriddenTDEntry;
4024
+ if (overriddenClassAndSymbol.classType.details.typedDictEntries) {
4025
+ overriddenTDEntry = overriddenClassAndSymbol.classType.details.typedDictEntries.get(memberName);
4026
+ if (overriddenTDEntry === null || overriddenTDEntry === void 0 ? void 0 : overriddenTDEntry.isReadOnly) {
4027
+ isInvariant = false;
4028
+ }
4029
+ }
4030
+ let overrideTDEntry;
4031
+ if (overrideClassAndSymbol.classType.details.typedDictEntries) {
4032
+ overrideTDEntry = overrideClassAndSymbol.classType.details.typedDictEntries.get(memberName);
4033
+ }
4034
+ if (!this._evaluator.assignType(overriddenType, childOverrideType !== null && childOverrideType !== void 0 ? childOverrideType : overrideType,
4035
+ /* diag */ undefined,
4036
+ /* destTypeVarContext */ undefined,
4037
+ /* srcTypeVarContext */ undefined, isInvariant ? 1 /* AssignTypeFlags.EnforceInvariance */ : 0 /* AssignTypeFlags.Default */)) {
3951
4038
  diag = this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleVariableOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleVariableOverride, localize_1.Localizer.Diagnostic.baseClassVariableTypeIncompatible().format({
3952
4039
  classType: childClassType.details.name,
3953
4040
  name: memberName,
3954
4041
  }), errorNode);
3955
4042
  }
4043
+ else if (overriddenTDEntry && overrideTDEntry) {
4044
+ let isRequiredCompatible;
4045
+ let isReadOnlyCompatible = true;
4046
+ // If both classes are TypedDicts and they both define this field,
4047
+ // make sure the attributes are compatible.
4048
+ if (overriddenTDEntry.isReadOnly) {
4049
+ isRequiredCompatible = overrideTDEntry.isRequired || !overriddenTDEntry.isRequired;
4050
+ }
4051
+ else {
4052
+ isReadOnlyCompatible = !overrideTDEntry.isReadOnly;
4053
+ isRequiredCompatible = overrideTDEntry.isRequired === overriddenTDEntry.isRequired;
4054
+ }
4055
+ if (!isRequiredCompatible) {
4056
+ const message = overrideTDEntry.isRequired
4057
+ ? localize_1.Localizer.Diagnostic.typedDictFieldRequiredRedefinition
4058
+ : localize_1.Localizer.Diagnostic.typedDictFieldNotRequiredRedefinition;
4059
+ diag = this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleVariableOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleVariableOverride, message().format({ name: memberName }), errorNode);
4060
+ }
4061
+ else if (!isReadOnlyCompatible) {
4062
+ diag = this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleVariableOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleVariableOverride, localize_1.Localizer.Diagnostic.typedDictFieldReadOnlyRedefinition().format({
4063
+ name: memberName,
4064
+ }), errorNode);
4065
+ }
4066
+ }
3956
4067
  }
3957
4068
  }
3958
4069
  }
@@ -3960,11 +4071,11 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3960
4071
  diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.baseClassOverriddenType().format({
3961
4072
  baseClass: this._evaluator.printType((0, typeUtils_1.convertToInstance)(overriddenClassAndSymbol.classType)),
3962
4073
  type: this._evaluator.printType(overriddenType),
3963
- }), overriddenDecl.path, overriddenDecl.range);
4074
+ }), overriddenDecl.uri, overriddenDecl.range);
3964
4075
  diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.baseClassOverridesType().format({
3965
4076
  baseClass: this._evaluator.printType((0, typeUtils_1.convertToInstance)(overrideClassAndSymbol.classType)),
3966
4077
  type: this._evaluator.printType(overrideType),
3967
- }), overrideDecl.path, overrideDecl.range);
4078
+ }), overrideDecl.uri, overrideDecl.range);
3968
4079
  }
3969
4080
  }
3970
4081
  // Validates that any overridden methods or variables contain the same
@@ -4129,7 +4240,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4129
4240
  }) + diagAddendum.getString(), decl.type === 5 /* DeclarationType.Function */ ? decl.node.name : decl.node);
4130
4241
  const origDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(baseClassAndSymbol.symbol);
4131
4242
  if (diag && origDecl) {
4132
- diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.overriddenMethod(), origDecl.path, origDecl.range);
4243
+ diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.overriddenMethod(), origDecl.uri, origDecl.range);
4133
4244
  }
4134
4245
  }
4135
4246
  }
@@ -4145,7 +4256,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4145
4256
  }), decl.node.name);
4146
4257
  const origDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(baseClassAndSymbol.symbol);
4147
4258
  if (diag && origDecl) {
4148
- diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.finalMethod(), origDecl.path, origDecl.range);
4259
+ diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.finalMethod(), origDecl.uri, origDecl.range);
4149
4260
  }
4150
4261
  }
4151
4262
  }
@@ -4166,7 +4277,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4166
4277
  }), lastDecl.node);
4167
4278
  const origDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(baseClassAndSymbol.symbol);
4168
4279
  if (diag && origDecl) {
4169
- diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.overriddenMethod(), origDecl.path, origDecl.range);
4280
+ diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.overriddenMethod(), origDecl.uri, origDecl.range);
4170
4281
  }
4171
4282
  }
4172
4283
  }
@@ -4212,7 +4323,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4212
4323
  }) + diagAddendum.getString(), decls[decls.length - 1].node);
4213
4324
  const origDecl = baseClassMethodType.details.declaration;
4214
4325
  if (diag && origDecl) {
4215
- diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.overriddenMethod(), origDecl.path, origDecl.range);
4326
+ diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.overriddenMethod(), origDecl.uri, origDecl.range);
4216
4327
  }
4217
4328
  }
4218
4329
  }
@@ -4231,7 +4342,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4231
4342
  }) + diagAddendum.getString(), decl.node.name);
4232
4343
  const origDecl = baseClassMethodType.details.declaration;
4233
4344
  if (diag && origDecl) {
4234
- diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.overriddenMethod(), origDecl.path, origDecl.range);
4345
+ diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.overriddenMethod(), origDecl.uri, origDecl.range);
4235
4346
  }
4236
4347
  }
4237
4348
  }
@@ -4261,6 +4372,17 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4261
4372
  isInvariant = false;
4262
4373
  }
4263
4374
  }
4375
+ let overriddenTDEntry;
4376
+ if (baseClass.details.typedDictEntries) {
4377
+ overriddenTDEntry = baseClass.details.typedDictEntries.get(memberName);
4378
+ if (overriddenTDEntry === null || overriddenTDEntry === void 0 ? void 0 : overriddenTDEntry.isReadOnly) {
4379
+ isInvariant = false;
4380
+ }
4381
+ }
4382
+ let overrideTDEntry;
4383
+ if (childClassType.details.typedDictEntries) {
4384
+ overrideTDEntry = childClassType.details.typedDictEntries.get(memberName);
4385
+ }
4264
4386
  let diagAddendum = new diagnostic_1.DiagnosticAddendum();
4265
4387
  if (!this._evaluator.assignType(baseType, overrideType, diagAddendum,
4266
4388
  /* destTypeVarContext */ undefined,
@@ -4279,7 +4401,32 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4279
4401
  }) + diagAddendum.getString(), (_a = (0, declarationUtils_1.getNameNodeForDeclaration)(lastDecl)) !== null && _a !== void 0 ? _a : lastDecl.node);
4280
4402
  const origDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(baseClassAndSymbol.symbol);
4281
4403
  if (diag && origDecl) {
4282
- diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.overriddenSymbol(), origDecl.path, origDecl.range);
4404
+ diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.overriddenSymbol(), origDecl.uri, origDecl.range);
4405
+ }
4406
+ }
4407
+ else if (overriddenTDEntry && overrideTDEntry) {
4408
+ // Make sure the required/not-required attribute is compatible.
4409
+ let isRequiredCompatible = true;
4410
+ if (overriddenTDEntry.isReadOnly) {
4411
+ // If the read-only flag is set, a not-required field can be overridden
4412
+ // by a required field, but not vice versa.
4413
+ isRequiredCompatible = overrideTDEntry.isRequired || !overriddenTDEntry.isRequired;
4414
+ }
4415
+ else {
4416
+ isRequiredCompatible = overrideTDEntry.isRequired === overriddenTDEntry.isRequired;
4417
+ }
4418
+ if (!isRequiredCompatible) {
4419
+ const message = overrideTDEntry.isRequired
4420
+ ? localize_1.Localizer.Diagnostic.typedDictFieldRequiredRedefinition
4421
+ : localize_1.Localizer.Diagnostic.typedDictFieldNotRequiredRedefinition;
4422
+ this._evaluator.addDiagnostic(AnalyzerNodeInfo.getFileInfo(lastDecl.node).diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, message().format({ name: memberName }), lastDecl.node);
4423
+ }
4424
+ // Make sure that the derived class isn't marking a previously writable
4425
+ // entry as read-only.
4426
+ if (!overriddenTDEntry.isReadOnly && overrideTDEntry.isReadOnly) {
4427
+ this._evaluator.addDiagnostic(AnalyzerNodeInfo.getFileInfo(lastDecl.node).diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.typedDictFieldReadOnlyRedefinition().format({
4428
+ name: memberName,
4429
+ }), lastDecl.node);
4283
4430
  }
4284
4431
  }
4285
4432
  // Verify that there is not a Final mismatch.
@@ -4291,7 +4438,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4291
4438
  className: baseClass.details.name,
4292
4439
  }), lastDecl.node);
4293
4440
  if (diag) {
4294
- diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.overriddenSymbol(), overrideFinalVarDecl.path, overrideFinalVarDecl.range);
4441
+ diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.overriddenSymbol(), overrideFinalVarDecl.uri, overrideFinalVarDecl.range);
4295
4442
  }
4296
4443
  }
4297
4444
  // Verify that a class variable isn't overriding an instance
@@ -4321,7 +4468,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4321
4468
  }), (_b = (0, declarationUtils_1.getNameNodeForDeclaration)(lastDecl)) !== null && _b !== void 0 ? _b : lastDecl.node);
4322
4469
  const origDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(baseClassAndSymbol.symbol);
4323
4470
  if (diag && origDecl) {
4324
- diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.overriddenSymbol(), origDecl.path, origDecl.range);
4471
+ diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.overriddenSymbol(), origDecl.uri, origDecl.range);
4325
4472
  }
4326
4473
  }
4327
4474
  }