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

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 (211) hide show
  1. package/dist/analyzer/analyzerFileInfo.d.ts +0 -1
  2. package/dist/analyzer/analyzerFileInfo.js.map +1 -1
  3. package/dist/analyzer/binder.js +24 -7
  4. package/dist/analyzer/binder.js.map +1 -1
  5. package/dist/analyzer/cacheManager.d.ts +11 -0
  6. package/dist/analyzer/cacheManager.js +59 -2
  7. package/dist/analyzer/cacheManager.js.map +1 -1
  8. package/dist/analyzer/checker.d.ts +2 -2
  9. package/dist/analyzer/checker.js +29 -20
  10. package/dist/analyzer/checker.js.map +1 -1
  11. package/dist/analyzer/codeFlowEngine.js +14 -2
  12. package/dist/analyzer/codeFlowEngine.js.map +1 -1
  13. package/dist/analyzer/codeFlowTypes.d.ts +1 -0
  14. package/dist/analyzer/codeFlowTypes.js.map +1 -1
  15. package/dist/analyzer/constraintSolver.js +44 -11
  16. package/dist/analyzer/constraintSolver.js.map +1 -1
  17. package/dist/analyzer/constructorTransform.js +2 -2
  18. package/dist/analyzer/constructorTransform.js.map +1 -1
  19. package/dist/analyzer/constructors.d.ts +2 -2
  20. package/dist/analyzer/constructors.js +162 -109
  21. package/dist/analyzer/constructors.js.map +1 -1
  22. package/dist/analyzer/dataClasses.js +17 -7
  23. package/dist/analyzer/dataClasses.js.map +1 -1
  24. package/dist/analyzer/enums.js +7 -3
  25. package/dist/analyzer/enums.js.map +1 -1
  26. package/dist/analyzer/functionTransform.js +1 -1
  27. package/dist/analyzer/functionTransform.js.map +1 -1
  28. package/dist/analyzer/importResolver.js +1 -1
  29. package/dist/analyzer/importResolver.js.map +1 -1
  30. package/dist/analyzer/importStatementUtils.d.ts +6 -6
  31. package/dist/analyzer/importStatementUtils.js +43 -43
  32. package/dist/analyzer/importStatementUtils.js.map +1 -1
  33. package/dist/analyzer/namedTuples.js +1 -1
  34. package/dist/analyzer/namedTuples.js.map +1 -1
  35. package/dist/analyzer/packageTypeVerifier.js +6 -6
  36. package/dist/analyzer/packageTypeVerifier.js.map +1 -1
  37. package/dist/analyzer/parseTreeUtils.d.ts +8 -5
  38. package/dist/analyzer/parseTreeUtils.js +36 -14
  39. package/dist/analyzer/parseTreeUtils.js.map +1 -1
  40. package/dist/analyzer/patternMatching.js +1 -1
  41. package/dist/analyzer/patternMatching.js.map +1 -1
  42. package/dist/analyzer/program.d.ts +4 -3
  43. package/dist/analyzer/program.js +21 -12
  44. package/dist/analyzer/program.js.map +1 -1
  45. package/dist/analyzer/properties.js +12 -12
  46. package/dist/analyzer/properties.js.map +1 -1
  47. package/dist/analyzer/protocols.js +10 -10
  48. package/dist/analyzer/protocols.js.map +1 -1
  49. package/dist/analyzer/pyTypedUtils.d.ts +4 -0
  50. package/dist/analyzer/pyTypedUtils.js +17 -3
  51. package/dist/analyzer/pyTypedUtils.js.map +1 -1
  52. package/dist/analyzer/service.d.ts +3 -2
  53. package/dist/analyzer/service.js +7 -4
  54. package/dist/analyzer/service.js.map +1 -1
  55. package/dist/analyzer/sourceFile.d.ts +5 -3
  56. package/dist/analyzer/sourceFile.js +108 -71
  57. package/dist/analyzer/sourceFile.js.map +1 -1
  58. package/dist/analyzer/sourceFileInfoUtils.js +1 -1
  59. package/dist/analyzer/sourceMapper.js +6 -6
  60. package/dist/analyzer/symbol.d.ts +4 -1
  61. package/dist/analyzer/symbol.js +10 -0
  62. package/dist/analyzer/symbol.js.map +1 -1
  63. package/dist/analyzer/symbolUtils.d.ts +2 -1
  64. package/dist/analyzer/symbolUtils.js +13 -3
  65. package/dist/analyzer/symbolUtils.js.map +1 -1
  66. package/dist/analyzer/typeDocStringUtils.js +1 -1
  67. package/dist/analyzer/typeDocStringUtils.js.map +1 -1
  68. package/dist/analyzer/typeEvaluator.js +254 -119
  69. package/dist/analyzer/typeEvaluator.js.map +1 -1
  70. package/dist/analyzer/typeEvaluatorTypes.d.ts +3 -1
  71. package/dist/analyzer/typeGuards.js +107 -59
  72. package/dist/analyzer/typeGuards.js.map +1 -1
  73. package/dist/analyzer/typeStubWriter.js +1 -1
  74. package/dist/analyzer/typeStubWriter.js.map +1 -1
  75. package/dist/analyzer/typeUtils.d.ts +1 -1
  76. package/dist/analyzer/typeUtils.js +33 -33
  77. package/dist/analyzer/typeUtils.js.map +1 -1
  78. package/dist/analyzer/typeVarContext.js +1 -1
  79. package/dist/analyzer/typeVarContext.js.map +1 -1
  80. package/dist/analyzer/typedDicts.js +30 -21
  81. package/dist/analyzer/typedDicts.js.map +1 -1
  82. package/dist/analyzer/types.d.ts +7 -3
  83. package/dist/analyzer/types.js +48 -8
  84. package/dist/analyzer/types.js.map +1 -1
  85. package/dist/backgroundAnalysis.d.ts +1 -0
  86. package/dist/backgroundAnalysis.js +5 -1
  87. package/dist/backgroundAnalysis.js.map +1 -1
  88. package/dist/backgroundAnalysisBase.d.ts +2 -1
  89. package/dist/backgroundAnalysisBase.js +8 -1
  90. package/dist/backgroundAnalysisBase.js.map +1 -1
  91. package/dist/backgroundThreadBase.d.ts +6 -5
  92. package/dist/backgroundThreadBase.js +9 -5
  93. package/dist/backgroundThreadBase.js.map +1 -1
  94. package/dist/commands/dumpFileDebugInfoCommand.js +4 -4
  95. package/dist/commands/dumpFileDebugInfoCommand.js.map +1 -1
  96. package/dist/common/extensibility.d.ts +3 -2
  97. package/dist/common/extensibility.js.map +1 -1
  98. package/dist/common/serviceProviderExtensions.d.ts +2 -0
  99. package/dist/common/serviceProviderExtensions.js +4 -0
  100. package/dist/common/serviceProviderExtensions.js.map +1 -1
  101. package/dist/common/textEditTracker.d.ts +5 -5
  102. package/dist/common/textEditTracker.js +33 -33
  103. package/dist/common/textEditTracker.js.map +1 -1
  104. package/dist/common/workspaceEditUtils.js +2 -2
  105. package/dist/common/workspaceEditUtils.js.map +1 -1
  106. package/dist/languageServerBase.d.ts +4 -4
  107. package/dist/languageServerBase.js +1 -1
  108. package/dist/languageServerBase.js.map +1 -1
  109. package/dist/languageService/autoImporter.d.ts +3 -3
  110. package/dist/languageService/autoImporter.js +2 -1
  111. package/dist/languageService/autoImporter.js.map +1 -1
  112. package/dist/languageService/callHierarchyProvider.js +2 -2
  113. package/dist/languageService/callHierarchyProvider.js.map +1 -1
  114. package/dist/languageService/completionProvider.d.ts +2 -4
  115. package/dist/languageService/completionProvider.js +15 -37
  116. package/dist/languageService/completionProvider.js.map +1 -1
  117. package/dist/languageService/definitionProvider.js +1 -1
  118. package/dist/languageService/definitionProvider.js.map +1 -1
  119. package/dist/languageService/documentHighlightProvider.js +2 -2
  120. package/dist/languageService/documentHighlightProvider.js.map +1 -1
  121. package/dist/languageService/documentSymbolCollector.js +1 -1
  122. package/dist/languageService/documentSymbolCollector.js.map +1 -1
  123. package/dist/languageService/documentSymbolProvider.js +1 -1
  124. package/dist/languageService/documentSymbolProvider.js.map +1 -1
  125. package/dist/languageService/hoverProvider.js +2 -2
  126. package/dist/languageService/hoverProvider.js.map +1 -1
  127. package/dist/languageService/importSorter.d.ts +2 -2
  128. package/dist/languageService/importSorter.js +1 -1
  129. package/dist/languageService/importSorter.js.map +1 -1
  130. package/dist/languageService/referencesProvider.d.ts +4 -4
  131. package/dist/languageService/referencesProvider.js +2 -2
  132. package/dist/languageService/referencesProvider.js.map +1 -1
  133. package/dist/languageService/signatureHelpProvider.js +2 -2
  134. package/dist/languageService/signatureHelpProvider.js.map +1 -1
  135. package/dist/languageService/symbolIndexer.d.ts +2 -2
  136. package/dist/languageService/symbolIndexer.js +2 -2
  137. package/dist/languageService/symbolIndexer.js.map +1 -1
  138. package/dist/languageService/tooltipUtils.d.ts +1 -1
  139. package/dist/languageService/tooltipUtils.js +4 -4
  140. package/dist/languageService/workspaceSymbolProvider.js +1 -1
  141. package/dist/languageService/workspaceSymbolProvider.js.map +1 -1
  142. package/dist/localization/localize.d.ts +7 -0
  143. package/dist/localization/localize.js +5 -0
  144. package/dist/localization/localize.js.map +1 -1
  145. package/dist/localization/package.nls.cs.json +1 -0
  146. package/dist/localization/package.nls.de.json +2 -1
  147. package/dist/localization/package.nls.en-us.json +28 -23
  148. package/dist/localization/package.nls.es.json +5 -4
  149. package/dist/localization/package.nls.fr.json +5 -4
  150. package/dist/localization/package.nls.it.json +2 -1
  151. package/dist/localization/package.nls.ja.json +1 -0
  152. package/dist/localization/package.nls.ko.json +4 -3
  153. package/dist/localization/package.nls.pl.json +4 -3
  154. package/dist/localization/package.nls.pt-br.json +1 -0
  155. package/dist/localization/package.nls.qps-ploc.json +1 -0
  156. package/dist/localization/package.nls.ru.json +2 -1
  157. package/dist/localization/package.nls.tr.json +3 -2
  158. package/dist/localization/package.nls.zh-cn.json +2 -1
  159. package/dist/localization/package.nls.zh-tw.json +1 -0
  160. package/dist/nodeMain.d.ts +1 -1
  161. package/dist/nodeMain.js +2 -2
  162. package/dist/nodeMain.js.map +1 -1
  163. package/dist/parser/parser.d.ts +7 -4
  164. package/dist/parser/parser.js +10 -7
  165. package/dist/parser/parser.js.map +1 -1
  166. package/dist/parser/tokenizer.js +1 -0
  167. package/dist/parser/tokenizer.js.map +1 -1
  168. package/dist/parser/tokenizerTypes.d.ts +1 -0
  169. package/dist/parser/tokenizerTypes.js +1 -0
  170. package/dist/parser/tokenizerTypes.js.map +1 -1
  171. package/dist/server.d.ts +3 -3
  172. package/dist/server.js +3 -3
  173. package/dist/server.js.map +1 -1
  174. package/dist/tests/cacheManager.test.js +35 -0
  175. package/dist/tests/cacheManager.test.js.map +1 -1
  176. package/dist/tests/chainedSourceFiles.test.js +7 -7
  177. package/dist/tests/chainedSourceFiles.test.js.map +1 -1
  178. package/dist/tests/harness/fourslash/testState.d.ts +5 -5
  179. package/dist/tests/harness/fourslash/testState.js +8 -7
  180. package/dist/tests/harness/fourslash/testState.js.map +1 -1
  181. package/dist/tests/harness/fourslash/workspaceEditTestUtils.d.ts +2 -2
  182. package/dist/tests/harness/fourslash/workspaceEditTestUtils.js +5 -5
  183. package/dist/tests/harness/fourslash/workspaceEditTestUtils.js.map +1 -1
  184. package/dist/tests/importStatementUtils.test.js +4 -4
  185. package/dist/tests/importStatementUtils.test.js.map +1 -1
  186. package/dist/tests/ipythonMode.test.js +1 -1
  187. package/dist/tests/ipythonMode.test.js.map +1 -1
  188. package/dist/tests/lsp/languageServer.js +1 -1
  189. package/dist/tests/lsp/languageServer.js.map +1 -1
  190. package/dist/tests/lsp/languageServerTestUtils.d.ts +1 -1
  191. package/dist/tests/parser.test.js +14 -14
  192. package/dist/tests/parser.test.js.map +1 -1
  193. package/dist/tests/signatureHelp.test.js +1 -1
  194. package/dist/tests/signatureHelp.test.js.map +1 -1
  195. package/dist/tests/testStateUtils.js +5 -3
  196. package/dist/tests/testStateUtils.js.map +1 -1
  197. package/dist/tests/testUtils.d.ts +4 -8
  198. package/dist/tests/testUtils.js +4 -7
  199. package/dist/tests/testUtils.js.map +1 -1
  200. package/dist/tests/textEditUtil.test.js +3 -3
  201. package/dist/tests/textEditUtil.test.js.map +1 -1
  202. package/dist/tests/tokenizer.test.js +4 -4
  203. package/dist/tests/tokenizer.test.js.map +1 -1
  204. package/dist/tests/typeEvaluator1.test.js +6 -2
  205. package/dist/tests/typeEvaluator1.test.js.map +1 -1
  206. package/dist/tests/typeEvaluator2.test.js +4 -0
  207. package/dist/tests/typeEvaluator2.test.js.map +1 -1
  208. package/dist/tests/typeEvaluator3.test.js +21 -11
  209. package/dist/tests/typeEvaluator3.test.js.map +1 -1
  210. package/dist/tests/typeEvaluator4.test.js +1 -1
  211. package/package.json +2 -2
@@ -1,13 +1,22 @@
1
+ /// <reference types="node" />
2
+ import { Worker } from 'worker_threads';
3
+ import { AnalysisRequest } from '../backgroundAnalysisBase';
1
4
  import { ConsoleInterface } from '../common/console';
2
5
  export interface CacheOwner {
3
6
  getCacheUsage(): number;
4
7
  emptyCache(): void;
5
8
  }
6
9
  export declare class CacheManager {
10
+ private readonly _maxWorkers;
7
11
  private _pausedCount;
8
12
  private readonly _cacheOwners;
13
+ private _sharedUsageBuffer;
14
+ private _sharedUsagePosition;
9
15
  private _lastHeapStats;
16
+ constructor(_maxWorkers?: number);
10
17
  registerCacheOwner(provider: CacheOwner): void;
18
+ addWorker(index: number, worker: Worker): void;
19
+ handleCachedUsageBufferMessage(msg: AnalysisRequest): void;
11
20
  unregisterCacheOwner(provider: CacheOwner): void;
12
21
  pauseTracking(): {
13
22
  dispose(): void;
@@ -16,6 +25,8 @@ export declare class CacheManager {
16
25
  emptyCache(console?: ConsoleInterface): void;
17
26
  getUsedHeapRatio(console?: ConsoleInterface): number;
18
27
  private _convertToMB;
28
+ private _getSharedUsageBuffer;
29
+ private _getTotalHeapUsage;
19
30
  }
20
31
  export declare namespace CacheManager {
21
32
  function is(obj: any): obj is CacheManager;
@@ -13,14 +13,42 @@ exports.CacheManager = void 0;
13
13
  const debug_1 = require("../common/debug");
14
14
  const memUtils_1 = require("../common/memUtils");
15
15
  class CacheManager {
16
- constructor() {
16
+ constructor(_maxWorkers = 0) {
17
+ this._maxWorkers = _maxWorkers;
17
18
  this._pausedCount = 0;
18
19
  this._cacheOwners = [];
20
+ this._sharedUsagePosition = 0;
19
21
  this._lastHeapStats = Date.now();
20
22
  }
21
23
  registerCacheOwner(provider) {
22
24
  this._cacheOwners.push(provider);
23
25
  }
26
+ addWorker(index, worker) {
27
+ // Send the sharedArrayBuffer to the worker so it can be used
28
+ // to keep track of heap usage on all threads.
29
+ const buffer = this._getSharedUsageBuffer();
30
+ if (buffer) {
31
+ // The SharedArrayBuffer needs to be separate from data in order for it
32
+ // to be marshalled correctly.
33
+ worker.postMessage({ requestType: 'cacheUsageBuffer', sharedUsageBuffer: buffer, data: index.toString() });
34
+ worker.on('exit', () => {
35
+ const view = new Float64Array(buffer);
36
+ view[index] = 0;
37
+ });
38
+ }
39
+ }
40
+ handleCachedUsageBufferMessage(msg) {
41
+ if (msg.requestType === 'cacheUsageBuffer') {
42
+ const index = parseInt(msg.data || '0');
43
+ const buffer = msg.sharedUsageBuffer;
44
+ // Index of zero is reserved for the main thread so if
45
+ // the index isn't passed, don't save the shared buffer.
46
+ if (buffer && index) {
47
+ this._sharedUsageBuffer = buffer;
48
+ this._sharedUsagePosition = index;
49
+ }
50
+ }
51
+ }
24
52
  unregisterCacheOwner(provider) {
25
53
  const index = this._cacheOwners.findIndex((p) => p === provider);
26
54
  if (index < 0) {
@@ -61,21 +89,50 @@ class CacheManager {
61
89
  // Returns a ratio of used bytes to total bytes.
62
90
  getUsedHeapRatio(console) {
63
91
  const heapStats = (0, memUtils_1.getHeapStatistics)();
92
+ let usage = this._getTotalHeapUsage(heapStats);
64
93
  if (console && Date.now() - this._lastHeapStats > 1000) {
65
94
  // This can fill up the user's console, so we only do it once per second.
66
95
  this._lastHeapStats = Date.now();
67
96
  console.info(`Heap stats: ` +
68
97
  `total_heap_size=${this._convertToMB(heapStats.total_heap_size)}, ` +
69
98
  `used_heap_size=${this._convertToMB(heapStats.used_heap_size)}, ` +
99
+ `cross_worker_used_heap_size=${this._convertToMB(usage)}, ` +
70
100
  `total_physical_size=${this._convertToMB(heapStats.total_physical_size)}, ` +
71
101
  `total_available_size=${this._convertToMB(heapStats.total_available_size)}, ` +
72
102
  `heap_size_limit=${this._convertToMB(heapStats.heap_size_limit)}`);
73
103
  }
74
- return heapStats.used_heap_size / heapStats.heap_size_limit;
104
+ // Total usage seems to be off by about 5%, so we'll add that back in
105
+ // to make the ratio more accurate. (200MB at 4GB)
106
+ usage += usage * 0.05;
107
+ return usage / heapStats.heap_size_limit;
75
108
  }
76
109
  _convertToMB(bytes) {
77
110
  return `${Math.round(bytes / (1024 * 1024))}MB`;
78
111
  }
112
+ _getSharedUsageBuffer() {
113
+ try {
114
+ if (!this._sharedUsageBuffer && this._maxWorkers > 0) {
115
+ // Allocate enough space for the workers and the main thread.
116
+ this._sharedUsageBuffer = new SharedArrayBuffer(8 * (this._maxWorkers + 1));
117
+ }
118
+ return this._sharedUsageBuffer;
119
+ }
120
+ catch {
121
+ // SharedArrayBuffer is not supported.
122
+ return undefined;
123
+ }
124
+ }
125
+ _getTotalHeapUsage(heapStats) {
126
+ // If the SharedArrayBuffer is supported, we'll use it to to get usage
127
+ // from other threads and add that to our own
128
+ const buffer = this._getSharedUsageBuffer();
129
+ if (buffer) {
130
+ const view = new Float64Array(buffer);
131
+ view[this._sharedUsagePosition] = heapStats.used_heap_size;
132
+ return view.reduce((a, b) => a + b, 0);
133
+ }
134
+ return heapStats.used_heap_size;
135
+ }
79
136
  }
80
137
  exports.CacheManager = CacheManager;
81
138
  (function (CacheManager) {
@@ -1 +1 @@
1
- {"version":3,"file":"cacheManager.js","sourceRoot":"","sources":["../../../../../src/analyzer/cacheManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cacheManager.js","sourceRoot":"","sources":["../../../../../src/analyzer/cacheManager.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { AssertNode, AssignmentExpressionNode, AssignmentNode, AugmentedAssignmentNode, AwaitNode, BinaryOperationNode, CallNode, CaseNode, ClassNode, DelNode, DictionaryNode, ErrorNode, ExceptNode, ForNode, FormatStringNode, FunctionNode, GlobalNode, IfNode, ImportAsNode, ImportFromAsNode, ImportFromNode, IndexNode, LambdaNode, ListComprehensionIfNode, ListComprehensionNode, ListNode, MatchNode, MemberAccessNode, ModuleNameNode, NameNode, NonlocalNode, ParseNode, PatternClassNode, RaiseNode, ReturnNode, SetNode, SliceNode, StatementListNode, StringListNode, SuiteNode, TernaryNode, TryNode, TupleNode, TypeAliasNode, TypeAnnotationNode, TypeParameterListNode, TypeParameterNode, UnaryOperationNode, UnpackNode, WhileNode, WithNode, YieldFromNode, YieldNode } from '../parser/parseNodes';
2
- import { ParseResults } from '../parser/parser';
2
+ import { ParserOutput } from '../parser/parser';
3
3
  import { ImportResolver } from './importResolver';
4
4
  import { ParseTreeWalker } from './parseTreeWalker';
5
5
  import { SourceMapper } from './sourceMapper';
@@ -14,7 +14,7 @@ export declare class Checker extends ParseTreeWalker {
14
14
  private _isUnboundCheckSuppressed;
15
15
  private _scopedNodes;
16
16
  private _typeParameterLists;
17
- constructor(_importResolver: ImportResolver, _evaluator: TypeEvaluator, parseResults: ParseResults, _sourceMapper: SourceMapper, _dependentFiles?: ParseResults[] | undefined);
17
+ constructor(_importResolver: ImportResolver, _evaluator: TypeEvaluator, parseResults: ParserOutput, _sourceMapper: SourceMapper, _dependentFiles?: ParserOutput[] | undefined);
18
18
  check(): void;
19
19
  walk(node: ParseNode): void;
20
20
  visitSuite(node: SuiteNode): boolean;
@@ -2189,7 +2189,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2189
2189
  // If there's one or more declaration with a declared type,
2190
2190
  // all other declarations should match. The only exception is
2191
2191
  // for functions that have an overload.
2192
- const primaryDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(symbol);
2192
+ const primaryDecl = (0, symbolUtils_1.getLastTypedDeclarationForSymbol)(symbol);
2193
2193
  // If there's no declaration with a declared type, we're done.
2194
2194
  if (!primaryDecl) {
2195
2195
  return;
@@ -3423,7 +3423,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3423
3423
  // Validates that any overridden member variables are not marked
3424
3424
  // as Final in parent classes.
3425
3425
  _validateFinalMemberOverrides(classType) {
3426
- classType.details.fields.forEach((localSymbol, name) => {
3426
+ types_1.ClassType.getSymbolTable(classType).forEach((localSymbol, name) => {
3427
3427
  const parentSymbol = (0, typeUtils_1.lookUpClassMember)(classType, name, 1 /* MemberAccessFlags.SkipOriginalClass */);
3428
3428
  if (parentSymbol && (0, types_1.isInstantiableClass)(parentSymbol.classType) && !SymbolNameUtils.isPrivateName(name)) {
3429
3429
  // Did the parent class explicitly declare the variable as final?
@@ -3475,7 +3475,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3475
3475
  initMemberTypeResult = undefined;
3476
3476
  }
3477
3477
  }
3478
- classType.details.fields.forEach((symbol, name) => {
3478
+ types_1.ClassType.getSymbolTable(classType).forEach((symbol, name) => {
3479
3479
  var _a;
3480
3480
  // Enum members don't have type annotations.
3481
3481
  if (symbol.getTypedDeclarations().length > 0) {
@@ -3553,7 +3553,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3553
3553
  const initOnlySymbolMap = new Map();
3554
3554
  types_1.ClassType.getReverseMro(classType).forEach((mroClass) => {
3555
3555
  if ((0, types_1.isClass)(mroClass) && types_1.ClassType.isDataClass(mroClass)) {
3556
- mroClass.details.fields.forEach((symbol, name) => {
3556
+ types_1.ClassType.getSymbolTable(mroClass).forEach((symbol, name) => {
3557
3557
  if (symbol.isInitVar()) {
3558
3558
  initOnlySymbolMap.set(name, symbol);
3559
3559
  }
@@ -3665,7 +3665,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3665
3665
  if (types_1.ClassType.isFinal(classType)) {
3666
3666
  (0, typeUtils_1.getProtocolSymbolsRecursive)(classType, abstractSymbols, 2048 /* ClassTypeFlags.SupportsAbstractMethods */);
3667
3667
  }
3668
- classType.details.fields.forEach((localSymbol, name) => {
3668
+ types_1.ClassType.getSymbolTable(classType).forEach((localSymbol, name) => {
3669
3669
  abstractSymbols.delete(name);
3670
3670
  // This applies only to instance members.
3671
3671
  if (!localSymbol.isInstanceMember()) {
@@ -3833,7 +3833,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3833
3833
  if (types_1.ClassType.isDataClass(classType)) {
3834
3834
  return;
3835
3835
  }
3836
- classType.details.fields.forEach((symbol, name) => {
3836
+ types_1.ClassType.getSymbolTable(classType).forEach((symbol, name) => {
3837
3837
  const decls = symbol.getDeclarations();
3838
3838
  const isDefinedBySlots = decls.some((decl) => decl.type === 1 /* DeclarationType.Variable */ && decl.isDefinedBySlots);
3839
3839
  if (isDefinedBySlots) {
@@ -4080,13 +4080,13 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4080
4080
  const overrideSymbol = overrideClassAndSymbol.symbol;
4081
4081
  let overrideType = this._evaluator.getEffectiveTypeOfSymbol(overrideSymbol);
4082
4082
  overrideType = (0, typeUtils_1.partiallySpecializeType)(overrideType, overrideClassAndSymbol.classType);
4083
- const childOverrideSymbol = childClassType.details.fields.get(memberName);
4083
+ const childOverrideSymbol = types_1.ClassType.getSymbolTable(childClassType).get(memberName);
4084
4084
  const childOverrideType = childOverrideSymbol
4085
4085
  ? this._evaluator.getEffectiveTypeOfSymbol(childOverrideSymbol)
4086
4086
  : undefined;
4087
4087
  let diag;
4088
- const overrideDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(overrideClassAndSymbol.symbol);
4089
- const overriddenDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(overriddenClassAndSymbol.symbol);
4088
+ const overrideDecl = (0, symbolUtils_1.getLastTypedDeclarationForSymbol)(overrideClassAndSymbol.symbol);
4089
+ const overriddenDecl = (0, symbolUtils_1.getLastTypedDeclarationForSymbol)(overriddenClassAndSymbol.symbol);
4090
4090
  if ((0, types_1.isFunction)(overriddenType) || (0, types_1.isOverloadedFunction)(overriddenType)) {
4091
4091
  const diagAddendum = new diagnostic_1.DiagnosticAddendum();
4092
4092
  let overrideFunction;
@@ -4134,7 +4134,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4134
4134
  // This check can be expensive, so don't perform it if the corresponding
4135
4135
  // rule is disabled.
4136
4136
  if (this._fileInfo.diagnosticRuleSet.reportIncompatibleVariableOverride !== 'none') {
4137
- const primaryDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(overriddenClassAndSymbol.symbol);
4137
+ const primaryDecl = (0, symbolUtils_1.getLastTypedDeclarationForSymbol)(overriddenClassAndSymbol.symbol);
4138
4138
  let isInvariant = (primaryDecl === null || primaryDecl === void 0 ? void 0 : primaryDecl.type) === 1 /* DeclarationType.Variable */ && !primaryDecl.isFinal;
4139
4139
  // If the entry is a member of a frozen dataclass, it is immutable,
4140
4140
  // so it does not need to be invariant.
@@ -4208,8 +4208,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4208
4208
  // are decorated. For example, if the first overload is not marked @final
4209
4209
  // but subsequent ones are, an error should be reported.
4210
4210
  _validateOverloadDecoratorConsistency(classType) {
4211
- classType.details.fields.forEach((symbol, name) => {
4212
- const primaryDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(symbol);
4211
+ types_1.ClassType.getSymbolTable(classType).forEach((symbol, name) => {
4212
+ const primaryDecl = (0, symbolUtils_1.getLastTypedDeclarationForSymbol)(symbol);
4213
4213
  if (!primaryDecl || primaryDecl.type !== 5 /* DeclarationType.Function */) {
4214
4214
  return;
4215
4215
  }
@@ -4331,7 +4331,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4331
4331
  // types as the original method. Also marks the class as abstract if one
4332
4332
  // or more abstract methods are not overridden.
4333
4333
  _validateBaseClassOverrides(classType) {
4334
- classType.details.fields.forEach((symbol, name) => {
4334
+ types_1.ClassType.getSymbolTable(classType).forEach((symbol, name) => {
4335
4335
  // Private symbols do not need to match in type since their
4336
4336
  // names are mangled, and subclasses can't access the value in
4337
4337
  // the parent class.
@@ -4489,13 +4489,13 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4489
4489
  }
4490
4490
  }
4491
4491
  if (reportFinalMethodOverride) {
4492
- const decl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(overrideSymbol);
4492
+ const decl = (0, symbolUtils_1.getLastTypedDeclarationForSymbol)(overrideSymbol);
4493
4493
  if (decl && decl.type === 5 /* DeclarationType.Function */) {
4494
4494
  const diag = this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportIncompatibleMethodOverride, localize_1.LocMessage.finalMethodOverride().format({
4495
4495
  name: memberName,
4496
4496
  className: baseClass.details.name,
4497
4497
  }), decl.node.name);
4498
- const origDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(baseClassAndSymbol.symbol);
4498
+ const origDecl = (0, symbolUtils_1.getLastTypedDeclarationForSymbol)(baseClassAndSymbol.symbol);
4499
4499
  if (diag && origDecl) {
4500
4500
  diag.addRelatedInfo(localize_1.LocAddendum.finalMethod(), origDecl.uri, origDecl.range);
4501
4501
  }
@@ -4516,13 +4516,13 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4516
4516
  if (!this._evaluator.validateOverrideMethod(baseType, overrideType, childClassType, diagAddendum, enforceParamNameMatch)) {
4517
4517
  const decl = (0, types_1.isFunction)(overrideType) && overrideType.details.declaration
4518
4518
  ? overrideType.details.declaration
4519
- : (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(overrideSymbol);
4519
+ : (0, symbolUtils_1.getLastTypedDeclarationForSymbol)(overrideSymbol);
4520
4520
  if (decl) {
4521
4521
  const diag = this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportIncompatibleMethodOverride, localize_1.LocMessage.incompatibleMethodOverride().format({
4522
4522
  name: memberName,
4523
4523
  className: baseClass.details.name,
4524
4524
  }) + diagAddendum.getString(), (_a = (0, declarationUtils_1.getNameNodeForDeclaration)(decl)) !== null && _a !== void 0 ? _a : decl.node);
4525
- const origDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(baseClassAndSymbol.symbol);
4525
+ const origDecl = (0, symbolUtils_1.getLastTypedDeclarationForSymbol)(baseClassAndSymbol.symbol);
4526
4526
  if (diag && origDecl) {
4527
4527
  diag.addRelatedInfo(localize_1.LocAddendum.overriddenMethod(), origDecl.uri, origDecl.range);
4528
4528
  }
@@ -4543,7 +4543,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4543
4543
  className: baseClass.details.name,
4544
4544
  type: this._evaluator.printType(overrideType),
4545
4545
  }), (_b = (0, declarationUtils_1.getNameNodeForDeclaration)(lastDecl)) !== null && _b !== void 0 ? _b : lastDecl.node);
4546
- const origDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(baseClassAndSymbol.symbol);
4546
+ const origDecl = (0, symbolUtils_1.getLastTypedDeclarationForSymbol)(baseClassAndSymbol.symbol);
4547
4547
  if (diag && origDecl) {
4548
4548
  diag.addRelatedInfo(localize_1.LocAddendum.overriddenMethod(), origDecl.uri, origDecl.range);
4549
4549
  }
@@ -4683,7 +4683,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4683
4683
  name: memberName,
4684
4684
  className: baseClass.details.name,
4685
4685
  }) + diagAddendum.getString(), (_h = (0, declarationUtils_1.getNameNodeForDeclaration)(lastDecl)) !== null && _h !== void 0 ? _h : lastDecl.node);
4686
- const origDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(baseClassAndSymbol.symbol);
4686
+ const origDecl = (0, symbolUtils_1.getLastTypedDeclarationForSymbol)(baseClassAndSymbol.symbol);
4687
4687
  if (diag && origDecl) {
4688
4688
  diag.addRelatedInfo(localize_1.LocAddendum.overriddenSymbol(), origDecl.uri, origDecl.range);
4689
4689
  }
@@ -4750,7 +4750,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4750
4750
  name: memberName,
4751
4751
  className: baseClass.details.name,
4752
4752
  }), (_m = (0, declarationUtils_1.getNameNodeForDeclaration)(lastDecl)) !== null && _m !== void 0 ? _m : lastDecl.node);
4753
- const origDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(baseClassAndSymbol.symbol);
4753
+ const origDecl = (0, symbolUtils_1.getLastTypedDeclarationForSymbol)(baseClassAndSymbol.symbol);
4754
4754
  if (diag && origDecl) {
4755
4755
  diag.addRelatedInfo(localize_1.LocAddendum.overriddenSymbol(), origDecl.uri, origDecl.range);
4756
4756
  }
@@ -4926,6 +4926,15 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4926
4926
  if (!paramInfo.typeAnnotation || !paramInfo.name) {
4927
4927
  return;
4928
4928
  }
4929
+ // If this is an __init__ method, we need to specifically check for the
4930
+ // use of class-scoped TypeVars, which are not allowed in this context
4931
+ // according to the typing spec.
4932
+ if (functionType.details.name === '__init__' && functionType.details.methodClass) {
4933
+ const typeVars = (0, typeUtils_1.getTypeVarArgumentsRecursive)(paramInfo.type);
4934
+ if (typeVars.some((typeVar) => { var _a; return typeVar.scopeId === ((_a = functionType.details.methodClass) === null || _a === void 0 ? void 0 : _a.details.typeVarScopeId); })) {
4935
+ this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.initMethodSelfParamTypeVar(), paramInfo.typeAnnotation);
4936
+ }
4937
+ }
4929
4938
  // If this is a protocol class, the self and cls parameters can be bound
4930
4939
  // to something other than the class.
4931
4940
  if (types_1.ClassType.isProtocolClass(classType)) {