@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.
- package/dist/analyzer/analyzerFileInfo.d.ts +0 -1
- package/dist/analyzer/analyzerFileInfo.js.map +1 -1
- package/dist/analyzer/binder.js +24 -7
- package/dist/analyzer/binder.js.map +1 -1
- package/dist/analyzer/cacheManager.d.ts +11 -0
- package/dist/analyzer/cacheManager.js +59 -2
- package/dist/analyzer/cacheManager.js.map +1 -1
- package/dist/analyzer/checker.d.ts +2 -2
- package/dist/analyzer/checker.js +29 -20
- package/dist/analyzer/checker.js.map +1 -1
- package/dist/analyzer/codeFlowEngine.js +14 -2
- package/dist/analyzer/codeFlowEngine.js.map +1 -1
- package/dist/analyzer/codeFlowTypes.d.ts +1 -0
- package/dist/analyzer/codeFlowTypes.js.map +1 -1
- package/dist/analyzer/constraintSolver.js +44 -11
- package/dist/analyzer/constraintSolver.js.map +1 -1
- package/dist/analyzer/constructorTransform.js +2 -2
- package/dist/analyzer/constructorTransform.js.map +1 -1
- package/dist/analyzer/constructors.d.ts +2 -2
- package/dist/analyzer/constructors.js +162 -109
- package/dist/analyzer/constructors.js.map +1 -1
- package/dist/analyzer/dataClasses.js +17 -7
- package/dist/analyzer/dataClasses.js.map +1 -1
- package/dist/analyzer/enums.js +7 -3
- package/dist/analyzer/enums.js.map +1 -1
- package/dist/analyzer/functionTransform.js +1 -1
- package/dist/analyzer/functionTransform.js.map +1 -1
- package/dist/analyzer/importResolver.js +1 -1
- package/dist/analyzer/importResolver.js.map +1 -1
- package/dist/analyzer/importStatementUtils.d.ts +6 -6
- package/dist/analyzer/importStatementUtils.js +43 -43
- package/dist/analyzer/importStatementUtils.js.map +1 -1
- package/dist/analyzer/namedTuples.js +1 -1
- package/dist/analyzer/namedTuples.js.map +1 -1
- package/dist/analyzer/packageTypeVerifier.js +6 -6
- package/dist/analyzer/packageTypeVerifier.js.map +1 -1
- package/dist/analyzer/parseTreeUtils.d.ts +8 -5
- package/dist/analyzer/parseTreeUtils.js +36 -14
- package/dist/analyzer/parseTreeUtils.js.map +1 -1
- package/dist/analyzer/patternMatching.js +1 -1
- package/dist/analyzer/patternMatching.js.map +1 -1
- package/dist/analyzer/program.d.ts +4 -3
- package/dist/analyzer/program.js +21 -12
- package/dist/analyzer/program.js.map +1 -1
- package/dist/analyzer/properties.js +12 -12
- package/dist/analyzer/properties.js.map +1 -1
- package/dist/analyzer/protocols.js +10 -10
- package/dist/analyzer/protocols.js.map +1 -1
- package/dist/analyzer/pyTypedUtils.d.ts +4 -0
- package/dist/analyzer/pyTypedUtils.js +17 -3
- package/dist/analyzer/pyTypedUtils.js.map +1 -1
- package/dist/analyzer/service.d.ts +3 -2
- package/dist/analyzer/service.js +7 -4
- package/dist/analyzer/service.js.map +1 -1
- package/dist/analyzer/sourceFile.d.ts +5 -3
- package/dist/analyzer/sourceFile.js +108 -71
- package/dist/analyzer/sourceFile.js.map +1 -1
- package/dist/analyzer/sourceFileInfoUtils.js +1 -1
- package/dist/analyzer/sourceMapper.js +6 -6
- package/dist/analyzer/symbol.d.ts +4 -1
- package/dist/analyzer/symbol.js +10 -0
- package/dist/analyzer/symbol.js.map +1 -1
- package/dist/analyzer/symbolUtils.d.ts +2 -1
- package/dist/analyzer/symbolUtils.js +13 -3
- package/dist/analyzer/symbolUtils.js.map +1 -1
- package/dist/analyzer/typeDocStringUtils.js +1 -1
- package/dist/analyzer/typeDocStringUtils.js.map +1 -1
- package/dist/analyzer/typeEvaluator.js +254 -119
- package/dist/analyzer/typeEvaluator.js.map +1 -1
- package/dist/analyzer/typeEvaluatorTypes.d.ts +3 -1
- package/dist/analyzer/typeGuards.js +107 -59
- package/dist/analyzer/typeGuards.js.map +1 -1
- package/dist/analyzer/typeStubWriter.js +1 -1
- package/dist/analyzer/typeStubWriter.js.map +1 -1
- package/dist/analyzer/typeUtils.d.ts +1 -1
- package/dist/analyzer/typeUtils.js +33 -33
- package/dist/analyzer/typeUtils.js.map +1 -1
- package/dist/analyzer/typeVarContext.js +1 -1
- package/dist/analyzer/typeVarContext.js.map +1 -1
- package/dist/analyzer/typedDicts.js +30 -21
- package/dist/analyzer/typedDicts.js.map +1 -1
- package/dist/analyzer/types.d.ts +7 -3
- package/dist/analyzer/types.js +48 -8
- package/dist/analyzer/types.js.map +1 -1
- package/dist/backgroundAnalysis.d.ts +1 -0
- package/dist/backgroundAnalysis.js +5 -1
- package/dist/backgroundAnalysis.js.map +1 -1
- package/dist/backgroundAnalysisBase.d.ts +2 -1
- package/dist/backgroundAnalysisBase.js +8 -1
- package/dist/backgroundAnalysisBase.js.map +1 -1
- package/dist/backgroundThreadBase.d.ts +6 -5
- package/dist/backgroundThreadBase.js +9 -5
- package/dist/backgroundThreadBase.js.map +1 -1
- package/dist/commands/dumpFileDebugInfoCommand.js +4 -4
- package/dist/commands/dumpFileDebugInfoCommand.js.map +1 -1
- package/dist/common/extensibility.d.ts +3 -2
- package/dist/common/extensibility.js.map +1 -1
- package/dist/common/serviceProviderExtensions.d.ts +2 -0
- package/dist/common/serviceProviderExtensions.js +4 -0
- package/dist/common/serviceProviderExtensions.js.map +1 -1
- package/dist/common/textEditTracker.d.ts +5 -5
- package/dist/common/textEditTracker.js +33 -33
- package/dist/common/textEditTracker.js.map +1 -1
- package/dist/common/workspaceEditUtils.js +2 -2
- package/dist/common/workspaceEditUtils.js.map +1 -1
- package/dist/languageServerBase.d.ts +4 -4
- package/dist/languageServerBase.js +1 -1
- package/dist/languageServerBase.js.map +1 -1
- package/dist/languageService/autoImporter.d.ts +3 -3
- package/dist/languageService/autoImporter.js +2 -1
- package/dist/languageService/autoImporter.js.map +1 -1
- package/dist/languageService/callHierarchyProvider.js +2 -2
- package/dist/languageService/callHierarchyProvider.js.map +1 -1
- package/dist/languageService/completionProvider.d.ts +2 -4
- package/dist/languageService/completionProvider.js +15 -37
- package/dist/languageService/completionProvider.js.map +1 -1
- package/dist/languageService/definitionProvider.js +1 -1
- package/dist/languageService/definitionProvider.js.map +1 -1
- package/dist/languageService/documentHighlightProvider.js +2 -2
- package/dist/languageService/documentHighlightProvider.js.map +1 -1
- package/dist/languageService/documentSymbolCollector.js +1 -1
- package/dist/languageService/documentSymbolCollector.js.map +1 -1
- package/dist/languageService/documentSymbolProvider.js +1 -1
- package/dist/languageService/documentSymbolProvider.js.map +1 -1
- package/dist/languageService/hoverProvider.js +2 -2
- package/dist/languageService/hoverProvider.js.map +1 -1
- package/dist/languageService/importSorter.d.ts +2 -2
- package/dist/languageService/importSorter.js +1 -1
- package/dist/languageService/importSorter.js.map +1 -1
- package/dist/languageService/referencesProvider.d.ts +4 -4
- package/dist/languageService/referencesProvider.js +2 -2
- package/dist/languageService/referencesProvider.js.map +1 -1
- package/dist/languageService/signatureHelpProvider.js +2 -2
- package/dist/languageService/signatureHelpProvider.js.map +1 -1
- package/dist/languageService/symbolIndexer.d.ts +2 -2
- package/dist/languageService/symbolIndexer.js +2 -2
- package/dist/languageService/symbolIndexer.js.map +1 -1
- package/dist/languageService/tooltipUtils.d.ts +1 -1
- package/dist/languageService/tooltipUtils.js +4 -4
- package/dist/languageService/workspaceSymbolProvider.js +1 -1
- package/dist/languageService/workspaceSymbolProvider.js.map +1 -1
- package/dist/localization/localize.d.ts +7 -0
- package/dist/localization/localize.js +5 -0
- package/dist/localization/localize.js.map +1 -1
- package/dist/localization/package.nls.cs.json +1 -0
- package/dist/localization/package.nls.de.json +2 -1
- package/dist/localization/package.nls.en-us.json +28 -23
- package/dist/localization/package.nls.es.json +5 -4
- package/dist/localization/package.nls.fr.json +5 -4
- package/dist/localization/package.nls.it.json +2 -1
- package/dist/localization/package.nls.ja.json +1 -0
- package/dist/localization/package.nls.ko.json +4 -3
- package/dist/localization/package.nls.pl.json +4 -3
- package/dist/localization/package.nls.pt-br.json +1 -0
- package/dist/localization/package.nls.qps-ploc.json +1 -0
- package/dist/localization/package.nls.ru.json +2 -1
- package/dist/localization/package.nls.tr.json +3 -2
- package/dist/localization/package.nls.zh-cn.json +2 -1
- package/dist/localization/package.nls.zh-tw.json +1 -0
- package/dist/nodeMain.d.ts +1 -1
- package/dist/nodeMain.js +2 -2
- package/dist/nodeMain.js.map +1 -1
- package/dist/parser/parser.d.ts +7 -4
- package/dist/parser/parser.js +10 -7
- package/dist/parser/parser.js.map +1 -1
- package/dist/parser/tokenizer.js +1 -0
- package/dist/parser/tokenizer.js.map +1 -1
- package/dist/parser/tokenizerTypes.d.ts +1 -0
- package/dist/parser/tokenizerTypes.js +1 -0
- package/dist/parser/tokenizerTypes.js.map +1 -1
- package/dist/server.d.ts +3 -3
- package/dist/server.js +3 -3
- package/dist/server.js.map +1 -1
- package/dist/tests/cacheManager.test.js +35 -0
- package/dist/tests/cacheManager.test.js.map +1 -1
- package/dist/tests/chainedSourceFiles.test.js +7 -7
- package/dist/tests/chainedSourceFiles.test.js.map +1 -1
- package/dist/tests/harness/fourslash/testState.d.ts +5 -5
- package/dist/tests/harness/fourslash/testState.js +8 -7
- package/dist/tests/harness/fourslash/testState.js.map +1 -1
- package/dist/tests/harness/fourslash/workspaceEditTestUtils.d.ts +2 -2
- package/dist/tests/harness/fourslash/workspaceEditTestUtils.js +5 -5
- package/dist/tests/harness/fourslash/workspaceEditTestUtils.js.map +1 -1
- package/dist/tests/importStatementUtils.test.js +4 -4
- package/dist/tests/importStatementUtils.test.js.map +1 -1
- package/dist/tests/ipythonMode.test.js +1 -1
- package/dist/tests/ipythonMode.test.js.map +1 -1
- package/dist/tests/lsp/languageServer.js +1 -1
- package/dist/tests/lsp/languageServer.js.map +1 -1
- package/dist/tests/lsp/languageServerTestUtils.d.ts +1 -1
- package/dist/tests/parser.test.js +14 -14
- package/dist/tests/parser.test.js.map +1 -1
- package/dist/tests/signatureHelp.test.js +1 -1
- package/dist/tests/signatureHelp.test.js.map +1 -1
- package/dist/tests/testStateUtils.js +5 -3
- package/dist/tests/testStateUtils.js.map +1 -1
- package/dist/tests/testUtils.d.ts +4 -8
- package/dist/tests/testUtils.js +4 -7
- package/dist/tests/testUtils.js.map +1 -1
- package/dist/tests/textEditUtil.test.js +3 -3
- package/dist/tests/textEditUtil.test.js.map +1 -1
- package/dist/tests/tokenizer.test.js +4 -4
- package/dist/tests/tokenizer.test.js.map +1 -1
- package/dist/tests/typeEvaluator1.test.js +6 -2
- package/dist/tests/typeEvaluator1.test.js.map +1 -1
- package/dist/tests/typeEvaluator2.test.js +4 -0
- package/dist/tests/typeEvaluator2.test.js.map +1 -1
- package/dist/tests/typeEvaluator3.test.js +21 -11
- package/dist/tests/typeEvaluator3.test.js.map +1 -1
- package/dist/tests/typeEvaluator4.test.js +1 -1
- 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
|
-
|
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":";AAAA;;;;;;;;GAQG;;;
|
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 {
|
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:
|
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;
|
package/dist/analyzer/checker.js
CHANGED
@@ -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.
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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 =
|
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.
|
4089
|
-
const overriddenDecl = (0, symbolUtils_1.
|
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.
|
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
|
-
|
4212
|
-
const primaryDecl = (0, symbolUtils_1.
|
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
|
-
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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)) {
|