@lvce-editor/extension-management-worker 4.28.0 → 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
|
-
const getMatchingExtensions$
|
|
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
|
}
|
|
@@ -2445,7 +2449,7 @@ const executeCompletionProvider = async (extensionsState, textDocument, ...args)
|
|
|
2445
2449
|
assetDir,
|
|
2446
2450
|
platform
|
|
2447
2451
|
} = await getRuntimeContext('', extensionsState.platform);
|
|
2448
|
-
const extensions = await getMatchingExtensions$
|
|
2452
|
+
const extensions = await getMatchingExtensions$5(extensionsState, textDocument, assetDir, platform);
|
|
2449
2453
|
const rpcs = await Promise.all(extensions.map(extension => getRpc$1(extension, assetDir, platform)));
|
|
2450
2454
|
const results = await Promise.all(rpcs.map((rpc, index) => executeExtensionCompletionProvider(rpc, extensions[index], textDocument, args)));
|
|
2451
2455
|
return results[0] || [];
|
|
@@ -2455,33 +2459,77 @@ const executeResolveCompletionItemProvider = async (extensionsState, textDocumen
|
|
|
2455
2459
|
assetDir,
|
|
2456
2460
|
platform
|
|
2457
2461
|
} = await getRuntimeContext('', extensionsState.platform);
|
|
2458
|
-
const matchingExtensions = await getMatchingExtensions$
|
|
2462
|
+
const matchingExtensions = await getMatchingExtensions$5(extensionsState, textDocument, assetDir, platform);
|
|
2459
2463
|
const extensions = matchingExtensions.filter(extension => contributesCompletionProvider(extension, textDocument.languageId));
|
|
2460
2464
|
const rpcs = await Promise.all(extensions.map(extension => getRpc$1(extension, assetDir, platform)));
|
|
2461
2465
|
const results = await Promise.all(rpcs.map(rpc => executeRpcResolveCompletionItemProvider(rpc, textDocument, args)));
|
|
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
|
};
|
|
2470
|
-
const
|
|
2509
|
+
const contributesLanguageServer = (extension, languageId) => {
|
|
2510
|
+
return Array.isArray(extension.languageServers) && extension.languageServers.some(languageServer => languageServer.languageId === languageId);
|
|
2511
|
+
};
|
|
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,
|
|
2480
2528
|
platform
|
|
2481
2529
|
} = await getRuntimeContext('', extensionsState.platform);
|
|
2482
|
-
const extensions = await getMatchingExtensions$
|
|
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
|
|
|
@@ -2490,7 +2538,7 @@ const executeDiagnosticProvider = async (extensionsState, textDocument, ...args)
|
|
|
2490
2538
|
const contributesFormattingProvider = (extension, languageId) => {
|
|
2491
2539
|
return Array.isArray(extension.formattingProviders) && extension.formattingProviders.some(provider => provider.languageId === languageId);
|
|
2492
2540
|
};
|
|
2493
|
-
const getMatchingExtensions$
|
|
2541
|
+
const getMatchingExtensions$3 = async (extensionsState, textDocument, assetDir, platform) => {
|
|
2494
2542
|
const extensions = await getAllExtensionsWithState(extensionsState, assetDir, platform);
|
|
2495
2543
|
return extensions.filter(extension => isExtensionIsolated(extension) && contributesFormattingProvider(extension, textDocument.languageId));
|
|
2496
2544
|
};
|
|
@@ -2502,7 +2550,7 @@ const executeFormattingProvider = async (extensionsState, textDocument, ...args)
|
|
|
2502
2550
|
assetDir,
|
|
2503
2551
|
platform
|
|
2504
2552
|
} = await getRuntimeContext('', extensionsState.platform);
|
|
2505
|
-
const extensions = await getMatchingExtensions$
|
|
2553
|
+
const extensions = await getMatchingExtensions$3(extensionsState, textDocument, assetDir, platform);
|
|
2506
2554
|
const rpcs = await Promise.all(extensions.map(extension => getRpc$1(extension, assetDir, platform)));
|
|
2507
2555
|
const results = await Promise.all(rpcs.map(rpc => executeRpcFormattingProvider(rpc, textDocument, args)));
|
|
2508
2556
|
return results[0] || [];
|
|
@@ -2513,7 +2561,7 @@ const executeFormattingProvider = async (extensionsState, textDocument, ...args)
|
|
|
2513
2561
|
const contributesHoverProvider = (extension, languageId) => {
|
|
2514
2562
|
return Array.isArray(extension.hoverProviders) && extension.hoverProviders.some(provider => provider.languageId === languageId);
|
|
2515
2563
|
};
|
|
2516
|
-
const getMatchingExtensions$
|
|
2564
|
+
const getMatchingExtensions$2 = async (extensionsState, textDocument, assetDir, platform) => {
|
|
2517
2565
|
const extensions = await getAllExtensionsWithState(extensionsState, assetDir, platform);
|
|
2518
2566
|
return extensions.filter(extension => isExtensionIsolated(extension) && contributesHoverProvider(extension, textDocument.languageId));
|
|
2519
2567
|
};
|
|
@@ -2525,7 +2573,7 @@ const executeHoverProvider = async (extensionsState, textDocument, ...args) => {
|
|
|
2525
2573
|
assetDir,
|
|
2526
2574
|
platform
|
|
2527
2575
|
} = await getRuntimeContext('', extensionsState.platform);
|
|
2528
|
-
const extensions = await getMatchingExtensions$
|
|
2576
|
+
const extensions = await getMatchingExtensions$2(extensionsState, textDocument, assetDir, platform);
|
|
2529
2577
|
const rpcs = await Promise.all(extensions.map(extension => getRpc$1(extension, assetDir, platform)));
|
|
2530
2578
|
const results = await Promise.all(rpcs.map(rpc => executeRpcHoverProvider(rpc, textDocument, args)));
|
|
2531
2579
|
return results[0];
|
|
@@ -2547,7 +2595,7 @@ const contributesLanguageProvider = (extension, kind, languageId) => {
|
|
|
2547
2595
|
const activationEvent = activationEventByKind[kind] || 'onLanguage';
|
|
2548
2596
|
return Array.isArray(extension.activation) && extension.activation.includes(`${activationEvent}:${languageId}`);
|
|
2549
2597
|
};
|
|
2550
|
-
const getMatchingExtensions = async (extensionsState, kind, textDocument, assetDir, platform) => {
|
|
2598
|
+
const getMatchingExtensions$1 = async (extensionsState, kind, textDocument, assetDir, platform) => {
|
|
2551
2599
|
const extensions = await getAllExtensionsWithState(extensionsState, assetDir, platform);
|
|
2552
2600
|
return extensions.filter(extension => isExtensionIsolated(extension) && contributesLanguageProvider(extension, kind, textDocument.languageId));
|
|
2553
2601
|
};
|
|
@@ -2559,7 +2607,7 @@ const executeLanguageProvider = async (extensionsState, kind, methodName, textDo
|
|
|
2559
2607
|
assetDir,
|
|
2560
2608
|
platform
|
|
2561
2609
|
} = await getRuntimeContext('', extensionsState.platform);
|
|
2562
|
-
const extensions = await getMatchingExtensions(extensionsState, kind, textDocument, assetDir, platform);
|
|
2610
|
+
const extensions = await getMatchingExtensions$1(extensionsState, kind, textDocument, assetDir, platform);
|
|
2563
2611
|
if (extensions.length === 0) {
|
|
2564
2612
|
return {
|
|
2565
2613
|
found: false
|
|
@@ -2577,7 +2625,7 @@ const executeOrganizeImportsProvider = async (extensionsState, textDocument) =>
|
|
|
2577
2625
|
assetDir,
|
|
2578
2626
|
platform
|
|
2579
2627
|
} = await getRuntimeContext('', extensionsState.platform);
|
|
2580
|
-
const extensions = await getMatchingExtensions(extensionsState, 'code action', textDocument, assetDir, platform);
|
|
2628
|
+
const extensions = await getMatchingExtensions$1(extensionsState, 'code action', textDocument, assetDir, platform);
|
|
2581
2629
|
if (extensions.length === 0) {
|
|
2582
2630
|
return {
|
|
2583
2631
|
found: false
|
|
@@ -2591,6 +2639,61 @@ const executeOrganizeImportsProvider = async (extensionsState, textDocument) =>
|
|
|
2591
2639
|
};
|
|
2592
2640
|
};
|
|
2593
2641
|
|
|
2642
|
+
/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types */
|
|
2643
|
+
|
|
2644
|
+
const getProviderIds = extension => {
|
|
2645
|
+
if (!Array.isArray(extension.sourceControlProviders)) {
|
|
2646
|
+
return [];
|
|
2647
|
+
}
|
|
2648
|
+
return extension.sourceControlProviders.map(provider => provider.id).filter(id => typeof id === 'string');
|
|
2649
|
+
};
|
|
2650
|
+
const getMatchingExtensions = async (extensionsState, assetDir, platform) => {
|
|
2651
|
+
const extensions = await getAllExtensionsWithState(extensionsState, assetDir, platform);
|
|
2652
|
+
return extensions.filter(extension => !extension.disabled && isExtensionIsolated(extension) && getProviderIds(extension).length > 0);
|
|
2653
|
+
};
|
|
2654
|
+
const findExtension = (extensions, providerId) => {
|
|
2655
|
+
return extensions.find(extension => getProviderIds(extension).includes(providerId));
|
|
2656
|
+
};
|
|
2657
|
+
const isProviderActive = async (rpc, providerId, scheme, root) => {
|
|
2658
|
+
return rpc.invoke('ExtensionApi.executeSourceControlIsActive', providerId, scheme, root);
|
|
2659
|
+
};
|
|
2660
|
+
const getEnabledSourceControlProviderIds = async (extensionsState, scheme, root) => {
|
|
2661
|
+
const {
|
|
2662
|
+
assetDir,
|
|
2663
|
+
platform
|
|
2664
|
+
} = await getRuntimeContext('', extensionsState.platform);
|
|
2665
|
+
const extensions = await getMatchingExtensions(extensionsState, assetDir, platform);
|
|
2666
|
+
const enabledProviderIds = [];
|
|
2667
|
+
for (const extension of extensions) {
|
|
2668
|
+
const rpc = await getRpc$1(extension, assetDir, platform);
|
|
2669
|
+
for (const providerId of getProviderIds(extension)) {
|
|
2670
|
+
if (await isProviderActive(rpc, providerId, scheme, root)) {
|
|
2671
|
+
enabledProviderIds.push(providerId);
|
|
2672
|
+
}
|
|
2673
|
+
}
|
|
2674
|
+
}
|
|
2675
|
+
return enabledProviderIds;
|
|
2676
|
+
};
|
|
2677
|
+
const executeSourceControlProvider = async (extensionsState, providerId, methodName, ...args) => {
|
|
2678
|
+
const {
|
|
2679
|
+
assetDir,
|
|
2680
|
+
platform
|
|
2681
|
+
} = await getRuntimeContext('', extensionsState.platform);
|
|
2682
|
+
const extensions = await getMatchingExtensions(extensionsState, assetDir, platform);
|
|
2683
|
+
const extension = findExtension(extensions, providerId);
|
|
2684
|
+
if (!extension) {
|
|
2685
|
+
return {
|
|
2686
|
+
found: false
|
|
2687
|
+
};
|
|
2688
|
+
}
|
|
2689
|
+
const rpc = await getRpc$1(extension, assetDir, platform);
|
|
2690
|
+
const result = await rpc.invoke(`ExtensionApi.${methodName}`, providerId, ...args);
|
|
2691
|
+
return {
|
|
2692
|
+
found: true,
|
|
2693
|
+
result
|
|
2694
|
+
};
|
|
2695
|
+
};
|
|
2696
|
+
|
|
2594
2697
|
const readFile = uri => {
|
|
2595
2698
|
return readFile$1(uri);
|
|
2596
2699
|
};
|
|
@@ -3408,6 +3511,7 @@ const commandMap = {
|
|
|
3408
3511
|
'Extensions.executeLanguageProvider': wrapCommand(executeLanguageProvider),
|
|
3409
3512
|
'Extensions.executeOrganizeImportsProvider': wrapCommand(executeOrganizeImportsProvider),
|
|
3410
3513
|
'Extensions.executeResolveCompletionItemProvider': wrapCommand(executeResolveCompletionItemProvider),
|
|
3514
|
+
'Extensions.executeSourceControlProvider': wrapCommand(executeSourceControlProvider),
|
|
3411
3515
|
'Extensions.getAccessToken': getAccessToken,
|
|
3412
3516
|
'Extensions.getAllExtensions': getAllExtensions,
|
|
3413
3517
|
'Extensions.getColorThemeCss': getColorThemeCss,
|
|
@@ -3415,6 +3519,7 @@ const commandMap = {
|
|
|
3415
3519
|
'Extensions.getColorThemeJson': getColorThemeJson,
|
|
3416
3520
|
'Extensions.getColorThemeNames': getColorThemeNames,
|
|
3417
3521
|
'Extensions.getDynamicWebExtensions': getDynamicWebExtensions,
|
|
3522
|
+
'Extensions.getEnabledSourceControlProviderIds': wrapCommand(getEnabledSourceControlProviderIds),
|
|
3418
3523
|
'Extensions.getExtension': getExtension,
|
|
3419
3524
|
'Extensions.getKeyBindings': getKeyBindings,
|
|
3420
3525
|
'Extensions.getLanguages': getLanguages,
|