@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.
Files changed (114) hide show
  1. package/dist/analyzer/checker.d.ts +2 -0
  2. package/dist/analyzer/checker.js +89 -4
  3. package/dist/analyzer/checker.js.map +1 -1
  4. package/dist/analyzer/functionTransform.js +188 -0
  5. package/dist/analyzer/functionTransform.js.map +1 -1
  6. package/dist/analyzer/packageTypeVerifier.js +11 -1
  7. package/dist/analyzer/packageTypeVerifier.js.map +1 -1
  8. package/dist/analyzer/properties.js +73 -8
  9. package/dist/analyzer/properties.js.map +1 -1
  10. package/dist/analyzer/typeEvaluator.js +7 -1
  11. package/dist/analyzer/typeEvaluator.js.map +1 -1
  12. package/dist/analyzer/typeGuards.js +1 -1
  13. package/dist/analyzer/typeGuards.js.map +1 -1
  14. package/dist/analyzer/typeUtils.js.map +1 -1
  15. package/dist/analyzer/types.d.ts +1 -1
  16. package/dist/analyzer/types.js.map +1 -1
  17. package/dist/tests/typeEvaluator3.test.js +6 -0
  18. package/dist/tests/typeEvaluator3.test.js.map +1 -1
  19. package/dist/tests/typeEvaluator8.test.js +38 -0
  20. package/dist/tests/typeEvaluator8.test.js.map +1 -1
  21. package/dist/tests/typeServer/inProcTypeServerTestUtils.d.ts +39 -0
  22. package/dist/tests/typeServer/inProcTypeServerTestUtils.js +366 -0
  23. package/dist/tests/typeServer/inProcTypeServerTestUtils.js.map +1 -0
  24. package/dist/tests/typeServer/notebook.typeServer.test.d.ts +1 -0
  25. package/dist/tests/typeServer/notebook.typeServer.test.js +315 -0
  26. package/dist/tests/typeServer/notebook.typeServer.test.js.map +1 -0
  27. package/dist/tests/typeServer/typeServer.inProc.test.d.ts +1 -0
  28. package/dist/tests/typeServer/typeServer.inProc.test.js +234 -0
  29. package/dist/tests/typeServer/typeServer.inProc.test.js.map +1 -0
  30. package/dist/tests/typeServer/typeServer.virtualFileRedirect.test.d.ts +1 -0
  31. package/dist/tests/typeServer/typeServer.virtualFileRedirect.test.js +298 -0
  32. package/dist/tests/typeServer/typeServer.virtualFileRedirect.test.js.map +1 -0
  33. package/dist/typeServer/cancellation.d.ts +5 -0
  34. package/dist/typeServer/cancellation.js +14 -0
  35. package/dist/typeServer/cancellation.js.map +1 -0
  36. package/dist/typeServer/diagnosticUtils.d.ts +4 -0
  37. package/dist/typeServer/diagnosticUtils.js +71 -0
  38. package/dist/typeServer/diagnosticUtils.js.map +1 -0
  39. package/dist/typeServer/enums.d.ts +14 -0
  40. package/dist/typeServer/enums.js +524 -0
  41. package/dist/typeServer/enums.js.map +1 -0
  42. package/dist/typeServer/eventEmitter.d.ts +12 -0
  43. package/dist/typeServer/eventEmitter.js +32 -0
  44. package/dist/typeServer/eventEmitter.js.map +1 -0
  45. package/dist/typeServer/nodeMain.d.ts +1 -0
  46. package/dist/typeServer/nodeMain.js +65 -0
  47. package/dist/typeServer/nodeMain.js.map +1 -0
  48. package/dist/typeServer/notebookCellChain.d.ts +34 -0
  49. package/dist/typeServer/notebookCellChain.js +182 -0
  50. package/dist/typeServer/notebookCellChain.js.map +1 -0
  51. package/dist/typeServer/notebookDocumentHandler.d.ts +23 -0
  52. package/dist/typeServer/notebookDocumentHandler.js +158 -0
  53. package/dist/typeServer/notebookDocumentHandler.js.map +1 -0
  54. package/dist/typeServer/notebookUriMapper.d.ts +39 -0
  55. package/dist/typeServer/notebookUriMapper.js +164 -0
  56. package/dist/typeServer/notebookUriMapper.js.map +1 -0
  57. package/dist/typeServer/profilingStub.d.ts +10 -0
  58. package/dist/typeServer/profilingStub.js +12 -0
  59. package/dist/typeServer/profilingStub.js.map +1 -0
  60. package/dist/typeServer/programTypes.d.ts +136 -0
  61. package/dist/typeServer/programTypes.js +3 -0
  62. package/dist/typeServer/programTypes.js.map +1 -0
  63. package/dist/typeServer/programWrapper.d.ts +134 -0
  64. package/dist/typeServer/programWrapper.js +731 -0
  65. package/dist/typeServer/programWrapper.js.map +1 -0
  66. package/dist/typeServer/protocol/tspSupplemental.d.ts +43 -0
  67. package/dist/typeServer/protocol/tspSupplemental.js +48 -0
  68. package/dist/typeServer/protocol/tspSupplemental.js.map +1 -0
  69. package/dist/typeServer/protocol/typeServerProtocol.d.ts +1102 -0
  70. package/dist/typeServer/protocol/typeServerProtocol.js +290 -0
  71. package/dist/typeServer/protocol/typeServerProtocol.js.map +1 -0
  72. package/dist/typeServer/server.d.ts +54 -0
  73. package/dist/typeServer/server.js +620 -0
  74. package/dist/typeServer/server.js.map +1 -0
  75. package/dist/typeServer/serverUtils.d.ts +4 -0
  76. package/dist/typeServer/serverUtils.js +21 -0
  77. package/dist/typeServer/serverUtils.js.map +1 -0
  78. package/dist/typeServer/stubGenerator.d.ts +42 -0
  79. package/dist/typeServer/stubGenerator.js +895 -0
  80. package/dist/typeServer/stubGenerator.js.map +1 -0
  81. package/dist/typeServer/typeCache.d.ts +31 -0
  82. package/dist/typeServer/typeCache.js +54 -0
  83. package/dist/typeServer/typeCache.js.map +1 -0
  84. package/dist/typeServer/typeEvalUtils.d.ts +13 -0
  85. package/dist/typeServer/typeEvalUtils.js +83 -0
  86. package/dist/typeServer/typeEvalUtils.js.map +1 -0
  87. package/dist/typeServer/typeGuards.d.ts +3 -0
  88. package/dist/typeServer/typeGuards.js +55 -0
  89. package/dist/typeServer/typeGuards.js.map +1 -0
  90. package/dist/typeServer/typeServerConversionTypes.d.ts +39 -0
  91. package/dist/typeServer/typeServerConversionTypes.js +448 -0
  92. package/dist/typeServer/typeServerConversionTypes.js.map +1 -0
  93. package/dist/typeServer/typeServerConversionUtils.d.ts +35 -0
  94. package/dist/typeServer/typeServerConversionUtils.js +524 -0
  95. package/dist/typeServer/typeServerConversionUtils.js.map +1 -0
  96. package/dist/typeServer/typeServerEvaluator.d.ts +16 -0
  97. package/dist/typeServer/typeServerEvaluator.js +36 -0
  98. package/dist/typeServer/typeServerEvaluator.js.map +1 -0
  99. package/dist/typeServer/typeServerFileSystem.d.ts +47 -0
  100. package/dist/typeServer/typeServerFileSystem.js +129 -0
  101. package/dist/typeServer/typeServerFileSystem.js.map +1 -0
  102. package/dist/typeServer/typeServerProtocolUtils.d.ts +2 -0
  103. package/dist/typeServer/typeServerProtocolUtils.js +7 -0
  104. package/dist/typeServer/typeServerProtocolUtils.js.map +1 -0
  105. package/dist/typeServer/typeServerServiceKeys.d.ts +7 -0
  106. package/dist/typeServer/typeServerServiceKeys.js +20 -0
  107. package/dist/typeServer/typeServerServiceKeys.js.map +1 -0
  108. package/dist/typeServer/typeUtils.d.ts +4 -0
  109. package/dist/typeServer/typeUtils.js +31 -0
  110. package/dist/typeServer/typeUtils.js.map +1 -0
  111. package/dist/typeServer/virtualFileOverlayFileSystem.d.ts +87 -0
  112. package/dist/typeServer/virtualFileOverlayFileSystem.js +181 -0
  113. package/dist/typeServer/virtualFileOverlayFileSystem.js.map +1 -0
  114. package/package.json +1 -1
@@ -0,0 +1,620 @@
1
+ "use strict";
2
+ /*
3
+ * server.ts
4
+ * Copyright (c) Microsoft Corporation.
5
+ * Licensed under the MIT license.
6
+ *
7
+ * Defines a language server that is also a type server. The language-server parts are used
8
+ * to initialize and manage documents; the type-server parts answer Type Server Protocol
9
+ * (TSP) requests with type information for those documents.
10
+ *
11
+ * This is the Pyright-native port of Pylance's `type-server/src/server/typeServer.ts`. It
12
+ * is rebased onto Pyright's own infrastructure (`LanguageServerBase`, `WorkspaceFactory`,
13
+ * `ImportResolver`, `BackgroundAnalysisProgram`) instead of the Pylance subclasses. Type
14
+ * queries are answered synchronously by Pyright's evaluator through the `ProgramWrapper`;
15
+ * cancellation is file/token based like the rest of Pyright, so long-running queries can
16
+ * still be interrupted mid-request.
17
+ *
18
+ * Feature notes:
19
+ * - Telemetry and profiling are intentionally omitted (Pyright has no telemetry).
20
+ * - Notebook support and the virtual-file-redirect supplemental are layered in by later
21
+ * phases; the seams (`_notebookManager`, overlay file system) are left in place.
22
+ */
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.TypeServer = void 0;
25
+ const vscode_languageserver_1 = require("vscode-languageserver");
26
+ const analyzerNodeInfo_1 = require("../analyzer/analyzerNodeInfo");
27
+ const backgroundAnalysisProgram_1 = require("../analyzer/backgroundAnalysisProgram");
28
+ const importResolver_1 = require("../analyzer/importResolver");
29
+ const pythonPathUtils_1 = require("../analyzer/pythonPathUtils");
30
+ const sourceFile_1 = require("../analyzer/sourceFile");
31
+ const console_1 = require("../common/console");
32
+ const core_1 = require("../common/core");
33
+ const envVarUtils_1 = require("../common/envVarUtils");
34
+ const fullAccessHost_1 = require("../common/fullAccessHost");
35
+ const languageServerBase_1 = require("../languageServerBase");
36
+ const navigationUtils_1 = require("../languageService/navigationUtils");
37
+ const workspaceFactory_1 = require("../workspaceFactory");
38
+ const cancellation_1 = require("./cancellation");
39
+ const diagnosticUtils_1 = require("./diagnosticUtils");
40
+ const notebookCellChain_1 = require("./notebookCellChain");
41
+ const notebookDocumentHandler_1 = require("./notebookDocumentHandler");
42
+ const notebookUriMapper_1 = require("./notebookUriMapper");
43
+ const programWrapper_1 = require("./programWrapper");
44
+ const tspSupplemental_1 = require("./protocol/tspSupplemental");
45
+ const typeServerProtocol_1 = require("./protocol/typeServerProtocol");
46
+ const serverUtils_1 = require("./serverUtils");
47
+ const typeServerConversionTypes_1 = require("./typeServerConversionTypes");
48
+ const typeServerConversionUtils_1 = require("./typeServerConversionUtils");
49
+ const typeEvalUtils_1 = require("./typeEvalUtils");
50
+ const typeCache_1 = require("./typeCache");
51
+ const typeServerFileSystem_1 = require("./typeServerFileSystem");
52
+ const typeServerServiceKeys_1 = require("./typeServerServiceKeys");
53
+ class TypeServer extends languageServerBase_1.LanguageServerBase {
54
+ constructor(serverOptions, connection) {
55
+ super(serverOptions, connection);
56
+ this._handleToUriMap = new Map();
57
+ this._initializedComplete = false;
58
+ this._uriMapper = serverOptions.serviceProvider.tryGet(typeServerServiceKeys_1.TypeServerServiceKeys.uriMapper);
59
+ this._globalTypeCache = new typeCache_1.TypeCache(serverOptions.serviceProvider, this._getParserOutput.bind(this));
60
+ this._globalTypeCache.snapshotChanged(this._onSnapshotChanged.bind(this));
61
+ }
62
+ dispose() {
63
+ super.dispose();
64
+ }
65
+ async getWorkspaceForFile(fileUri, pythonPath) {
66
+ // If this is a notebook cell and no python path was passed in, use the last known
67
+ // python path for the containing notebook so cells resolve to the workspace with the
68
+ // matching pythonPath.
69
+ if (notebookUriMapper_1.NotebookUriMapper.isNotebookCell(fileUri) && this._notebookManager) {
70
+ const notebookData = await this._notebookManager.getNotebookDataForCell(fileUri);
71
+ if (pythonPath === undefined) {
72
+ pythonPath = notebookData?.pythonPath;
73
+ }
74
+ // Map the vscode-notebook-cell: URI to its file-scheme equivalent so the workspace
75
+ // factory can match it against workspace root URIs.
76
+ fileUri = this._uriMapper.getMappedCellUri(fileUri);
77
+ }
78
+ return this.workspaceFactory.getWorkspaceForFile(fileUri, pythonPath);
79
+ }
80
+ async getContainingWorkspacesForFile(fileUri) {
81
+ // If this is a notebook cell we should wait for the notebook to open first.
82
+ if (notebookUriMapper_1.NotebookUriMapper.isNotebookCell(fileUri) && this._notebookManager) {
83
+ await this._notebookManager.getNotebookDataForCell(fileUri);
84
+ // Map the vscode-notebook-cell: URI to its file-scheme equivalent so the workspace
85
+ // factory can match it against workspace root URIs.
86
+ fileUri = this._uriMapper.getMappedCellUri(fileUri);
87
+ }
88
+ return this.workspaceFactory.getContainingWorkspacesForFile(fileUri);
89
+ }
90
+ async getSettings(workspace) {
91
+ const serverSettings = {
92
+ autoSearchPaths: true,
93
+ disableLanguageServices: false,
94
+ openFilesOnly: true,
95
+ useLibraryCodeForTypes: true,
96
+ watchForSourceChanges: true,
97
+ watchForLibraryChanges: true,
98
+ watchForConfigChanges: true,
99
+ typeCheckingMode: 'off',
100
+ diagnosticSeverityOverrides: {},
101
+ diagnosticBooleanOverrides: {},
102
+ logLevel: console_1.LogLevel.Info,
103
+ autoImportCompletions: true,
104
+ indexing: true,
105
+ includeFileSpecs: [],
106
+ excludeFileSpecs: [],
107
+ ignoreFileSpecs: [],
108
+ taskListTokens: [],
109
+ };
110
+ try {
111
+ const workspaces = this.workspaceFactory.getNonDefaultWorkspaces(workspaceFactory_1.WellKnownWorkspaceKinds.Regular);
112
+ const pythonSection = await this.getConfiguration(workspace.rootUri, 'python');
113
+ if (pythonSection) {
114
+ const pythonPath = pythonSection.pythonPath;
115
+ if (pythonPath && (0, core_1.isString)(pythonPath) && !(0, pythonPathUtils_1.isPythonBinary)(pythonPath)) {
116
+ serverSettings.pythonPath = (0, envVarUtils_1.resolvePathWithEnvVariables)(workspace, pythonPath, workspaces);
117
+ }
118
+ const venvPath = pythonSection.venvPath;
119
+ if (venvPath && (0, core_1.isString)(venvPath)) {
120
+ serverSettings.venvPath = (0, envVarUtils_1.resolvePathWithEnvVariables)(workspace, venvPath, workspaces);
121
+ }
122
+ }
123
+ const pythonAnalysisSection = await this.getConfiguration(workspace.rootUri, 'python.analysis');
124
+ if (pythonAnalysisSection) {
125
+ const typeshedPaths = pythonAnalysisSection.typeshedPaths;
126
+ if (typeshedPaths && Array.isArray(typeshedPaths) && typeshedPaths.length > 0) {
127
+ const typeshedPath = typeshedPaths[0];
128
+ if (typeshedPath && (0, core_1.isString)(typeshedPath)) {
129
+ serverSettings.typeshedPath = (0, envVarUtils_1.resolvePathWithEnvVariables)(workspace, typeshedPath, workspaces);
130
+ }
131
+ }
132
+ const stubPath = pythonAnalysisSection.stubPath;
133
+ if (stubPath && (0, core_1.isString)(stubPath)) {
134
+ serverSettings.stubPath = (0, envVarUtils_1.resolvePathWithEnvVariables)(workspace, stubPath, workspaces);
135
+ }
136
+ const diagnosticSeverityOverrides = pythonAnalysisSection.diagnosticSeverityOverrides;
137
+ if (diagnosticSeverityOverrides) {
138
+ for (const [name, value] of Object.entries(diagnosticSeverityOverrides)) {
139
+ const ruleName = this.getDiagnosticRuleName(name);
140
+ const severity = this.getSeverityOverrides(value);
141
+ if (ruleName && severity) {
142
+ serverSettings.diagnosticSeverityOverrides[ruleName] = severity;
143
+ }
144
+ }
145
+ }
146
+ if (pythonAnalysisSection.diagnosticMode !== undefined) {
147
+ serverSettings.openFilesOnly = this.isOpenFilesOnly(pythonAnalysisSection.diagnosticMode);
148
+ }
149
+ else if (pythonAnalysisSection.openFilesOnly !== undefined) {
150
+ serverSettings.openFilesOnly = !!pythonAnalysisSection.openFilesOnly;
151
+ }
152
+ if (pythonAnalysisSection.useLibraryCodeForTypes !== undefined) {
153
+ serverSettings.useLibraryCodeForTypes = !!pythonAnalysisSection.useLibraryCodeForTypes;
154
+ }
155
+ serverSettings.logLevel = (0, console_1.convertLogLevel)(pythonAnalysisSection.logLevel);
156
+ serverSettings.autoSearchPaths = !!pythonAnalysisSection.autoSearchPaths;
157
+ const extraPaths = pythonAnalysisSection.extraPaths;
158
+ if (extraPaths && Array.isArray(extraPaths) && extraPaths.length > 0) {
159
+ serverSettings.extraPaths = extraPaths
160
+ .filter((p) => p && (0, core_1.isString)(p))
161
+ .map((p) => (0, envVarUtils_1.resolvePathWithEnvVariables)(workspace, p, workspaces))
162
+ .filter(core_1.isDefined);
163
+ }
164
+ serverSettings.includeFileSpecs = this._getStringValues(pythonAnalysisSection.include);
165
+ serverSettings.excludeFileSpecs = this._getStringValues(pythonAnalysisSection.exclude);
166
+ serverSettings.ignoreFileSpecs = this._getStringValues(pythonAnalysisSection.ignore);
167
+ if (pythonAnalysisSection.autoImportCompletions !== undefined) {
168
+ serverSettings.autoImportCompletions = pythonAnalysisSection.autoImportCompletions;
169
+ }
170
+ }
171
+ else {
172
+ serverSettings.autoSearchPaths = true;
173
+ }
174
+ const pyrightSection = await this.getConfiguration(workspace.rootUri, 'pyright');
175
+ if (pyrightSection) {
176
+ if (pyrightSection.openFilesOnly !== undefined) {
177
+ serverSettings.openFilesOnly = !!pyrightSection.openFilesOnly;
178
+ }
179
+ if (pyrightSection.useLibraryCodeForTypes !== undefined) {
180
+ serverSettings.useLibraryCodeForTypes = !!pyrightSection.useLibraryCodeForTypes;
181
+ }
182
+ serverSettings.disableLanguageServices = !!pyrightSection.disableLanguageServices;
183
+ serverSettings.disableTaggedHints = !!pyrightSection.disableTaggedHints;
184
+ serverSettings.disableOrganizeImports = !!pyrightSection.disableOrganizeImports;
185
+ const typeCheckingMode = pyrightSection.typeCheckingMode;
186
+ if (typeCheckingMode && (0, core_1.isString)(typeCheckingMode)) {
187
+ serverSettings.typeCheckingMode = typeCheckingMode;
188
+ }
189
+ }
190
+ }
191
+ catch (error) {
192
+ this.console.error(`Error reading settings: ${error}`);
193
+ }
194
+ return serverSettings;
195
+ }
196
+ createBackgroundAnalysis(serviceId, workspaceRoot) {
197
+ // Type server doesn't support background analysis. Just run everything in the main thread.
198
+ return undefined;
199
+ }
200
+ isLongRunningCommand(command) {
201
+ return false; // Type server doesn't support long-running commands.
202
+ }
203
+ isRefactoringCommand(command) {
204
+ return false; // Type server doesn't support refactoring commands.
205
+ }
206
+ executeCodeAction(params, token) {
207
+ return Promise.resolve([]); // Type server doesn't support code actions.
208
+ }
209
+ createHost() {
210
+ return new fullAccessHost_1.FullAccessHost(this.serverOptions.serviceProvider);
211
+ }
212
+ createImportResolver(serviceProvider, options, host) {
213
+ const importResolver = new importResolver_1.ImportResolver(serviceProvider, options, host);
214
+ // In case there was cached information in the file system related to
215
+ // import resolution, invalidate it now.
216
+ importResolver.invalidateCache();
217
+ return importResolver;
218
+ }
219
+ createProgressReporter() {
220
+ // The old progress notifications are kept for backwards compatibility with
221
+ // clients that do not support work done progress.
222
+ let displayingProgress = false;
223
+ let workDoneProgress;
224
+ return {
225
+ isDisplayingProgress: () => displayingProgress,
226
+ isEnabled: (data) => true,
227
+ begin: () => {
228
+ displayingProgress = true;
229
+ if (this.client.hasWindowProgressCapability) {
230
+ workDoneProgress = this.connection.window.createWorkDoneProgress();
231
+ workDoneProgress
232
+ .then((progress) => {
233
+ progress.begin('');
234
+ })
235
+ .catch(() => { });
236
+ }
237
+ else {
238
+ void this.connection.sendNotification('pyright/beginProgress');
239
+ }
240
+ },
241
+ report: (message) => {
242
+ if (workDoneProgress) {
243
+ workDoneProgress
244
+ .then((progress) => {
245
+ progress.report(message);
246
+ })
247
+ .catch(() => { });
248
+ }
249
+ else {
250
+ void this.connection.sendNotification('pyright/reportProgress', message);
251
+ }
252
+ },
253
+ end: () => {
254
+ displayingProgress = false;
255
+ if (workDoneProgress) {
256
+ workDoneProgress
257
+ .then((progress) => {
258
+ progress.done();
259
+ })
260
+ .catch(() => { });
261
+ workDoneProgress = undefined;
262
+ }
263
+ else {
264
+ void this.connection.sendNotification('pyright/endProgress');
265
+ }
266
+ },
267
+ };
268
+ }
269
+ executeCommand(params, token) {
270
+ // Don't execute any commands (for now) in the type server.
271
+ return Promise.resolve();
272
+ }
273
+ setupConnection(supportedCommands, supportedCodeActions) {
274
+ super.setupConnection(supportedCommands, supportedCodeActions);
275
+ // Register for all of the other requests that we support.
276
+ this.connection.onRequest(typeServerProtocol_1.TypeServerProtocol.GetComputedTypeRequest.type, this._onGetType.bind(this, (program, input, token) => program.getComputedType(input, token)));
277
+ this.connection.onRequest(typeServerProtocol_1.TypeServerProtocol.GetExpectedTypeRequest.type, this._onGetType.bind(this, (program, input, token) => {
278
+ const result = program.getExpectedType(input, token);
279
+ return result?.type;
280
+ }));
281
+ this.connection.onRequest(typeServerProtocol_1.TypeServerProtocol.GetDeclaredTypeRequest.type, this._onGetType.bind(this, (program, input, token) => program.getDeclaredType(input, token)));
282
+ this.connection.onRequest(typeServerProtocol_1.TypeServerProtocol.GetSnapshotRequest.type, this._onGetSnapshot.bind(this));
283
+ this.connection.onRequest(typeServerProtocol_1.TypeServerProtocol.GetSupportedProtocolVersionRequest.type, this._onGetSupportedProtocolVersion.bind(this));
284
+ this.connection.onRequest(typeServerProtocol_1.TypeServerProtocol.ResolveImportRequest.type, this._onResolveImport.bind(this));
285
+ this.connection.onRequest(typeServerProtocol_1.TypeServerProtocol.GetPythonSearchPathsRequest.type, this._onGetPythonSearchPaths.bind(this));
286
+ // Register virtual file redirect notifications (Pyright-specific TSP supplemental).
287
+ // These are sent by a client (e.g. Pylance's Django stub generator) when it produces
288
+ // merged virtual files on disk that the type server should analyze in place of the real
289
+ // ones.
290
+ this.connection.onNotification(tspSupplemental_1.TspSupplemental.SetVirtualFileRedirectNotification.type, (params) => this._onSetVirtualFileRedirect(params));
291
+ this.connection.onNotification(tspSupplemental_1.TspSupplemental.RemoveVirtualFileRedirectNotification.type, (params) => this._onRemoveVirtualFileRedirect(params));
292
+ // Register raw notification handlers for notebook documents. These are registered here
293
+ // (before connection.listen()) so they're ready when the connection starts processing
294
+ // messages. `_notebookManager` is created in `initialize()` (not here) because SWC's
295
+ // TC39 class-field semantics would reinitialize it to undefined after the base class
296
+ // constructor returns; `initialize()` runs before any notifications arrive.
297
+ this.connection.onNotification('notebookDocument/didOpen', (params) => {
298
+ this._notebookManager?.onDidOpenNotebookDocument(params);
299
+ });
300
+ this.connection.onNotification('notebookDocument/didChange', (params) => {
301
+ this._notebookManager?.onDidChangeNotebookDocument(params);
302
+ });
303
+ this.connection.onNotification('notebookDocument/didClose', (params) => {
304
+ this._notebookManager?.onDidCloseNotebookDocument(params);
305
+ });
306
+ }
307
+ async initialize(params, supportedCommands, supportedCodeActions) {
308
+ // Create the notebook manager here (not in setupConnection) because SWC's TC39
309
+ // class-field semantics reinitialize `_notebookManager` to undefined after the base
310
+ // class constructor returns. This method runs when the Initialize request is processed,
311
+ // which is before any notifications arrive. The manager is only created when a notebook
312
+ // URI mapper is registered in the service provider (notebook support is otherwise off).
313
+ if (this._uriMapper && this._uriMapper instanceof notebookUriMapper_1.NotebookUriMapper) {
314
+ const uriMapper = this._uriMapper;
315
+ this._notebookManager = new notebookDocumentHandler_1.NotebookDocumentHandler(uriMapper, this.caseSensitiveDetector, this.console, (fileUri) => this.workspaceFactory.getWorkspaceForFile(fileUri, undefined));
316
+ }
317
+ const result = await super.initialize(params, supportedCommands, supportedCodeActions);
318
+ // Advertise notebook support so the client sends notebookDocument/* notifications.
319
+ if (this._notebookManager) {
320
+ result.capabilities.notebookDocumentSync = notebookCellChain_1.AnyNotebookDocumentSelector;
321
+ }
322
+ return result;
323
+ }
324
+ convertLspUriStringToUri(lspUri) {
325
+ // Do our own conversion of the LSP URI string to a Uri so notebook cells map to their
326
+ // file-scheme equivalent.
327
+ return (0, serverUtils_1.convertLspUriStringToUri)(lspUri, this.caseSensitiveDetector, this._uriMapper);
328
+ }
329
+ onInitialized() {
330
+ super.onInitialized();
331
+ // The base Pyright server skips updateSettingsForAllWorkspaces() when the client
332
+ // advertises workspace-folders support (it expects a didChangeWorkspaceFolders event
333
+ // instead). A TSP client may advertise workspaceFolders: true but never send that
334
+ // event, so trigger the settings update here when workspaces already exist. Without
335
+ // this, setConfigOptions is never called, the ProgramWrapper hooks never fire, and the
336
+ // snapshot stays at its initial invalid value forever.
337
+ if (this.client.hasWorkspaceFoldersCapability && this.workspaceFactory.items().length > 0) {
338
+ this.updateSettingsForAllWorkspaces();
339
+ }
340
+ this._initializedComplete = true;
341
+ }
342
+ onWorkspaceCreated(workspace) {
343
+ super.onWorkspaceCreated(workspace);
344
+ // Make sure the program is wrapped so that we are tracking snapshots for it and it
345
+ // shares the global type cache.
346
+ const program = workspace.service.backgroundAnalysisProgram.program;
347
+ (0, programWrapper_1.makeProgram)(program, this._globalTypeCache);
348
+ }
349
+ async onDidOpenTextDocument(params, ipythonMode = sourceFile_1.IPythonMode.None) {
350
+ // Call the base implementation to open the file in all workspaces.
351
+ await super.onDidOpenTextDocument(params, ipythonMode);
352
+ // Warm up the evaluator cache by analyzing the file and initializing prefetched
353
+ // types. This avoids slow first-query scenarios when the file imports large libraries.
354
+ const uri = this.convertLspUriStringToUri(params.textDocument.uri);
355
+ const program = await this._getProgram(uri);
356
+ if (program) {
357
+ program.ensureFileAnalyzed(uri, vscode_languageserver_1.CancellationToken.None);
358
+ }
359
+ }
360
+ async onDiagnostics(params, token) {
361
+ // Override the base class to use the type server's diagnostic converter which
362
+ // properly handles TaskItem diagnostics (with tags and _vs_diagnosticRank). The base
363
+ // LanguageServerBase._convertDiagnostics strips TaskItem entirely.
364
+ const UncomputedDiagnosticsVersion = -1;
365
+ const uri = this.convertLspUriStringToUri(params.textDocument.uri);
366
+ const workspace = await this.getWorkspaceForFile(uri);
367
+ let sourceFile = workspace.service.getSourceFile(uri);
368
+ let diagnosticsVersion = sourceFile?.isCheckingRequired()
369
+ ? UncomputedDiagnosticsVersion
370
+ : sourceFile?.getDiagnosticVersion() ?? UncomputedDiagnosticsVersion;
371
+ const result = {
372
+ kind: 'full',
373
+ resultId: sourceFile?.getDiagnosticVersion()?.toString(),
374
+ items: [],
375
+ };
376
+ if (workspace.disableLanguageServices ||
377
+ !(0, navigationUtils_1.canNavigateToFile)(workspace.service.fs, uri) ||
378
+ token.isCancellationRequested) {
379
+ return result;
380
+ }
381
+ this.incrementAnalysisProgress();
382
+ try {
383
+ if (params.previousResultId !== diagnosticsVersion.toString() && sourceFile) {
384
+ let diagnosticsVersionAfter = UncomputedDiagnosticsVersion - 1;
385
+ let serverDiagnostics = [];
386
+ while (diagnosticsVersion !== diagnosticsVersionAfter && !token.isCancellationRequested && sourceFile) {
387
+ sourceFile = workspace.service.getSourceFile(uri);
388
+ diagnosticsVersion = sourceFile?.getDiagnosticVersion() ?? UncomputedDiagnosticsVersion;
389
+ if (sourceFile) {
390
+ serverDiagnostics = await workspace.service.analyzeFileAndGetDiagnostics(uri, token);
391
+ }
392
+ const sourceFileAfter = workspace.service.getSourceFile(uri);
393
+ diagnosticsVersionAfter = sourceFileAfter?.getDiagnosticVersion() ?? UncomputedDiagnosticsVersion;
394
+ }
395
+ // Use the type server's converter which handles TaskItem diagnostics. Pass
396
+ // `true` for the tag-support flags unconditionally: a TSP child doesn't
397
+ // receive the actual client capabilities, but a foreground server relays
398
+ // these diagnostics directly and the original client does support them.
399
+ const lspDiagnostics = serverDiagnostics
400
+ .map((d) => (0, diagnosticUtils_1.convertFromPyrightDiagnostic)(d, workspace.service.fs,
401
+ /* supportsUnnecessaryDiagnosticTag */ true,
402
+ /* supportsTaskItemDiagnosticTag */ true))
403
+ .filter((d) => d !== undefined);
404
+ result.resultId =
405
+ diagnosticsVersionAfter === UncomputedDiagnosticsVersion
406
+ ? undefined
407
+ : diagnosticsVersionAfter.toString();
408
+ result.items = lspDiagnostics;
409
+ }
410
+ else {
411
+ result.kind = 'unchanged';
412
+ result.resultId =
413
+ diagnosticsVersion === UncomputedDiagnosticsVersion ? undefined : diagnosticsVersion.toString();
414
+ delete result.items;
415
+ }
416
+ }
417
+ finally {
418
+ this.decrementAnalysisProgress();
419
+ }
420
+ return result;
421
+ }
422
+ _getStringValues(values) {
423
+ if (!values || !Array.isArray(values) || values.length === 0) {
424
+ return [];
425
+ }
426
+ return values.filter((p) => p && (0, core_1.isString)(p));
427
+ }
428
+ _getParserOutput(uri) {
429
+ const workspace = this._getWorkspaceForUri(uri);
430
+ if (workspace) {
431
+ const program = workspace.service.backgroundAnalysisProgram.program;
432
+ if (program) {
433
+ return program.getParserOutput(uri);
434
+ }
435
+ }
436
+ return undefined;
437
+ }
438
+ _getWorkspaceForUri(uri) {
439
+ // Best-effort synchronous workspace lookup used by the type cache. Prefer a
440
+ // workspace that already tracks the file, otherwise fall back to the first
441
+ // available workspace.
442
+ const nonDefault = this.workspaceFactory.getNonDefaultWorkspaces();
443
+ return nonDefault.find((w) => w.service.isTracked(uri)) ?? nonDefault[0] ?? this.workspaceFactory.items()[0];
444
+ }
445
+ // Preserve the file's existing IPython mode when re-pushing its contents. If we
446
+ // unconditionally passed IPythonMode.None we would reset an open notebook cell's mode
447
+ // and detach it from its cell chain (mirrors ProgramWrapper.updateFileContents).
448
+ _getExistingIPythonMode(workspace, uri) {
449
+ const fileInfo = workspace.service.backgroundAnalysisProgram.program?.getSourceFileInfo(uri);
450
+ return fileInfo?.ipythonMode ?? sourceFile_1.IPythonMode.None;
451
+ }
452
+ async _getProgram(uri) {
453
+ const workspace = await this.getWorkspaceForFile(uri);
454
+ if (workspace) {
455
+ // Pass the global type cache explicitly so the wrapper is guaranteed to share
456
+ // the same `ITypeCache` (and therefore the same snapshot) that `_onGetSnapshot`
457
+ // returns. The `makeProgram` WeakMap normally returns the wrapper created in
458
+ // `onWorkspaceCreated`, but relying on that alone would livelock the client on
459
+ // permanent `ServerCancelled` if a program were ever re-wrapped cache-less.
460
+ return (0, programWrapper_1.makeProgram)(workspace.service.backgroundAnalysisProgram.program, this._globalTypeCache);
461
+ }
462
+ return undefined;
463
+ }
464
+ async _onGetSnapshot() {
465
+ return this._globalTypeCache.snapshot;
466
+ }
467
+ async _onGetSupportedProtocolVersion() {
468
+ return typeServerProtocol_1.TypeServerProtocol.TypeServerVersion.current;
469
+ }
470
+ async _onGetType(typeFetcher, params, token) {
471
+ const arg = params.arg;
472
+ const uri = isProtocolDeclaration(arg)
473
+ ? arg.kind === 0 /* TypeServerProtocol.DeclarationKind.Regular */
474
+ ? arg.node.uri
475
+ : arg.uri
476
+ : arg.uri;
477
+ const fileUri = this.convertLspUriStringToUri(uri);
478
+ const program = await this._getProgram(fileUri);
479
+ if (!program) {
480
+ return undefined;
481
+ }
482
+ // Make sure this is the current snapshot.
483
+ if (program.getSnapshot(token) !== params.snapshot) {
484
+ throw new cancellation_1.ServerCanceledException();
485
+ }
486
+ const input = isProtocolDeclaration(arg)
487
+ ? (0, typeServerConversionTypes_1.fromProtocolDecl)(arg, program, program.symbolLookup)
488
+ : (0, typeServerConversionTypes_1.fromProtocolNode)(arg, program);
489
+ if (!input) {
490
+ return undefined;
491
+ }
492
+ const type = typeFetcher(program, input, token);
493
+ if (!type) {
494
+ return undefined;
495
+ }
496
+ let pythonVersion = program.configOptions.getDefaultExecEnvironment().pythonVersion;
497
+ if (!(0, typeEvalUtils_1.isDeclaration)(input)) {
498
+ const fileInfo = (0, analyzerNodeInfo_1.getFileInfo)(input);
499
+ pythonVersion = fileInfo.executionEnvironment.pythonVersion;
500
+ }
501
+ return program.run((p) => {
502
+ const factory = new typeServerConversionUtils_1.ProtocolTypeFactory(p, pythonVersion, input);
503
+ return factory.getType(type);
504
+ }, token);
505
+ }
506
+ async _onResolveImport(params, token) {
507
+ const sourceUri = this.convertLspUriStringToUri(params.sourceUri);
508
+ const program = await this._getProgram(sourceUri);
509
+ if (!program) {
510
+ return undefined;
511
+ }
512
+ // Make sure this is the current snapshot.
513
+ if (program.getSnapshot(token) !== params.snapshot) {
514
+ throw new cancellation_1.ServerCanceledException();
515
+ }
516
+ const result = program.resolveImport(sourceUri, params.moduleDescriptor, token);
517
+ if (!result) {
518
+ return undefined;
519
+ }
520
+ return result.toString();
521
+ }
522
+ async _onGetPythonSearchPaths(params, token) {
523
+ const uri = this.convertLspUriStringToUri(params.fromUri);
524
+ const program = uri ? await this._getProgram(uri) : undefined;
525
+ if (!program) {
526
+ return [];
527
+ }
528
+ // Make sure this is the current snapshot.
529
+ if (program.getSnapshot(token) !== params.snapshot) {
530
+ throw new cancellation_1.ServerCanceledException();
531
+ }
532
+ const uris = program.getPythonSearchPaths(token);
533
+ return uris ? uris.map((u) => u.toString()) : [];
534
+ }
535
+ _onSetVirtualFileRedirect(params) {
536
+ const fs = this.fs;
537
+ if (!typeServerFileSystem_1.TypeServerFileSystem.is(fs)) {
538
+ return;
539
+ }
540
+ const realUri = this.convertLspUriStringToUri(params.realUri);
541
+ const virtualUri = this.convertLspUriStringToUri(params.virtualUri);
542
+ fs.virtualOverlay.addFileRedirect(realUri, virtualUri);
543
+ // If the file is currently open, read the virtual content and update Pyright's in-memory
544
+ // buffer. For closed files, the FS overlay redirect is sufficient — Pyright reads from
545
+ // the FS.
546
+ let virtualContent;
547
+ if (this.openFileMap.has(realUri.key)) {
548
+ try {
549
+ virtualContent = fs.readFileSync(realUri, 'utf8');
550
+ }
551
+ catch (e) {
552
+ this.console.warn(`Failed to read virtual content for ${realUri}: ${e}`);
553
+ }
554
+ }
555
+ // Trigger re-analysis on the workspace that contains this file.
556
+ const workspace = this._getWorkspaceForUri(realUri);
557
+ if (workspace) {
558
+ if (virtualContent !== undefined) {
559
+ const doc = this.openFileMap.get(realUri.key);
560
+ workspace.service.updateOpenFileContents(realUri, doc?.version ?? null, virtualContent, this._getExistingIPythonMode(workspace, realUri));
561
+ }
562
+ workspace.service.invalidateAndScheduleReanalysis(backgroundAnalysisProgram_1.InvalidatedReason.Reanalyzed);
563
+ }
564
+ }
565
+ _onRemoveVirtualFileRedirect(params) {
566
+ const fs = this.fs;
567
+ if (!typeServerFileSystem_1.TypeServerFileSystem.is(fs)) {
568
+ return;
569
+ }
570
+ const realUri = this.convertLspUriStringToUri(params.realUri);
571
+ fs.virtualOverlay.removeFileRedirect(realUri);
572
+ // If the file is currently open, restore from the open document's original text
573
+ // (authoritative), not from disk which may differ. For closed files, just removing the
574
+ // redirect is enough.
575
+ let realContent;
576
+ if (this.openFileMap.has(realUri.key)) {
577
+ const doc = this.openFileMap.get(realUri.key);
578
+ if (doc) {
579
+ // The open document text is the authoritative "real" content.
580
+ realContent = doc.getText();
581
+ }
582
+ else {
583
+ // Fallback: read from FS (redirect already removed above).
584
+ try {
585
+ realContent = fs.readFileSync(realUri, 'utf8');
586
+ }
587
+ catch (e) {
588
+ this.console.warn(`Failed to read real content for ${realUri}: ${e}`);
589
+ }
590
+ }
591
+ }
592
+ // Trigger re-analysis on the workspace that contains this file.
593
+ const workspace = this._getWorkspaceForUri(realUri);
594
+ if (workspace) {
595
+ if (realContent !== undefined) {
596
+ const doc = this.openFileMap.get(realUri.key);
597
+ workspace.service.updateOpenFileContents(realUri, doc?.version ?? null, realContent, this._getExistingIPythonMode(workspace, realUri));
598
+ }
599
+ workspace.service.invalidateAndScheduleReanalysis(backgroundAnalysisProgram_1.InvalidatedReason.Reanalyzed);
600
+ }
601
+ }
602
+ _onSnapshotChanged(newSnapshot) {
603
+ // Don't send notifications if the server is disposed.
604
+ if (this.isDisposed) {
605
+ return;
606
+ }
607
+ // Snapshot changed, all uri handles are invalid.
608
+ this._handleToUriMap.clear();
609
+ // Send a notification to all clients that the snapshot has changed.
610
+ void this.connection.sendNotification(typeServerProtocol_1.TypeServerProtocol.SnapshotChangedNotification.type, {
611
+ old: newSnapshot - 1,
612
+ new: newSnapshot,
613
+ });
614
+ }
615
+ }
616
+ exports.TypeServer = TypeServer;
617
+ function isProtocolDeclaration(arg) {
618
+ return arg.kind !== undefined;
619
+ }
620
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../../../src/typeServer/server.ts"],"names":[],"mappings":"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"}