@zzzen/pyright-internal 1.2.0-dev.20260705 → 1.2.0-dev.20260719
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.d.ts +2 -0
- package/dist/analyzer/checker.js +89 -4
- package/dist/analyzer/checker.js.map +1 -1
- package/dist/analyzer/functionTransform.js +188 -0
- package/dist/analyzer/functionTransform.js.map +1 -1
- package/dist/analyzer/packageTypeVerifier.js +11 -1
- package/dist/analyzer/packageTypeVerifier.js.map +1 -1
- package/dist/analyzer/properties.js +73 -8
- package/dist/analyzer/properties.js.map +1 -1
- package/dist/analyzer/typeEvaluator.js +7 -1
- package/dist/analyzer/typeEvaluator.js.map +1 -1
- package/dist/analyzer/typeGuards.js +1 -1
- package/dist/analyzer/typeGuards.js.map +1 -1
- package/dist/analyzer/typeUtils.js.map +1 -1
- package/dist/analyzer/types.d.ts +1 -1
- package/dist/analyzer/types.js.map +1 -1
- package/dist/tests/typeEvaluator3.test.js +6 -0
- package/dist/tests/typeEvaluator3.test.js.map +1 -1
- package/dist/tests/typeEvaluator8.test.js +38 -0
- package/dist/tests/typeEvaluator8.test.js.map +1 -1
- package/dist/tests/typeServer/inProcTypeServerTestUtils.d.ts +39 -0
- package/dist/tests/typeServer/inProcTypeServerTestUtils.js +366 -0
- package/dist/tests/typeServer/inProcTypeServerTestUtils.js.map +1 -0
- package/dist/tests/typeServer/notebook.typeServer.test.d.ts +1 -0
- package/dist/tests/typeServer/notebook.typeServer.test.js +315 -0
- package/dist/tests/typeServer/notebook.typeServer.test.js.map +1 -0
- package/dist/tests/typeServer/typeServer.inProc.test.d.ts +1 -0
- package/dist/tests/typeServer/typeServer.inProc.test.js +234 -0
- package/dist/tests/typeServer/typeServer.inProc.test.js.map +1 -0
- package/dist/tests/typeServer/typeServer.virtualFileRedirect.test.d.ts +1 -0
- package/dist/tests/typeServer/typeServer.virtualFileRedirect.test.js +298 -0
- package/dist/tests/typeServer/typeServer.virtualFileRedirect.test.js.map +1 -0
- package/dist/typeServer/cancellation.d.ts +5 -0
- package/dist/typeServer/cancellation.js +14 -0
- package/dist/typeServer/cancellation.js.map +1 -0
- package/dist/typeServer/diagnosticUtils.d.ts +4 -0
- package/dist/typeServer/diagnosticUtils.js +71 -0
- package/dist/typeServer/diagnosticUtils.js.map +1 -0
- package/dist/typeServer/enums.d.ts +14 -0
- package/dist/typeServer/enums.js +524 -0
- package/dist/typeServer/enums.js.map +1 -0
- package/dist/typeServer/eventEmitter.d.ts +12 -0
- package/dist/typeServer/eventEmitter.js +32 -0
- package/dist/typeServer/eventEmitter.js.map +1 -0
- package/dist/typeServer/nodeMain.d.ts +1 -0
- package/dist/typeServer/nodeMain.js +65 -0
- package/dist/typeServer/nodeMain.js.map +1 -0
- package/dist/typeServer/notebookCellChain.d.ts +34 -0
- package/dist/typeServer/notebookCellChain.js +182 -0
- package/dist/typeServer/notebookCellChain.js.map +1 -0
- package/dist/typeServer/notebookDocumentHandler.d.ts +23 -0
- package/dist/typeServer/notebookDocumentHandler.js +158 -0
- package/dist/typeServer/notebookDocumentHandler.js.map +1 -0
- package/dist/typeServer/notebookUriMapper.d.ts +39 -0
- package/dist/typeServer/notebookUriMapper.js +164 -0
- package/dist/typeServer/notebookUriMapper.js.map +1 -0
- package/dist/typeServer/profilingStub.d.ts +10 -0
- package/dist/typeServer/profilingStub.js +12 -0
- package/dist/typeServer/profilingStub.js.map +1 -0
- package/dist/typeServer/programTypes.d.ts +136 -0
- package/dist/typeServer/programTypes.js +3 -0
- package/dist/typeServer/programTypes.js.map +1 -0
- package/dist/typeServer/programWrapper.d.ts +134 -0
- package/dist/typeServer/programWrapper.js +731 -0
- package/dist/typeServer/programWrapper.js.map +1 -0
- package/dist/typeServer/protocol/tspSupplemental.d.ts +43 -0
- package/dist/typeServer/protocol/tspSupplemental.js +48 -0
- package/dist/typeServer/protocol/tspSupplemental.js.map +1 -0
- package/dist/typeServer/protocol/typeServerProtocol.d.ts +1102 -0
- package/dist/typeServer/protocol/typeServerProtocol.js +290 -0
- package/dist/typeServer/protocol/typeServerProtocol.js.map +1 -0
- package/dist/typeServer/server.d.ts +54 -0
- package/dist/typeServer/server.js +620 -0
- package/dist/typeServer/server.js.map +1 -0
- package/dist/typeServer/serverUtils.d.ts +4 -0
- package/dist/typeServer/serverUtils.js +21 -0
- package/dist/typeServer/serverUtils.js.map +1 -0
- package/dist/typeServer/stubGenerator.d.ts +42 -0
- package/dist/typeServer/stubGenerator.js +895 -0
- package/dist/typeServer/stubGenerator.js.map +1 -0
- package/dist/typeServer/typeCache.d.ts +31 -0
- package/dist/typeServer/typeCache.js +54 -0
- package/dist/typeServer/typeCache.js.map +1 -0
- package/dist/typeServer/typeEvalUtils.d.ts +13 -0
- package/dist/typeServer/typeEvalUtils.js +83 -0
- package/dist/typeServer/typeEvalUtils.js.map +1 -0
- package/dist/typeServer/typeGuards.d.ts +3 -0
- package/dist/typeServer/typeGuards.js +55 -0
- package/dist/typeServer/typeGuards.js.map +1 -0
- package/dist/typeServer/typeServerConversionTypes.d.ts +39 -0
- package/dist/typeServer/typeServerConversionTypes.js +448 -0
- package/dist/typeServer/typeServerConversionTypes.js.map +1 -0
- package/dist/typeServer/typeServerConversionUtils.d.ts +35 -0
- package/dist/typeServer/typeServerConversionUtils.js +524 -0
- package/dist/typeServer/typeServerConversionUtils.js.map +1 -0
- package/dist/typeServer/typeServerEvaluator.d.ts +16 -0
- package/dist/typeServer/typeServerEvaluator.js +36 -0
- package/dist/typeServer/typeServerEvaluator.js.map +1 -0
- package/dist/typeServer/typeServerFileSystem.d.ts +47 -0
- package/dist/typeServer/typeServerFileSystem.js +129 -0
- package/dist/typeServer/typeServerFileSystem.js.map +1 -0
- package/dist/typeServer/typeServerProtocolUtils.d.ts +2 -0
- package/dist/typeServer/typeServerProtocolUtils.js +7 -0
- package/dist/typeServer/typeServerProtocolUtils.js.map +1 -0
- package/dist/typeServer/typeServerServiceKeys.d.ts +7 -0
- package/dist/typeServer/typeServerServiceKeys.js +20 -0
- package/dist/typeServer/typeServerServiceKeys.js.map +1 -0
- package/dist/typeServer/typeUtils.d.ts +4 -0
- package/dist/typeServer/typeUtils.js +31 -0
- package/dist/typeServer/typeUtils.js.map +1 -0
- package/dist/typeServer/virtualFileOverlayFileSystem.d.ts +87 -0
- package/dist/typeServer/virtualFileOverlayFileSystem.js +181 -0
- package/dist/typeServer/virtualFileOverlayFileSystem.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,524 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.ProtocolTypeFactory = void 0;
|
|
37
|
+
exports.toProtocolModuleName = toProtocolModuleName;
|
|
38
|
+
exports.getDeclarationForTypeVar = getDeclarationForTypeVar;
|
|
39
|
+
exports.findFirstExpression = findFirstExpression;
|
|
40
|
+
const vscode_languageserver_protocol_1 = require("vscode-languageserver-protocol");
|
|
41
|
+
const parseTreeWalker_1 = require("../analyzer/parseTreeWalker");
|
|
42
|
+
const PyrightTypes = __importStar(require("../analyzer/types"));
|
|
43
|
+
const debug_1 = require("../common/debug");
|
|
44
|
+
const positionUtils_1 = require("../common/positionUtils");
|
|
45
|
+
const uriUtils_1 = require("../common/uri/uriUtils");
|
|
46
|
+
const PyrightNodes = __importStar(require("../parser/parseNodes"));
|
|
47
|
+
const typeEvalUtils_1 = require("./typeEvalUtils");
|
|
48
|
+
const stubGenerator_1 = require("./stubGenerator");
|
|
49
|
+
const typeServerConversionTypes_1 = require("./typeServerConversionTypes");
|
|
50
|
+
function toProtocolModuleName(moduleName) {
|
|
51
|
+
if (moduleName.length === 0) {
|
|
52
|
+
return { leadingDots: 0, nameParts: [] };
|
|
53
|
+
}
|
|
54
|
+
let startIndex = 0;
|
|
55
|
+
let leadingDots = 0;
|
|
56
|
+
for (; startIndex < moduleName.length; startIndex++) {
|
|
57
|
+
if (moduleName[startIndex] !== '.') {
|
|
58
|
+
break;
|
|
59
|
+
}
|
|
60
|
+
leadingDots++;
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
leadingDots,
|
|
64
|
+
nameParts: moduleName.slice(startIndex).split('.'),
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
class ProtocolTypeFactory {
|
|
68
|
+
constructor(view, pythonVersion, declarationOrNode) {
|
|
69
|
+
this.view = view;
|
|
70
|
+
this.pythonVersion = pythonVersion;
|
|
71
|
+
this._id = 0;
|
|
72
|
+
this._cycleMap = new Map();
|
|
73
|
+
this._evaluator = view.createEvaluator();
|
|
74
|
+
// Extract source URI from declaration or node
|
|
75
|
+
this._sourceUri = this._extractSourceUri(declarationOrNode);
|
|
76
|
+
}
|
|
77
|
+
get sourceUri() {
|
|
78
|
+
return this._sourceUri;
|
|
79
|
+
}
|
|
80
|
+
get evaluator() {
|
|
81
|
+
return this._evaluator;
|
|
82
|
+
}
|
|
83
|
+
getNextId() {
|
|
84
|
+
return this._id++;
|
|
85
|
+
}
|
|
86
|
+
getModule(type) {
|
|
87
|
+
const moduleName = type.shared.moduleName;
|
|
88
|
+
const moduleDescriptor = toProtocolModuleName(moduleName);
|
|
89
|
+
const moduleUri = this.view.resolveImport(this.sourceUri, moduleDescriptor, vscode_languageserver_protocol_1.CancellationToken.None) || this.sourceUri;
|
|
90
|
+
const moduleNode = this.view.getParserOutput(moduleUri)?.parseTree;
|
|
91
|
+
(0, debug_1.assert)(moduleNode !== undefined, `Module node not found for URI: ${moduleUri.toString()}`);
|
|
92
|
+
const scope = this.view.symbolLookup.getScope(moduleNode);
|
|
93
|
+
const symbolTable = scope?.symbolTable;
|
|
94
|
+
return PyrightTypes.ModuleType.create(moduleName, moduleUri, symbolTable);
|
|
95
|
+
}
|
|
96
|
+
getType(type) {
|
|
97
|
+
const newId = this.getNextId();
|
|
98
|
+
const existingTypeId = this._cycleMap.get(type);
|
|
99
|
+
if (existingTypeId !== undefined) {
|
|
100
|
+
return {
|
|
101
|
+
id: newId,
|
|
102
|
+
kind: 9 /* TypeServerProtocol.TypeKind.TypeReference */,
|
|
103
|
+
flags: 0 /* TypeServerProtocol.TypeFlags.None */,
|
|
104
|
+
typeReferenceId: existingTypeId,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
this._set(type, newId);
|
|
108
|
+
return toProtocolType(newId, type, this);
|
|
109
|
+
}
|
|
110
|
+
_set(type, id) {
|
|
111
|
+
this._cycleMap.set(type, id);
|
|
112
|
+
}
|
|
113
|
+
_extractSourceUri(declarationOrNode) {
|
|
114
|
+
if ((0, typeEvalUtils_1.isDeclaration)(declarationOrNode)) {
|
|
115
|
+
return declarationOrNode.uri;
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
return this.view.getUri(declarationOrNode);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
exports.ProtocolTypeFactory = ProtocolTypeFactory;
|
|
123
|
+
function toProtocolTypesOrUndefined(types, factory) {
|
|
124
|
+
if (!types) {
|
|
125
|
+
return undefined;
|
|
126
|
+
}
|
|
127
|
+
return toProtocolTypes(types, factory);
|
|
128
|
+
}
|
|
129
|
+
function toProtocolTypes(types, factory) {
|
|
130
|
+
return (0, typeEvalUtils_1.map)(types, (type) => factory.getType(type));
|
|
131
|
+
}
|
|
132
|
+
function toProtocolTypeOrUndefined(type, factory) {
|
|
133
|
+
if (!type) {
|
|
134
|
+
return undefined;
|
|
135
|
+
}
|
|
136
|
+
return factory.getType(type);
|
|
137
|
+
}
|
|
138
|
+
function toProtocolTypeArgs(type, factory) {
|
|
139
|
+
// See if we have any type arguments. Set those on the handle too.
|
|
140
|
+
let typeArgs = undefined;
|
|
141
|
+
if (type.priv.tupleTypeArgs) {
|
|
142
|
+
typeArgs = toProtocolTypesOrUndefined(type.priv.tupleTypeArgs.map((t) => t.type), factory);
|
|
143
|
+
// Set the flags on each based on tuple information
|
|
144
|
+
for (let i = 0; i < type.priv.tupleTypeArgs.length; i++) {
|
|
145
|
+
if (typeArgs && typeArgs[i] && type.priv.tupleTypeArgs[i].isUnbounded) {
|
|
146
|
+
typeArgs[i].flags |= 512 /* TypeServerProtocol.TypeFlags.Unbound */;
|
|
147
|
+
}
|
|
148
|
+
if (typeArgs && typeArgs[i] && type.priv.tupleTypeArgs[i].isOptional) {
|
|
149
|
+
typeArgs[i].flags |= 256 /* TypeServerProtocol.TypeFlags.Optional */;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
else if (type.priv.typeArgs) {
|
|
154
|
+
typeArgs = toProtocolTypesOrUndefined(type.priv.typeArgs, factory);
|
|
155
|
+
}
|
|
156
|
+
return typeArgs;
|
|
157
|
+
}
|
|
158
|
+
function toProtocolTypeAliasInfo(info, factory) {
|
|
159
|
+
if (!info) {
|
|
160
|
+
return undefined;
|
|
161
|
+
}
|
|
162
|
+
return {
|
|
163
|
+
name: info.shared.name,
|
|
164
|
+
fullName: info.shared.fullName,
|
|
165
|
+
moduleName: info.shared.moduleName,
|
|
166
|
+
fileUri: (0, uriUtils_1.convertUriToLspUriString)(factory.view.fs, info.shared.fileUri),
|
|
167
|
+
scopeId: info.shared.typeVarScopeId,
|
|
168
|
+
isTypeAliasType: info.shared.isTypeAliasType,
|
|
169
|
+
typeParams: toProtocolTypesOrUndefined(info.shared.typeParams, factory),
|
|
170
|
+
typeArgs: toProtocolTypesOrUndefined(info.typeArgs, factory),
|
|
171
|
+
computedVariance: info.shared.computedVariance?.map((v) => (0, typeServerConversionTypes_1.toProtocolVariance)(v) ?? 1 /* TypeServerProtocol.Variance.Unknown */),
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
// This should be only called from TspTypeFactory
|
|
175
|
+
// Otherwise, cycle detection won't work.
|
|
176
|
+
function toProtocolType(id, type, factory) {
|
|
177
|
+
switch (type.category) {
|
|
178
|
+
case 6 /* PyrightTypes.TypeCategory.Class */: {
|
|
179
|
+
const decl = type.shared.declaration;
|
|
180
|
+
if (decl) {
|
|
181
|
+
return {
|
|
182
|
+
id,
|
|
183
|
+
kind: 3 /* TypeServerProtocol.TypeKind.Class */,
|
|
184
|
+
flags: (0, typeServerConversionTypes_1.toProtocolTypeFlags)(type),
|
|
185
|
+
typeAliasInfo: toProtocolTypeAliasInfo(type.props?.typeAliasInfo, factory),
|
|
186
|
+
declaration: (0, typeServerConversionTypes_1.toProtocolDecl)(decl, factory.view),
|
|
187
|
+
literalValue: toProtocolLiteralValue(type, factory),
|
|
188
|
+
typeArgs: toProtocolTypeArgs(type, factory),
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
return createSynthesizedType(id, type, factory);
|
|
192
|
+
}
|
|
193
|
+
case 4 /* PyrightTypes.TypeCategory.Function */: {
|
|
194
|
+
const decl = type.shared.declaration;
|
|
195
|
+
if (decl) {
|
|
196
|
+
// Compute boundToType: if not set but strippedFirstParamType exists, use it as boundToType
|
|
197
|
+
let boundToType = type.priv.boundToType;
|
|
198
|
+
if (!boundToType &&
|
|
199
|
+
type.priv.strippedFirstParamType &&
|
|
200
|
+
PyrightTypes.isClass(type.priv.strippedFirstParamType)) {
|
|
201
|
+
boundToType = type.priv.strippedFirstParamType;
|
|
202
|
+
}
|
|
203
|
+
const returnType = PyrightTypes.FunctionType.getEffectiveReturnType(type, true);
|
|
204
|
+
return {
|
|
205
|
+
id,
|
|
206
|
+
kind: 2 /* TypeServerProtocol.TypeKind.Function */,
|
|
207
|
+
flags: (0, typeServerConversionTypes_1.toProtocolTypeFlags)(type),
|
|
208
|
+
typeAliasInfo: toProtocolTypeAliasInfo(type.props?.typeAliasInfo, factory),
|
|
209
|
+
declaration: (0, typeServerConversionTypes_1.toProtocolDecl)(decl, factory.view),
|
|
210
|
+
specializedTypes: toProtocolSpecializedFunctionTypesOrUndefined(type.priv.specializedTypes, factory),
|
|
211
|
+
boundToType: toProtocolTypeOrUndefined(boundToType, factory),
|
|
212
|
+
returnType: toProtocolTypeOrUndefined(returnType, factory),
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
return createSynthesizedType(id, type, factory);
|
|
216
|
+
}
|
|
217
|
+
case 5 /* PyrightTypes.TypeCategory.Overloaded */: {
|
|
218
|
+
const implementation = PyrightTypes.OverloadedType.getImplementation(type);
|
|
219
|
+
const overloaded = PyrightTypes.OverloadedType.getOverloads(type);
|
|
220
|
+
return {
|
|
221
|
+
id,
|
|
222
|
+
kind: 7 /* TypeServerProtocol.TypeKind.Overloaded */,
|
|
223
|
+
flags: (0, typeServerConversionTypes_1.toProtocolTypeFlags)(type),
|
|
224
|
+
overloads: toProtocolTypes(overloaded, factory),
|
|
225
|
+
implementation: toProtocolTypeOrUndefined(implementation, factory),
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
case 9 /* PyrightTypes.TypeCategory.TypeVar */: {
|
|
229
|
+
const declaration = getDeclarationForTypeVar(type, factory);
|
|
230
|
+
if (declaration) {
|
|
231
|
+
return {
|
|
232
|
+
id,
|
|
233
|
+
kind: 6 /* TypeServerProtocol.TypeKind.TypeVar */,
|
|
234
|
+
flags: (0, typeServerConversionTypes_1.toProtocolTypeFlags)(type),
|
|
235
|
+
declaration: (0, typeServerConversionTypes_1.toProtocolDecl)(declaration, factory.view),
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
return createSynthesizedType(id, type, factory);
|
|
239
|
+
}
|
|
240
|
+
case 0 /* PyrightTypes.TypeCategory.Unbound */: {
|
|
241
|
+
const handle = {
|
|
242
|
+
id,
|
|
243
|
+
kind: 0 /* TypeServerProtocol.TypeKind.BuiltIn */,
|
|
244
|
+
flags: (0, typeServerConversionTypes_1.toProtocolTypeFlags)(type),
|
|
245
|
+
name: 'unbound',
|
|
246
|
+
};
|
|
247
|
+
return handle;
|
|
248
|
+
}
|
|
249
|
+
case 1 /* PyrightTypes.TypeCategory.Unknown */: {
|
|
250
|
+
const possibleType = type.priv.possibleType;
|
|
251
|
+
const handle = {
|
|
252
|
+
id,
|
|
253
|
+
kind: 0 /* TypeServerProtocol.TypeKind.BuiltIn */,
|
|
254
|
+
flags: (0, typeServerConversionTypes_1.toProtocolTypeFlags)(type),
|
|
255
|
+
name: 'unknown',
|
|
256
|
+
possibleType: toProtocolTypeOrUndefined(possibleType, factory),
|
|
257
|
+
};
|
|
258
|
+
return handle;
|
|
259
|
+
}
|
|
260
|
+
case 2 /* PyrightTypes.TypeCategory.Any */: {
|
|
261
|
+
const handle = {
|
|
262
|
+
id,
|
|
263
|
+
kind: 0 /* TypeServerProtocol.TypeKind.BuiltIn */,
|
|
264
|
+
flags: (0, typeServerConversionTypes_1.toProtocolTypeFlags)(type),
|
|
265
|
+
name: type.priv.isEllipsis ? 'ellipsis' : 'any',
|
|
266
|
+
};
|
|
267
|
+
return handle;
|
|
268
|
+
}
|
|
269
|
+
case 3 /* PyrightTypes.TypeCategory.Never */: {
|
|
270
|
+
const handle = {
|
|
271
|
+
id,
|
|
272
|
+
kind: 0 /* TypeServerProtocol.TypeKind.BuiltIn */,
|
|
273
|
+
flags: (0, typeServerConversionTypes_1.toProtocolTypeFlags)(type),
|
|
274
|
+
name: type.priv.isNoReturn ? 'noreturn' : 'never',
|
|
275
|
+
};
|
|
276
|
+
return handle;
|
|
277
|
+
}
|
|
278
|
+
case 8 /* PyrightTypes.TypeCategory.Union */:
|
|
279
|
+
return {
|
|
280
|
+
id,
|
|
281
|
+
kind: 4 /* TypeServerProtocol.TypeKind.Union */,
|
|
282
|
+
flags: (0, typeServerConversionTypes_1.toProtocolTypeFlags)(type),
|
|
283
|
+
typeAliasInfo: toProtocolTypeAliasInfo(type.props?.typeAliasInfo, factory),
|
|
284
|
+
subTypes: (0, typeEvalUtils_1.map)(type.priv.subtypes, (t) => factory.getType(t)),
|
|
285
|
+
};
|
|
286
|
+
case 7 /* PyrightTypes.TypeCategory.Module */: {
|
|
287
|
+
return {
|
|
288
|
+
id,
|
|
289
|
+
kind: 5 /* TypeServerProtocol.TypeKind.Module */,
|
|
290
|
+
flags: (0, typeServerConversionTypes_1.toProtocolTypeFlags)(type),
|
|
291
|
+
moduleName: type.priv.moduleName,
|
|
292
|
+
uri: (0, uriUtils_1.convertUriToLspUriString)(factory.view.fs, type.priv.fileUri),
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
function createSynthesizedType(id, type, factory) {
|
|
298
|
+
const options = { pythonVersion: factory.pythonVersion };
|
|
299
|
+
let moduleHandle;
|
|
300
|
+
let stubResult;
|
|
301
|
+
if (PyrightTypes.isTypeVar(type)) {
|
|
302
|
+
const moduleName = factory.view.getModuleName(factory.sourceUri) ?? '';
|
|
303
|
+
const moduleType = PyrightTypes.ModuleType.create(moduleName, factory.sourceUri, new Map());
|
|
304
|
+
moduleHandle = factory.getType(moduleType);
|
|
305
|
+
stubResult = (0, stubGenerator_1.generateStubFromTypeVar)(type, options);
|
|
306
|
+
}
|
|
307
|
+
else {
|
|
308
|
+
const module = factory.getModule(type);
|
|
309
|
+
moduleHandle = factory.getType(module);
|
|
310
|
+
stubResult = PyrightTypes.isFunction(type)
|
|
311
|
+
? (0, stubGenerator_1.generateStubFromFunctionType)(factory.evaluator, type, options)
|
|
312
|
+
: (0, stubGenerator_1.generateStubFromClassType)(factory.evaluator, type, options);
|
|
313
|
+
}
|
|
314
|
+
const metadata = {
|
|
315
|
+
module: moduleHandle,
|
|
316
|
+
primaryDefinitionOffset: stubResult.primaryDefinitionOffset,
|
|
317
|
+
};
|
|
318
|
+
return {
|
|
319
|
+
id,
|
|
320
|
+
kind: 8 /* TypeServerProtocol.TypeKind.Synthesized */,
|
|
321
|
+
flags: (0, typeServerConversionTypes_1.toProtocolTypeFlags)(type),
|
|
322
|
+
typeAliasInfo: toProtocolTypeAliasInfo(type.props?.typeAliasInfo, factory),
|
|
323
|
+
stubContent: stubResult.stubContent,
|
|
324
|
+
metadata,
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
function toProtocolSpecializedFunctionTypesOrUndefined(specializedTypes, factory) {
|
|
328
|
+
if (!specializedTypes) {
|
|
329
|
+
return undefined;
|
|
330
|
+
}
|
|
331
|
+
return {
|
|
332
|
+
parameterTypes: (0, typeEvalUtils_1.map)(specializedTypes.parameterTypes, (t) => factory.getType(t)),
|
|
333
|
+
parameterDefaultTypes: specializedTypes.parameterDefaultTypes
|
|
334
|
+
? (0, typeEvalUtils_1.map)(specializedTypes.parameterDefaultTypes, (t) => toProtocolTypeOrUndefined(t, factory))
|
|
335
|
+
: undefined,
|
|
336
|
+
returnType: toProtocolTypeOrUndefined(specializedTypes.returnType, factory),
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
function toProtocolLiteralValue(type, factory) {
|
|
340
|
+
const value = type.priv.literalValue;
|
|
341
|
+
if (value === undefined) {
|
|
342
|
+
return undefined;
|
|
343
|
+
}
|
|
344
|
+
if (value instanceof PyrightTypes.SentinelLiteral) {
|
|
345
|
+
return {
|
|
346
|
+
classNode: (0, typeServerConversionTypes_1.toProtocolNode)(type.shared.declaration.node, factory.view),
|
|
347
|
+
moduleName: type.shared.moduleName,
|
|
348
|
+
className: value.className,
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
if (value instanceof PyrightTypes.EnumLiteral) {
|
|
352
|
+
return {
|
|
353
|
+
className: value.className,
|
|
354
|
+
itemName: value.itemName,
|
|
355
|
+
itemType: factory.getType(value.itemType),
|
|
356
|
+
};
|
|
357
|
+
}
|
|
358
|
+
return value;
|
|
359
|
+
}
|
|
360
|
+
// Attempts to recover the original declaration node for a TypeVar so we can serialize
|
|
361
|
+
// the same metadata the evaluator used when the symbol was first defined. Stub-based
|
|
362
|
+
// reconstruction frequently loses this link, so we search for it on demand using the
|
|
363
|
+
// scope id that is preserved on the TypeVar instance.
|
|
364
|
+
function getDeclarationForTypeVar(typeVar, factory) {
|
|
365
|
+
// freeTypeVar stores the "canonical" definition for synthesized instances that were
|
|
366
|
+
// cloned for specialization. Always operate on that canonical TypeVar when available.
|
|
367
|
+
const canonicalTypeVar = typeVar.priv.freeTypeVar ?? typeVar;
|
|
368
|
+
if (canonicalTypeVar.shared.isSynthesized) {
|
|
369
|
+
return undefined;
|
|
370
|
+
}
|
|
371
|
+
// Without a scope id we have no way to map the TypeVar back to the parse tree.
|
|
372
|
+
const scopeId = canonicalTypeVar.priv.scopeId;
|
|
373
|
+
if (!scopeId) {
|
|
374
|
+
return undefined;
|
|
375
|
+
}
|
|
376
|
+
const scopeNode = findScopeNodeForId(scopeId, factory.view);
|
|
377
|
+
if (!scopeNode) {
|
|
378
|
+
return undefined;
|
|
379
|
+
}
|
|
380
|
+
// Start by inspecting the symbol table attached to the original scope; this covers
|
|
381
|
+
// most cases for function, class, and alias TypeVars.
|
|
382
|
+
let symbolTable = factory.view.symbolLookup.getSymbolsForNode(scopeNode);
|
|
383
|
+
if (!symbolTable && scopeNode.nodeType === 36 /* PyrightNodes.ParseNodeType.Module */) {
|
|
384
|
+
const fileInfo = factory.view.symbolLookup.getFileInfo(scopeNode);
|
|
385
|
+
symbolTable = factory.view.symbolLookup.getSymbolsForFile(fileInfo.fileUri);
|
|
386
|
+
}
|
|
387
|
+
const typeVarName = canonicalTypeVar.shared.name;
|
|
388
|
+
let symbol = symbolTable?.get(typeVarName) ?? factory.view.symbolLookup.lookupSymbol(scopeNode, typeVarName);
|
|
389
|
+
if ((!symbol || symbol.getDeclarations().length === 0) &&
|
|
390
|
+
scopeNode.nodeType !== 36 /* PyrightNodes.ParseNodeType.Module */) {
|
|
391
|
+
// For nested scopes we can fall back to the file-level module scope. This is
|
|
392
|
+
// common when using PEP 695 syntax where a type parameter is hoisted into the
|
|
393
|
+
// containing module table for reuse.
|
|
394
|
+
const moduleNode = findModuleAncestor(scopeNode);
|
|
395
|
+
if (moduleNode) {
|
|
396
|
+
const moduleInfo = factory.view.symbolLookup.getFileInfo(moduleNode);
|
|
397
|
+
const moduleSymbols = factory.view.symbolLookup.getSymbolsForFile(moduleInfo.fileUri);
|
|
398
|
+
const moduleSymbol = moduleSymbols?.get(typeVarName);
|
|
399
|
+
if (moduleSymbol) {
|
|
400
|
+
symbol = moduleSymbol;
|
|
401
|
+
}
|
|
402
|
+
else {
|
|
403
|
+
symbol = factory.view.symbolLookup.lookupSymbol(moduleNode, typeVarName);
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
const declarations = symbol?.getDeclarations();
|
|
408
|
+
if (!declarations || declarations.length === 0) {
|
|
409
|
+
// As a final attempt, locate the syntactic TypeParameter node and synthesize a
|
|
410
|
+
// declaration object pointing to it. This ensures we at least return file/offset
|
|
411
|
+
// information even when binding never populated a symbol.
|
|
412
|
+
const typeParamNode = findTypeParameterNode(scopeNode, typeVarName);
|
|
413
|
+
if (typeParamNode) {
|
|
414
|
+
const fileInfo = factory.view.symbolLookup.getFileInfo(typeParamNode);
|
|
415
|
+
return {
|
|
416
|
+
type: 3 /* DeclarationType.TypeParam */,
|
|
417
|
+
node: typeParamNode,
|
|
418
|
+
uri: fileInfo.fileUri,
|
|
419
|
+
range: (0, positionUtils_1.convertTextRangeToRange)(typeParamNode, fileInfo.lines),
|
|
420
|
+
moduleName: fileInfo.moduleName,
|
|
421
|
+
isInExceptSuite: false,
|
|
422
|
+
};
|
|
423
|
+
}
|
|
424
|
+
return undefined;
|
|
425
|
+
}
|
|
426
|
+
const typeParamDecl = declarations.find((decl) => decl.type === 3 /* DeclarationType.TypeParam */);
|
|
427
|
+
return typeParamDecl ?? declarations[0];
|
|
428
|
+
}
|
|
429
|
+
// Search all known parse trees to locate the node that owns the provided scope id.
|
|
430
|
+
// Scope ids are assigned to functions, classes, modules, and type aliases; once we
|
|
431
|
+
// find the matching node we can dig into its symbol table for declarations.
|
|
432
|
+
function findScopeNodeForId(scopeId, view) {
|
|
433
|
+
const targetPrefix = scopeId.split('.', 1)[0];
|
|
434
|
+
const matchingFiles = view.symbolLookup.getMatchingFileInfos(targetPrefix);
|
|
435
|
+
for (const fileInfo of matchingFiles) {
|
|
436
|
+
const parseResults = view.getParserOutput(fileInfo.fileUri);
|
|
437
|
+
if (!parseResults) {
|
|
438
|
+
continue;
|
|
439
|
+
}
|
|
440
|
+
const stack = [parseResults.parseTree];
|
|
441
|
+
while (stack.length > 0) {
|
|
442
|
+
const node = stack.pop();
|
|
443
|
+
const nodeScopeId = view.symbolLookup.getScopeIdForNode(node);
|
|
444
|
+
if (isTypeVarScopeCandidate(node) && nodeScopeId === scopeId) {
|
|
445
|
+
return node;
|
|
446
|
+
}
|
|
447
|
+
// Expression nodes cannot contain declarations, so skip their children.
|
|
448
|
+
if (!PyrightNodes.isExpressionNode(node)) {
|
|
449
|
+
for (const child of (0, parseTreeWalker_1.getChildNodes)(node)) {
|
|
450
|
+
if (child) {
|
|
451
|
+
stack.push(child);
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
return undefined;
|
|
458
|
+
}
|
|
459
|
+
// Returns the TypeParameter node with the requested name if the enclosing scope declares
|
|
460
|
+
// type parameters (function/class/type alias). This gives us a concrete parse node even
|
|
461
|
+
// when the TypeVar was not bound to a symbol table entry.
|
|
462
|
+
function findTypeParameterNode(scopeNode, typeVarName) {
|
|
463
|
+
let typeParams;
|
|
464
|
+
switch (scopeNode.nodeType) {
|
|
465
|
+
case 31 /* PyrightNodes.ParseNodeType.Function */:
|
|
466
|
+
case 10 /* PyrightNodes.ParseNodeType.Class */:
|
|
467
|
+
case 77 /* PyrightNodes.ParseNodeType.TypeAlias */:
|
|
468
|
+
typeParams = scopeNode.d.typeParams;
|
|
469
|
+
break;
|
|
470
|
+
case 36 /* PyrightNodes.ParseNodeType.Module */:
|
|
471
|
+
typeParams = undefined;
|
|
472
|
+
break;
|
|
473
|
+
}
|
|
474
|
+
if (!typeParams) {
|
|
475
|
+
return undefined;
|
|
476
|
+
}
|
|
477
|
+
return typeParams.d.params.find((param) => param.d.name.d.value === typeVarName);
|
|
478
|
+
}
|
|
479
|
+
// Walks parent pointers up to the root module node. Used when we fall back to the
|
|
480
|
+
// file-level scope to locate a TypeVar that was re-exported at module scope.
|
|
481
|
+
function findModuleAncestor(node) {
|
|
482
|
+
let current = node;
|
|
483
|
+
while (current) {
|
|
484
|
+
if (current.nodeType === 36 /* PyrightNodes.ParseNodeType.Module */) {
|
|
485
|
+
return current;
|
|
486
|
+
}
|
|
487
|
+
current = current.parent;
|
|
488
|
+
}
|
|
489
|
+
return undefined;
|
|
490
|
+
}
|
|
491
|
+
// Only certain node kinds introduce scope ids; this helper keeps the search logic focused
|
|
492
|
+
// on those nodes to avoid unnecessary traversal work during scope discovery.
|
|
493
|
+
function isTypeVarScopeCandidate(node) {
|
|
494
|
+
switch (node.nodeType) {
|
|
495
|
+
case 36 /* PyrightNodes.ParseNodeType.Module */:
|
|
496
|
+
case 10 /* PyrightNodes.ParseNodeType.Class */:
|
|
497
|
+
case 31 /* PyrightNodes.ParseNodeType.Function */:
|
|
498
|
+
case 77 /* PyrightNodes.ParseNodeType.TypeAlias */:
|
|
499
|
+
return true;
|
|
500
|
+
default:
|
|
501
|
+
return false;
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
function findFirstExpression(node) {
|
|
505
|
+
if (PyrightNodes.isExpressionNode(node)) {
|
|
506
|
+
return node;
|
|
507
|
+
}
|
|
508
|
+
class ExpressionNodeWalker extends parseTreeWalker_1.ParseTreeWalker {
|
|
509
|
+
getResult() {
|
|
510
|
+
return this._result;
|
|
511
|
+
}
|
|
512
|
+
visitNode(node) {
|
|
513
|
+
if (PyrightNodes.isExpressionNode(node)) {
|
|
514
|
+
this._result = node;
|
|
515
|
+
return [];
|
|
516
|
+
}
|
|
517
|
+
return super.visitNode(node);
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
const walker = new ExpressionNodeWalker();
|
|
521
|
+
walker.walk(node);
|
|
522
|
+
return walker.getResult();
|
|
523
|
+
}
|
|
524
|
+
//# sourceMappingURL=typeServerConversionUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typeServerConversionUtils.js","sourceRoot":"","sources":["../../../../../src/typeServer/typeServerConversionUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Program } from '../analyzer/program';
|
|
2
|
+
import { TypeEvaluator } from '../analyzer/typeEvaluatorTypes';
|
|
3
|
+
import { ISymbolLookup } from './programTypes';
|
|
4
|
+
export interface ITypeServerEvaluator extends TypeEvaluator {
|
|
5
|
+
getSymbolLookup(): ISymbolLookup;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Build an `ITypeServerEvaluator` backed by the `Program`'s synchronous `TypeEvaluator`.
|
|
9
|
+
*
|
|
10
|
+
* Pyright's evaluator is a closure-backed object whose methods don't depend on `this`, so we
|
|
11
|
+
* can prototype-delegate to it and add `getSymbolLookup` without copying every method. The
|
|
12
|
+
* evaluator is resolved from `program.evaluator` at creation time; callers create a fresh
|
|
13
|
+
* evaluator per request (the program recreates its evaluator when configuration or imports
|
|
14
|
+
* change), so the captured reference always matches the snapshot being queried.
|
|
15
|
+
*/
|
|
16
|
+
export declare function createTypeServerEvaluator(program: Program, symbolLookup: ISymbolLookup): ITypeServerEvaluator;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* typeServerEvaluator.ts
|
|
4
|
+
* Copyright (c) Microsoft Corporation.
|
|
5
|
+
* Licensed under the MIT license.
|
|
6
|
+
*
|
|
7
|
+
* The type server answers type queries with Pyright's ordinary synchronous `TypeEvaluator`.
|
|
8
|
+
* It needs exactly one capability beyond the stock evaluator: access to the snapshot's symbol
|
|
9
|
+
* lookup. This module defines that thin extension (`ITypeServerEvaluator`) and a factory that
|
|
10
|
+
* layers it onto the program's current evaluator.
|
|
11
|
+
*
|
|
12
|
+
* Cancellation works exactly as it does everywhere else in Pyright: the evaluator polls the
|
|
13
|
+
* active cancellation token via `runWithCancellationToken` / `throwIfCancellationRequested`,
|
|
14
|
+
* so a long-running synchronous query can still be interrupted in the middle of a request.
|
|
15
|
+
*/
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.createTypeServerEvaluator = createTypeServerEvaluator;
|
|
18
|
+
/**
|
|
19
|
+
* Build an `ITypeServerEvaluator` backed by the `Program`'s synchronous `TypeEvaluator`.
|
|
20
|
+
*
|
|
21
|
+
* Pyright's evaluator is a closure-backed object whose methods don't depend on `this`, so we
|
|
22
|
+
* can prototype-delegate to it and add `getSymbolLookup` without copying every method. The
|
|
23
|
+
* evaluator is resolved from `program.evaluator` at creation time; callers create a fresh
|
|
24
|
+
* evaluator per request (the program recreates its evaluator when configuration or imports
|
|
25
|
+
* change), so the captured reference always matches the snapshot being queried.
|
|
26
|
+
*/
|
|
27
|
+
function createTypeServerEvaluator(program, symbolLookup) {
|
|
28
|
+
const evaluator = program.evaluator;
|
|
29
|
+
if (!evaluator) {
|
|
30
|
+
throw new Error('Type evaluator is not available for the current program.');
|
|
31
|
+
}
|
|
32
|
+
const wrapper = Object.create(evaluator);
|
|
33
|
+
wrapper.getSymbolLookup = () => symbolLookup;
|
|
34
|
+
return wrapper;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=typeServerEvaluator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typeServerEvaluator.js","sourceRoot":"","sources":["../../../../../src/typeServer/typeServerEvaluator.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;;AAoBH,8DASC;AAlBD;;;;;;;;GAQG;AACH,SAAgB,yBAAyB,CAAC,OAAgB,EAAE,YAA2B;IACnF,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IACpC,IAAI,CAAC,SAAS,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAChF,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAyB,CAAC;IACjE,OAAO,CAAC,eAAe,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC;IAC7C,OAAO,OAAO,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { Dirent, ReadStream, WriteStream } from 'fs';
|
|
2
|
+
import { Disposable } from 'vscode-jsonrpc';
|
|
3
|
+
import { FileSystem, MkDirOptions, Stats } from '../common/fileSystem';
|
|
4
|
+
import { FileWatcher, FileWatcherEventHandler } from '../common/fileWatcher';
|
|
5
|
+
import { Uri } from '../common/uri/uri';
|
|
6
|
+
import { IPyrightFileSystem } from '../pyrightFileSystem';
|
|
7
|
+
import { INotebookUriMapper } from './notebookUriMapper';
|
|
8
|
+
import { VirtualFileOverlayFileSystem } from './virtualFileOverlayFileSystem';
|
|
9
|
+
export declare class TypeServerFileSystem implements IPyrightFileSystem {
|
|
10
|
+
private readonly _uriMapper?;
|
|
11
|
+
private readonly _fs;
|
|
12
|
+
private readonly _virtualOverlay;
|
|
13
|
+
constructor(realFileSystem: FileSystem, _uriMapper?: INotebookUriMapper | undefined);
|
|
14
|
+
/**
|
|
15
|
+
* Returns the virtual file overlay layer. The server's virtual-file-redirect handlers use
|
|
16
|
+
* this to add/remove per-file redirects that transparently redirect read operations to
|
|
17
|
+
* alternate on-disk locations.
|
|
18
|
+
*/
|
|
19
|
+
get virtualOverlay(): VirtualFileOverlayFileSystem;
|
|
20
|
+
static is(obj: any): obj is TypeServerFileSystem;
|
|
21
|
+
mkdirSync(uri: Uri, options?: MkDirOptions): void;
|
|
22
|
+
writeFileSync(uri: Uri, data: string | Buffer, encoding: BufferEncoding | null): void;
|
|
23
|
+
unlinkSync(uri: Uri): void;
|
|
24
|
+
rmdirSync(uri: Uri): void;
|
|
25
|
+
createFileSystemWatcher(uris: Uri[], listener: FileWatcherEventHandler): FileWatcher;
|
|
26
|
+
createReadStream(uri: Uri): ReadStream;
|
|
27
|
+
createWriteStream(uri: Uri): WriteStream;
|
|
28
|
+
copyFileSync(src: Uri, dst: Uri): void;
|
|
29
|
+
existsSync(uri: Uri): boolean;
|
|
30
|
+
chdir(uri: Uri): void;
|
|
31
|
+
readdirEntriesSync(uri: Uri): Dirent[];
|
|
32
|
+
readdirSync(uri: Uri): string[];
|
|
33
|
+
readFileSync(uri: Uri, encoding?: null): Buffer;
|
|
34
|
+
readFileSync(uri: Uri, encoding: BufferEncoding): string;
|
|
35
|
+
readFileSync(uri: Uri, encoding?: BufferEncoding | null): string | Buffer;
|
|
36
|
+
statSync(uri: Uri): Stats;
|
|
37
|
+
realpathSync(uri: Uri): Uri;
|
|
38
|
+
getModulePath(): Uri;
|
|
39
|
+
readFile(uri: Uri): Promise<Buffer>;
|
|
40
|
+
readFileText(uri: Uri, encoding?: BufferEncoding): Promise<string>;
|
|
41
|
+
realCasePath(uri: Uri): Uri;
|
|
42
|
+
isMappedUri(fileUri: Uri): boolean;
|
|
43
|
+
getOriginalUri(mappedFileUri: Uri): Uri;
|
|
44
|
+
getMappedUri(originalFileUri: Uri): Uri;
|
|
45
|
+
isInZip(uri: Uri): boolean;
|
|
46
|
+
mapDirectory(mappedUri: Uri, originalUri: Uri, filter?: (originalUri: Uri, fs: FileSystem) => boolean): Disposable;
|
|
47
|
+
}
|