@zzzen/pyright-internal 1.2.0-dev.20230521 → 1.2.0-dev.20230604
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/checker.js +4 -4
- package/dist/analyzer/checker.js.map +1 -1
- package/dist/analyzer/commentUtils.js +15 -16
- package/dist/analyzer/commentUtils.js.map +1 -1
- package/dist/analyzer/constraintSolver.d.ts +1 -1
- package/dist/analyzer/constraintSolver.js +24 -8
- package/dist/analyzer/constraintSolver.js.map +1 -1
- package/dist/analyzer/constructorTransform.js +3 -3
- package/dist/analyzer/constructorTransform.js.map +1 -1
- package/dist/analyzer/constructors.js +153 -132
- package/dist/analyzer/constructors.js.map +1 -1
- package/dist/analyzer/dataClasses.js +1 -1
- package/dist/analyzer/dataClasses.js.map +1 -1
- package/dist/analyzer/docStringConversion.js +1 -1
- package/dist/analyzer/enums.js +1 -1
- package/dist/analyzer/enums.js.map +1 -1
- package/dist/analyzer/parameterUtils.js +7 -7
- package/dist/analyzer/parameterUtils.js.map +1 -1
- package/dist/analyzer/parseTreeUtils.d.ts +1 -0
- package/dist/analyzer/parseTreeUtils.js +21 -6
- package/dist/analyzer/parseTreeUtils.js.map +1 -1
- package/dist/analyzer/patternMatching.js +2 -1
- package/dist/analyzer/patternMatching.js.map +1 -1
- package/dist/analyzer/program.js +9 -4
- package/dist/analyzer/program.js.map +1 -1
- package/dist/analyzer/service.js +8 -0
- package/dist/analyzer/service.js.map +1 -1
- package/dist/analyzer/sourceFile.d.ts +3 -2
- package/dist/analyzer/sourceFile.js +204 -190
- package/dist/analyzer/sourceFile.js.map +1 -1
- package/dist/analyzer/typeCacheUtils.d.ts +9 -2
- package/dist/analyzer/typeCacheUtils.js +52 -9
- package/dist/analyzer/typeCacheUtils.js.map +1 -1
- package/dist/analyzer/typeEvaluator.js +220 -128
- package/dist/analyzer/typeEvaluator.js.map +1 -1
- package/dist/analyzer/typeGuards.js +3 -3
- package/dist/analyzer/typeGuards.js.map +1 -1
- package/dist/analyzer/typePrinter.js +9 -9
- package/dist/analyzer/typePrinter.js.map +1 -1
- package/dist/analyzer/typeStubWriter.js +2 -2
- package/dist/analyzer/typeStubWriter.js.map +1 -1
- package/dist/analyzer/typeUtils.d.ts +6 -6
- package/dist/analyzer/typeUtils.js +145 -159
- package/dist/analyzer/typeUtils.js.map +1 -1
- package/dist/analyzer/typeVarContext.js +12 -1
- package/dist/analyzer/typeVarContext.js.map +1 -1
- package/dist/analyzer/typeWalker.d.ts +22 -0
- package/dist/analyzer/typeWalker.js +164 -0
- package/dist/analyzer/typeWalker.js.map +1 -0
- package/dist/analyzer/typedDicts.js +2 -2
- package/dist/analyzer/typedDicts.js.map +1 -1
- package/dist/analyzer/types.d.ts +5 -2
- package/dist/analyzer/types.js +39 -22
- package/dist/analyzer/types.js.map +1 -1
- package/dist/backgroundAnalysisBase.d.ts +4 -2
- package/dist/commands/dumpFileDebugInfoCommand.js +2 -2
- package/dist/common/commandLineOptions.d.ts +1 -0
- package/dist/common/commandLineOptions.js.map +1 -1
- package/dist/common/textRange.d.ts +3 -3
- package/dist/common/textRange.js +17 -8
- package/dist/common/textRange.js.map +1 -1
- package/dist/common/uriParser.d.ts +1 -0
- package/dist/common/uriParser.js +9 -0
- package/dist/common/uriParser.js.map +1 -1
- package/dist/languageServerBase.js +4 -2
- package/dist/languageServerBase.js.map +1 -1
- package/dist/languageService/analyzerServiceExecutor.js +1 -0
- package/dist/languageService/analyzerServiceExecutor.js.map +1 -1
- package/dist/languageService/completionProvider.js +5 -5
- package/dist/languageService/completionProvider.js.map +1 -1
- package/dist/languageService/renameProvider.d.ts +3 -3
- package/dist/languageService/renameProvider.js +6 -6
- package/dist/languageService/renameProvider.js.map +1 -1
- package/dist/localization/localize.d.ts +5 -0
- package/dist/localization/localize.js +3 -0
- package/dist/localization/localize.js.map +1 -1
- package/dist/localization/package.nls.en-us.json +3 -0
- package/dist/parser/parseNodes.d.ts +11 -3
- package/dist/parser/parseNodes.js +7 -9
- package/dist/parser/parseNodes.js.map +1 -1
- package/dist/parser/parser.js +13 -10
- package/dist/parser/parser.js.map +1 -1
- package/dist/parser/tokenizer.js +8 -7
- package/dist/parser/tokenizer.js.map +1 -1
- package/dist/tests/docStringConversion.test.js +44 -0
- package/dist/tests/docStringConversion.test.js.map +1 -1
- package/dist/tests/fourslash/fourslash.d.ts +1 -1
- package/dist/tests/fourslash/rename.function.untitledFile.fourslash.d.ts +1 -0
- package/dist/tests/fourslash/rename.function.untitledFile.fourslash.js +17 -0
- package/dist/tests/fourslash/rename.function.untitledFile.fourslash.js.map +1 -0
- package/dist/tests/harness/fourslash/testState.d.ts +1 -1
- package/dist/tests/harness/fourslash/testState.js +2 -2
- package/dist/tests/harness/fourslash/testState.js.map +1 -1
- package/dist/tests/service.test.js +10 -0
- package/dist/tests/service.test.js.map +1 -1
- package/dist/tests/tokenizer.test.js +8 -0
- package/dist/tests/tokenizer.test.js.map +1 -1
- package/dist/tests/typeEvaluator1.test.js +5 -1
- package/dist/tests/typeEvaluator1.test.js.map +1 -1
- package/dist/tests/typeEvaluator2.test.js +12 -0
- package/dist/tests/typeEvaluator2.test.js.map +1 -1
- package/dist/tests/typeEvaluator3.test.js +17 -1
- package/dist/tests/typeEvaluator3.test.js.map +1 -1
- package/dist/tests/typeEvaluator4.test.js +4 -0
- package/dist/tests/typeEvaluator4.test.js.map +1 -1
- package/dist/tests/typePrinter.test.js +3 -3
- package/dist/tests/typePrinter.test.js.map +1 -1
- package/dist/workspaceFactory.js +4 -4
- package/dist/workspaceFactory.js.map +1 -1
- package/package.json +1 -1
@@ -7,7 +7,11 @@ interface SpeculativeEntry {
|
|
7
7
|
interface SpeculativeContext {
|
8
8
|
speculativeRootNode: ParseNode;
|
9
9
|
entriesToUndo: SpeculativeEntry[];
|
10
|
-
|
10
|
+
dependentType: Type | undefined;
|
11
|
+
}
|
12
|
+
interface DependentType {
|
13
|
+
speculativeRootNode: ParseNode;
|
14
|
+
dependentType: Type;
|
11
15
|
}
|
12
16
|
export interface TypeResult {
|
13
17
|
type: Type;
|
@@ -17,11 +21,13 @@ export interface SpeculativeTypeEntry {
|
|
17
21
|
typeResult: TypeResult;
|
18
22
|
expectedType: Type | undefined;
|
19
23
|
incompleteGenerationCount: number;
|
24
|
+
dependentTypes?: DependentType[];
|
20
25
|
}
|
21
26
|
export declare class SpeculativeTypeTracker {
|
22
27
|
private _speculativeContextStack;
|
23
28
|
private _speculativeTypeCache;
|
24
|
-
|
29
|
+
private _activeDependentTypes;
|
30
|
+
enterSpeculativeContext(speculativeRootNode: ParseNode, dependentType: Type | undefined): void;
|
25
31
|
leaveSpeculativeContext(): void;
|
26
32
|
isSpeculative(node: ParseNode | undefined): boolean;
|
27
33
|
trackEntry(cache: Map<number, any>, id: number): void;
|
@@ -29,5 +35,6 @@ export declare class SpeculativeTypeTracker {
|
|
29
35
|
enableSpeculativeMode(stack: SpeculativeContext[]): void;
|
30
36
|
addSpeculativeType(node: ParseNode, typeResult: TypeResult, incompleteGenerationCount: number, expectedType: Type | undefined): void;
|
31
37
|
getSpeculativeType(node: ParseNode, expectedType: Type | undefined): SpeculativeTypeEntry | undefined;
|
38
|
+
private _dependentTypesMatch;
|
32
39
|
}
|
33
40
|
export {};
|
@@ -36,22 +36,41 @@ const types_1 = require("./types");
|
|
36
36
|
// entries that were created within that context are removed from the
|
37
37
|
// corresponding type caches because they are no longer valid.
|
38
38
|
// Each type context also contains a map of "speculative types" that are
|
39
|
-
// contextually evaluated based on an "expected type"
|
39
|
+
// contextually evaluated based on an "expected type" and potentially
|
40
|
+
// one or more "dependent types". The "expected type" applies in cases
|
41
|
+
// where the speculative root node is being evaluated with bidirectional
|
42
|
+
// type inference. Dependent types apply in cases where the type of
|
43
|
+
// many subnodes depends on the expected type of a parent node, as in the
|
44
|
+
// case of lambda type inference.
|
40
45
|
class SpeculativeTypeTracker {
|
41
46
|
constructor() {
|
42
47
|
this._speculativeContextStack = [];
|
43
48
|
this._speculativeTypeCache = new Map();
|
49
|
+
this._activeDependentTypes = [];
|
44
50
|
}
|
45
|
-
enterSpeculativeContext(speculativeRootNode,
|
51
|
+
enterSpeculativeContext(speculativeRootNode, dependentType) {
|
46
52
|
this._speculativeContextStack.push({
|
47
53
|
speculativeRootNode,
|
48
54
|
entriesToUndo: [],
|
49
|
-
|
55
|
+
dependentType,
|
50
56
|
});
|
57
|
+
// Retain a list of active dependent types. This information is already
|
58
|
+
// contained within the speculative context stack, but we retain a copy
|
59
|
+
// in this alternate form for performance reasons.
|
60
|
+
if (dependentType) {
|
61
|
+
this._activeDependentTypes.push({
|
62
|
+
speculativeRootNode,
|
63
|
+
dependentType,
|
64
|
+
});
|
65
|
+
}
|
51
66
|
}
|
52
67
|
leaveSpeculativeContext() {
|
53
68
|
(0, debug_1.assert)(this._speculativeContextStack.length > 0);
|
54
69
|
const context = this._speculativeContextStack.pop();
|
70
|
+
if (context === null || context === void 0 ? void 0 : context.dependentType) {
|
71
|
+
(0, debug_1.assert)(this._activeDependentTypes.length > 0);
|
72
|
+
this._activeDependentTypes.pop();
|
73
|
+
}
|
55
74
|
// Delete all of the speculative type cache entries
|
56
75
|
// that were tracked in this context.
|
57
76
|
context.entriesToUndo.forEach((entry) => {
|
@@ -95,9 +114,6 @@ class SpeculativeTypeTracker {
|
|
95
114
|
}
|
96
115
|
addSpeculativeType(node, typeResult, incompleteGenerationCount, expectedType) {
|
97
116
|
(0, debug_1.assert)(this._speculativeContextStack.length > 0);
|
98
|
-
if (this._speculativeContextStack.some((context) => !context.allowCacheRetention)) {
|
99
|
-
return;
|
100
|
-
}
|
101
117
|
const maxCacheEntriesPerNode = 8;
|
102
118
|
let cacheEntries = this._speculativeTypeCache.get(node.id);
|
103
119
|
if (!cacheEntries) {
|
@@ -126,7 +142,15 @@ class SpeculativeTypeTracker {
|
|
126
142
|
}
|
127
143
|
}
|
128
144
|
// Add the new entry.
|
129
|
-
|
145
|
+
const newEntry = {
|
146
|
+
typeResult,
|
147
|
+
expectedType,
|
148
|
+
incompleteGenerationCount,
|
149
|
+
};
|
150
|
+
if (this._activeDependentTypes.length > 0) {
|
151
|
+
newEntry.dependentTypes = Array.from(this._activeDependentTypes);
|
152
|
+
}
|
153
|
+
cacheEntries.push(newEntry);
|
130
154
|
this._speculativeTypeCache.set(node.id, cacheEntries);
|
131
155
|
}
|
132
156
|
getSpeculativeType(node, expectedType) {
|
@@ -135,11 +159,13 @@ class SpeculativeTypeTracker {
|
|
135
159
|
if (entries) {
|
136
160
|
for (const entry of entries) {
|
137
161
|
if (!expectedType) {
|
138
|
-
if (!entry.expectedType) {
|
162
|
+
if (!entry.expectedType && this._dependentTypesMatch(entry)) {
|
139
163
|
return entry;
|
140
164
|
}
|
141
165
|
}
|
142
|
-
else if (entry.expectedType &&
|
166
|
+
else if (entry.expectedType &&
|
167
|
+
(0, types_1.isTypeSame)(expectedType, entry.expectedType) &&
|
168
|
+
this._dependentTypesMatch(entry)) {
|
143
169
|
return entry;
|
144
170
|
}
|
145
171
|
}
|
@@ -147,6 +173,23 @@ class SpeculativeTypeTracker {
|
|
147
173
|
}
|
148
174
|
return undefined;
|
149
175
|
}
|
176
|
+
// Determines whether a cache entry matches the current set of
|
177
|
+
// active dependent types. If not, the cache entry can't be used
|
178
|
+
// in the current context.
|
179
|
+
_dependentTypesMatch(entry) {
|
180
|
+
var _a;
|
181
|
+
const cachedDependentTypes = (_a = entry.dependentTypes) !== null && _a !== void 0 ? _a : [];
|
182
|
+
if (cachedDependentTypes.length !== this._activeDependentTypes.length) {
|
183
|
+
return false;
|
184
|
+
}
|
185
|
+
return cachedDependentTypes.every((cachedDepType, index) => {
|
186
|
+
const activeDepType = this._activeDependentTypes[index];
|
187
|
+
if (cachedDepType.speculativeRootNode !== activeDepType.speculativeRootNode) {
|
188
|
+
return false;
|
189
|
+
}
|
190
|
+
return (0, types_1.isTypeSame)(cachedDepType.dependentType, activeDepType.dependentType);
|
191
|
+
});
|
192
|
+
}
|
150
193
|
}
|
151
194
|
exports.SpeculativeTypeTracker = SpeculativeTypeTracker;
|
152
195
|
//# sourceMappingURL=typeCacheUtils.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"typeCacheUtils.js","sourceRoot":"","sources":["../../../src/analyzer/typeCacheUtils.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;;;;;;;;;;;;;;;;;;;;AAEH,2CAAyC;AAEzC,iEAAmD;AACnD,mCAA2C;
|
1
|
+
{"version":3,"file":"typeCacheUtils.js","sourceRoot":"","sources":["../../../src/analyzer/typeCacheUtils.ts"],"names":[],"mappings":"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"}
|