@zzzen/pyright-internal 1.2.0-dev.20230430 → 1.2.0-dev.20230514

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 (231) hide show
  1. package/dist/analyzer/backgroundAnalysisProgram.d.ts +4 -1
  2. package/dist/analyzer/backgroundAnalysisProgram.js +12 -0
  3. package/dist/analyzer/backgroundAnalysisProgram.js.map +1 -1
  4. package/dist/analyzer/checker.d.ts +1 -0
  5. package/dist/analyzer/checker.js +89 -6
  6. package/dist/analyzer/checker.js.map +1 -1
  7. package/dist/analyzer/constraintSolver.js +14 -15
  8. package/dist/analyzer/constraintSolver.js.map +1 -1
  9. package/dist/analyzer/constructors.d.ts +6 -0
  10. package/dist/analyzer/constructors.js +513 -0
  11. package/dist/analyzer/constructors.js.map +1 -0
  12. package/dist/analyzer/dataClasses.js +86 -2
  13. package/dist/analyzer/dataClasses.js.map +1 -1
  14. package/dist/analyzer/docStringConversion.js +1 -1
  15. package/dist/analyzer/docStringConversion.js.map +1 -1
  16. package/dist/analyzer/enums.js +62 -8
  17. package/dist/analyzer/enums.js.map +1 -1
  18. package/dist/analyzer/importResolver.js +47 -29
  19. package/dist/analyzer/importResolver.js.map +1 -1
  20. package/dist/analyzer/importStatementUtils.d.ts +2 -2
  21. package/dist/analyzer/importStatementUtils.js.map +1 -1
  22. package/dist/analyzer/namedTuples.js +3 -6
  23. package/dist/analyzer/namedTuples.js.map +1 -1
  24. package/dist/analyzer/operations.d.ts +16 -0
  25. package/dist/analyzer/operations.js +749 -0
  26. package/dist/analyzer/operations.js.map +1 -0
  27. package/dist/analyzer/parseTreeUtils.d.ts +4 -2
  28. package/dist/analyzer/parseTreeUtils.js +32 -1
  29. package/dist/analyzer/parseTreeUtils.js.map +1 -1
  30. package/dist/analyzer/patternMatching.js +16 -0
  31. package/dist/analyzer/patternMatching.js.map +1 -1
  32. package/dist/analyzer/program.d.ts +11 -33
  33. package/dist/analyzer/program.js +73 -735
  34. package/dist/analyzer/program.js.map +1 -1
  35. package/dist/analyzer/protocols.js +1 -1
  36. package/dist/analyzer/protocols.js.map +1 -1
  37. package/dist/analyzer/service.d.ts +5 -21
  38. package/dist/analyzer/service.js +26 -33
  39. package/dist/analyzer/service.js.map +1 -1
  40. package/dist/analyzer/sourceFile.d.ts +9 -41
  41. package/dist/analyzer/sourceFile.js +219 -238
  42. package/dist/analyzer/sourceFile.js.map +1 -1
  43. package/dist/analyzer/sourceFileInfoUtils.d.ts +3 -9
  44. package/dist/analyzer/sourceFileInfoUtils.js.map +1 -1
  45. package/dist/analyzer/symbol.d.ts +3 -1
  46. package/dist/analyzer/symbol.js +5 -0
  47. package/dist/analyzer/symbol.js.map +1 -1
  48. package/dist/analyzer/typeEvaluator.js +460 -1425
  49. package/dist/analyzer/typeEvaluator.js.map +1 -1
  50. package/dist/analyzer/typeEvaluatorTypes.d.ts +42 -7
  51. package/dist/analyzer/typeEvaluatorTypes.js +33 -1
  52. package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
  53. package/dist/analyzer/typeGuards.js +2 -8
  54. package/dist/analyzer/typeGuards.js.map +1 -1
  55. package/dist/analyzer/typePrinter.d.ts +3 -3
  56. package/dist/analyzer/typePrinter.js +247 -100
  57. package/dist/analyzer/typePrinter.js.map +1 -1
  58. package/dist/analyzer/typeUtils.d.ts +14 -7
  59. package/dist/analyzer/typeUtils.js +204 -49
  60. package/dist/analyzer/typeUtils.js.map +1 -1
  61. package/dist/analyzer/typeVarContext.d.ts +6 -7
  62. package/dist/analyzer/typeVarContext.js +21 -32
  63. package/dist/analyzer/typeVarContext.js.map +1 -1
  64. package/dist/analyzer/typedDicts.js +2 -2
  65. package/dist/analyzer/typedDicts.js.map +1 -1
  66. package/dist/analyzer/types.d.ts +7 -4
  67. package/dist/analyzer/types.js +20 -10
  68. package/dist/analyzer/types.js.map +1 -1
  69. package/dist/backgroundAnalysisBase.d.ts +1 -1
  70. package/dist/backgroundAnalysisBase.js +16 -0
  71. package/dist/backgroundAnalysisBase.js.map +1 -1
  72. package/dist/commands/dumpFileDebugInfoCommand.js +0 -1
  73. package/dist/commands/dumpFileDebugInfoCommand.js.map +1 -1
  74. package/dist/common/extensibility.d.ts +28 -4
  75. package/dist/common/extensibility.js.map +1 -1
  76. package/dist/common/logTracker.d.ts +2 -0
  77. package/dist/common/logTracker.js +8 -1
  78. package/dist/common/logTracker.js.map +1 -1
  79. package/dist/common/lspUtils.d.ts +4 -1
  80. package/dist/common/lspUtils.js +38 -1
  81. package/dist/common/lspUtils.js.map +1 -1
  82. package/dist/common/pathUtils.d.ts +11 -11
  83. package/dist/common/pathUtils.js.map +1 -1
  84. package/dist/common/pythonVersion.d.ts +2 -1
  85. package/dist/common/pythonVersion.js +1 -0
  86. package/dist/common/pythonVersion.js.map +1 -1
  87. package/dist/common/workspaceEditUtils.d.ts +8 -8
  88. package/dist/common/workspaceEditUtils.js +10 -10
  89. package/dist/common/workspaceEditUtils.js.map +1 -1
  90. package/dist/languageServerBase.d.ts +3 -7
  91. package/dist/languageServerBase.js +41 -73
  92. package/dist/languageServerBase.js.map +1 -1
  93. package/dist/languageService/autoImporter.d.ts +50 -51
  94. package/dist/languageService/autoImporter.js +125 -210
  95. package/dist/languageService/autoImporter.js.map +1 -1
  96. package/dist/languageService/callHierarchyProvider.d.ts +1 -1
  97. package/dist/languageService/callHierarchyProvider.js +11 -37
  98. package/dist/languageService/callHierarchyProvider.js.map +1 -1
  99. package/dist/languageService/completionProvider.d.ts +39 -81
  100. package/dist/languageService/completionProvider.js +572 -801
  101. package/dist/languageService/completionProvider.js.map +1 -1
  102. package/dist/languageService/documentHighlightProvider.js +1 -1
  103. package/dist/languageService/documentHighlightProvider.js.map +1 -1
  104. package/dist/languageService/documentSymbolCollector.d.ts +6 -7
  105. package/dist/languageService/documentSymbolCollector.js +47 -28
  106. package/dist/languageService/documentSymbolCollector.js.map +1 -1
  107. package/dist/languageService/documentSymbolProvider.d.ts +13 -35
  108. package/dist/languageService/documentSymbolProvider.js +52 -264
  109. package/dist/languageService/documentSymbolProvider.js.map +1 -1
  110. package/dist/languageService/hoverProvider.d.ts +5 -6
  111. package/dist/languageService/hoverProvider.js +40 -132
  112. package/dist/languageService/hoverProvider.js.map +1 -1
  113. package/dist/languageService/referencesProvider.d.ts +6 -11
  114. package/dist/languageService/referencesProvider.js +23 -17
  115. package/dist/languageService/referencesProvider.js.map +1 -1
  116. package/dist/languageService/renameProvider.d.ts +16 -0
  117. package/dist/languageService/renameProvider.js +139 -0
  118. package/dist/languageService/renameProvider.js.map +1 -0
  119. package/dist/languageService/symbolIndexer.d.ts +31 -0
  120. package/dist/languageService/symbolIndexer.js +105 -0
  121. package/dist/languageService/symbolIndexer.js.map +1 -0
  122. package/dist/languageService/tooltipUtils.d.ts +8 -1
  123. package/dist/languageService/tooltipUtils.js +102 -1
  124. package/dist/languageService/tooltipUtils.js.map +1 -1
  125. package/dist/languageService/workspaceSymbolProvider.d.ts +17 -0
  126. package/dist/languageService/workspaceSymbolProvider.js +133 -0
  127. package/dist/languageService/workspaceSymbolProvider.js.map +1 -0
  128. package/dist/localization/localize.d.ts +33 -15
  129. package/dist/localization/localize.js +13 -7
  130. package/dist/localization/localize.js.map +1 -1
  131. package/dist/localization/package.nls.en-us.json +14 -7
  132. package/dist/parser/parser.js +3 -0
  133. package/dist/parser/parser.js.map +1 -1
  134. package/dist/pyright.js +26 -4
  135. package/dist/pyright.js.map +1 -1
  136. package/dist/tests/chainedSourceFiles.test.js +15 -20
  137. package/dist/tests/chainedSourceFiles.test.js.map +1 -1
  138. package/dist/tests/checker.test.js +14 -0
  139. package/dist/tests/checker.test.js.map +1 -1
  140. package/dist/tests/completions.test.js +11 -236
  141. package/dist/tests/completions.test.js.map +1 -1
  142. package/dist/tests/docStringConversion.test.js +36 -2
  143. package/dist/tests/docStringConversion.test.js.map +1 -1
  144. package/dist/tests/documentSymbolCollector.test.js +3 -3
  145. package/dist/tests/documentSymbolCollector.test.js.map +1 -1
  146. package/dist/tests/fourslash/completions.override2.fourslash.js +1 -16
  147. package/dist/tests/fourslash/completions.override2.fourslash.js.map +1 -1
  148. package/dist/tests/fourslash/fourslash.d.ts +4 -4
  149. package/dist/tests/fourslash/missingTypeStub.codeAction.fourslash.js +1 -1
  150. package/dist/tests/fourslash/missingTypeStub.codeAction.fourslash.js.map +1 -1
  151. package/dist/tests/harness/fourslash/testState.d.ts +17 -11
  152. package/dist/tests/harness/fourslash/testState.js +39 -50
  153. package/dist/tests/harness/fourslash/testState.js.map +1 -1
  154. package/dist/tests/importResolver.test.js +81 -1
  155. package/dist/tests/importResolver.test.js.map +1 -1
  156. package/dist/tests/sourceFile.test.js +1 -1
  157. package/dist/tests/sourceFile.test.js.map +1 -1
  158. package/dist/tests/testStateUtils.d.ts +2 -2
  159. package/dist/tests/testStateUtils.js +38 -8
  160. package/dist/tests/testStateUtils.js.map +1 -1
  161. package/dist/tests/typeEvaluator2.test.js +13 -1
  162. package/dist/tests/typeEvaluator2.test.js.map +1 -1
  163. package/dist/tests/typeEvaluator3.test.js +5 -1
  164. package/dist/tests/typeEvaluator3.test.js.map +1 -1
  165. package/dist/tests/typeEvaluator4.test.js +9 -1
  166. package/dist/tests/typeEvaluator4.test.js.map +1 -1
  167. package/dist/tests/typeEvaluator5.test.js +25 -9
  168. package/dist/tests/typeEvaluator5.test.js.map +1 -1
  169. package/dist/tests/workspaceEditUtils.test.js +95 -6
  170. package/dist/tests/workspaceEditUtils.test.js.map +1 -1
  171. package/package.json +4 -4
  172. package/dist/languageService/importAdder.d.ts +0 -40
  173. package/dist/languageService/importAdder.js +0 -388
  174. package/dist/languageService/importAdder.js.map +0 -1
  175. package/dist/languageService/indentationUtils.d.ts +0 -16
  176. package/dist/languageService/indentationUtils.js +0 -727
  177. package/dist/languageService/indentationUtils.js.map +0 -1
  178. package/dist/languageService/insertionPointUtils.d.ts +0 -9
  179. package/dist/languageService/insertionPointUtils.js +0 -132
  180. package/dist/languageService/insertionPointUtils.js.map +0 -1
  181. package/dist/languageService/renameModuleProvider.d.ts +0 -65
  182. package/dist/languageService/renameModuleProvider.js +0 -939
  183. package/dist/languageService/renameModuleProvider.js.map +0 -1
  184. package/dist/tests/fourslash/completions.commitChars.fourslash.d.ts +0 -1
  185. package/dist/tests/fourslash/completions.commitChars.fourslash.js +0 -81
  186. package/dist/tests/fourslash/completions.commitChars.fourslash.js.map +0 -1
  187. package/dist/tests/importAdder.test.d.ts +0 -1
  188. package/dist/tests/importAdder.test.js +0 -1325
  189. package/dist/tests/importAdder.test.js.map +0 -1
  190. package/dist/tests/indentationUtils.ptvs.test.d.ts +0 -1
  191. package/dist/tests/indentationUtils.ptvs.test.js +0 -324
  192. package/dist/tests/indentationUtils.ptvs.test.js.map +0 -1
  193. package/dist/tests/indentationUtils.reindent.test.d.ts +0 -1
  194. package/dist/tests/indentationUtils.reindent.test.js +0 -372
  195. package/dist/tests/indentationUtils.reindent.test.js.map +0 -1
  196. package/dist/tests/indentationUtils.test.d.ts +0 -1
  197. package/dist/tests/indentationUtils.test.js +0 -502
  198. package/dist/tests/indentationUtils.test.js.map +0 -1
  199. package/dist/tests/insertionPointUtils.test.d.ts +0 -1
  200. package/dist/tests/insertionPointUtils.test.js +0 -154
  201. package/dist/tests/insertionPointUtils.test.js.map +0 -1
  202. package/dist/tests/moveSymbol.importAdder.test.d.ts +0 -1
  203. package/dist/tests/moveSymbol.importAdder.test.js +0 -298
  204. package/dist/tests/moveSymbol.importAdder.test.js.map +0 -1
  205. package/dist/tests/moveSymbol.insertion.test.d.ts +0 -1
  206. package/dist/tests/moveSymbol.insertion.test.js +0 -537
  207. package/dist/tests/moveSymbol.insertion.test.js.map +0 -1
  208. package/dist/tests/moveSymbol.misc.test.d.ts +0 -1
  209. package/dist/tests/moveSymbol.misc.test.js +0 -169
  210. package/dist/tests/moveSymbol.misc.test.js.map +0 -1
  211. package/dist/tests/moveSymbol.updateReference.test.d.ts +0 -1
  212. package/dist/tests/moveSymbol.updateReference.test.js +0 -1071
  213. package/dist/tests/moveSymbol.updateReference.test.js.map +0 -1
  214. package/dist/tests/renameModule.folder.test.d.ts +0 -1
  215. package/dist/tests/renameModule.folder.test.js +0 -229
  216. package/dist/tests/renameModule.folder.test.js.map +0 -1
  217. package/dist/tests/renameModule.fromImports.test.d.ts +0 -1
  218. package/dist/tests/renameModule.fromImports.test.js +0 -790
  219. package/dist/tests/renameModule.fromImports.test.js.map +0 -1
  220. package/dist/tests/renameModule.imports.test.d.ts +0 -1
  221. package/dist/tests/renameModule.imports.test.js +0 -380
  222. package/dist/tests/renameModule.imports.test.js.map +0 -1
  223. package/dist/tests/renameModule.misc.test.d.ts +0 -1
  224. package/dist/tests/renameModule.misc.test.js +0 -615
  225. package/dist/tests/renameModule.misc.test.js.map +0 -1
  226. package/dist/tests/renameModule.relativePath.test.d.ts +0 -1
  227. package/dist/tests/renameModule.relativePath.test.js +0 -231
  228. package/dist/tests/renameModule.relativePath.test.js.map +0 -1
  229. package/dist/tests/renameModuleTestUtils.d.ts +0 -4
  230. package/dist/tests/renameModuleTestUtils.js +0 -76
  231. package/dist/tests/renameModuleTestUtils.js.map +0 -1
@@ -27,7 +27,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
27
27
  return result;
28
28
  };
29
29
  Object.defineProperty(exports, "__esModule", { value: true });
30
- exports.printFunctionParts = exports.printObjectTypeForClass = exports.printLiteralValue = exports.printType = exports.PrintTypeFlags = void 0;
30
+ exports.printLiteralValue = exports.printObjectTypeForClass = exports.printFunctionParts = exports.printType = exports.PrintTypeFlags = void 0;
31
31
  const parameterUtils_1 = require("./parameterUtils");
32
32
  const ParseTreeUtils = __importStar(require("./parseTreeUtils"));
33
33
  const types_1 = require("./types");
@@ -63,7 +63,90 @@ var PrintTypeFlags;
63
63
  // Expand TypedDict kwargs to show the keys from the TypedDict instead of **kwargs.
64
64
  PrintTypeFlags[PrintTypeFlags["ExpandTypedDictArgs"] = 1024] = "ExpandTypedDictArgs";
65
65
  })(PrintTypeFlags = exports.PrintTypeFlags || (exports.PrintTypeFlags = {}));
66
- function printType(type, printTypeFlags, returnTypeCallback, recursionTypes = [], recursionCount = 0) {
66
+ function printType(type, printTypeFlags, returnTypeCallback) {
67
+ const uniqueNameMap = new UniqueNameMap(printTypeFlags, returnTypeCallback);
68
+ uniqueNameMap.build(type);
69
+ return printTypeInternal(type, printTypeFlags, returnTypeCallback, uniqueNameMap, [], 0);
70
+ }
71
+ exports.printType = printType;
72
+ function printFunctionParts(type, printTypeFlags, returnTypeCallback) {
73
+ const uniqueNameMap = new UniqueNameMap(printTypeFlags, returnTypeCallback);
74
+ uniqueNameMap.build(type);
75
+ return printFunctionPartsInternal(type, printTypeFlags, returnTypeCallback, uniqueNameMap, [], 0);
76
+ }
77
+ exports.printFunctionParts = printFunctionParts;
78
+ function printObjectTypeForClass(type, printTypeFlags, returnTypeCallback) {
79
+ const uniqueNameMap = new UniqueNameMap(printTypeFlags, returnTypeCallback);
80
+ uniqueNameMap.build(type);
81
+ return printObjectTypeForClassInternal(type, printTypeFlags, returnTypeCallback, uniqueNameMap, [], 0);
82
+ }
83
+ exports.printObjectTypeForClass = printObjectTypeForClass;
84
+ function printLiteralValue(type, quotation = "'") {
85
+ const literalValue = type.literalValue;
86
+ if (literalValue === undefined) {
87
+ return '';
88
+ }
89
+ let literalStr;
90
+ if (typeof literalValue === 'string') {
91
+ let effectiveLiteralValue = literalValue;
92
+ // Limit the length of the string literal.
93
+ const maxLiteralStringLength = 50;
94
+ if (literalValue.length > maxLiteralStringLength) {
95
+ effectiveLiteralValue = literalValue.substring(0, maxLiteralStringLength) + '…';
96
+ }
97
+ if (type.details.name === 'bytes') {
98
+ let bytesString = '';
99
+ // There's no good built-in conversion routine in javascript to convert
100
+ // bytes strings. Determine on a character-by-character basis whether
101
+ // it can be rendered into an ASCII character. If not, use an escape.
102
+ for (let i = 0; i < effectiveLiteralValue.length; i++) {
103
+ const char = effectiveLiteralValue.substring(i, i + 1);
104
+ const charCode = char.charCodeAt(0);
105
+ if (charCode >= 20 && charCode <= 126) {
106
+ if (charCode === 34) {
107
+ bytesString += '\\' + char;
108
+ }
109
+ else {
110
+ bytesString += char;
111
+ }
112
+ }
113
+ else {
114
+ bytesString += `\\x${((charCode >> 4) & 0xf).toString(16)}${(charCode & 0xf).toString(16)}`;
115
+ }
116
+ }
117
+ literalStr = `b"${bytesString}"`;
118
+ }
119
+ else {
120
+ // JSON.stringify will perform proper escaping for " case.
121
+ // So, we only need to do our own escaping for ' case.
122
+ literalStr = JSON.stringify(effectiveLiteralValue).toString();
123
+ if (quotation !== '"') {
124
+ literalStr = `'${literalStr
125
+ .substring(1, literalStr.length - 1)
126
+ .replace(escapedDoubleQuoteRegEx, '"')
127
+ .replace(singleTickRegEx, "\\'")}'`;
128
+ }
129
+ }
130
+ }
131
+ else if (typeof literalValue === 'boolean') {
132
+ literalStr = literalValue ? 'True' : 'False';
133
+ }
134
+ else if (literalValue instanceof types_1.EnumLiteral) {
135
+ literalStr = `${literalValue.className}.${literalValue.itemName}`;
136
+ }
137
+ else if (typeof literalValue === 'bigint') {
138
+ literalStr = literalValue.toString();
139
+ if (literalStr.endsWith('n')) {
140
+ literalStr = literalStr.substring(0, literalStr.length - 1);
141
+ }
142
+ }
143
+ else {
144
+ literalStr = literalValue.toString();
145
+ }
146
+ return literalStr;
147
+ }
148
+ exports.printLiteralValue = printLiteralValue;
149
+ function printTypeInternal(type, printTypeFlags, returnTypeCallback, uniqueNameMap, recursionTypes, recursionCount) {
67
150
  const originalPrintTypeFlags = printTypeFlags;
68
151
  const parenthesizeUnion = (printTypeFlags & 16 /* ParenthesizeUnion */) !== 0;
69
152
  printTypeFlags &= ~(16 /* ParenthesizeUnion */ | 128 /* ParenthesizeCallable */);
@@ -90,6 +173,10 @@ function printType(type, printTypeFlags, returnTypeCallback, recursionTypes = []
90
173
  try {
91
174
  recursionTypes.push(type);
92
175
  let aliasName = type.typeAliasInfo.name;
176
+ // Use the fully-qualified name if the name isn't unique.
177
+ if (!uniqueNameMap.isUnique(aliasName)) {
178
+ aliasName = type.typeAliasInfo.fullName;
179
+ }
93
180
  const typeParams = type.typeAliasInfo.typeParameters;
94
181
  if (typeParams) {
95
182
  let argumentStrings;
@@ -107,11 +194,11 @@ function printType(type, printTypeFlags, returnTypeCallback, recursionTypes = []
107
194
  (0, typeUtils_1.isTupleClass)(typeArg) &&
108
195
  typeArg.tupleTypeArguments) {
109
196
  typeArg.tupleTypeArguments.forEach((tupleTypeArg) => {
110
- argumentStrings.push(printType(tupleTypeArg.type, printTypeFlags, returnTypeCallback, recursionTypes, recursionCount));
197
+ argumentStrings.push(printTypeInternal(tupleTypeArg.type, printTypeFlags, returnTypeCallback, uniqueNameMap, recursionTypes, recursionCount));
111
198
  });
112
199
  }
113
200
  else {
114
- argumentStrings.push(printType(typeArg, printTypeFlags, returnTypeCallback, recursionTypes, recursionCount));
201
+ argumentStrings.push(printTypeInternal(typeArg, printTypeFlags, returnTypeCallback, uniqueNameMap, recursionTypes, recursionCount));
115
202
  }
116
203
  });
117
204
  }
@@ -121,7 +208,7 @@ function printType(type, printTypeFlags, returnTypeCallback, recursionTypes = []
121
208
  typeParams.some((typeParam) => !(0, types_1.isUnknown)(typeParam))) {
122
209
  argumentStrings = [];
123
210
  typeParams.forEach((typeParam) => {
124
- argumentStrings.push(printType(typeParam, printTypeFlags, returnTypeCallback, recursionTypes, recursionCount));
211
+ argumentStrings.push(printTypeInternal(typeParam, printTypeFlags, returnTypeCallback, uniqueNameMap, recursionTypes, recursionCount));
125
212
  });
126
213
  }
127
214
  }
@@ -158,11 +245,15 @@ function printType(type, printTypeFlags, returnTypeCallback, recursionTypes = []
158
245
  }
159
246
  if (type.typeAliasInfo) {
160
247
  if (!type.typeAliasInfo.typeParameters) {
161
- return type.typeAliasInfo.name;
248
+ let name = type.typeAliasInfo.name;
249
+ if (!uniqueNameMap.isUnique(name)) {
250
+ name = type.typeAliasInfo.fullName;
251
+ }
252
+ return name;
162
253
  }
163
254
  try {
164
255
  recursionTypes.push(type);
165
- return printType(type, printTypeFlags & ~32 /* ExpandTypeAlias */, returnTypeCallback, recursionTypes, recursionCount);
256
+ return printTypeInternal(type, printTypeFlags & ~32 /* ExpandTypeAlias */, returnTypeCallback, uniqueNameMap, recursionTypes, recursionCount);
166
257
  }
167
258
  finally {
168
259
  recursionTypes.pop();
@@ -200,7 +291,7 @@ function printType(type, printTypeFlags, returnTypeCallback, recursionTypes = []
200
291
  if (type.literalValue !== undefined) {
201
292
  return `Literal[${printLiteralValue(type)}]`;
202
293
  }
203
- return `${printObjectTypeForClass(type, printTypeFlags, returnTypeCallback, recursionTypes)}${getConditionalIndicator(type)}`;
294
+ return `${printObjectTypeForClassInternal(type, printTypeFlags, returnTypeCallback, uniqueNameMap, recursionTypes, recursionCount)}${getConditionalIndicator(type)}`;
204
295
  }
205
296
  else {
206
297
  let typeToWrap;
@@ -208,21 +299,21 @@ function printType(type, printTypeFlags, returnTypeCallback, recursionTypes = []
208
299
  typeToWrap = `Literal[${printLiteralValue(type)}]`;
209
300
  }
210
301
  else {
211
- typeToWrap = `${printObjectTypeForClass(type, printTypeFlags, returnTypeCallback, recursionTypes)}`;
302
+ typeToWrap = `${printObjectTypeForClassInternal(type, printTypeFlags, returnTypeCallback, uniqueNameMap, recursionTypes, recursionCount)}`;
212
303
  }
213
304
  return `${_printNestedInstantiable(type, typeToWrap)}${getConditionalIndicator(type)}`;
214
305
  }
215
306
  }
216
307
  case 5 /* Function */: {
217
308
  if (types_1.TypeBase.isInstantiable(type)) {
218
- const typeString = printFunctionType(types_1.TypeBase.cloneTypeAsInstance(type), printTypeFlags, returnTypeCallback, recursionTypes, recursionCount);
309
+ const typeString = printFunctionType(types_1.TypeBase.cloneTypeAsInstance(type), printTypeFlags, returnTypeCallback, uniqueNameMap, recursionTypes, recursionCount);
219
310
  return `Type[${typeString}]`;
220
311
  }
221
- return printFunctionType(type, originalPrintTypeFlags, returnTypeCallback, recursionTypes, recursionCount);
312
+ return printFunctionType(type, originalPrintTypeFlags, returnTypeCallback, uniqueNameMap, recursionTypes, recursionCount);
222
313
  }
223
314
  case 6 /* OverloadedFunction */: {
224
315
  const overloadedType = type;
225
- const overloads = overloadedType.overloads.map((overload) => printType(overload, printTypeFlags, returnTypeCallback, recursionTypes, recursionCount));
316
+ const overloads = overloadedType.overloads.map((overload) => printTypeInternal(overload, printTypeFlags, returnTypeCallback, uniqueNameMap, recursionTypes, recursionCount));
226
317
  if (printTypeFlags & 256 /* PythonSyntax */) {
227
318
  return 'Callable[..., Any]';
228
319
  }
@@ -266,7 +357,7 @@ function printType(type, printTypeFlags, returnTypeCallback, recursionTypes = []
266
357
  }
267
358
  }
268
359
  if (matchedAllSubtypes && !allSubtypesPreviouslyHandled) {
269
- subtypeStrings.add(printType(typeAliasSource, updatedPrintTypeFlags, returnTypeCallback, recursionTypes, recursionCount));
360
+ subtypeStrings.add(printTypeInternal(typeAliasSource, updatedPrintTypeFlags, returnTypeCallback, uniqueNameMap, recursionTypes, recursionCount));
270
361
  indicesCoveredByTypeAlias.forEach((index) => subtypeHandledSet.add(index));
271
362
  }
272
363
  }
@@ -277,7 +368,7 @@ function printType(type, printTypeFlags, returnTypeCallback, recursionTypes = []
277
368
  if ((0, types_1.isNever)(typeWithoutNone)) {
278
369
  return 'None';
279
370
  }
280
- const optionalType = printType(typeWithoutNone, updatedPrintTypeFlags, returnTypeCallback, recursionTypes, recursionCount);
371
+ const optionalType = printTypeInternal(typeWithoutNone, updatedPrintTypeFlags, returnTypeCallback, uniqueNameMap, recursionTypes, recursionCount);
281
372
  if (printTypeFlags & 8 /* PEP604 */) {
282
373
  const unionString = optionalType + ' | None';
283
374
  if (parenthesizeUnion) {
@@ -298,7 +389,7 @@ function printType(type, printTypeFlags, returnTypeCallback, recursionTypes = []
298
389
  literalClassStrings.add(printLiteralValue(subtype));
299
390
  }
300
391
  else {
301
- subtypeStrings.add(printType(subtype, updatedPrintTypeFlags, returnTypeCallback, recursionTypes, recursionCount));
392
+ subtypeStrings.add(printTypeInternal(subtype, updatedPrintTypeFlags, returnTypeCallback, uniqueNameMap, recursionTypes, recursionCount));
302
393
  }
303
394
  }
304
395
  });
@@ -336,9 +427,9 @@ function printType(type, printTypeFlags, returnTypeCallback, recursionTypes = []
336
427
  // aliases, return the type alias name.
337
428
  if (type.details.recursiveTypeAliasName) {
338
429
  if ((printTypeFlags & 32 /* ExpandTypeAlias */) !== 0 && type.details.boundType) {
339
- return printType(types_1.TypeBase.isInstance(type)
430
+ return printTypeInternal(types_1.TypeBase.isInstance(type)
340
431
  ? (0, typeUtils_1.convertToInstance)(type.details.boundType)
341
- : type.details.boundType, printTypeFlags, returnTypeCallback, recursionTypes, recursionCount);
432
+ : type.details.boundType, printTypeFlags, returnTypeCallback, uniqueNameMap, recursionTypes, recursionCount);
342
433
  }
343
434
  return type.details.recursiveTypeAliasName;
344
435
  }
@@ -346,7 +437,7 @@ function printType(type, printTypeFlags, returnTypeCallback, recursionTypes = []
346
437
  // print the type with a special character that indicates that the type
347
438
  // is internally represented as a TypeVar.
348
439
  if (type.details.isSynthesizedSelf && type.details.boundType) {
349
- let boundTypeString = printType(type.details.boundType, printTypeFlags & ~32 /* ExpandTypeAlias */, returnTypeCallback, recursionTypes, recursionCount);
440
+ let boundTypeString = printTypeInternal(type.details.boundType, printTypeFlags & ~32 /* ExpandTypeAlias */, returnTypeCallback, uniqueNameMap, recursionTypes, recursionCount);
350
441
  if (!(0, types_1.isAnyOrUnknown)(type.details.boundType)) {
351
442
  if (printTypeFlags & 256 /* PythonSyntax */) {
352
443
  boundTypeString = `Self`;
@@ -399,8 +490,7 @@ function printType(type, printTypeFlags, returnTypeCallback, recursionTypes = []
399
490
  recursionTypes.pop();
400
491
  }
401
492
  }
402
- exports.printType = printType;
403
- function printFunctionType(type, printTypeFlags, returnTypeCallback, recursionTypes = [], recursionCount = 0) {
493
+ function printFunctionType(type, printTypeFlags, returnTypeCallback, uniqueNameMap, recursionTypes, recursionCount) {
404
494
  if (printTypeFlags & 256 /* PythonSyntax */) {
405
495
  // Callable works only in cases where all parameters are positional-only.
406
496
  let isPositionalParamsOnly = false;
@@ -418,7 +508,7 @@ function printFunctionType(type, printTypeFlags, returnTypeCallback, recursionTy
418
508
  const returnType = returnTypeCallback(type);
419
509
  let returnTypeString = 'Any';
420
510
  if (returnType) {
421
- returnTypeString = printType(returnType, printTypeFlags, returnTypeCallback, recursionTypes, recursionCount);
511
+ returnTypeString = printTypeInternal(returnType, printTypeFlags, returnTypeCallback, uniqueNameMap, recursionTypes, recursionCount);
422
512
  }
423
513
  if (isPositionalParamsOnly) {
424
514
  const paramTypes = [];
@@ -426,7 +516,7 @@ function printFunctionType(type, printTypeFlags, returnTypeCallback, recursionTy
426
516
  if (param.name) {
427
517
  const paramType = types_1.FunctionType.getEffectiveParameterType(type, index);
428
518
  if (recursionTypes.length < types_1.maxTypeRecursionCount) {
429
- paramTypes.push(printType(paramType, printTypeFlags, returnTypeCallback, recursionTypes, recursionCount));
519
+ paramTypes.push(printTypeInternal(paramType, printTypeFlags, returnTypeCallback, uniqueNameMap, recursionTypes, recursionCount));
430
520
  }
431
521
  else {
432
522
  paramTypes.push('Any');
@@ -448,7 +538,7 @@ function printFunctionType(type, printTypeFlags, returnTypeCallback, recursionTy
448
538
  }
449
539
  }
450
540
  else {
451
- const parts = printFunctionParts(type, printTypeFlags, returnTypeCallback, recursionTypes);
541
+ const parts = printFunctionPartsInternal(type, printTypeFlags, returnTypeCallback, uniqueNameMap, recursionTypes, recursionCount);
452
542
  const paramSignature = `(${parts[0].join(', ')})`;
453
543
  if (types_1.FunctionType.isParamSpecValue(type)) {
454
544
  return paramSignature;
@@ -461,74 +551,13 @@ function printFunctionType(type, printTypeFlags, returnTypeCallback, recursionTy
461
551
  return fullSignature;
462
552
  }
463
553
  }
464
- function printLiteralValue(type, quotation = "'") {
465
- const literalValue = type.literalValue;
466
- if (literalValue === undefined) {
467
- return '';
468
- }
469
- let literalStr;
470
- if (typeof literalValue === 'string') {
471
- let effectiveLiteralValue = literalValue;
472
- // Limit the length of the string literal.
473
- const maxLiteralStringLength = 50;
474
- if (literalValue.length > maxLiteralStringLength) {
475
- effectiveLiteralValue = literalValue.substring(0, maxLiteralStringLength) + '…';
476
- }
477
- if (type.details.name === 'bytes') {
478
- let bytesString = '';
479
- // There's no good built-in conversion routine in javascript to convert
480
- // bytes strings. Determine on a character-by-character basis whether
481
- // it can be rendered into an ASCII character. If not, use an escape.
482
- for (let i = 0; i < effectiveLiteralValue.length; i++) {
483
- const char = effectiveLiteralValue.substring(i, i + 1);
484
- const charCode = char.charCodeAt(0);
485
- if (charCode >= 20 && charCode <= 126) {
486
- if (charCode === 34) {
487
- bytesString += '\\' + char;
488
- }
489
- else {
490
- bytesString += char;
491
- }
492
- }
493
- else {
494
- bytesString += `\\x${((charCode >> 4) & 0xf).toString(16)}${(charCode & 0xf).toString(16)}`;
495
- }
496
- }
497
- literalStr = `b"${bytesString}"`;
498
- }
499
- else {
500
- // JSON.stringify will perform proper escaping for " case.
501
- // So, we only need to do our own escaping for ' case.
502
- literalStr = JSON.stringify(effectiveLiteralValue).toString();
503
- if (quotation !== '"') {
504
- literalStr = `'${literalStr
505
- .substring(1, literalStr.length - 1)
506
- .replace(escapedDoubleQuoteRegEx, '"')
507
- .replace(singleTickRegEx, "\\'")}'`;
508
- }
509
- }
510
- }
511
- else if (typeof literalValue === 'boolean') {
512
- literalStr = literalValue ? 'True' : 'False';
513
- }
514
- else if (literalValue instanceof types_1.EnumLiteral) {
515
- literalStr = `${literalValue.className}.${literalValue.itemName}`;
516
- }
517
- else if (typeof literalValue === 'bigint') {
518
- literalStr = literalValue.toString();
519
- if (literalStr.endsWith('n')) {
520
- literalStr = literalStr.substring(0, literalStr.length - 1);
521
- }
522
- }
523
- else {
524
- literalStr = literalValue.toString();
525
- }
526
- return literalStr;
527
- }
528
- exports.printLiteralValue = printLiteralValue;
529
- function printObjectTypeForClass(type, printTypeFlags, returnTypeCallback, recursionTypes = [], recursionCount = 0) {
554
+ function printObjectTypeForClassInternal(type, printTypeFlags, returnTypeCallback, uniqueNameMap, recursionTypes, recursionCount) {
530
555
  var _a, _b;
531
556
  let objName = type.aliasName || type.details.name;
557
+ // Use the fully-qualified name if the name isn't unique.
558
+ if (!uniqueNameMap.isUnique(objName)) {
559
+ objName = type.details.fullName;
560
+ }
532
561
  // If this is a pseudo-generic class, don't display the type arguments
533
562
  // or type parameters because it will confuse users.
534
563
  if (!types_1.ClassType.isPseudoGenericClass(type)) {
@@ -565,7 +594,7 @@ function printObjectTypeForClass(type, printTypeFlags, returnTypeCallback, recur
565
594
  if (!(0, types_1.isUnknown)(typeArg.type)) {
566
595
  isAllUnknown = false;
567
596
  }
568
- const typeArgText = printType(typeArg.type, printTypeFlags, returnTypeCallback, recursionTypes, recursionCount);
597
+ const typeArgText = printTypeInternal(typeArg.type, printTypeFlags, returnTypeCallback, uniqueNameMap, recursionTypes, recursionCount);
569
598
  if (typeArg.isUnbounded) {
570
599
  return _printUnpack(`tuple[${typeArgText}, ...]`, printTypeFlags);
571
600
  }
@@ -577,7 +606,7 @@ function printObjectTypeForClass(type, printTypeFlags, returnTypeCallback, recur
577
606
  if (!(0, types_1.isUnknown)(typeArg.type)) {
578
607
  isAllUnknown = false;
579
608
  }
580
- const typeArgTypeText = printType(typeArg.type, printTypeFlags, returnTypeCallback, recursionTypes, recursionCount);
609
+ const typeArgTypeText = printTypeInternal(typeArg.type, printTypeFlags, returnTypeCallback, uniqueNameMap, recursionTypes, recursionCount);
581
610
  if (typeArg.isUnbounded) {
582
611
  if (typeArgs.length === 1) {
583
612
  typeArgStrings.push(typeArgTypeText, '...');
@@ -618,7 +647,7 @@ function printObjectTypeForClass(type, printTypeFlags, returnTypeCallback, recur
618
647
  '[' +
619
648
  typeParams
620
649
  .map((typeParam) => {
621
- return printType(typeParam, printTypeFlags, returnTypeCallback, recursionTypes, recursionCount);
650
+ return printTypeInternal(typeParam, printTypeFlags, returnTypeCallback, uniqueNameMap, recursionTypes, recursionCount);
622
651
  })
623
652
  .join(', ') +
624
653
  ']';
@@ -628,8 +657,7 @@ function printObjectTypeForClass(type, printTypeFlags, returnTypeCallback, recur
628
657
  }
629
658
  return objName;
630
659
  }
631
- exports.printObjectTypeForClass = printObjectTypeForClass;
632
- function printFunctionParts(type, printTypeFlags, returnTypeCallback, recursionTypes = [], recursionCount = 0) {
660
+ function printFunctionPartsInternal(type, printTypeFlags, returnTypeCallback, uniqueNameMap, recursionTypes, recursionCount) {
633
661
  const paramTypeStrings = [];
634
662
  let sawDefinedName = false;
635
663
  type.details.parameters.forEach((param, index) => {
@@ -642,7 +670,7 @@ function printFunctionParts(type, printTypeFlags, returnTypeCallback, recursionT
642
670
  types_1.ClassType.isBuiltIn(specializedParamType, 'tuple') &&
643
671
  specializedParamType.tupleTypeArguments) {
644
672
  specializedParamType.tupleTypeArguments.forEach((paramType) => {
645
- const paramString = printType(paramType.type, printTypeFlags, returnTypeCallback, recursionTypes, recursionCount);
673
+ const paramString = printTypeInternal(paramType.type, printTypeFlags, returnTypeCallback, uniqueNameMap, recursionTypes, recursionCount);
646
674
  paramTypeStrings.push(paramString);
647
675
  });
648
676
  return;
@@ -653,7 +681,7 @@ function printFunctionParts(type, printTypeFlags, returnTypeCallback, recursionT
653
681
  printTypeFlags & 1024 /* ExpandTypedDictArgs */ &&
654
682
  param.type.category === 7 /* Class */) {
655
683
  param.type.details.typedDictEntries.forEach((v, k) => {
656
- const valueTypeString = printType(v.valueType, printTypeFlags, returnTypeCallback, recursionTypes, recursionCount);
684
+ const valueTypeString = printTypeInternal(v.valueType, printTypeFlags, returnTypeCallback, uniqueNameMap, recursionTypes, recursionCount);
657
685
  paramTypeStrings.push(`${k}: ${valueTypeString}`);
658
686
  });
659
687
  return;
@@ -685,7 +713,7 @@ function printFunctionParts(type, printTypeFlags, returnTypeCallback, recursionT
685
713
  if (param.hasDeclaredType || param.isTypeInferred) {
686
714
  const paramType = types_1.FunctionType.getEffectiveParameterType(type, index);
687
715
  let paramTypeString = recursionTypes.length < types_1.maxTypeRecursionCount
688
- ? printType(paramType, printTypeFlags, returnTypeCallback, recursionTypes, recursionCount)
716
+ ? printTypeInternal(paramType, printTypeFlags, returnTypeCallback, uniqueNameMap, recursionTypes, recursionCount)
689
717
  : '';
690
718
  if (emittedParamName) {
691
719
  paramString += ': ';
@@ -763,16 +791,15 @@ function printFunctionParts(type, printTypeFlags, returnTypeCallback, recursionT
763
791
  paramTypeStrings.push(`**kwargs: ${type.details.paramSpec}.kwargs`);
764
792
  }
765
793
  else {
766
- paramTypeStrings.push(`**${printType(type.details.paramSpec, printTypeFlags, returnTypeCallback, recursionTypes, recursionCount)}`);
794
+ paramTypeStrings.push(`**${printTypeInternal(type.details.paramSpec, printTypeFlags, returnTypeCallback, uniqueNameMap, recursionTypes, recursionCount)}`);
767
795
  }
768
796
  }
769
797
  const returnType = returnTypeCallback(type);
770
798
  const returnTypeString = recursionTypes.length < types_1.maxTypeRecursionCount
771
- ? printType(returnType, printTypeFlags | 16 /* ParenthesizeUnion */ | 128 /* ParenthesizeCallable */, returnTypeCallback, recursionTypes, recursionCount)
799
+ ? printTypeInternal(returnType, printTypeFlags | 16 /* ParenthesizeUnion */ | 128 /* ParenthesizeCallable */, returnTypeCallback, uniqueNameMap, recursionTypes, recursionCount)
772
800
  : '';
773
801
  return [paramTypeStrings, returnTypeString];
774
802
  }
775
- exports.printFunctionParts = printFunctionParts;
776
803
  function _printUnpack(textToWrap, flags) {
777
804
  return flags & 512 /* UseTypingUnpack */ ? `Unpack[${textToWrap}]` : `*${textToWrap}`;
778
805
  }
@@ -792,4 +819,124 @@ function _getReadableTypeVarName(type, usePythonSyntax) {
792
819
  }
793
820
  return types_1.TypeVarType.getReadableName(type);
794
821
  }
822
+ // Represents a map of named types (classes and type aliases) that appear within
823
+ // a specified type to determine whether any of the names require disambiguation
824
+ // (i.e. their fully-qualified name is required).
825
+ class UniqueNameMap {
826
+ constructor(_printTypeFlags, _returnTypeCallback) {
827
+ this._printTypeFlags = _printTypeFlags;
828
+ this._returnTypeCallback = _returnTypeCallback;
829
+ this._map = new Map();
830
+ }
831
+ build(type, recursionTypes = [], recursionCount = 0) {
832
+ var _a;
833
+ if (recursionCount > types_1.maxTypeRecursionCount) {
834
+ return;
835
+ }
836
+ recursionCount++;
837
+ if (type.typeAliasInfo) {
838
+ let expandTypeAlias = true;
839
+ if ((this._printTypeFlags & 32 /* ExpandTypeAlias */) === 0) {
840
+ expandTypeAlias = false;
841
+ }
842
+ else {
843
+ if (recursionTypes.find((t) => t === type)) {
844
+ expandTypeAlias = false;
845
+ }
846
+ }
847
+ if (!expandTypeAlias) {
848
+ this._addIfUnique(type.typeAliasInfo.name, type, /* useTypeAliasName */ true);
849
+ // Recursively add the type arguments if present.
850
+ if (type.typeAliasInfo.typeArguments) {
851
+ recursionTypes.push(type);
852
+ try {
853
+ type.typeAliasInfo.typeArguments.forEach((typeArg) => {
854
+ this.build(typeArg, recursionTypes, recursionCount);
855
+ });
856
+ }
857
+ finally {
858
+ recursionTypes.pop();
859
+ }
860
+ }
861
+ return;
862
+ }
863
+ }
864
+ try {
865
+ recursionTypes.push(type);
866
+ switch (type.category) {
867
+ case 5 /* Function */: {
868
+ type.details.parameters.forEach((_, index) => {
869
+ const paramType = types_1.FunctionType.getEffectiveParameterType(type, index);
870
+ this.build(paramType, recursionTypes, recursionCount);
871
+ });
872
+ const returnType = this._returnTypeCallback(type);
873
+ this.build(returnType, recursionTypes, recursionCount);
874
+ break;
875
+ }
876
+ case 6 /* OverloadedFunction */: {
877
+ type.overloads.forEach((overload) => {
878
+ this.build(overload, recursionTypes, recursionCount);
879
+ });
880
+ break;
881
+ }
882
+ case 7 /* Class */: {
883
+ if (type.literalValue !== undefined) {
884
+ break;
885
+ }
886
+ this._addIfUnique(type.aliasName || type.details.name, type);
887
+ if (!types_1.ClassType.isPseudoGenericClass(type)) {
888
+ if (type.tupleTypeArguments) {
889
+ type.tupleTypeArguments.forEach((typeArg) => {
890
+ this.build(typeArg.type, recursionTypes, recursionCount);
891
+ });
892
+ }
893
+ else if (type.typeArguments) {
894
+ type.typeArguments.forEach((typeArg) => {
895
+ this.build(typeArg, recursionTypes, recursionCount);
896
+ });
897
+ }
898
+ }
899
+ break;
900
+ }
901
+ case 9 /* Union */: {
902
+ (0, typeUtils_1.doForEachSubtype)(type, (subtype) => {
903
+ this.build(subtype, recursionTypes, recursionCount);
904
+ });
905
+ (_a = type.typeAliasSources) === null || _a === void 0 ? void 0 : _a.forEach((typeAliasSource) => {
906
+ this.build(typeAliasSource, recursionTypes, recursionCount);
907
+ });
908
+ break;
909
+ }
910
+ }
911
+ }
912
+ finally {
913
+ recursionTypes.pop();
914
+ }
915
+ }
916
+ isUnique(name) {
917
+ const entry = this._map.get(name);
918
+ return !entry || entry.length === 1;
919
+ }
920
+ _addIfUnique(name, type, useTypeAliasName = false) {
921
+ const existingEntry = this._map.get(name);
922
+ if (!existingEntry) {
923
+ this._map.set(name, [type]);
924
+ }
925
+ else {
926
+ if (!existingEntry.some((t) => this._isSameTypeName(t, type, useTypeAliasName))) {
927
+ existingEntry.push(type);
928
+ }
929
+ }
930
+ }
931
+ _isSameTypeName(type1, type2, useTypeAliasName) {
932
+ var _a, _b;
933
+ if (useTypeAliasName) {
934
+ return ((_a = type1.typeAliasInfo) === null || _a === void 0 ? void 0 : _a.fullName) === ((_b = type2.typeAliasInfo) === null || _b === void 0 ? void 0 : _b.fullName);
935
+ }
936
+ if ((0, types_1.isClass)(type1) && (0, types_1.isClass)(type2)) {
937
+ return types_1.ClassType.isSameGenericClass(type1, type2);
938
+ }
939
+ return false;
940
+ }
941
+ }
795
942
  //# sourceMappingURL=typePrinter.js.map