@theia/plugin-ext 1.27.0-next.7 → 1.27.0-next.72
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/lib/common/connection.d.ts +3 -3
- package/lib/common/connection.d.ts.map +1 -1
- package/lib/common/connection.js +0 -1
- package/lib/common/connection.js.map +1 -1
- package/lib/common/plugin-api-rpc.d.ts +18 -8
- package/lib/common/plugin-api-rpc.d.ts.map +1 -1
- package/lib/common/plugin-api-rpc.js.map +1 -1
- package/lib/common/plugin-identifiers.d.ts +41 -0
- package/lib/common/plugin-identifiers.d.ts.map +1 -0
- package/lib/common/plugin-identifiers.js +81 -0
- package/lib/common/plugin-identifiers.js.map +1 -0
- package/lib/common/plugin-protocol.d.ts +41 -7
- package/lib/common/plugin-protocol.d.ts.map +1 -1
- package/lib/common/plugin-protocol.js +3 -1
- package/lib/common/plugin-protocol.js.map +1 -1
- package/lib/hosted/browser/hosted-plugin.d.ts +2 -2
- package/lib/hosted/browser/hosted-plugin.d.ts.map +1 -1
- package/lib/hosted/browser/hosted-plugin.js +20 -13
- package/lib/hosted/browser/hosted-plugin.js.map +1 -1
- package/lib/hosted/browser/worker/debug-stub.d.ts +1 -1
- package/lib/hosted/browser/worker/debug-stub.d.ts.map +1 -1
- package/lib/hosted/browser/worker/debug-stub.js +2 -2
- package/lib/hosted/browser/worker/debug-stub.js.map +1 -1
- package/lib/hosted/browser/worker/plugin-manifest-loader.d.ts.map +1 -1
- package/lib/hosted/browser/worker/plugin-manifest-loader.js +4 -1
- package/lib/hosted/browser/worker/plugin-manifest-loader.js.map +1 -1
- package/lib/hosted/node/hosted-plugin-deployer-handler.d.ts +10 -5
- package/lib/hosted/node/hosted-plugin-deployer-handler.d.ts.map +1 -1
- package/lib/hosted/node/hosted-plugin-deployer-handler.js +54 -12
- package/lib/hosted/node/hosted-plugin-deployer-handler.js.map +1 -1
- package/lib/hosted/node/hosted-plugin-localization-service.d.ts.map +1 -1
- package/lib/hosted/node/hosted-plugin-localization-service.js +2 -4
- package/lib/hosted/node/hosted-plugin-localization-service.js.map +1 -1
- package/lib/hosted/node/hosted-plugin-process.d.ts +2 -2
- package/lib/hosted/node/hosted-plugin-process.d.ts.map +1 -1
- package/lib/hosted/node/hosted-plugin-process.js.map +1 -1
- package/lib/hosted/node/hosted-plugin.d.ts +2 -2
- package/lib/hosted/node/hosted-plugin.d.ts.map +1 -1
- package/lib/hosted/node/hosted-plugin.js.map +1 -1
- package/lib/hosted/node/metadata-scanner.d.ts +3 -2
- package/lib/hosted/node/metadata-scanner.d.ts.map +1 -1
- package/lib/hosted/node/metadata-scanner.js +8 -3
- package/lib/hosted/node/metadata-scanner.js.map +1 -1
- package/lib/hosted/node/plugin-host-rpc.js +2 -2
- package/lib/hosted/node/plugin-host-rpc.js.map +1 -1
- package/lib/hosted/node/plugin-manifest-loader.d.ts.map +1 -1
- package/lib/hosted/node/plugin-manifest-loader.js +3 -0
- package/lib/hosted/node/plugin-manifest-loader.js.map +1 -1
- package/lib/hosted/node/plugin-service.d.ts +18 -4
- package/lib/hosted/node/plugin-service.d.ts.map +1 -1
- package/lib/hosted/node/plugin-service.js +73 -18
- package/lib/hosted/node/plugin-service.js.map +1 -1
- package/lib/hosted/node/scanners/scanner-theia.d.ts.map +1 -1
- package/lib/hosted/node/scanners/scanner-theia.js +6 -3
- package/lib/hosted/node/scanners/scanner-theia.js.map +1 -1
- package/lib/main/browser/custom-editors/custom-editor-opener.d.ts.map +1 -1
- package/lib/main/browser/custom-editors/custom-editor-opener.js +2 -2
- package/lib/main/browser/custom-editors/custom-editor-opener.js.map +1 -1
- package/lib/main/browser/debug/plugin-debug-service.d.ts +6 -0
- package/lib/main/browser/debug/plugin-debug-service.d.ts.map +1 -1
- package/lib/main/browser/debug/plugin-debug-service.js +25 -3
- package/lib/main/browser/debug/plugin-debug-service.js.map +1 -1
- package/lib/main/browser/debug/plugin-debug-session-factory.d.ts +3 -3
- package/lib/main/browser/debug/plugin-debug-session-factory.d.ts.map +1 -1
- package/lib/main/browser/debug/plugin-debug-session-factory.js.map +1 -1
- package/lib/main/browser/documents-main.d.ts +1 -2
- package/lib/main/browser/documents-main.d.ts.map +1 -1
- package/lib/main/browser/documents-main.js +26 -6
- package/lib/main/browser/documents-main.js.map +1 -1
- package/lib/main/browser/editors-and-documents-main.d.ts +2 -0
- package/lib/main/browser/editors-and-documents-main.d.ts.map +1 -1
- package/lib/main/browser/editors-and-documents-main.js +14 -2
- package/lib/main/browser/editors-and-documents-main.js.map +1 -1
- package/lib/main/browser/languages-main.d.ts.map +1 -1
- package/lib/main/browser/languages-main.js +2 -1
- package/lib/main/browser/languages-main.js.map +1 -1
- package/lib/main/browser/main-context.d.ts.map +1 -1
- package/lib/main/browser/main-context.js +5 -4
- package/lib/main/browser/main-context.js.map +1 -1
- package/lib/main/browser/plugin-contribution-handler.d.ts +2 -0
- package/lib/main/browser/plugin-contribution-handler.d.ts.map +1 -1
- package/lib/main/browser/plugin-contribution-handler.js +36 -1
- package/lib/main/browser/plugin-contribution-handler.js.map +1 -1
- package/lib/main/browser/plugin-shared-style.d.ts +4 -2
- package/lib/main/browser/plugin-shared-style.d.ts.map +1 -1
- package/lib/main/browser/plugin-shared-style.js +15 -4
- package/lib/main/browser/plugin-shared-style.js.map +1 -1
- package/lib/main/browser/text-editors-main.d.ts +6 -3
- package/lib/main/browser/text-editors-main.d.ts.map +1 -1
- package/lib/main/browser/text-editors-main.js +8 -1
- package/lib/main/browser/text-editors-main.js.map +1 -1
- package/lib/main/browser/theming-main.d.ts +2 -1
- package/lib/main/browser/theming-main.d.ts.map +1 -1
- package/lib/main/browser/theming-main.js +3 -6
- package/lib/main/browser/theming-main.js.map +1 -1
- package/lib/main/browser/view/plugin-tree-view-node-label-provider.d.ts.map +1 -1
- package/lib/main/browser/view/plugin-tree-view-node-label-provider.js +7 -5
- package/lib/main/browser/view/plugin-tree-view-node-label-provider.js.map +1 -1
- package/lib/main/browser/view/plugin-view-registry.d.ts +1 -1
- package/lib/main/browser/view/plugin-view-registry.d.ts.map +1 -1
- package/lib/main/browser/view/plugin-view-registry.js +11 -6
- package/lib/main/browser/view/plugin-view-registry.js.map +1 -1
- package/lib/main/browser/view/tree-view-widget.d.ts +10 -5
- package/lib/main/browser/view/tree-view-widget.d.ts.map +1 -1
- package/lib/main/browser/view/tree-view-widget.js +40 -14
- package/lib/main/browser/view/tree-view-widget.js.map +1 -1
- package/lib/main/browser/webview/webview-theme-data-provider.d.ts +3 -1
- package/lib/main/browser/webview/webview-theme-data-provider.d.ts.map +1 -1
- package/lib/main/browser/webview/webview-theme-data-provider.js +5 -1
- package/lib/main/browser/webview/webview-theme-data-provider.js.map +1 -1
- package/lib/main/node/handlers/plugin-theia-directory-handler.d.ts +6 -1
- package/lib/main/node/handlers/plugin-theia-directory-handler.d.ts.map +1 -1
- package/lib/main/node/handlers/plugin-theia-directory-handler.js +61 -20
- package/lib/main/node/handlers/plugin-theia-directory-handler.js.map +1 -1
- package/lib/main/node/handlers/plugin-theia-file-handler.d.ts +4 -0
- package/lib/main/node/handlers/plugin-theia-file-handler.d.ts.map +1 -1
- package/lib/main/node/handlers/plugin-theia-file-handler.js +25 -4
- package/lib/main/node/handlers/plugin-theia-file-handler.js.map +1 -1
- package/lib/main/node/plugin-cli-contribution.d.ts +3 -0
- package/lib/main/node/plugin-cli-contribution.d.ts.map +1 -1
- package/lib/main/node/plugin-cli-contribution.js +13 -0
- package/lib/main/node/plugin-cli-contribution.js.map +1 -1
- package/lib/main/node/plugin-deployer-directory-handler-context-impl.d.ts +1 -0
- package/lib/main/node/plugin-deployer-directory-handler-context-impl.d.ts.map +1 -1
- package/lib/main/node/plugin-deployer-directory-handler-context-impl.js +17 -0
- package/lib/main/node/plugin-deployer-directory-handler-context-impl.js.map +1 -1
- package/lib/main/node/plugin-deployer-file-handler-context-impl.d.ts.map +1 -1
- package/lib/main/node/plugin-deployer-file-handler-context-impl.js +0 -1
- package/lib/main/node/plugin-deployer-file-handler-context-impl.js.map +1 -1
- package/lib/main/node/plugin-deployer-impl.d.ts +5 -2
- package/lib/main/node/plugin-deployer-impl.d.ts.map +1 -1
- package/lib/main/node/plugin-deployer-impl.js +72 -28
- package/lib/main/node/plugin-deployer-impl.js.map +1 -1
- package/lib/main/node/plugin-ext-backend-module.d.ts.map +1 -1
- package/lib/main/node/plugin-ext-backend-module.js +2 -0
- package/lib/main/node/plugin-ext-backend-module.js.map +1 -1
- package/lib/main/node/plugin-server-handler.d.ts +3 -2
- package/lib/main/node/plugin-server-handler.d.ts.map +1 -1
- package/lib/main/node/plugin-server-handler.js +3 -0
- package/lib/main/node/plugin-server-handler.js.map +1 -1
- package/lib/main/node/plugin-uninstallation-manager.d.ts +12 -0
- package/lib/main/node/plugin-uninstallation-manager.d.ts.map +1 -0
- package/lib/main/node/plugin-uninstallation-manager.js +66 -0
- package/lib/main/node/plugin-uninstallation-manager.js.map +1 -0
- package/lib/plugin/{node/debug/debug.d.ts → debug/debug-ext.d.ts} +15 -13
- package/lib/plugin/debug/debug-ext.d.ts.map +1 -0
- package/lib/plugin/{node/debug/debug.js → debug/debug-ext.js} +17 -51
- package/lib/plugin/debug/debug-ext.js.map +1 -0
- package/lib/plugin/debug/plugin-debug-adapter-creator.d.ts +11 -0
- package/lib/plugin/debug/plugin-debug-adapter-creator.d.ts.map +1 -0
- package/lib/plugin/debug/plugin-debug-adapter-creator.js +42 -0
- package/lib/plugin/debug/plugin-debug-adapter-creator.js.map +1 -0
- package/lib/plugin/{node/debug → debug}/plugin-debug-adapter-session.d.ts +4 -4
- package/lib/plugin/debug/plugin-debug-adapter-session.d.ts.map +1 -0
- package/lib/plugin/{node/debug → debug}/plugin-debug-adapter-session.js +1 -1
- package/lib/plugin/debug/plugin-debug-adapter-session.js.map +1 -0
- package/lib/plugin/{node/debug → debug}/plugin-debug-adapter-tracker.d.ts +0 -0
- package/lib/plugin/debug/plugin-debug-adapter-tracker.d.ts.map +1 -0
- package/lib/plugin/{node/debug → debug}/plugin-debug-adapter-tracker.js +0 -0
- package/lib/plugin/debug/plugin-debug-adapter-tracker.js.map +1 -0
- package/lib/plugin/languages-utils.d.ts.map +1 -1
- package/lib/plugin/languages-utils.js +3 -2
- package/lib/plugin/languages-utils.js.map +1 -1
- package/lib/plugin/node/debug/plugin-node-debug-adapter-creator.d.ts +18 -0
- package/lib/plugin/node/debug/plugin-node-debug-adapter-creator.d.ts.map +1 -0
- package/lib/plugin/node/debug/plugin-node-debug-adapter-creator.js +155 -0
- package/lib/plugin/node/debug/plugin-node-debug-adapter-creator.js.map +1 -0
- package/lib/plugin/plugin-context.d.ts +1 -1
- package/lib/plugin/plugin-context.d.ts.map +1 -1
- package/lib/plugin/plugin-context.js +1 -2
- package/lib/plugin/plugin-context.js.map +1 -1
- package/lib/plugin/text-editor.d.ts +2 -0
- package/lib/plugin/text-editor.d.ts.map +1 -1
- package/lib/plugin/text-editor.js +9 -0
- package/lib/plugin/text-editor.js.map +1 -1
- package/lib/plugin/theming.d.ts +1 -1
- package/lib/plugin/theming.d.ts.map +1 -1
- package/lib/plugin/tree/tree-views.d.ts +1 -0
- package/lib/plugin/tree/tree-views.d.ts.map +1 -1
- package/lib/plugin/tree/tree-views.js +10 -9
- package/lib/plugin/tree/tree-views.js.map +1 -1
- package/lib/plugin/types-impl.d.ts +1 -0
- package/lib/plugin/types-impl.d.ts.map +1 -1
- package/lib/plugin/types-impl.js +3 -2
- package/lib/plugin/types-impl.js.map +1 -1
- package/package.json +25 -24
- package/src/common/connection.ts +3 -4
- package/src/common/plugin-api-rpc.ts +20 -12
- package/src/common/plugin-identifiers.ts +84 -0
- package/src/common/plugin-protocol.ts +47 -8
- package/src/hosted/browser/hosted-plugin.ts +22 -16
- package/src/hosted/browser/worker/debug-stub.ts +1 -1
- package/src/hosted/browser/worker/plugin-manifest-loader.ts +4 -2
- package/src/hosted/node/hosted-plugin-deployer-handler.ts +64 -20
- package/src/hosted/node/hosted-plugin-localization-service.ts +4 -6
- package/src/hosted/node/hosted-plugin-process.ts +4 -4
- package/src/hosted/node/hosted-plugin.ts +2 -2
- package/src/hosted/node/metadata-scanner.ts +8 -6
- package/src/hosted/node/plugin-host-rpc.ts +2 -2
- package/src/hosted/node/plugin-manifest-loader.ts +2 -0
- package/src/hosted/node/plugin-service.ts +79 -23
- package/src/hosted/node/scanners/scanner-theia.ts +7 -4
- package/src/main/browser/custom-editors/custom-editor-opener.tsx +2 -2
- package/src/main/browser/debug/plugin-debug-service.ts +32 -3
- package/src/main/browser/debug/plugin-debug-session-factory.ts +2 -2
- package/src/main/browser/documents-main.ts +26 -8
- package/src/main/browser/editors-and-documents-main.ts +16 -2
- package/src/main/browser/languages-main.ts +2 -1
- package/src/main/browser/main-context.ts +4 -3
- package/src/main/browser/plugin-contribution-handler.ts +41 -3
- package/src/main/browser/plugin-icon-theme-service.ts +1 -1
- package/src/main/browser/plugin-shared-style.ts +9 -5
- package/src/main/browser/text-editors-main.ts +12 -2
- package/src/main/browser/theming-main.ts +3 -7
- package/src/main/browser/view/plugin-tree-view-node-label-provider.ts +7 -5
- package/src/main/browser/view/plugin-view-registry.ts +12 -7
- package/src/main/browser/view/tree-view-widget.tsx +45 -17
- package/src/main/browser/webview/webview-theme-data-provider.ts +7 -10
- package/src/main/node/handlers/plugin-theia-directory-handler.ts +56 -28
- package/src/main/node/handlers/plugin-theia-file-handler.ts +25 -4
- package/src/main/node/plugin-cli-contribution.ts +12 -0
- package/src/main/node/plugin-deployer-directory-handler-context-impl.ts +17 -1
- package/src/main/node/plugin-deployer-file-handler-context-impl.ts +0 -1
- package/src/main/node/plugin-deployer-impl.ts +75 -30
- package/src/main/node/plugin-ext-backend-module.ts +3 -0
- package/src/main/node/plugin-server-handler.ts +6 -2
- package/src/main/node/plugin-uninstallation-manager.ts +60 -0
- package/src/plugin/{node/debug/debug.ts → debug/debug-ext.ts} +25 -56
- package/src/plugin/debug/plugin-debug-adapter-creator.ts +50 -0
- package/src/plugin/{node/debug → debug}/plugin-debug-adapter-session.ts +4 -4
- package/src/plugin/{node/debug → debug}/plugin-debug-adapter-tracker.ts +0 -0
- package/src/plugin/languages-utils.ts +3 -2
- package/src/plugin/node/debug/plugin-node-debug-adapter-creator.ts +167 -0
- package/src/plugin/plugin-context.ts +2 -3
- package/src/plugin/text-editor.ts +16 -5
- package/src/plugin/theming.ts +1 -1
- package/src/plugin/tree/tree-views.ts +15 -12
- package/src/plugin/types-impl.ts +1 -1
- package/lib/main/browser/custom-editors/glob.d.ts +0 -51
- package/lib/main/browser/custom-editors/glob.d.ts.map +0 -1
- package/lib/main/browser/custom-editors/glob.js +0 -593
- package/lib/main/browser/custom-editors/glob.js.map +0 -1
- package/lib/main/browser/custom-editors/paths.d.ts +0 -25
- package/lib/main/browser/custom-editors/paths.d.ts.map +0 -1
- package/lib/main/browser/custom-editors/paths.js +0 -227
- package/lib/main/browser/custom-editors/paths.js.map +0 -1
- package/lib/main/browser/editor/untitled-resource.d.ts +0 -3
- package/lib/main/browser/editor/untitled-resource.d.ts.map +0 -1
- package/lib/main/browser/editor/untitled-resource.js +0 -24
- package/lib/main/browser/editor/untitled-resource.js.map +0 -1
- package/lib/plugin/node/debug/debug.d.ts.map +0 -1
- package/lib/plugin/node/debug/debug.js.map +0 -1
- package/lib/plugin/node/debug/plugin-debug-adapter-executable-resolver.d.ts +0 -7
- package/lib/plugin/node/debug/plugin-debug-adapter-executable-resolver.d.ts.map +0 -1
- package/lib/plugin/node/debug/plugin-debug-adapter-executable-resolver.js +0 -57
- package/lib/plugin/node/debug/plugin-debug-adapter-executable-resolver.js.map +0 -1
- package/lib/plugin/node/debug/plugin-debug-adapter-session.d.ts.map +0 -1
- package/lib/plugin/node/debug/plugin-debug-adapter-session.js.map +0 -1
- package/lib/plugin/node/debug/plugin-debug-adapter-starter.d.ts +0 -15
- package/lib/plugin/node/debug/plugin-debug-adapter-starter.d.ts.map +0 -1
- package/lib/plugin/node/debug/plugin-debug-adapter-starter.js +0 -85
- package/lib/plugin/node/debug/plugin-debug-adapter-starter.js.map +0 -1
- package/lib/plugin/node/debug/plugin-debug-adapter-tracker.d.ts.map +0 -1
- package/lib/plugin/node/debug/plugin-debug-adapter-tracker.js.map +0 -1
- package/lib/plugin/node/debug/plugin-inline-debug-adapter.d.ts +0 -19
- package/lib/plugin/node/debug/plugin-inline-debug-adapter.d.ts.map +0 -1
- package/lib/plugin/node/debug/plugin-inline-debug-adapter.js +0 -45
- package/lib/plugin/node/debug/plugin-inline-debug-adapter.js.map +0 -1
- package/src/main/browser/custom-editors/glob.ts +0 -743
- package/src/main/browser/custom-editors/paths.ts +0 -250
- package/src/main/browser/editor/untitled-resource.ts +0 -18
- package/src/plugin/node/debug/plugin-debug-adapter-executable-resolver.ts +0 -58
- package/src/plugin/node/debug/plugin-debug-adapter-starter.ts +0 -86
- package/src/plugin/node/debug/plugin-inline-debug-adapter.ts +0 -47
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
|
|
17
17
|
import { injectable, inject, multiInject, postConstruct, optional } from '@theia/core/shared/inversify';
|
|
18
18
|
import { ILogger, ConnectionErrorHandler } from '@theia/core/lib/common';
|
|
19
|
-
import { HostedPluginClient, PluginModel, ServerPluginRunner, DeployedPlugin } from '../../common/plugin-protocol';
|
|
19
|
+
import { HostedPluginClient, PluginModel, ServerPluginRunner, DeployedPlugin, PluginIdentifiers } from '../../common/plugin-protocol';
|
|
20
20
|
import { LogPart } from '../../common/types';
|
|
21
21
|
import { HostedPluginProcess } from './hosted-plugin-process';
|
|
22
22
|
|
|
@@ -95,7 +95,7 @@ export class HostedPluginSupport {
|
|
|
95
95
|
/**
|
|
96
96
|
* Provides additional plugin ids.
|
|
97
97
|
*/
|
|
98
|
-
async getExtraDeployedPluginIds(): Promise<
|
|
98
|
+
async getExtraDeployedPluginIds(): Promise<PluginIdentifiers.VersionedId[]> {
|
|
99
99
|
return [].concat.apply([], await Promise.all(this.pluginRunners.map(runner => runner.getExtraDeployedPluginIds())));
|
|
100
100
|
}
|
|
101
101
|
|
|
@@ -14,15 +14,16 @@
|
|
|
14
14
|
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
15
15
|
// *****************************************************************************
|
|
16
16
|
|
|
17
|
-
import { injectable, multiInject } from '@theia/core/shared/inversify';
|
|
18
|
-
import { PluginPackage, PluginScanner, PluginMetadata, PLUGIN_HOST_BACKEND } from '../../common/plugin-protocol';
|
|
17
|
+
import { inject, injectable, multiInject } from '@theia/core/shared/inversify';
|
|
18
|
+
import { PluginPackage, PluginScanner, PluginMetadata, PLUGIN_HOST_BACKEND, PluginIdentifiers } from '../../common/plugin-protocol';
|
|
19
|
+
import { PluginUninstallationManager } from '../../main/node/plugin-uninstallation-manager';
|
|
19
20
|
@injectable()
|
|
20
21
|
export class MetadataScanner {
|
|
21
22
|
private scanners: Map<string, PluginScanner> = new Map();
|
|
22
23
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
) {
|
|
24
|
+
@inject(PluginUninstallationManager) protected readonly uninstallationManager: PluginUninstallationManager;
|
|
25
|
+
|
|
26
|
+
constructor(@multiInject(PluginScanner) scanners: PluginScanner[]) {
|
|
26
27
|
scanners.forEach((scanner: PluginScanner) => {
|
|
27
28
|
this.scanners.set(scanner.apiType, scanner);
|
|
28
29
|
});
|
|
@@ -33,7 +34,8 @@ export class MetadataScanner {
|
|
|
33
34
|
return {
|
|
34
35
|
host: PLUGIN_HOST_BACKEND,
|
|
35
36
|
model: scanner.getModel(plugin),
|
|
36
|
-
lifecycle: scanner.getLifecycle(plugin)
|
|
37
|
+
lifecycle: scanner.getLifecycle(plugin),
|
|
38
|
+
outOfSync: this.uninstallationManager.isUninstalled(PluginIdentifiers.componentsToVersionedId(plugin)),
|
|
37
39
|
};
|
|
38
40
|
}
|
|
39
41
|
|
|
@@ -22,7 +22,7 @@ import { createAPIFactory } from '../../plugin/plugin-context';
|
|
|
22
22
|
import { EnvExtImpl } from '../../plugin/env';
|
|
23
23
|
import { PreferenceRegistryExtImpl } from '../../plugin/preference-registry';
|
|
24
24
|
import { ExtPluginApi, ExtPluginApiBackendInitializationFn } from '../../common/plugin-ext-api-contribution';
|
|
25
|
-
import { DebugExtImpl } from '../../plugin/
|
|
25
|
+
import { DebugExtImpl } from '../../plugin/debug/debug-ext';
|
|
26
26
|
import { EditorsAndDocumentsExtImpl } from '../../plugin/editors-and-documents';
|
|
27
27
|
import { WorkspaceExtImpl } from '../../plugin/workspace';
|
|
28
28
|
import { MessageRegistryExt } from '../../plugin/message-registry';
|
|
@@ -114,7 +114,7 @@ export class PluginHostRPC {
|
|
|
114
114
|
console.log('PLUGIN_HOST(' + process.pid + '): PluginManagerExtImpl/loadPlugin(' + plugin.pluginPath + ')');
|
|
115
115
|
// cleaning the cache for all files of that plug-in.
|
|
116
116
|
Object.keys(require.cache).forEach(function (key): void {
|
|
117
|
-
const mod: NodeJS.Module = require.cache[key]
|
|
117
|
+
const mod: NodeJS.Module = require.cache[key]!;
|
|
118
118
|
|
|
119
119
|
// attempting to reload a native module will throw an error, so skip them
|
|
120
120
|
if (mod.id.endsWith('.node')) {
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
|
|
17
17
|
import * as path from 'path';
|
|
18
18
|
import * as fs from '@theia/core/shared/fs-extra';
|
|
19
|
+
import { PluginIdentifiers } from '../../common';
|
|
19
20
|
|
|
20
21
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
21
22
|
export async function loadManifest(pluginPath: string): Promise<any> {
|
|
@@ -25,5 +26,6 @@ export async function loadManifest(pluginPath: string): Promise<any> {
|
|
|
25
26
|
if (manifest && manifest.name && manifest.name.startsWith(built_prefix)) {
|
|
26
27
|
manifest.name = manifest.name.substr(built_prefix.length);
|
|
27
28
|
}
|
|
29
|
+
manifest.publisher ??= PluginIdentifiers.UNPUBLISHED;
|
|
28
30
|
return manifest;
|
|
29
31
|
}
|
|
@@ -14,13 +14,14 @@
|
|
|
14
14
|
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
15
15
|
// *****************************************************************************
|
|
16
16
|
import { injectable, inject, named, postConstruct } from '@theia/core/shared/inversify';
|
|
17
|
-
import { HostedPluginServer, HostedPluginClient, PluginDeployer, GetDeployedPluginsParams, DeployedPlugin } from '../../common/plugin-protocol';
|
|
17
|
+
import { HostedPluginServer, HostedPluginClient, PluginDeployer, GetDeployedPluginsParams, DeployedPlugin, PluginIdentifiers } from '../../common/plugin-protocol';
|
|
18
18
|
import { HostedPluginSupport } from './hosted-plugin';
|
|
19
|
-
import { ILogger, Disposable, ContributionProvider } from '@theia/core';
|
|
19
|
+
import { ILogger, Disposable, ContributionProvider, DisposableCollection } from '@theia/core';
|
|
20
20
|
import { ExtPluginApiProvider, ExtPluginApi } from '../../common/plugin-ext-api-contribution';
|
|
21
21
|
import { HostedPluginDeployerHandler } from './hosted-plugin-deployer-handler';
|
|
22
22
|
import { PluginDeployerImpl } from '../../main/node/plugin-deployer-impl';
|
|
23
23
|
import { HostedPluginLocalizationService } from './hosted-plugin-localization-service';
|
|
24
|
+
import { PluginUninstallationManager } from '../../main/node/plugin-uninstallation-manager';
|
|
24
25
|
|
|
25
26
|
@injectable()
|
|
26
27
|
export class HostedPluginServerImpl implements HostedPluginServer {
|
|
@@ -40,9 +41,21 @@ export class HostedPluginServerImpl implements HostedPluginServer {
|
|
|
40
41
|
@named(Symbol.for(ExtPluginApiProvider))
|
|
41
42
|
protected readonly extPluginAPIContributions: ContributionProvider<ExtPluginApiProvider>;
|
|
42
43
|
|
|
44
|
+
@inject(PluginUninstallationManager) protected readonly uninstallationManager: PluginUninstallationManager;
|
|
45
|
+
|
|
43
46
|
protected client: HostedPluginClient | undefined;
|
|
47
|
+
protected toDispose = new DisposableCollection();
|
|
48
|
+
|
|
49
|
+
protected _ignoredPlugins?: Set<PluginIdentifiers.VersionedId>;
|
|
50
|
+
// We ignore any plugins that are marked as uninstalled the first time the frontend requests information about deployed plugins.
|
|
51
|
+
protected get ignoredPlugins(): Set<PluginIdentifiers.VersionedId> {
|
|
52
|
+
if (!this._ignoredPlugins) {
|
|
53
|
+
this._ignoredPlugins = new Set(this.uninstallationManager.getUninstalledPluginIds());
|
|
54
|
+
}
|
|
55
|
+
return this._ignoredPlugins;
|
|
56
|
+
}
|
|
44
57
|
|
|
45
|
-
protected
|
|
58
|
+
protected readonly pluginVersions = new Map<PluginIdentifiers.UnversionedId, string>();
|
|
46
59
|
|
|
47
60
|
constructor(
|
|
48
61
|
@inject(HostedPluginSupport) private readonly hostedPlugin: HostedPluginSupport) {
|
|
@@ -50,38 +63,78 @@ export class HostedPluginServerImpl implements HostedPluginServer {
|
|
|
50
63
|
|
|
51
64
|
@postConstruct()
|
|
52
65
|
protected init(): void {
|
|
53
|
-
this.
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
66
|
+
this.toDispose.pushAll([
|
|
67
|
+
this.pluginDeployer.onDidDeploy(() => this.client?.onDidDeploy()),
|
|
68
|
+
this.uninstallationManager.onDidChangeUninstalledPlugins(currentUninstalled => {
|
|
69
|
+
if (this._ignoredPlugins) {
|
|
70
|
+
const uninstalled = new Set(currentUninstalled);
|
|
71
|
+
for (const previouslyUninstalled of this._ignoredPlugins) {
|
|
72
|
+
if (!uninstalled.has(previouslyUninstalled)) {
|
|
73
|
+
this._ignoredPlugins.delete(previouslyUninstalled);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
this.client?.onDidDeploy();
|
|
78
|
+
}),
|
|
79
|
+
Disposable.create(() => this.hostedPlugin.clientClosed()),
|
|
80
|
+
]);
|
|
58
81
|
}
|
|
59
82
|
|
|
60
83
|
dispose(): void {
|
|
61
|
-
this.
|
|
62
|
-
this.deployedListener.dispose();
|
|
84
|
+
this.toDispose.dispose();
|
|
63
85
|
}
|
|
86
|
+
|
|
64
87
|
setClient(client: HostedPluginClient): void {
|
|
65
88
|
this.client = client;
|
|
66
89
|
this.hostedPlugin.setClient(client);
|
|
67
90
|
}
|
|
68
91
|
|
|
69
|
-
async getDeployedPluginIds(): Promise<
|
|
92
|
+
async getDeployedPluginIds(): Promise<PluginIdentifiers.VersionedId[]> {
|
|
70
93
|
const backendMetadata = await this.deployerHandler.getDeployedBackendPluginIds();
|
|
71
94
|
if (backendMetadata.length > 0) {
|
|
72
95
|
this.hostedPlugin.runPluginServer();
|
|
73
96
|
}
|
|
74
|
-
const plugins = new Set<
|
|
75
|
-
|
|
76
|
-
|
|
97
|
+
const plugins = new Set<PluginIdentifiers.VersionedId>();
|
|
98
|
+
const addIds = async (identifiers: PluginIdentifiers.VersionedId[]): Promise<void> => {
|
|
99
|
+
for (const pluginId of identifiers) {
|
|
100
|
+
if (this.isRelevantPlugin(pluginId)) {
|
|
101
|
+
plugins.add(pluginId);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
addIds(await this.deployerHandler.getDeployedFrontendPluginIds());
|
|
106
|
+
addIds(backendMetadata);
|
|
107
|
+
addIds(await this.hostedPlugin.getExtraDeployedPluginIds());
|
|
108
|
+
return Array.from(plugins);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Ensures that the plugin was not uninstalled when this session was started
|
|
113
|
+
* and that it matches the first version of the given plugin seen by this session.
|
|
114
|
+
*
|
|
115
|
+
* The deployment system may have multiple versions of the same plugin available, but
|
|
116
|
+
* a single session should only ever activate one of them.
|
|
117
|
+
*/
|
|
118
|
+
protected isRelevantPlugin(identifier: PluginIdentifiers.VersionedId): boolean {
|
|
119
|
+
const versionAndId = PluginIdentifiers.idAndVersionFromVersionedId(identifier);
|
|
120
|
+
if (!versionAndId) {
|
|
121
|
+
return false;
|
|
77
122
|
}
|
|
78
|
-
|
|
79
|
-
|
|
123
|
+
const knownVersion = this.pluginVersions.get(versionAndId.id);
|
|
124
|
+
if (knownVersion !== undefined && knownVersion !== versionAndId.version) {
|
|
125
|
+
return false;
|
|
80
126
|
}
|
|
81
|
-
|
|
82
|
-
|
|
127
|
+
if (this.ignoredPlugins.has(identifier)) {
|
|
128
|
+
return false;
|
|
83
129
|
}
|
|
84
|
-
|
|
130
|
+
if (knownVersion === undefined) {
|
|
131
|
+
this.pluginVersions.set(versionAndId.id, versionAndId.version);
|
|
132
|
+
}
|
|
133
|
+
return true;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
getUninstalledPluginIds(): Promise<readonly PluginIdentifiers.VersionedId[]> {
|
|
137
|
+
return Promise.resolve(this.uninstallationManager.getUninstalledPluginIds());
|
|
85
138
|
}
|
|
86
139
|
|
|
87
140
|
async getDeployedPlugins({ pluginIds }: GetDeployedPluginsParams): Promise<DeployedPlugin[]> {
|
|
@@ -90,16 +143,19 @@ export class HostedPluginServerImpl implements HostedPluginServer {
|
|
|
90
143
|
}
|
|
91
144
|
const plugins: DeployedPlugin[] = [];
|
|
92
145
|
let extraDeployedPlugins: Map<string, DeployedPlugin> | undefined;
|
|
93
|
-
for (const
|
|
94
|
-
|
|
146
|
+
for (const versionedId of pluginIds) {
|
|
147
|
+
if (!this.isRelevantPlugin(versionedId)) {
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
let plugin = this.deployerHandler.getDeployedPlugin(versionedId);
|
|
95
151
|
if (!plugin) {
|
|
96
152
|
if (!extraDeployedPlugins) {
|
|
97
153
|
extraDeployedPlugins = new Map<string, DeployedPlugin>();
|
|
98
154
|
for (const extraDeployedPlugin of await this.hostedPlugin.getExtraDeployedPlugins()) {
|
|
99
|
-
extraDeployedPlugins.set(extraDeployedPlugin.metadata.model
|
|
155
|
+
extraDeployedPlugins.set(PluginIdentifiers.componentsToVersionedId(extraDeployedPlugin.metadata.model), extraDeployedPlugin);
|
|
100
156
|
}
|
|
101
157
|
}
|
|
102
|
-
plugin = extraDeployedPlugins.get(
|
|
158
|
+
plugin = extraDeployedPlugins.get(versionedId);
|
|
103
159
|
}
|
|
104
160
|
if (plugin) {
|
|
105
161
|
plugins.push(plugin);
|
|
@@ -58,7 +58,8 @@ import {
|
|
|
58
58
|
PluginPackageLocalization,
|
|
59
59
|
Localization,
|
|
60
60
|
PluginPackageTranslation,
|
|
61
|
-
Translation
|
|
61
|
+
Translation,
|
|
62
|
+
PluginIdentifiers
|
|
62
63
|
} from '../../../common/plugin-protocol';
|
|
63
64
|
import * as fs from 'fs';
|
|
64
65
|
import * as path from 'path';
|
|
@@ -109,13 +110,14 @@ export class TheiaPluginScanner implements PluginScanner {
|
|
|
109
110
|
}
|
|
110
111
|
|
|
111
112
|
getModel(plugin: PluginPackage): PluginModel {
|
|
113
|
+
const publisher = plugin.publisher ?? PluginIdentifiers.UNPUBLISHED;
|
|
112
114
|
const result: PluginModel = {
|
|
113
115
|
packagePath: plugin.packagePath,
|
|
114
116
|
packageUri: this.pluginUriFactory.createUri(plugin).toString(),
|
|
115
117
|
// see id definition: https://github.com/microsoft/vscode/blob/15916055fe0cb9411a5f36119b3b012458fe0a1d/src/vs/platform/extensions/common/extensions.ts#L167-L169
|
|
116
|
-
id: `${
|
|
118
|
+
id: `${publisher.toLowerCase()}.${plugin.name.toLowerCase()}`,
|
|
117
119
|
name: plugin.name,
|
|
118
|
-
publisher
|
|
120
|
+
publisher,
|
|
119
121
|
version: plugin.version,
|
|
120
122
|
displayName: plugin.displayName,
|
|
121
123
|
description: plugin.description,
|
|
@@ -660,7 +662,8 @@ export class TheiaPluginScanner implements PluginScanner {
|
|
|
660
662
|
wordPattern: rawConfiguration.wordPattern,
|
|
661
663
|
autoClosingPairs: this.extractValidAutoClosingPairs(rawLang.id, rawConfiguration),
|
|
662
664
|
indentationRules: rawConfiguration.indentationRules,
|
|
663
|
-
surroundingPairs: this.extractValidSurroundingPairs(rawLang.id, rawConfiguration)
|
|
665
|
+
surroundingPairs: this.extractValidSurroundingPairs(rawLang.id, rawConfiguration),
|
|
666
|
+
onEnterRules: rawConfiguration.onEnterRules,
|
|
664
667
|
};
|
|
665
668
|
result.configuration = configuration;
|
|
666
669
|
}
|
|
@@ -18,10 +18,10 @@ import { inject } from '@theia/core/shared/inversify';
|
|
|
18
18
|
import URI from '@theia/core/lib/common/uri';
|
|
19
19
|
import { ApplicationShell, OpenHandler, Widget, WidgetManager, WidgetOpenerOptions } from '@theia/core/lib/browser';
|
|
20
20
|
import { CustomEditor, CustomEditorPriority, CustomEditorSelector } from '../../../common';
|
|
21
|
-
import * as glob from './glob';
|
|
22
21
|
import { CustomEditorWidget } from './custom-editor-widget';
|
|
23
22
|
import { v4 } from 'uuid';
|
|
24
23
|
import { Emitter } from '@theia/core';
|
|
24
|
+
import { match } from '@theia/core/lib/common/glob';
|
|
25
25
|
|
|
26
26
|
export class CustomEditorOpener implements OpenHandler {
|
|
27
27
|
|
|
@@ -96,7 +96,7 @@ export class CustomEditorOpener implements OpenHandler {
|
|
|
96
96
|
|
|
97
97
|
selectorMatches(selector: CustomEditorSelector, resource: URI): boolean {
|
|
98
98
|
if (selector.filenamePattern) {
|
|
99
|
-
if (
|
|
99
|
+
if (match(selector.filenamePattern.toLowerCase(), resource.path.name.toLowerCase() + resource.path.ext.toLowerCase())) {
|
|
100
100
|
return true;
|
|
101
101
|
}
|
|
102
102
|
}
|
|
@@ -15,6 +15,8 @@
|
|
|
15
15
|
// *****************************************************************************
|
|
16
16
|
|
|
17
17
|
import { DebuggerDescription, DebugPath, DebugService } from '@theia/debug/lib/common/debug-service';
|
|
18
|
+
import debounce = require('@theia/core/shared/lodash.debounce');
|
|
19
|
+
import { Emitter, Event } from '@theia/core';
|
|
18
20
|
import { Disposable, DisposableCollection } from '@theia/core/lib/common/disposable';
|
|
19
21
|
import { DebugConfiguration } from '@theia/debug/lib/common/debug-configuration';
|
|
20
22
|
import { IJSONSchema, IJSONSchemaSnippet } from '@theia/core/lib/common/json-schema';
|
|
@@ -40,6 +42,11 @@ export class PluginDebugService implements DebugService {
|
|
|
40
42
|
protected readonly configurationProviders = new Map<number, PluginDebugConfigurationProvider>();
|
|
41
43
|
protected readonly toDispose = new DisposableCollection();
|
|
42
44
|
|
|
45
|
+
protected readonly onDidChangeDebugConfigurationProvidersEmitter = new Emitter<void>();
|
|
46
|
+
get onDidChangeDebugConfigurationProviders(): Event<void> {
|
|
47
|
+
return this.onDidChangeDebugConfigurationProvidersEmitter.event;
|
|
48
|
+
}
|
|
49
|
+
|
|
43
50
|
// maps session and contribution
|
|
44
51
|
protected readonly sessionId2contrib = new Map<string, PluginDebugAdapterContribution>();
|
|
45
52
|
protected delegated: DebugService;
|
|
@@ -79,14 +86,21 @@ export class PluginDebugService implements DebugService {
|
|
|
79
86
|
this.contributors.delete(debugType);
|
|
80
87
|
}
|
|
81
88
|
|
|
89
|
+
// debouncing to send a single notification for multiple registrations at initialization time
|
|
90
|
+
fireOnDidConfigurationProvidersChanged = debounce(() => {
|
|
91
|
+
this.onDidChangeDebugConfigurationProvidersEmitter.fire();
|
|
92
|
+
}, 100);
|
|
93
|
+
|
|
82
94
|
registerDebugConfigurationProvider(provider: PluginDebugConfigurationProvider): Disposable {
|
|
83
95
|
const handle = provider.handle;
|
|
84
96
|
this.configurationProviders.set(handle, provider);
|
|
97
|
+
this.fireOnDidConfigurationProvidersChanged();
|
|
85
98
|
return Disposable.create(() => this.unregisterDebugConfigurationProvider(handle));
|
|
86
99
|
}
|
|
87
100
|
|
|
88
101
|
unregisterDebugConfigurationProvider(handle: number): void {
|
|
89
102
|
this.configurationProviders.delete(handle);
|
|
103
|
+
this.fireOnDidConfigurationProvidersChanged();
|
|
90
104
|
}
|
|
91
105
|
|
|
92
106
|
async debugTypes(): Promise<string[]> {
|
|
@@ -123,6 +137,24 @@ export class PluginDebugService implements DebugService {
|
|
|
123
137
|
return results;
|
|
124
138
|
}
|
|
125
139
|
|
|
140
|
+
async fetchDynamicDebugConfiguration(name: string, providerType: string): Promise<DebugConfiguration | undefined> {
|
|
141
|
+
const pluginProviders =
|
|
142
|
+
Array.from(this.configurationProviders.values()).filter(p => (
|
|
143
|
+
p.triggerKind === DebugConfigurationProviderTriggerKind.Dynamic &&
|
|
144
|
+
p.type === providerType &&
|
|
145
|
+
p.provideDebugConfigurations
|
|
146
|
+
));
|
|
147
|
+
|
|
148
|
+
for (const provider of pluginProviders) {
|
|
149
|
+
const configurations = await provider.provideDebugConfigurations(undefined);
|
|
150
|
+
for (const configuration of configurations) {
|
|
151
|
+
if (configuration.name === name) {
|
|
152
|
+
return configuration;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
126
158
|
async provideDynamicDebugConfigurations(): Promise<Record<string, DebugConfiguration[]>> {
|
|
127
159
|
const pluginProviders =
|
|
128
160
|
Array.from(this.configurationProviders.values()).filter(p => (
|
|
@@ -134,9 +166,6 @@ export class PluginDebugService implements DebugService {
|
|
|
134
166
|
|
|
135
167
|
await Promise.all(pluginProviders.map(async provider => {
|
|
136
168
|
const configurations = await provider.provideDebugConfigurations(undefined);
|
|
137
|
-
for (const configuration of configurations) {
|
|
138
|
-
configuration.dynamic = true;
|
|
139
|
-
}
|
|
140
169
|
let configurationsPerType = configurationsRecord[provider.type];
|
|
141
170
|
configurationsPerType = configurationsPerType ? configurationsPerType.concat(configurations) : configurations;
|
|
142
171
|
|
|
@@ -30,8 +30,8 @@ import { TerminalOptionsExt } from '../../../common/plugin-api-rpc';
|
|
|
30
30
|
import { FileService } from '@theia/filesystem/lib/browser/file-service';
|
|
31
31
|
import { DebugContribution } from '@theia/debug/lib/browser/debug-contribution';
|
|
32
32
|
import { ContributionProvider } from '@theia/core/lib/common/contribution-provider';
|
|
33
|
-
import { Channel } from '@theia/debug/lib/common/debug-service';
|
|
34
33
|
import { WorkspaceService } from '@theia/workspace/lib/browser';
|
|
34
|
+
import { PluginChannel } from '../../../common/connection';
|
|
35
35
|
|
|
36
36
|
export class PluginDebugSession extends DebugSession {
|
|
37
37
|
constructor(
|
|
@@ -71,7 +71,7 @@ export class PluginDebugSessionFactory extends DefaultDebugSessionFactory {
|
|
|
71
71
|
protected override readonly messages: MessageClient,
|
|
72
72
|
protected override readonly outputChannelManager: OutputChannelManager,
|
|
73
73
|
protected override readonly debugPreferences: DebugPreferences,
|
|
74
|
-
protected readonly connectionFactory: (sessionId: string) => Promise<
|
|
74
|
+
protected readonly connectionFactory: (sessionId: string) => Promise<PluginChannel>,
|
|
75
75
|
protected override readonly fileService: FileService,
|
|
76
76
|
protected readonly terminalOptionsExt: TerminalOptionsExt | undefined,
|
|
77
77
|
protected override readonly debugContributionProvider: ContributionProvider<DebugContribution>,
|
|
@@ -16,11 +16,10 @@
|
|
|
16
16
|
import { DocumentsMain, MAIN_RPC_CONTEXT, DocumentsExt } from '../../common/plugin-api-rpc';
|
|
17
17
|
import { UriComponents } from '../../common/uri-components';
|
|
18
18
|
import { EditorsAndDocumentsMain } from './editors-and-documents-main';
|
|
19
|
-
import { DisposableCollection, Disposable } from '@theia/core';
|
|
19
|
+
import { DisposableCollection, Disposable, UntitledResourceResolver } from '@theia/core';
|
|
20
20
|
import { MonacoEditorModel } from '@theia/monaco/lib/browser/monaco-editor-model';
|
|
21
21
|
import { RPCProtocol } from '../../common/rpc-protocol';
|
|
22
22
|
import { EditorModelService } from './text-editor-model-service';
|
|
23
|
-
import { UntitledResourceResolver } from './editor/untitled-resource';
|
|
24
23
|
import { EditorManager, EditorOpenerOptions } from '@theia/editor/lib/browser';
|
|
25
24
|
import URI from '@theia/core/lib/common/uri';
|
|
26
25
|
import { URI as CodeURI } from '@theia/core/shared/vscode-uri';
|
|
@@ -248,16 +247,35 @@ export class DocumentsMainImpl implements DocumentsMain, Disposable {
|
|
|
248
247
|
}
|
|
249
248
|
/* fall back to side group -> split relative to the active widget */
|
|
250
249
|
let widgetOptions: ApplicationShell.WidgetOptions | undefined = { mode: 'split-right' };
|
|
251
|
-
|
|
250
|
+
let viewColumn = options.viewColumn;
|
|
251
|
+
if (viewColumn === -2) {
|
|
252
|
+
/* show besides -> compute current column and adjust viewColumn accordingly */
|
|
253
|
+
const tabBars = shell.mainAreaTabBars;
|
|
254
|
+
const currentTabBar = shell.currentTabBar;
|
|
255
|
+
if (currentTabBar) {
|
|
256
|
+
const currentColumn = tabBars.indexOf(currentTabBar);
|
|
257
|
+
if (currentColumn > -1) {
|
|
258
|
+
// +2 because conversion from 0-based to 1-based index and increase of 1
|
|
259
|
+
viewColumn = currentColumn + 2;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
252
263
|
if (viewColumn === undefined || viewColumn === -1) {
|
|
253
264
|
/* active group -> skip (default behaviour) */
|
|
254
265
|
widgetOptions = undefined;
|
|
255
|
-
} else if (viewColumn > 0) {
|
|
266
|
+
} else if (viewColumn > 0 && shell.mainAreaTabBars.length > 0) {
|
|
256
267
|
const tabBars = shell.mainAreaTabBars;
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
268
|
+
if (viewColumn <= tabBars.length) {
|
|
269
|
+
// convert to zero-based index
|
|
270
|
+
const tabBar = tabBars[viewColumn - 1];
|
|
271
|
+
if (tabBar?.currentTitle) {
|
|
272
|
+
widgetOptions = { ref: tabBar.currentTitle.owner };
|
|
273
|
+
}
|
|
274
|
+
} else {
|
|
275
|
+
const tabBar = tabBars[tabBars.length - 1];
|
|
276
|
+
if (tabBar?.currentTitle) {
|
|
277
|
+
widgetOptions!.ref = tabBar.currentTitle.owner;
|
|
278
|
+
}
|
|
261
279
|
}
|
|
262
280
|
}
|
|
263
281
|
return {
|
|
@@ -41,6 +41,7 @@ export class EditorsAndDocumentsMain implements Disposable {
|
|
|
41
41
|
private readonly textEditors = new Map<string, TextEditorMain>();
|
|
42
42
|
|
|
43
43
|
private readonly modelService: EditorModelService;
|
|
44
|
+
private readonly editorService: EditorManager;
|
|
44
45
|
|
|
45
46
|
private readonly onTextEditorAddEmitter = new Emitter<TextEditorMain[]>();
|
|
46
47
|
private readonly onTextEditorRemoveEmitter = new Emitter<string[]>();
|
|
@@ -59,10 +60,10 @@ export class EditorsAndDocumentsMain implements Disposable {
|
|
|
59
60
|
constructor(rpc: RPCProtocol, container: interfaces.Container) {
|
|
60
61
|
this.proxy = rpc.getProxy(MAIN_RPC_CONTEXT.EDITORS_AND_DOCUMENTS_EXT);
|
|
61
62
|
|
|
62
|
-
|
|
63
|
+
this.editorService = container.get(EditorManager);
|
|
63
64
|
this.modelService = container.get(EditorModelService);
|
|
64
65
|
|
|
65
|
-
this.stateComputer = new EditorAndDocumentStateComputer(d => this.onDelta(d), editorService, this.modelService);
|
|
66
|
+
this.stateComputer = new EditorAndDocumentStateComputer(d => this.onDelta(d), this.editorService, this.modelService);
|
|
66
67
|
this.toDispose.push(this.stateComputer);
|
|
67
68
|
this.toDispose.push(this.onTextEditorAddEmitter);
|
|
68
69
|
this.toDispose.push(this.onTextEditorRemoveEmitter);
|
|
@@ -168,6 +169,19 @@ export class EditorsAndDocumentsMain implements Disposable {
|
|
|
168
169
|
saveAll(includeUntitled?: boolean): Promise<boolean> {
|
|
169
170
|
return this.modelService.saveAll(includeUntitled);
|
|
170
171
|
}
|
|
172
|
+
|
|
173
|
+
hideEditor(id: string): Promise<void> {
|
|
174
|
+
for (const editorWidget of this.editorService.all) {
|
|
175
|
+
const monacoEditor = MonacoEditor.get(editorWidget);
|
|
176
|
+
if (monacoEditor) {
|
|
177
|
+
if (id === new EditorSnapshot(monacoEditor).id) {
|
|
178
|
+
editorWidget.close();
|
|
179
|
+
break;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
return Promise.resolve();
|
|
184
|
+
}
|
|
171
185
|
}
|
|
172
186
|
|
|
173
187
|
class EditorAndDocumentStateComputer implements Disposable {
|
|
@@ -1075,7 +1075,8 @@ function reviveOnEnterRule(onEnterRule: SerializedOnEnterRule): monaco.languages
|
|
|
1075
1075
|
return {
|
|
1076
1076
|
beforeText: reviveRegExp(onEnterRule.beforeText)!,
|
|
1077
1077
|
afterText: reviveRegExp(onEnterRule.afterText),
|
|
1078
|
-
|
|
1078
|
+
previousLineText: reviveRegExp(onEnterRule.previousLineText),
|
|
1079
|
+
action: onEnterRule.action,
|
|
1079
1080
|
};
|
|
1080
1081
|
}
|
|
1081
1082
|
|
|
@@ -46,7 +46,6 @@ import { OpenerService } from '@theia/core/lib/browser/opener-service';
|
|
|
46
46
|
import { ApplicationShell } from '@theia/core/lib/browser/shell/application-shell';
|
|
47
47
|
import { MonacoBulkEditService } from '@theia/monaco/lib/browser/monaco-bulk-edit-service';
|
|
48
48
|
import { MonacoEditorService } from '@theia/monaco/lib/browser/monaco-editor-service';
|
|
49
|
-
import { UntitledResourceResolver } from './editor/untitled-resource';
|
|
50
49
|
import { MainFileSystemEventService } from './main-file-system-event-service';
|
|
51
50
|
import { LabelServiceMainImpl } from './label-service-main';
|
|
52
51
|
import { TimelineMainImpl } from './timeline-main';
|
|
@@ -58,6 +57,8 @@ import { SecretsMainImpl } from './secrets-main';
|
|
|
58
57
|
import { WebviewViewsMainImpl } from './webview-views/webview-views-main';
|
|
59
58
|
import { MonacoLanguages } from '@theia/monaco/lib/browser/monaco-languages';
|
|
60
59
|
import { NotificationExtImpl } from '../../plugin/notification';
|
|
60
|
+
import { UntitledResourceResolver } from '@theia/core/lib/common/resource';
|
|
61
|
+
import { ThemeService } from '@theia/core/lib/browser/theming';
|
|
61
62
|
|
|
62
63
|
export function setUpPluginApi(rpc: RPCProtocol, container: interfaces.Container): void {
|
|
63
64
|
const authenticationMain = new AuthenticationMainImpl(rpc, container);
|
|
@@ -94,7 +95,7 @@ export function setUpPluginApi(rpc: RPCProtocol, container: interfaces.Container
|
|
|
94
95
|
|
|
95
96
|
const bulkEditService = container.get(MonacoBulkEditService);
|
|
96
97
|
const monacoEditorService = container.get(MonacoEditorService);
|
|
97
|
-
const editorsMain = new TextEditorsMainImpl(editorsAndDocuments, rpc, bulkEditService, monacoEditorService);
|
|
98
|
+
const editorsMain = new TextEditorsMainImpl(editorsAndDocuments, documentsMain, rpc, bulkEditService, monacoEditorService);
|
|
98
99
|
rpc.set(PLUGIN_RPC_CONTEXT.TEXT_EDITORS_MAIN, editorsMain);
|
|
99
100
|
|
|
100
101
|
// start listening only after all clients are subscribed to events
|
|
@@ -178,7 +179,7 @@ export function setUpPluginApi(rpc: RPCProtocol, container: interfaces.Container
|
|
|
178
179
|
const timelineMain = new TimelineMainImpl(rpc, container);
|
|
179
180
|
rpc.set(PLUGIN_RPC_CONTEXT.TIMELINE_MAIN, timelineMain);
|
|
180
181
|
|
|
181
|
-
const themingMain = new ThemingMainImpl(rpc);
|
|
182
|
+
const themingMain = new ThemingMainImpl(rpc, container.get(ThemeService));
|
|
182
183
|
rpc.set(PLUGIN_RPC_CONTEXT.THEMING_MAIN, themingMain);
|
|
183
184
|
|
|
184
185
|
const commentsMain = new CommentsMainImp(rpc, container);
|
|
@@ -20,7 +20,7 @@ import { TextmateRegistry, getEncodedLanguageId, MonacoTextmateService, GrammarD
|
|
|
20
20
|
import { MenusContributionPointHandler } from './menus/menus-contribution-handler';
|
|
21
21
|
import { PluginViewRegistry } from './view/plugin-view-registry';
|
|
22
22
|
import { PluginCustomEditorRegistry } from './custom-editors/plugin-custom-editor-registry';
|
|
23
|
-
import { PluginContribution, IndentationRules, FoldingRules, ScopeMap, DeployedPlugin, GrammarsContribution } from '../../common';
|
|
23
|
+
import { PluginContribution, IndentationRules, FoldingRules, ScopeMap, DeployedPlugin, GrammarsContribution, EnterAction, OnEnterRule } from '../../common';
|
|
24
24
|
import {
|
|
25
25
|
DefaultUriLabelProviderContribution,
|
|
26
26
|
LabelProviderContribution,
|
|
@@ -172,7 +172,8 @@ export class PluginContributionHandler {
|
|
|
172
172
|
comments: langConfiguration.comments,
|
|
173
173
|
folding: this.convertFolding(langConfiguration.folding),
|
|
174
174
|
surroundingPairs: langConfiguration.surroundingPairs,
|
|
175
|
-
indentationRules: this.convertIndentationRules(langConfiguration.indentationRules)
|
|
175
|
+
indentationRules: this.convertIndentationRules(langConfiguration.indentationRules),
|
|
176
|
+
onEnterRules: this.convertOnEnterRules(langConfiguration.onEnterRules),
|
|
176
177
|
}));
|
|
177
178
|
}
|
|
178
179
|
}
|
|
@@ -484,7 +485,6 @@ export class PluginContributionHandler {
|
|
|
484
485
|
}
|
|
485
486
|
|
|
486
487
|
return result;
|
|
487
|
-
|
|
488
488
|
}
|
|
489
489
|
|
|
490
490
|
private convertTokenTypes(tokenTypes?: ScopeMap): ITokenTypeMap | undefined {
|
|
@@ -530,4 +530,42 @@ export class PluginContributionHandler {
|
|
|
530
530
|
return result;
|
|
531
531
|
}
|
|
532
532
|
|
|
533
|
+
private convertOnEnterRules(onEnterRules?: OnEnterRule[]): monaco.languages.OnEnterRule[] | undefined {
|
|
534
|
+
if (!onEnterRules) {
|
|
535
|
+
return undefined;
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
const result: monaco.languages.OnEnterRule[] = [];
|
|
539
|
+
for (const onEnterRule of onEnterRules) {
|
|
540
|
+
const rule: monaco.languages.OnEnterRule = {
|
|
541
|
+
beforeText: this.createRegex(onEnterRule.beforeText)!,
|
|
542
|
+
afterText: this.createRegex(onEnterRule.afterText),
|
|
543
|
+
previousLineText: this.createRegex(onEnterRule.previousLineText),
|
|
544
|
+
action: this.createEnterAction(onEnterRule.action),
|
|
545
|
+
};
|
|
546
|
+
result.push(rule);
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
return result;
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
private createEnterAction(action: EnterAction): monaco.languages.EnterAction {
|
|
553
|
+
let indentAction: monaco.languages.IndentAction;
|
|
554
|
+
switch (action.indent) {
|
|
555
|
+
case 'indent':
|
|
556
|
+
indentAction = monaco.languages.IndentAction.Indent;
|
|
557
|
+
break;
|
|
558
|
+
case 'indentOutdent':
|
|
559
|
+
indentAction = monaco.languages.IndentAction.IndentOutdent;
|
|
560
|
+
break;
|
|
561
|
+
case 'outdent':
|
|
562
|
+
indentAction = monaco.languages.IndentAction.Outdent;
|
|
563
|
+
break;
|
|
564
|
+
default:
|
|
565
|
+
indentAction = monaco.languages.IndentAction.None;
|
|
566
|
+
break;
|
|
567
|
+
}
|
|
568
|
+
return { indentAction, appendText: action.appendText, removeText: action.removeText };
|
|
569
|
+
}
|
|
570
|
+
|
|
533
571
|
}
|
|
@@ -30,7 +30,7 @@ import { Disposable, DisposableCollection } from '@theia/core/lib/common/disposa
|
|
|
30
30
|
import { Emitter } from '@theia/core/lib/common/event';
|
|
31
31
|
import { RecursivePartial } from '@theia/core/lib/common/types';
|
|
32
32
|
import { LabelProviderContribution, DidChangeLabelEvent, LabelProvider, URIIconReference } from '@theia/core/lib/browser/label-provider';
|
|
33
|
-
import { ThemeType } from '@theia/core/lib/
|
|
33
|
+
import { ThemeType } from '@theia/core/lib/common/theme';
|
|
34
34
|
import { FileStatNode, DirNode } from '@theia/filesystem/lib/browser';
|
|
35
35
|
import { WorkspaceRootNode } from '@theia/navigator/lib/browser/navigator-tree';
|
|
36
36
|
import { Endpoint } from '@theia/core/lib/browser/endpoint';
|