@zzzen/pyright-internal 1.2.0-dev.20230507 → 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 (142) hide show
  1. package/dist/analyzer/backgroundAnalysisProgram.d.ts +1 -1
  2. package/dist/analyzer/checker.js +37 -2
  3. package/dist/analyzer/checker.js.map +1 -1
  4. package/dist/analyzer/constraintSolver.js +14 -15
  5. package/dist/analyzer/constraintSolver.js.map +1 -1
  6. package/dist/analyzer/constructors.js +246 -189
  7. package/dist/analyzer/constructors.js.map +1 -1
  8. package/dist/analyzer/dataClasses.js +2 -2
  9. package/dist/analyzer/dataClasses.js.map +1 -1
  10. package/dist/analyzer/docStringConversion.js +1 -1
  11. package/dist/analyzer/docStringConversion.js.map +1 -1
  12. package/dist/analyzer/enums.js +8 -0
  13. package/dist/analyzer/enums.js.map +1 -1
  14. package/dist/analyzer/importResolver.js +47 -29
  15. package/dist/analyzer/importResolver.js.map +1 -1
  16. package/dist/analyzer/namedTuples.js +2 -5
  17. package/dist/analyzer/namedTuples.js.map +1 -1
  18. package/dist/analyzer/program.d.ts +7 -17
  19. package/dist/analyzer/program.js +32 -247
  20. package/dist/analyzer/program.js.map +1 -1
  21. package/dist/analyzer/protocols.js +1 -1
  22. package/dist/analyzer/protocols.js.map +1 -1
  23. package/dist/analyzer/service.d.ts +4 -12
  24. package/dist/analyzer/service.js +12 -23
  25. package/dist/analyzer/service.js.map +1 -1
  26. package/dist/analyzer/sourceFile.d.ts +2 -11
  27. package/dist/analyzer/sourceFile.js +11 -74
  28. package/dist/analyzer/sourceFile.js.map +1 -1
  29. package/dist/analyzer/symbol.d.ts +3 -1
  30. package/dist/analyzer/symbol.js +5 -0
  31. package/dist/analyzer/symbol.js.map +1 -1
  32. package/dist/analyzer/typeEvaluator.js +362 -142
  33. package/dist/analyzer/typeEvaluator.js.map +1 -1
  34. package/dist/analyzer/typeEvaluatorTypes.d.ts +4 -0
  35. package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
  36. package/dist/analyzer/typePrinter.d.ts +3 -3
  37. package/dist/analyzer/typePrinter.js +247 -100
  38. package/dist/analyzer/typePrinter.js.map +1 -1
  39. package/dist/analyzer/typeUtils.d.ts +12 -7
  40. package/dist/analyzer/typeUtils.js +173 -48
  41. package/dist/analyzer/typeUtils.js.map +1 -1
  42. package/dist/analyzer/typeVarContext.d.ts +1 -2
  43. package/dist/analyzer/typeVarContext.js +14 -32
  44. package/dist/analyzer/typeVarContext.js.map +1 -1
  45. package/dist/analyzer/types.d.ts +3 -2
  46. package/dist/analyzer/types.js +13 -10
  47. package/dist/analyzer/types.js.map +1 -1
  48. package/dist/backgroundAnalysisBase.d.ts +1 -1
  49. package/dist/backgroundAnalysisBase.js +16 -0
  50. package/dist/backgroundAnalysisBase.js.map +1 -1
  51. package/dist/commands/dumpFileDebugInfoCommand.js +0 -1
  52. package/dist/commands/dumpFileDebugInfoCommand.js.map +1 -1
  53. package/dist/common/extensibility.d.ts +26 -3
  54. package/dist/common/extensibility.js.map +1 -1
  55. package/dist/common/logTracker.d.ts +2 -0
  56. package/dist/common/logTracker.js +8 -1
  57. package/dist/common/logTracker.js.map +1 -1
  58. package/dist/common/lspUtils.d.ts +4 -1
  59. package/dist/common/lspUtils.js +38 -1
  60. package/dist/common/lspUtils.js.map +1 -1
  61. package/dist/common/pythonVersion.d.ts +2 -1
  62. package/dist/common/pythonVersion.js +1 -0
  63. package/dist/common/pythonVersion.js.map +1 -1
  64. package/dist/common/workspaceEditUtils.d.ts +3 -3
  65. package/dist/common/workspaceEditUtils.js +10 -10
  66. package/dist/common/workspaceEditUtils.js.map +1 -1
  67. package/dist/languageServerBase.d.ts +2 -5
  68. package/dist/languageServerBase.js +33 -60
  69. package/dist/languageServerBase.js.map +1 -1
  70. package/dist/languageService/autoImporter.d.ts +50 -51
  71. package/dist/languageService/autoImporter.js +125 -210
  72. package/dist/languageService/autoImporter.js.map +1 -1
  73. package/dist/languageService/callHierarchyProvider.js +6 -32
  74. package/dist/languageService/callHierarchyProvider.js.map +1 -1
  75. package/dist/languageService/completionProvider.d.ts +40 -79
  76. package/dist/languageService/completionProvider.js +571 -811
  77. package/dist/languageService/completionProvider.js.map +1 -1
  78. package/dist/languageService/documentSymbolCollector.d.ts +2 -2
  79. package/dist/languageService/documentSymbolCollector.js +33 -23
  80. package/dist/languageService/documentSymbolCollector.js.map +1 -1
  81. package/dist/languageService/documentSymbolProvider.d.ts +13 -35
  82. package/dist/languageService/documentSymbolProvider.js +52 -264
  83. package/dist/languageService/documentSymbolProvider.js.map +1 -1
  84. package/dist/languageService/hoverProvider.d.ts +1 -3
  85. package/dist/languageService/hoverProvider.js +11 -97
  86. package/dist/languageService/hoverProvider.js.map +1 -1
  87. package/dist/languageService/referencesProvider.d.ts +3 -3
  88. package/dist/languageService/referencesProvider.js +5 -7
  89. package/dist/languageService/referencesProvider.js.map +1 -1
  90. package/dist/languageService/renameProvider.d.ts +0 -1
  91. package/dist/languageService/renameProvider.js +2 -6
  92. package/dist/languageService/renameProvider.js.map +1 -1
  93. package/dist/languageService/symbolIndexer.d.ts +31 -0
  94. package/dist/languageService/symbolIndexer.js +105 -0
  95. package/dist/languageService/symbolIndexer.js.map +1 -0
  96. package/dist/languageService/tooltipUtils.d.ts +8 -1
  97. package/dist/languageService/tooltipUtils.js +102 -1
  98. package/dist/languageService/tooltipUtils.js.map +1 -1
  99. package/dist/languageService/workspaceSymbolProvider.d.ts +17 -0
  100. package/dist/languageService/workspaceSymbolProvider.js +133 -0
  101. package/dist/languageService/workspaceSymbolProvider.js.map +1 -0
  102. package/dist/localization/localize.d.ts +16 -1
  103. package/dist/localization/localize.js +9 -1
  104. package/dist/localization/localize.js.map +1 -1
  105. package/dist/localization/package.nls.en-us.json +9 -1
  106. package/dist/parser/parser.js +3 -0
  107. package/dist/parser/parser.js.map +1 -1
  108. package/dist/pyright.js +26 -4
  109. package/dist/pyright.js.map +1 -1
  110. package/dist/tests/chainedSourceFiles.test.js +15 -20
  111. package/dist/tests/chainedSourceFiles.test.js.map +1 -1
  112. package/dist/tests/checker.test.js +14 -0
  113. package/dist/tests/checker.test.js.map +1 -1
  114. package/dist/tests/completions.test.js +11 -236
  115. package/dist/tests/completions.test.js.map +1 -1
  116. package/dist/tests/docStringConversion.test.js +36 -2
  117. package/dist/tests/docStringConversion.test.js.map +1 -1
  118. package/dist/tests/fourslash/completions.override2.fourslash.js +1 -16
  119. package/dist/tests/fourslash/completions.override2.fourslash.js.map +1 -1
  120. package/dist/tests/harness/fourslash/testState.d.ts +14 -8
  121. package/dist/tests/harness/fourslash/testState.js +25 -36
  122. package/dist/tests/harness/fourslash/testState.js.map +1 -1
  123. package/dist/tests/importResolver.test.js +81 -1
  124. package/dist/tests/importResolver.test.js.map +1 -1
  125. package/dist/tests/typeEvaluator2.test.js +12 -0
  126. package/dist/tests/typeEvaluator2.test.js.map +1 -1
  127. package/dist/tests/typeEvaluator3.test.js +4 -0
  128. package/dist/tests/typeEvaluator3.test.js.map +1 -1
  129. package/dist/tests/typeEvaluator5.test.js +21 -9
  130. package/dist/tests/typeEvaluator5.test.js.map +1 -1
  131. package/dist/tests/workspaceEditUtils.test.js +15 -10
  132. package/dist/tests/workspaceEditUtils.test.js.map +1 -1
  133. package/package.json +1 -1
  134. package/dist/languageService/importAdder.d.ts +0 -40
  135. package/dist/languageService/importAdder.js +0 -388
  136. package/dist/languageService/importAdder.js.map +0 -1
  137. package/dist/tests/fourslash/completions.commitChars.fourslash.d.ts +0 -1
  138. package/dist/tests/fourslash/completions.commitChars.fourslash.js +0 -81
  139. package/dist/tests/fourslash/completions.commitChars.fourslash.js.map +0 -1
  140. package/dist/tests/importAdder.test.d.ts +0 -1
  141. package/dist/tests/importAdder.test.js +0 -1325
  142. package/dist/tests/importAdder.test.js.map +0 -1
@@ -138,6 +138,8 @@ export interface ExpectedTypeOptions {
138
138
  allowRequired?: boolean;
139
139
  allowUnpackedTuple?: boolean;
140
140
  allowParamSpec?: boolean;
141
+ allowForwardReference?: boolean;
142
+ allowTypeVarsWithoutScopeId?: boolean;
141
143
  }
142
144
  export interface ExpectedTypeResult {
143
145
  type: Type;
@@ -154,6 +156,7 @@ export interface ArgResult {
154
156
  isTypeIncomplete?: boolean | undefined;
155
157
  condition?: TypeCondition[];
156
158
  skippedOverloadArg?: boolean;
159
+ skippedBareTypeVarExpectedType?: boolean;
157
160
  }
158
161
  export interface CallResult {
159
162
  returnType?: Type | undefined;
@@ -301,4 +304,5 @@ export interface TypeEvaluator {
301
304
  setTypeForNode: (node: ParseNode, type?: Type, flags?: EvaluatorFlags) => void;
302
305
  checkForCancellation: () => void;
303
306
  printControlFlowGraph: (flowNode: FlowNode, reference: CodeFlowReferenceExpressionNode | undefined, callName: string, logger: ConsoleInterface) => void;
307
+ printTypeVarContext: (typeVarContext: TypeVarContext) => void;
304
308
  }
@@ -1 +1 @@
1
- {"version":3,"file":"typeEvaluatorTypes.js","sourceRoot":"","sources":["../../../src/analyzer/typeEvaluatorTypes.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AA6CH,gEAAgE;AAChE,kDAAkD;AACrC,QAAA,0BAA0B,GAAG,EAAE,CAAC;AAE7C,IAAkB,cAmFjB;AAnFD,WAAkB,cAAc;IAC5B,mDAAQ,CAAA;IAER,uDAAuD;IACvD,mFAA6B,CAAA;IAE7B,0DAA0D;IAC1D,gEAAgE;IAChE,SAAS;IACT,yEAAwB,CAAA;IAExB,yDAAyD;IACzD,uFAA+B,CAAA;IAE/B,kCAAkC;IAClC,iGAAoC,CAAA;IAEpC,0CAA0C;IAC1C,sEAAsB,CAAA;IAEtB,6CAA6C;IAC7C,8EAA0B,CAAA;IAE1B,gDAAgD;IAChD,oFAA6B,CAAA;IAE7B,qDAAqD;IACrD,4BAA4B;IAC5B,uEAAsB,CAAA;IAEtB,gEAAgE;IAChE,6DAA6D;IAC7D,qBAAqB;IACrB,2FAAgC,CAAA;IAEhC,2DAA2D;IAC3D,gDAAgD;IAChD,wFAA+B,CAAA;IAE/B,8DAA8D;IAC9D,0BAA0B;IAC1B,oGAAqC,CAAA;IAErC,0DAA0D;IAC1D,0BAA0B;IAC1B,0GAAwC,CAAA;IAExC,yDAAyD;IACzD,2DAA2D;IAC3D,mCAAmC;IACnC,gHAA2C,CAAA;IAE3C,yDAAyD;IACzD,6DAA6D;IAC7D,uDAAuD;IACvD,iHAA2C,CAAA;IAE3C,mDAAmD;IACnD,2FAAgC,CAAA;IAEhC,6CAA6C;IAC7C,gFAA0B,CAAA;IAE1B,mEAAmE;IACnE,wFAA8B,CAAA;IAE9B,iEAAiE;IACjE,iCAAiC;IACjC,4FAAgC,CAAA;IAEhC,wDAAwD;IACxD,2EAAuB,CAAA;IAEvB,uDAAuD;IACvD,iHAA0C,CAAA;IAE1C,6DAA6D;IAC7D,2DAA2D;IAC3D,oDAAoD;IACpD,6GAAwC,CAAA;IAExC,yCAAyC;IACzC,6FAAgC,CAAA;AACpC,CAAC,EAnFiB,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAmF/B;AAgPD,IAAkB,iBAuCjB;AAvCD,WAAkB,iBAAiB;IAC/B,yDAAQ,CAAA;IAER,mEAAmE;IACnE,gEAAgE;IAChE,4BAA4B;IAC5B,6FAA+B,CAAA;IAE/B,yDAAyD;IACzD,+DAA+D;IAC/D,+EAAwB,CAAA;IAExB,wDAAwD;IACxD,uFAA4B,CAAA;IAE5B,+DAA+D;IAC/D,6FAA+B,CAAA;IAE/B,2DAA2D;IAC3D,0DAA0D;IAC1D,oCAAoC;IACpC,4GAAsC,CAAA;IAEtC,+DAA+D;IAC/D,gEAAgE;IAChE,yBAAyB;IACzB,4FAA8B,CAAA;IAE9B,4DAA4D;IAC5D,wDAAwD;IACxD,8DAA8D;IAC9D,4BAA4B;IAC5B,wGAAoC,CAAA;IAEpC,sDAAsD;IACtD,qFAA0B,CAAA;IAE1B,sDAAsD;IACtD,qFAA0B,CAAA;AAC9B,CAAC,EAvCiB,iBAAiB,GAAjB,yBAAiB,KAAjB,yBAAiB,QAuClC"}
1
+ {"version":3,"file":"typeEvaluatorTypes.js","sourceRoot":"","sources":["../../../src/analyzer/typeEvaluatorTypes.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AA6CH,gEAAgE;AAChE,kDAAkD;AACrC,QAAA,0BAA0B,GAAG,EAAE,CAAC;AAE7C,IAAkB,cAmFjB;AAnFD,WAAkB,cAAc;IAC5B,mDAAQ,CAAA;IAER,uDAAuD;IACvD,mFAA6B,CAAA;IAE7B,0DAA0D;IAC1D,gEAAgE;IAChE,SAAS;IACT,yEAAwB,CAAA;IAExB,yDAAyD;IACzD,uFAA+B,CAAA;IAE/B,kCAAkC;IAClC,iGAAoC,CAAA;IAEpC,0CAA0C;IAC1C,sEAAsB,CAAA;IAEtB,6CAA6C;IAC7C,8EAA0B,CAAA;IAE1B,gDAAgD;IAChD,oFAA6B,CAAA;IAE7B,qDAAqD;IACrD,4BAA4B;IAC5B,uEAAsB,CAAA;IAEtB,gEAAgE;IAChE,6DAA6D;IAC7D,qBAAqB;IACrB,2FAAgC,CAAA;IAEhC,2DAA2D;IAC3D,gDAAgD;IAChD,wFAA+B,CAAA;IAE/B,8DAA8D;IAC9D,0BAA0B;IAC1B,oGAAqC,CAAA;IAErC,0DAA0D;IAC1D,0BAA0B;IAC1B,0GAAwC,CAAA;IAExC,yDAAyD;IACzD,2DAA2D;IAC3D,mCAAmC;IACnC,gHAA2C,CAAA;IAE3C,yDAAyD;IACzD,6DAA6D;IAC7D,uDAAuD;IACvD,iHAA2C,CAAA;IAE3C,mDAAmD;IACnD,2FAAgC,CAAA;IAEhC,6CAA6C;IAC7C,gFAA0B,CAAA;IAE1B,mEAAmE;IACnE,wFAA8B,CAAA;IAE9B,iEAAiE;IACjE,iCAAiC;IACjC,4FAAgC,CAAA;IAEhC,wDAAwD;IACxD,2EAAuB,CAAA;IAEvB,uDAAuD;IACvD,iHAA0C,CAAA;IAE1C,6DAA6D;IAC7D,2DAA2D;IAC3D,oDAAoD;IACpD,6GAAwC,CAAA;IAExC,yCAAyC;IACzC,6FAAgC,CAAA;AACpC,CAAC,EAnFiB,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAmF/B;AAmPD,IAAkB,iBAuCjB;AAvCD,WAAkB,iBAAiB;IAC/B,yDAAQ,CAAA;IAER,mEAAmE;IACnE,gEAAgE;IAChE,4BAA4B;IAC5B,6FAA+B,CAAA;IAE/B,yDAAyD;IACzD,+DAA+D;IAC/D,+EAAwB,CAAA;IAExB,wDAAwD;IACxD,uFAA4B,CAAA;IAE5B,+DAA+D;IAC/D,6FAA+B,CAAA;IAE/B,2DAA2D;IAC3D,0DAA0D;IAC1D,oCAAoC;IACpC,4GAAsC,CAAA;IAEtC,+DAA+D;IAC/D,gEAAgE;IAChE,yBAAyB;IACzB,4FAA8B,CAAA;IAE9B,4DAA4D;IAC5D,wDAAwD;IACxD,8DAA8D;IAC9D,4BAA4B;IAC5B,wGAAoC,CAAA;IAEpC,sDAAsD;IACtD,qFAA0B,CAAA;IAE1B,sDAAsD;IACtD,qFAA0B,CAAA;AAC9B,CAAC,EAvCiB,iBAAiB,GAAjB,yBAAiB,KAAjB,yBAAiB,QAuClC"}
@@ -14,7 +14,7 @@ export declare const enum PrintTypeFlags {
14
14
  ExpandTypedDictArgs = 1024
15
15
  }
16
16
  export declare type FunctionReturnTypeCallback = (type: FunctionType) => Type;
17
- export declare function printType(type: Type, printTypeFlags: PrintTypeFlags, returnTypeCallback: FunctionReturnTypeCallback, recursionTypes?: Type[], recursionCount?: number): string;
17
+ export declare function printType(type: Type, printTypeFlags: PrintTypeFlags, returnTypeCallback: FunctionReturnTypeCallback): string;
18
+ export declare function printFunctionParts(type: FunctionType, printTypeFlags: PrintTypeFlags, returnTypeCallback: FunctionReturnTypeCallback): [string[], string];
19
+ export declare function printObjectTypeForClass(type: ClassType, printTypeFlags: PrintTypeFlags, returnTypeCallback: FunctionReturnTypeCallback): string;
18
20
  export declare function printLiteralValue(type: ClassType, quotation?: string): string;
19
- export declare function printObjectTypeForClass(type: ClassType, printTypeFlags: PrintTypeFlags, returnTypeCallback: FunctionReturnTypeCallback, recursionTypes?: Type[], recursionCount?: number): string;
20
- export declare function printFunctionParts(type: FunctionType, printTypeFlags: PrintTypeFlags, returnTypeCallback: FunctionReturnTypeCallback, recursionTypes?: Type[], recursionCount?: number): [string[], string];
@@ -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