@lvce-editor/extension-management-worker 4.28.1 → 4.29.0
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.
|
@@ -2350,16 +2350,23 @@ const resolveLanguageServerUri = (extension, languageServerUri) => {
|
|
|
2350
2350
|
const extensionPath = extension.uri || extension.path || '';
|
|
2351
2351
|
return new URL(languageServerUri, toExtensionBaseUri(extensionPath)).href;
|
|
2352
2352
|
};
|
|
2353
|
-
const
|
|
2354
|
-
|
|
2355
|
-
|
|
2356
|
-
|
|
2353
|
+
const resolveLanguageServer = async (rpc, extension, languageId) => {
|
|
2354
|
+
const contribution = extension.languageServers?.find(item => item.languageId === languageId);
|
|
2355
|
+
if (!contribution) {
|
|
2356
|
+
return undefined;
|
|
2357
|
+
}
|
|
2358
|
+
const snapshot = await rpc.invoke('ExtensionApi.getLanguageServerRegistrySnapshot');
|
|
2357
2359
|
const languageServer = snapshot.languageServers.find(registered => registered.id === contribution.id && registered.languageId === languageId);
|
|
2358
2360
|
if (!languageServer) {
|
|
2359
2361
|
throw new Error(`language server ${contribution.id || '<unknown>'} is contributed in extension.json but not registered`);
|
|
2360
2362
|
}
|
|
2361
|
-
return
|
|
2363
|
+
return {
|
|
2364
|
+
argv: languageServer.argv,
|
|
2365
|
+
id: `${extension.id || extension.uri || extension.path || 'extension'}.${languageServer.id}`,
|
|
2366
|
+
uri: resolveLanguageServerUri(extension, languageServer.uri)
|
|
2367
|
+
};
|
|
2362
2368
|
};
|
|
2369
|
+
|
|
2363
2370
|
const sanitizeCompletionItem = item => {
|
|
2364
2371
|
if (!item || typeof item !== 'object' || typeof item.label !== 'string') {
|
|
2365
2372
|
return undefined;
|
|
@@ -2378,19 +2385,16 @@ const executeLanguageServerCompletion = async (rpc, extension, textDocument, off
|
|
|
2378
2385
|
if (typeof textDocument.text !== 'string' || typeof textDocument.uri !== 'string') {
|
|
2379
2386
|
return [];
|
|
2380
2387
|
}
|
|
2381
|
-
const
|
|
2382
|
-
if (!
|
|
2388
|
+
const languageServer = await resolveLanguageServer(rpc, extension, textDocument.languageId);
|
|
2389
|
+
if (!languageServer) {
|
|
2383
2390
|
return [];
|
|
2384
2391
|
}
|
|
2385
|
-
const snapshot = await rpc.invoke('ExtensionApi.getLanguageServerRegistrySnapshot');
|
|
2386
|
-
const languageServer = getRegisteredLanguageServer(snapshot, contribution, textDocument.languageId);
|
|
2387
|
-
const uri = resolveLanguageServerUri(extension, languageServer.uri);
|
|
2388
2392
|
const result = await invoke$1('LanguageServer.complete', {
|
|
2389
2393
|
argv: languageServer.argv,
|
|
2390
|
-
id:
|
|
2394
|
+
id: languageServer.id,
|
|
2391
2395
|
offset,
|
|
2392
2396
|
textDocument,
|
|
2393
|
-
uri
|
|
2397
|
+
uri: languageServer.uri
|
|
2394
2398
|
});
|
|
2395
2399
|
return result.map(sanitizeCompletionItem).filter(item => item !== undefined);
|
|
2396
2400
|
};
|
|
@@ -2420,18 +2424,18 @@ const getRpc$1 = async (extension, assetDir, platform) => {
|
|
|
2420
2424
|
const contributesCompletionProvider = (extension, languageId) => {
|
|
2421
2425
|
return Array.isArray(extension.completionProviders) && extension.completionProviders.some(provider => provider.languageId === languageId);
|
|
2422
2426
|
};
|
|
2423
|
-
const contributesLanguageServer = (extension, languageId) => {
|
|
2427
|
+
const contributesLanguageServer$1 = (extension, languageId) => {
|
|
2424
2428
|
return Array.isArray(extension.languageServers) && extension.languageServers.some(languageServer => languageServer.languageId === languageId);
|
|
2425
2429
|
};
|
|
2426
2430
|
const getMatchingExtensions$5 = async (extensionsState, textDocument, assetDir, platform) => {
|
|
2427
2431
|
const extensions = await getAllExtensionsWithState(extensionsState, assetDir, platform);
|
|
2428
|
-
return extensions.filter(extension => isExtensionIsolated(extension) && (contributesCompletionProvider(extension, textDocument.languageId) || contributesLanguageServer(extension, textDocument.languageId)));
|
|
2432
|
+
return extensions.filter(extension => isExtensionIsolated(extension) && (contributesCompletionProvider(extension, textDocument.languageId) || contributesLanguageServer$1(extension, textDocument.languageId)));
|
|
2429
2433
|
};
|
|
2430
2434
|
const executeRpcCompletionProvider = async (rpc, textDocument, args) => {
|
|
2431
2435
|
return rpc.invoke('ExtensionApi.executeCompletionProvider', textDocument, ...args);
|
|
2432
2436
|
};
|
|
2433
2437
|
const executeExtensionCompletionProvider = async (rpc, extension, textDocument, args) => {
|
|
2434
|
-
if (contributesLanguageServer(extension, textDocument.languageId)) {
|
|
2438
|
+
if (contributesLanguageServer$1(extension, textDocument.languageId)) {
|
|
2435
2439
|
const offset = typeof args[0] === 'number' ? args[0] : 0;
|
|
2436
2440
|
return executeLanguageServerCompletion(rpc, extension, textDocument, offset);
|
|
2437
2441
|
}
|
|
@@ -2462,18 +2466,62 @@ const executeResolveCompletionItemProvider = async (extensionsState, textDocumen
|
|
|
2462
2466
|
return results[0];
|
|
2463
2467
|
};
|
|
2464
2468
|
|
|
2469
|
+
const sanitizeDiagnostic = diagnostic => {
|
|
2470
|
+
const start = diagnostic?.range?.start;
|
|
2471
|
+
const end = diagnostic?.range?.end;
|
|
2472
|
+
if (typeof diagnostic?.message !== 'string' || typeof start?.line !== 'number' || typeof start.character !== 'number' || typeof end?.line !== 'number' || typeof end.character !== 'number') {
|
|
2473
|
+
return undefined;
|
|
2474
|
+
}
|
|
2475
|
+
return {
|
|
2476
|
+
columnIndex: start.character,
|
|
2477
|
+
endColumnIndex: end.character,
|
|
2478
|
+
endRowIndex: end.line,
|
|
2479
|
+
message: diagnostic.message,
|
|
2480
|
+
rowIndex: start.line,
|
|
2481
|
+
...(typeof diagnostic.source === 'string' && {
|
|
2482
|
+
source: diagnostic.source
|
|
2483
|
+
}),
|
|
2484
|
+
type: diagnostic.severity === 1 ? 'error' : 'warning'
|
|
2485
|
+
};
|
|
2486
|
+
};
|
|
2487
|
+
const executeLanguageServerDiagnostic = async (rpc, extension, textDocument) => {
|
|
2488
|
+
if (typeof textDocument.text !== 'string' || typeof textDocument.uri !== 'string') {
|
|
2489
|
+
return [];
|
|
2490
|
+
}
|
|
2491
|
+
const languageServer = await resolveLanguageServer(rpc, extension, textDocument.languageId);
|
|
2492
|
+
if (!languageServer) {
|
|
2493
|
+
return [];
|
|
2494
|
+
}
|
|
2495
|
+
const result = await invoke$1('LanguageServer.diagnostic', {
|
|
2496
|
+
argv: languageServer.argv,
|
|
2497
|
+
id: languageServer.id,
|
|
2498
|
+
textDocument,
|
|
2499
|
+
uri: languageServer.uri
|
|
2500
|
+
});
|
|
2501
|
+
return result.map(sanitizeDiagnostic).filter(diagnostic => diagnostic !== undefined);
|
|
2502
|
+
};
|
|
2503
|
+
|
|
2465
2504
|
/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types */
|
|
2466
2505
|
|
|
2467
2506
|
const contributesDiagnosticProvider = (extension, languageId) => {
|
|
2468
2507
|
return Array.isArray(extension.diagnosticProviders) && extension.diagnosticProviders.some(provider => provider.languageId === languageId);
|
|
2469
2508
|
};
|
|
2509
|
+
const contributesLanguageServer = (extension, languageId) => {
|
|
2510
|
+
return Array.isArray(extension.languageServers) && extension.languageServers.some(languageServer => languageServer.languageId === languageId);
|
|
2511
|
+
};
|
|
2470
2512
|
const getMatchingExtensions$4 = async (extensionsState, textDocument, assetDir, platform) => {
|
|
2471
2513
|
const extensions = await getAllExtensionsWithState(extensionsState, assetDir, platform);
|
|
2472
|
-
return extensions.filter(extension => isExtensionIsolated(extension) && contributesDiagnosticProvider(extension, textDocument.languageId));
|
|
2514
|
+
return extensions.filter(extension => isExtensionIsolated(extension) && (contributesDiagnosticProvider(extension, textDocument.languageId) || contributesLanguageServer(extension, textDocument.languageId)));
|
|
2473
2515
|
};
|
|
2474
2516
|
const executeRpcDiagnosticProvider = async (rpc, textDocument, args) => {
|
|
2475
2517
|
return rpc.invoke('ExtensionApi.executeDiagnosticProvider', textDocument, ...args);
|
|
2476
2518
|
};
|
|
2519
|
+
const executeExtensionDiagnosticProvider = async (rpc, extension, textDocument, args) => {
|
|
2520
|
+
if (contributesLanguageServer(extension, textDocument.languageId)) {
|
|
2521
|
+
return executeLanguageServerDiagnostic(rpc, extension, textDocument);
|
|
2522
|
+
}
|
|
2523
|
+
return executeRpcDiagnosticProvider(rpc, textDocument, args);
|
|
2524
|
+
};
|
|
2477
2525
|
const executeDiagnosticProvider = async (extensionsState, textDocument, ...args) => {
|
|
2478
2526
|
const {
|
|
2479
2527
|
assetDir,
|
|
@@ -2481,7 +2529,7 @@ const executeDiagnosticProvider = async (extensionsState, textDocument, ...args)
|
|
|
2481
2529
|
} = await getRuntimeContext('', extensionsState.platform);
|
|
2482
2530
|
const extensions = await getMatchingExtensions$4(extensionsState, textDocument, assetDir, platform);
|
|
2483
2531
|
const rpcs = await Promise.all(extensions.map(extension => getRpc$1(extension, assetDir, platform)));
|
|
2484
|
-
const results = await Promise.all(rpcs.map(rpc =>
|
|
2532
|
+
const results = await Promise.all(rpcs.map((rpc, index) => executeExtensionDiagnosticProvider(rpc, extensions[index], textDocument, args)));
|
|
2485
2533
|
return results.flat();
|
|
2486
2534
|
};
|
|
2487
2535
|
|