@zzzen/pyright-internal 1.2.0-dev.20240324 → 1.2.0-dev.20240331

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 (251) hide show
  1. package/dist/analyzer/binder.js +4 -1
  2. package/dist/analyzer/binder.js.map +1 -1
  3. package/dist/analyzer/cacheManager.d.ts +1 -0
  4. package/dist/analyzer/cacheManager.js +4 -1
  5. package/dist/analyzer/cacheManager.js.map +1 -1
  6. package/dist/analyzer/checker.d.ts +1 -2
  7. package/dist/analyzer/checker.js +10 -5
  8. package/dist/analyzer/checker.js.map +1 -1
  9. package/dist/analyzer/constructors.d.ts +3 -2
  10. package/dist/analyzer/constructors.js +76 -54
  11. package/dist/analyzer/constructors.js.map +1 -1
  12. package/dist/analyzer/dataClasses.js +2 -0
  13. package/dist/analyzer/dataClasses.js.map +1 -1
  14. package/dist/analyzer/declaration.js +1 -1
  15. package/dist/analyzer/declaration.js.map +1 -1
  16. package/dist/analyzer/enums.js +1 -0
  17. package/dist/analyzer/enums.js.map +1 -1
  18. package/dist/analyzer/importResolver.js +19 -17
  19. package/dist/analyzer/importResolver.js.map +1 -1
  20. package/dist/analyzer/namedTuples.js +2 -0
  21. package/dist/analyzer/namedTuples.js.map +1 -1
  22. package/dist/analyzer/packageTypeVerifier.js +1 -1
  23. package/dist/analyzer/packageTypeVerifier.js.map +1 -1
  24. package/dist/analyzer/parseTreeUtils.d.ts +1 -1
  25. package/dist/analyzer/patternMatching.js +14 -3
  26. package/dist/analyzer/patternMatching.js.map +1 -1
  27. package/dist/analyzer/program.d.ts +1 -7
  28. package/dist/analyzer/program.js +15 -19
  29. package/dist/analyzer/program.js.map +1 -1
  30. package/dist/analyzer/programTypes.d.ts +11 -0
  31. package/dist/analyzer/programTypes.js +11 -0
  32. package/dist/analyzer/programTypes.js.map +1 -0
  33. package/dist/analyzer/service.d.ts +2 -2
  34. package/dist/analyzer/service.js +20 -14
  35. package/dist/analyzer/service.js.map +1 -1
  36. package/dist/analyzer/sourceFile.js +4 -4
  37. package/dist/analyzer/sourceFile.js.map +1 -1
  38. package/dist/analyzer/sourceFileInfoUtils.js +3 -3
  39. package/dist/analyzer/sourceFileInfoUtils.js.map +1 -1
  40. package/dist/analyzer/tracePrinter.js +2 -2
  41. package/dist/analyzer/tracePrinter.js.map +1 -1
  42. package/dist/analyzer/typeEvaluator.js +53 -24
  43. package/dist/analyzer/typeEvaluator.js.map +1 -1
  44. package/dist/analyzer/typeGuards.js +14 -7
  45. package/dist/analyzer/typeGuards.js.map +1 -1
  46. package/dist/analyzer/typeUtils.d.ts +2 -2
  47. package/dist/analyzer/typeUtils.js +20 -4
  48. package/dist/analyzer/typeUtils.js.map +1 -1
  49. package/dist/analyzer/typedDicts.js +3 -0
  50. package/dist/analyzer/typedDicts.js.map +1 -1
  51. package/dist/backgroundAnalysis.js +1 -1
  52. package/dist/backgroundAnalysis.js.map +1 -1
  53. package/dist/backgroundAnalysisBase.js +1 -1
  54. package/dist/backgroundAnalysisBase.js.map +1 -1
  55. package/dist/backgroundThreadBase.js +15 -10
  56. package/dist/backgroundThreadBase.js.map +1 -1
  57. package/dist/commands/commandController.d.ts +2 -1
  58. package/dist/commands/commandController.js +3 -0
  59. package/dist/commands/commandController.js.map +1 -1
  60. package/dist/commands/createTypeStub.d.ts +1 -1
  61. package/dist/commands/createTypeStub.js +3 -3
  62. package/dist/commands/createTypeStub.js.map +1 -1
  63. package/dist/commands/dumpFileDebugInfoCommand.d.ts +1 -1
  64. package/dist/commands/dumpFileDebugInfoCommand.js +1 -1
  65. package/dist/commands/dumpFileDebugInfoCommand.js.map +1 -1
  66. package/dist/commands/quickActionCommand.d.ts +1 -1
  67. package/dist/commands/quickActionCommand.js +2 -2
  68. package/dist/commands/quickActionCommand.js.map +1 -1
  69. package/dist/commands/restartServer.d.ts +1 -1
  70. package/dist/common/cancellationUtils.js +2 -2
  71. package/dist/common/cancellationUtils.js.map +1 -1
  72. package/dist/common/caseSensitivityDetector.d.ts +6 -0
  73. package/dist/common/caseSensitivityDetector.js +18 -0
  74. package/dist/common/caseSensitivityDetector.js.map +1 -0
  75. package/dist/common/commandLineOptions.d.ts +3 -2
  76. package/dist/common/commandLineOptions.js.map +1 -1
  77. package/dist/common/commandUtils.js +1 -1
  78. package/dist/common/commandUtils.js.map +1 -1
  79. package/dist/common/configOptions.js +3 -3
  80. package/dist/common/configOptions.js.map +1 -1
  81. package/dist/common/envVarUtils.d.ts +1 -0
  82. package/dist/common/envVarUtils.js +42 -7
  83. package/dist/common/envVarUtils.js.map +1 -1
  84. package/dist/common/extensibility.d.ts +1 -1
  85. package/dist/common/fileBasedCancellationUtils.js +2 -2
  86. package/dist/common/fileBasedCancellationUtils.js.map +1 -1
  87. package/dist/common/fileSystem.d.ts +0 -1
  88. package/dist/common/fileSystem.js.map +1 -1
  89. package/dist/common/fullAccessHost.js +4 -3
  90. package/dist/common/fullAccessHost.js.map +1 -1
  91. package/dist/common/languageServerInterface.d.ts +62 -0
  92. package/dist/common/languageServerInterface.js +10 -0
  93. package/dist/common/languageServerInterface.js.map +1 -0
  94. package/dist/common/realFileSystem.d.ts +8 -4
  95. package/dist/common/realFileSystem.js +56 -17
  96. package/dist/common/realFileSystem.js.map +1 -1
  97. package/dist/common/serviceKeys.d.ts +21 -0
  98. package/dist/common/serviceKeys.js +26 -0
  99. package/dist/common/serviceKeys.js.map +1 -0
  100. package/dist/common/serviceProviderExtensions.d.ts +2 -16
  101. package/dist/common/serviceProviderExtensions.js +19 -27
  102. package/dist/common/serviceProviderExtensions.js.map +1 -1
  103. package/dist/common/textEditTracker.js +2 -2
  104. package/dist/common/textEditTracker.js.map +1 -1
  105. package/dist/common/uri/constantUri.d.ts +36 -0
  106. package/dist/common/uri/constantUri.js +112 -0
  107. package/dist/common/uri/constantUri.js.map +1 -0
  108. package/dist/common/uri/emptyUri.d.ts +3 -31
  109. package/dist/common/uri/emptyUri.js +3 -84
  110. package/dist/common/uri/emptyUri.js.map +1 -1
  111. package/dist/common/uri/fileUri.d.ts +1 -0
  112. package/dist/common/uri/fileUri.js +3 -2
  113. package/dist/common/uri/fileUri.js.map +1 -1
  114. package/dist/common/uri/uri.d.ts +11 -3
  115. package/dist/common/uri/uri.js +31 -20
  116. package/dist/common/uri/uri.js.map +1 -1
  117. package/dist/common/uri/uriUtils.d.ts +11 -5
  118. package/dist/common/uri/uriUtils.js +31 -53
  119. package/dist/common/uri/uriUtils.js.map +1 -1
  120. package/dist/common/workspaceEditUtils.js +4 -4
  121. package/dist/common/workspaceEditUtils.js.map +1 -1
  122. package/dist/languageServerBase.d.ts +9 -57
  123. package/dist/languageServerBase.js +18 -8
  124. package/dist/languageServerBase.js.map +1 -1
  125. package/dist/languageService/analyzerServiceExecutor.d.ts +1 -1
  126. package/dist/languageService/analyzerServiceExecutor.js +4 -5
  127. package/dist/languageService/analyzerServiceExecutor.js.map +1 -1
  128. package/dist/languageService/callHierarchyProvider.js +6 -6
  129. package/dist/languageService/callHierarchyProvider.js.map +1 -1
  130. package/dist/languageService/codeActionProvider.js +43 -42
  131. package/dist/languageService/codeActionProvider.js.map +1 -1
  132. package/dist/languageService/completionProvider.js +2 -2
  133. package/dist/languageService/completionProvider.js.map +1 -1
  134. package/dist/languageService/definitionProvider.js +2 -2
  135. package/dist/languageService/definitionProvider.js.map +1 -1
  136. package/dist/languageService/documentSymbolCollector.js +2 -2
  137. package/dist/languageService/documentSymbolCollector.js.map +1 -1
  138. package/dist/languageService/documentSymbolProvider.d.ts +3 -2
  139. package/dist/languageService/documentSymbolProvider.js +3 -2
  140. package/dist/languageService/documentSymbolProvider.js.map +1 -1
  141. package/dist/languageService/referencesProvider.js +2 -2
  142. package/dist/languageService/referencesProvider.js.map +1 -1
  143. package/dist/languageService/signatureHelpProvider.js +2 -2
  144. package/dist/languageService/signatureHelpProvider.js.map +1 -1
  145. package/dist/languageService/symbolIndexer.d.ts +4 -1
  146. package/dist/languageService/symbolIndexer.js +21 -11
  147. package/dist/languageService/symbolIndexer.js.map +1 -1
  148. package/dist/languageService/workspaceSymbolProvider.js +1 -1
  149. package/dist/languageService/workspaceSymbolProvider.js.map +1 -1
  150. package/dist/localization/localize.js +21 -16
  151. package/dist/localization/localize.js.map +1 -1
  152. package/dist/localization/package.nls.cs.json +1 -0
  153. package/dist/localization/package.nls.de.json +1 -0
  154. package/dist/localization/package.nls.es.json +1 -0
  155. package/dist/localization/package.nls.fr.json +1 -0
  156. package/dist/localization/package.nls.it.json +1 -0
  157. package/dist/localization/package.nls.ja.json +1 -0
  158. package/dist/localization/package.nls.ko.json +1 -0
  159. package/dist/localization/package.nls.pl.json +1 -0
  160. package/dist/localization/package.nls.pt-br.json +1 -0
  161. package/dist/localization/package.nls.qps-ploc.json +1 -0
  162. package/dist/localization/package.nls.ru.json +1 -0
  163. package/dist/localization/package.nls.tr.json +1 -0
  164. package/dist/localization/package.nls.zh-cn.json +1 -0
  165. package/dist/localization/package.nls.zh-tw.json +1 -0
  166. package/dist/pyright.js +6 -6
  167. package/dist/pyright.js.map +1 -1
  168. package/dist/pyrightFileSystem.d.ts +3 -1
  169. package/dist/pyrightFileSystem.js +14 -9
  170. package/dist/pyrightFileSystem.js.map +1 -1
  171. package/dist/readonlyAugmentedFileSystem.d.ts +0 -1
  172. package/dist/readonlyAugmentedFileSystem.js +0 -3
  173. package/dist/readonlyAugmentedFileSystem.js.map +1 -1
  174. package/dist/server.d.ts +3 -1
  175. package/dist/server.js +14 -10
  176. package/dist/server.js.map +1 -1
  177. package/dist/tests/chainedSourceFiles.test.js +12 -12
  178. package/dist/tests/chainedSourceFiles.test.js.map +1 -1
  179. package/dist/tests/completions.test.js +4 -4
  180. package/dist/tests/completions.test.js.map +1 -1
  181. package/dist/tests/config.test.js +19 -14
  182. package/dist/tests/config.test.js.map +1 -1
  183. package/dist/tests/documentSymbolCollector.test.js +2 -3
  184. package/dist/tests/documentSymbolCollector.test.js.map +1 -1
  185. package/dist/tests/envVarUtils.test.js +77 -2
  186. package/dist/tests/envVarUtils.test.js.map +1 -1
  187. package/dist/tests/filesystem.test.js +13 -13
  188. package/dist/tests/filesystem.test.js.map +1 -1
  189. package/dist/tests/fourSlashParser.test.js +10 -10
  190. package/dist/tests/fourSlashParser.test.js.map +1 -1
  191. package/dist/tests/harness/fourslash/fourSlashParser.js +12 -10
  192. package/dist/tests/harness/fourslash/fourSlashParser.js.map +1 -1
  193. package/dist/tests/harness/fourslash/fourSlashTypes.d.ts +1 -0
  194. package/dist/tests/harness/fourslash/fourSlashTypes.js.map +1 -1
  195. package/dist/tests/harness/fourslash/testLanguageService.d.ts +3 -2
  196. package/dist/tests/harness/fourslash/testLanguageService.js +2 -2
  197. package/dist/tests/harness/fourslash/testLanguageService.js.map +1 -1
  198. package/dist/tests/harness/fourslash/testState.d.ts +3 -3
  199. package/dist/tests/harness/fourslash/testState.js +36 -32
  200. package/dist/tests/harness/fourslash/testState.js.map +1 -1
  201. package/dist/tests/harness/fourslash/workspaceEditTestUtils.js +1 -1
  202. package/dist/tests/harness/fourslash/workspaceEditTestUtils.js.map +1 -1
  203. package/dist/tests/harness/testHost.d.ts +7 -0
  204. package/dist/tests/harness/testHost.js +33 -14
  205. package/dist/tests/harness/testHost.js.map +1 -1
  206. package/dist/tests/harness/vfs/factory.d.ts +3 -4
  207. package/dist/tests/harness/vfs/factory.js +7 -6
  208. package/dist/tests/harness/vfs/factory.js.map +1 -1
  209. package/dist/tests/harness/vfs/filesystem.d.ts +5 -3
  210. package/dist/tests/harness/vfs/filesystem.js +22 -15
  211. package/dist/tests/harness/vfs/filesystem.js.map +1 -1
  212. package/dist/tests/importResolver.test.js +35 -34
  213. package/dist/tests/importResolver.test.js.map +1 -1
  214. package/dist/tests/importStatementUtils.test.js +5 -6
  215. package/dist/tests/importStatementUtils.test.js.map +1 -1
  216. package/dist/tests/logger.test.js +1 -1
  217. package/dist/tests/logger.test.js.map +1 -1
  218. package/dist/tests/lsp/languageServer.js +5 -4
  219. package/dist/tests/lsp/languageServer.js.map +1 -1
  220. package/dist/tests/lsp/languageServerTestUtils.js +15 -10
  221. package/dist/tests/lsp/languageServerTestUtils.js.map +1 -1
  222. package/dist/tests/parseTreeUtils.test.js +1 -2
  223. package/dist/tests/parseTreeUtils.test.js.map +1 -1
  224. package/dist/tests/pyrightFileSystem.test.js +6 -5
  225. package/dist/tests/pyrightFileSystem.test.js.map +1 -1
  226. package/dist/tests/serialization.test.js +5 -5
  227. package/dist/tests/serialization.test.js.map +1 -1
  228. package/dist/tests/service.test.js +16 -25
  229. package/dist/tests/service.test.js.map +1 -1
  230. package/dist/tests/sourceFile.test.js +8 -5
  231. package/dist/tests/sourceFile.test.js.map +1 -1
  232. package/dist/tests/sourceMapperUtils.test.js +4 -4
  233. package/dist/tests/sourceMapperUtils.test.js.map +1 -1
  234. package/dist/tests/testState.test.js +5 -5
  235. package/dist/tests/testState.test.js.map +1 -1
  236. package/dist/tests/testStateUtils.js +6 -6
  237. package/dist/tests/testStateUtils.js.map +1 -1
  238. package/dist/tests/testUtils.js +6 -4
  239. package/dist/tests/testUtils.js.map +1 -1
  240. package/dist/tests/typeEvaluator3.test.js +1 -1
  241. package/dist/tests/typePrinter.test.js.map +1 -1
  242. package/dist/tests/uri.test.js +220 -199
  243. package/dist/tests/uri.test.js.map +1 -1
  244. package/dist/tests/workspaceEditUtils.test.js +7 -7
  245. package/dist/tests/workspaceEditUtils.test.js.map +1 -1
  246. package/dist/tests/zipfs.test.js +7 -5
  247. package/dist/tests/zipfs.test.js.map +1 -1
  248. package/dist/workspaceFactory.d.ts +15 -6
  249. package/dist/workspaceFactory.js +16 -10
  250. package/dist/workspaceFactory.js.map +1 -1
  251. package/package.json +5 -5
@@ -1421,13 +1421,17 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
1421
1421
  subDiag = metaclassDiag;
1422
1422
  }
1423
1423
  }
1424
- if (memberInfo && !memberInfo.isDescriptorError) {
1424
+ if (memberInfo) {
1425
+ if (memberInfo.isDescriptorError && diag && subDiag) {
1426
+ diag.addAddendum(subDiag);
1427
+ }
1425
1428
  return {
1426
1429
  type: memberInfo.type,
1427
1430
  classType: memberInfo.classType,
1428
1431
  isIncomplete: !!memberInfo.isTypeIncomplete,
1429
1432
  isAsymmetricAccessor: memberInfo.isAsymmetricAccessor,
1430
1433
  memberAccessDeprecationInfo: memberInfo.memberAccessDeprecationInfo,
1434
+ typeErrors: memberInfo.isDescriptorError,
1431
1435
  };
1432
1436
  }
1433
1437
  // If this is a type[Any] or type[Unknown], allow any other members.
@@ -1545,7 +1549,8 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
1545
1549
  let constructorType;
1546
1550
  // Try to get the `__init__` method first because it typically has more
1547
1551
  // type information than `__new__`.
1548
- const initMethodResult = (0, constructors_1.getBoundInitMethod)(evaluatorInterface, callNode, types_1.ClassType.cloneAsInstance(subtype), 0 /* MemberAccessFlags.Default */);
1552
+ const initMethodResult = (0, constructors_1.getBoundInitMethod)(evaluatorInterface, callNode, types_1.ClassType.cloneAsInstance(subtype),
1553
+ /* diag */ undefined, 0 /* MemberAccessFlags.Default */);
1549
1554
  if (initMethodResult && !initMethodResult.typeErrors) {
1550
1555
  if ((0, types_1.isFunction)(initMethodResult.type) || (0, types_1.isOverloadedFunction)(initMethodResult.type)) {
1551
1556
  constructorType = initMethodResult.type;
@@ -1561,7 +1566,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
1561
1566
  // the `object` class or accepts only default parameters(* args, ** kwargs),
1562
1567
  // see if we can find a better signature from the `__new__` method.
1563
1568
  if (!constructorType || isObjectInit || isDefaultParams) {
1564
- const newMethodResult = (0, constructors_1.getBoundNewMethod)(evaluatorInterface, callNode, subtype, 0 /* MemberAccessFlags.Default */);
1569
+ const newMethodResult = (0, constructors_1.getBoundNewMethod)(evaluatorInterface, callNode, subtype);
1565
1570
  if (newMethodResult && !newMethodResult.typeErrors) {
1566
1571
  if ((0, types_1.isFunction)(newMethodResult.type) &&
1567
1572
  newMethodResult.type.details.fullName !== 'builtins.object.__new__') {
@@ -3611,18 +3616,18 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
3611
3616
  typeResult = getTypeOfBoundMember(node.memberName, baseType, memberName, usage, diag,
3612
3617
  /* memberAccessFlags */ undefined, baseTypeResult.bindToSelfType);
3613
3618
  }
3614
- if (typeResult) {
3619
+ if (typeResult && !typeResult.typeErrors) {
3615
3620
  type = (0, typeUtils_1.addConditionToType)(typeResult.type, (0, typeUtils_1.getTypeCondition)(baseType),
3616
3621
  /* skipSelfCondition */ true);
3617
- }
3618
- if (typeResult === null || typeResult === void 0 ? void 0 : typeResult.isIncomplete) {
3619
- isIncomplete = true;
3620
- }
3621
- if (typeResult === null || typeResult === void 0 ? void 0 : typeResult.isAsymmetricAccessor) {
3622
- isAsymmetricAccessor = true;
3623
- }
3624
- if (typeResult === null || typeResult === void 0 ? void 0 : typeResult.memberAccessDeprecationInfo) {
3625
- memberAccessDeprecationInfo = typeResult.memberAccessDeprecationInfo;
3622
+ if (typeResult.isIncomplete) {
3623
+ isIncomplete = true;
3624
+ }
3625
+ if (typeResult.isAsymmetricAccessor) {
3626
+ isAsymmetricAccessor = true;
3627
+ }
3628
+ if (typeResult.memberAccessDeprecationInfo) {
3629
+ memberAccessDeprecationInfo = typeResult.memberAccessDeprecationInfo;
3630
+ }
3626
3631
  }
3627
3632
  break;
3628
3633
  }
@@ -3701,7 +3706,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
3701
3706
  }
3702
3707
  if ((0, typeUtils_1.isNoneInstance)(subtype) && noneType && (0, types_1.isClassInstance)(noneType)) {
3703
3708
  const typeResult = getTypeOfBoundMember(node.memberName, noneType, memberName, usage, diag);
3704
- if (typeResult) {
3709
+ if (typeResult && !typeResult.typeErrors) {
3705
3710
  type = (0, typeUtils_1.addConditionToType)(typeResult.type, (0, typeUtils_1.getTypeCondition)(baseType));
3706
3711
  if (typeResult.isIncomplete) {
3707
3712
  isIncomplete = true;
@@ -4015,7 +4020,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
4015
4020
  }
4016
4021
  const methodTypeResult = getTypeOfBoundMember(errorNode, concreteMemberType, accessMethodName,
4017
4022
  /* usage */ undefined, diag === null || diag === void 0 ? void 0 : diag.createAddendum(), 16 /* MemberAccessFlags.SkipInstanceMembers */ | 512 /* MemberAccessFlags.SkipAttributeAccessOverride */);
4018
- if (!methodTypeResult) {
4023
+ if (!methodTypeResult || methodTypeResult.typeErrors) {
4019
4024
  // Provide special error messages for properties.
4020
4025
  if (types_1.ClassType.isPropertyClass(concreteMemberType)) {
4021
4026
  if (usage.method !== 'get') {
@@ -6792,7 +6797,8 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
6792
6797
  const result = {
6793
6798
  returnType: (0, namedTuples_1.createNamedTupleType)(evaluatorInterface, errorNode, argList, /* includesTypes */ true),
6794
6799
  };
6795
- const initTypeResult = (0, constructors_1.getBoundInitMethod)(evaluatorInterface, errorNode, types_1.ClassType.cloneAsInstance(expandedCallType), 0 /* MemberAccessFlags.Default */);
6800
+ const initTypeResult = (0, constructors_1.getBoundInitMethod)(evaluatorInterface, errorNode, types_1.ClassType.cloneAsInstance(expandedCallType),
6801
+ /* diag */ undefined, 0 /* MemberAccessFlags.Default */);
6796
6802
  if (initTypeResult && (0, types_1.isOverloadedFunction)(initTypeResult.type)) {
6797
6803
  validateOverloadedFunctionArguments(errorNode, argList, { type: initTypeResult.type },
6798
6804
  /* typeVarContext */ undefined, skipUnknownArgCheck,
@@ -6895,15 +6901,15 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
6895
6901
  }
6896
6902
  function validateCallForClassInstance(errorNode, argList, expandedCallType, unexpandedCallType, typeVarContext, skipUnknownArgCheck, inferenceContext, recursionCount) {
6897
6903
  var _a;
6904
+ const callDiag = new diagnostic_1.DiagnosticAddendum();
6898
6905
  const callMethodResult = getTypeOfBoundMember(errorNode, expandedCallType, '__call__',
6899
- /* usage */ undefined,
6900
- /* diag */ undefined, 16 /* MemberAccessFlags.SkipInstanceMembers */ | 512 /* MemberAccessFlags.SkipAttributeAccessOverride */,
6906
+ /* usage */ undefined, callDiag, 16 /* MemberAccessFlags.SkipInstanceMembers */ | 512 /* MemberAccessFlags.SkipAttributeAccessOverride */,
6901
6907
  /* selfType */ undefined, recursionCount);
6902
6908
  const callMethodType = callMethodResult === null || callMethodResult === void 0 ? void 0 : callMethodResult.type;
6903
- if (!callMethodType) {
6909
+ if (!callMethodType || callMethodResult.typeErrors) {
6904
6910
  addDiagnostic(diagnosticRules_1.DiagnosticRule.reportCallIssue, localize_1.LocMessage.objectNotCallable().format({
6905
6911
  type: printType(expandedCallType),
6906
- }), errorNode);
6912
+ }) + callDiag.getString(), errorNode);
6907
6913
  return { returnType: types_1.UnknownType.create(), argumentErrors: true };
6908
6914
  }
6909
6915
  const callResult = validateCallArguments(errorNode, argList, { type: callMethodType }, typeVarContext, skipUnknownArgCheck, inferenceContext, recursionCount);
@@ -9114,6 +9120,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
9114
9120
  });
9115
9121
  types_1.FunctionType.addDefaultParameters(newType);
9116
9122
  newType.details.declaredReturnType = types_1.ClassType.cloneAsInstance(classType);
9123
+ newType.details.constructorTypeVarScopeId = classType.details.typeVarScopeId;
9117
9124
  classType.details.fields.set('__new__', symbol_1.Symbol.createWithType(4 /* SymbolFlags.ClassMember */, newType));
9118
9125
  }
9119
9126
  return classType;
@@ -9420,7 +9427,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
9420
9427
  let isIncomplete = false;
9421
9428
  // Infer the key and value types if possible.
9422
9429
  node.entries.forEach((entryNode, index) => {
9423
- var _a;
9430
+ var _a, _b, _c, _d;
9424
9431
  let addUnknown = true;
9425
9432
  if (entryNode.nodeType === 17 /* ParseNodeType.DictionaryKeyEntry */) {
9426
9433
  const keyTypeResult = getTypeOfExpression(entryNode.keyExpression,
@@ -9467,6 +9474,15 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
9467
9474
  isIncomplete = true;
9468
9475
  }
9469
9476
  if (forceStrictInference || index < maxEntriesToUseForInference) {
9477
+ // If an existing key has the same literal type, delete the previous
9478
+ // key since we're overwriting it here.
9479
+ if ((0, types_1.isClass)(keyType) && (0, typeUtils_1.isLiteralType)(keyType)) {
9480
+ const existingIndex = keyTypes.findIndex((kt) => (0, types_1.isTypeSame)(keyType, kt.type));
9481
+ if (existingIndex >= 0) {
9482
+ keyTypes.splice(existingIndex, 1);
9483
+ valueTypes.splice(existingIndex, 1);
9484
+ }
9485
+ }
9470
9486
  keyTypes.push({ node: entryNode.keyExpression, type: keyType });
9471
9487
  valueTypes.push({ node: entryNode.valueExpression, type: valueType });
9472
9488
  }
@@ -9504,10 +9520,20 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
9504
9520
  /* allowNarrowed */ true);
9505
9521
  tdEntries.knownItems.forEach((entry, name) => {
9506
9522
  if (entry.isRequired || entry.isProvided) {
9507
- keyTypes.push({ node: entryNode, type: types_1.ClassType.cloneWithLiteral(strObject, name) });
9523
+ keyTypes.push({
9524
+ node: entryNode,
9525
+ type: types_1.ClassType.cloneWithLiteral(strObject, name),
9526
+ });
9508
9527
  valueTypes.push({ node: entryNode, type: entry.valueType });
9509
9528
  }
9510
9529
  });
9530
+ if (!expectedTypedDictEntries) {
9531
+ keyTypes.push({ node: entryNode, type: types_1.ClassType.cloneAsInstance(strObject) });
9532
+ valueTypes.push({
9533
+ node: entryNode,
9534
+ type: (_c = (_b = (_a = tdEntries.extraItems) === null || _a === void 0 ? void 0 : _a.valueType) !== null && _b !== void 0 ? _b : objectType) !== null && _c !== void 0 ? _c : types_1.UnknownType.create(),
9535
+ });
9536
+ }
9511
9537
  addUnknown = false;
9512
9538
  }
9513
9539
  }
@@ -9541,7 +9567,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
9541
9567
  }
9542
9568
  // The result should be a tuple.
9543
9569
  if ((0, types_1.isClassInstance)(dictEntryType) && (0, typeUtils_1.isTupleClass)(dictEntryType)) {
9544
- const typeArgs = (_a = dictEntryType.tupleTypeArguments) === null || _a === void 0 ? void 0 : _a.map((t) => t.type);
9570
+ const typeArgs = (_d = dictEntryType.tupleTypeArguments) === null || _d === void 0 ? void 0 : _d.map((t) => t.type);
9545
9571
  if (typeArgs && typeArgs.length === 2) {
9546
9572
  if (forceStrictInference || index < maxEntriesToUseForInference) {
9547
9573
  keyTypes.push({ node: entryNode, type: typeArgs[0] });
@@ -12526,6 +12552,9 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
12526
12552
  else {
12527
12553
  annotatedType = getTypeOfParameterAnnotation(paramTypeNode, param.category);
12528
12554
  }
12555
+ if (annotatedType) {
12556
+ (0, typeUtils_1.addTypeVarsToListIfUnique)(typeParametersSeen, (0, typeUtils_1.getTypeVarArgumentsRecursive)(annotatedType), functionType.details.typeVarScopeId);
12557
+ }
12529
12558
  if ((0, types_1.isVariadicTypeVar)(annotatedType) && !annotatedType.isVariadicUnpacked) {
12530
12559
  addError(localize_1.LocMessage.unpackedTypeVarTupleExpected().format({
12531
12560
  name1: annotatedType.details.name,
@@ -12631,7 +12660,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
12631
12660
  };
12632
12661
  types_1.FunctionType.addParameter(functionType, functionParam);
12633
12662
  if (functionParam.hasDeclaredType) {
12634
- (0, typeUtils_1.addTypeVarsToListIfUnique)(typeParametersSeen, (0, typeUtils_1.getTypeVarArgumentsRecursive)(functionParam.type));
12663
+ (0, typeUtils_1.addTypeVarsToListIfUnique)(typeParametersSeen, (0, typeUtils_1.getTypeVarArgumentsRecursive)(functionParam.type), functionType.details.typeVarScopeId);
12635
12664
  }
12636
12665
  if (param.name) {
12637
12666
  const variadicParamType = transformVariadicParamType(node, param.category, functionParam.type);