@theia/plugin-ext 1.53.0-next.4 → 1.53.0-next.55
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/README.md +54 -54
- package/lib/common/plugin-api-rpc.d.ts +19 -4
- package/lib/common/plugin-api-rpc.d.ts.map +1 -1
- package/lib/common/plugin-api-rpc.js +4 -2
- package/lib/common/plugin-api-rpc.js.map +1 -1
- package/lib/common/rpc-protocol.d.ts +14 -13
- package/lib/common/rpc-protocol.d.ts.map +1 -1
- package/lib/common/rpc-protocol.js +56 -53
- package/lib/common/rpc-protocol.js.map +1 -1
- package/lib/hosted/browser/hosted-plugin.d.ts +1 -0
- package/lib/hosted/browser/hosted-plugin.d.ts.map +1 -1
- package/lib/hosted/browser/hosted-plugin.js +22 -12
- package/lib/hosted/browser/hosted-plugin.js.map +1 -1
- package/lib/hosted/node/scanners/scanner-theia.d.ts.map +1 -1
- package/lib/hosted/node/scanners/scanner-theia.js +13 -1
- package/lib/hosted/node/scanners/scanner-theia.js.map +1 -1
- package/lib/main/browser/authentication-main.d.ts +6 -5
- package/lib/main/browser/authentication-main.d.ts.map +1 -1
- package/lib/main/browser/authentication-main.js +15 -9
- package/lib/main/browser/authentication-main.js.map +1 -1
- package/lib/main/browser/custom-editors/custom-editor-opener.d.ts +9 -3
- package/lib/main/browser/custom-editors/custom-editor-opener.d.ts.map +1 -1
- package/lib/main/browser/custom-editors/custom-editor-opener.js +120 -31
- package/lib/main/browser/custom-editors/custom-editor-opener.js.map +1 -1
- package/lib/main/browser/custom-editors/custom-editor-widget.d.ts +7 -4
- package/lib/main/browser/custom-editors/custom-editor-widget.d.ts.map +1 -1
- package/lib/main/browser/custom-editors/custom-editor-widget.js +21 -7
- package/lib/main/browser/custom-editors/custom-editor-widget.js.map +1 -1
- package/lib/main/browser/custom-editors/custom-editors-main.d.ts +3 -4
- package/lib/main/browser/custom-editors/custom-editors-main.d.ts.map +1 -1
- package/lib/main/browser/custom-editors/custom-editors-main.js +5 -55
- package/lib/main/browser/custom-editors/custom-editors-main.js.map +1 -1
- package/lib/main/browser/custom-editors/plugin-custom-editor-registry.d.ts +4 -3
- package/lib/main/browser/custom-editors/plugin-custom-editor-registry.d.ts.map +1 -1
- package/lib/main/browser/custom-editors/plugin-custom-editor-registry.js +24 -16
- package/lib/main/browser/custom-editors/plugin-custom-editor-registry.js.map +1 -1
- package/lib/main/browser/main-context.d.ts.map +1 -1
- package/lib/main/browser/main-context.js +3 -0
- package/lib/main/browser/main-context.js.map +1 -1
- package/lib/main/browser/menus/menus-contribution-handler.d.ts.map +1 -1
- package/lib/main/browser/menus/menus-contribution-handler.js +1 -1
- package/lib/main/browser/menus/menus-contribution-handler.js.map +1 -1
- package/lib/main/browser/menus/plugin-menu-command-adapter.d.ts +1 -0
- package/lib/main/browser/menus/plugin-menu-command-adapter.d.ts.map +1 -1
- package/lib/main/browser/menus/plugin-menu-command-adapter.js +22 -1
- package/lib/main/browser/menus/plugin-menu-command-adapter.js.map +1 -1
- package/lib/main/browser/menus/vscode-theia-menu-mappings.d.ts +2 -2
- package/lib/main/browser/menus/vscode-theia-menu-mappings.d.ts.map +1 -1
- package/lib/main/browser/menus/vscode-theia-menu-mappings.js +2 -0
- package/lib/main/browser/menus/vscode-theia-menu-mappings.js.map +1 -1
- package/lib/main/browser/notebooks/notebook-documents-and-editors-main.js +1 -1
- package/lib/main/browser/notebooks/notebook-documents-and-editors-main.js.map +1 -1
- package/lib/main/browser/notebooks/notebook-documents-main.d.ts.map +1 -1
- package/lib/main/browser/notebooks/notebook-documents-main.js +22 -3
- package/lib/main/browser/notebooks/notebook-documents-main.js.map +1 -1
- package/lib/main/browser/notebooks/notebook-editors-main.d.ts +1 -1
- package/lib/main/browser/notebooks/notebook-editors-main.d.ts.map +1 -1
- package/lib/main/browser/notebooks/notebook-editors-main.js +16 -2
- package/lib/main/browser/notebooks/notebook-editors-main.js.map +1 -1
- package/lib/main/browser/notebooks/renderers/cell-output-webview.d.ts +1 -1
- package/lib/main/browser/notebooks/renderers/cell-output-webview.d.ts.map +1 -1
- package/lib/main/browser/notebooks/renderers/cell-output-webview.js +152 -77
- package/lib/main/browser/notebooks/renderers/cell-output-webview.js.map +1 -1
- package/lib/main/browser/notebooks/renderers/output-webview-internal.d.ts.map +1 -1
- package/lib/main/browser/notebooks/renderers/output-webview-internal.js +38 -19
- package/lib/main/browser/notebooks/renderers/output-webview-internal.js.map +1 -1
- package/lib/main/browser/plugin-ext-frontend-module.d.ts.map +1 -1
- package/lib/main/browser/plugin-ext-frontend-module.js +18 -0
- package/lib/main/browser/plugin-ext-frontend-module.js.map +1 -1
- package/lib/main/browser/plugin-icon-theme-service.js +20 -20
- package/lib/main/browser/plugin-shared-style.js +14 -14
- package/lib/main/browser/uri-main.d.ts +16 -0
- package/lib/main/browser/uri-main.d.ts.map +1 -0
- package/lib/main/browser/uri-main.js +64 -0
- package/lib/main/browser/uri-main.js.map +1 -0
- package/lib/main/browser/view/plugin-view-registry.js +3 -3
- package/lib/main/browser/webview/webview-frontend-security-warnings.js +2 -2
- package/lib/main/browser/webview/webview-secondary-window-support.js +10 -10
- package/lib/main/browser/webview/webview.d.ts +1 -3
- package/lib/main/browser/webview/webview.d.ts.map +1 -1
- package/lib/main/browser/webview/webview.js +5 -4
- package/lib/main/browser/webview/webview.js.map +1 -1
- package/lib/main/browser/webviews-main.d.ts.map +1 -1
- package/lib/main/browser/webviews-main.js +6 -1
- package/lib/main/browser/webviews-main.js.map +1 -1
- package/lib/main/browser/workspace-main.d.ts +2 -0
- package/lib/main/browser/workspace-main.d.ts.map +1 -1
- package/lib/main/node/plugin-service.d.ts +1 -1
- package/lib/main/node/webview-backend-security-warnings.js +6 -6
- package/lib/plugin/authentication-ext.d.ts +3 -2
- package/lib/plugin/authentication-ext.d.ts.map +1 -1
- package/lib/plugin/authentication-ext.js +8 -5
- package/lib/plugin/authentication-ext.js.map +1 -1
- package/lib/plugin/custom-editors.d.ts +2 -4
- package/lib/plugin/custom-editors.d.ts.map +1 -1
- package/lib/plugin/custom-editors.js +5 -7
- package/lib/plugin/custom-editors.js.map +1 -1
- package/lib/plugin/env.d.ts +2 -0
- package/lib/plugin/env.d.ts.map +1 -1
- package/lib/plugin/env.js +4 -1
- package/lib/plugin/env.js.map +1 -1
- package/lib/plugin/known-commands.d.ts.map +1 -1
- package/lib/plugin/known-commands.js +1 -0
- package/lib/plugin/known-commands.js.map +1 -1
- package/lib/plugin/languages.d.ts +1 -0
- package/lib/plugin/languages.d.ts.map +1 -1
- package/lib/plugin/notebook/notebook-kernels.d.ts +2 -0
- package/lib/plugin/notebook/notebook-kernels.d.ts.map +1 -1
- package/lib/plugin/plugin-context.d.ts.map +1 -1
- package/lib/plugin/plugin-context.js +17 -6
- package/lib/plugin/plugin-context.js.map +1 -1
- package/lib/plugin/plugin-manager.d.ts.map +1 -1
- package/lib/plugin/plugin-manager.js +2 -1
- package/lib/plugin/plugin-manager.js.map +1 -1
- package/lib/plugin/scm.d.ts +1 -0
- package/lib/plugin/scm.d.ts.map +1 -1
- package/lib/plugin/terminal-ext.d.ts +3 -0
- package/lib/plugin/terminal-ext.d.ts.map +1 -1
- package/lib/plugin/terminal-ext.js +2 -0
- package/lib/plugin/terminal-ext.js.map +1 -1
- package/lib/plugin/type-converters.d.ts +6 -0
- package/lib/plugin/type-converters.d.ts.map +1 -1
- package/lib/plugin/type-converters.js +24 -3
- package/lib/plugin/type-converters.js.map +1 -1
- package/lib/plugin/types-impl.d.ts +8 -2
- package/lib/plugin/types-impl.d.ts.map +1 -1
- package/lib/plugin/types-impl.js +9 -1
- package/lib/plugin/types-impl.js.map +1 -1
- package/lib/plugin/uri-ext.d.ts +37 -0
- package/lib/plugin/uri-ext.d.ts.map +1 -0
- package/lib/plugin/uri-ext.js +50 -0
- package/lib/plugin/uri-ext.js.map +1 -0
- package/lib/plugin/webviews.js +1 -1
- package/lib/plugin/webviews.js.map +1 -1
- package/lib/plugin/workspace.d.ts +4 -0
- package/lib/plugin/workspace.d.ts.map +1 -1
- package/package.json +29 -29
- package/src/common/arrays.ts +70 -70
- package/src/common/assert.ts +23 -23
- package/src/common/cache.ts +51 -51
- package/src/common/character-classifier.ts +73 -73
- package/src/common/collections.ts +54 -54
- package/src/common/commands.ts +19 -19
- package/src/common/connection.ts +137 -137
- package/src/common/disposable-util.ts +39 -39
- package/src/common/editor-options.ts +74 -74
- package/src/common/env.ts +19 -19
- package/src/common/errors.ts +63 -63
- package/src/common/id-generator.ts +26 -26
- package/src/common/index.ts +24 -24
- package/src/common/language-pack-service.ts +34 -34
- package/src/common/link-computer.ts +354 -354
- package/src/common/object-identifier.ts +33 -33
- package/src/common/objects.ts +50 -50
- package/src/common/paths-util.ts +158 -158
- package/src/common/plugin-api-rpc-model.ts +907 -907
- package/src/common/plugin-api-rpc.ts +2752 -2738
- package/src/common/plugin-ext-api-contribution.ts +115 -115
- package/src/common/plugin-identifiers.ts +84 -84
- package/src/common/plugin-protocol.ts +1094 -1094
- package/src/common/reference-map.ts +38 -38
- package/src/common/rpc-protocol.ts +306 -310
- package/src/common/semantic-tokens-dto.ts +182 -182
- package/src/common/test-types.ts +154 -154
- package/src/common/types.ts +129 -129
- package/src/common/uint.ts +37 -37
- package/src/common/uri-components.ts +81 -81
- package/src/hosted/browser/hosted-plugin-watcher.ts +54 -54
- package/src/hosted/browser/hosted-plugin.ts +635 -624
- package/src/hosted/browser/plugin-worker.ts +52 -52
- package/src/hosted/browser/worker/debug-stub.ts +29 -29
- package/src/hosted/browser/worker/plugin-manifest-loader.ts +114 -114
- package/src/hosted/browser/worker/worker-env-ext.ts +40 -40
- package/src/hosted/browser/worker/worker-main.ts +212 -212
- package/src/hosted/browser/worker/worker-plugin-module.ts +80 -80
- package/src/hosted/common/hosted-plugin.ts +456 -456
- package/src/hosted/node/hosted-plugin-cli-contribution.ts +75 -75
- package/src/hosted/node/hosted-plugin-deployer-handler.ts +274 -274
- package/src/hosted/node/hosted-plugin-localization-service.ts +410 -410
- package/src/hosted/node/hosted-plugin-process.ts +248 -248
- package/src/hosted/node/hosted-plugin-protocol.ts +49 -49
- package/src/hosted/node/hosted-plugin.ts +116 -116
- package/src/hosted/node/metadata-scanner.ts +64 -64
- package/src/hosted/node/plugin-activation-events.ts +112 -112
- package/src/hosted/node/plugin-ext-hosted-backend-module.ts +94 -94
- package/src/hosted/node/plugin-host-module.ts +69 -69
- package/src/hosted/node/plugin-host-proxy.ts +82 -82
- package/src/hosted/node/plugin-host-rpc.ts +377 -377
- package/src/hosted/node/plugin-host.ts +110 -110
- package/src/hosted/node/plugin-language-pack-service.ts +43 -43
- package/src/hosted/node/plugin-manifest-loader.ts +32 -32
- package/src/hosted/node/plugin-reader.ts +136 -136
- package/src/hosted/node/plugin-service.ts +197 -197
- package/src/hosted/node/scanners/backend-init-theia.ts +71 -71
- package/src/hosted/node/scanners/file-plugin-uri-factory.ts +32 -32
- package/src/hosted/node/scanners/grammars-reader.ts +57 -57
- package/src/hosted/node/scanners/plugin-uri-factory.ts +33 -33
- package/src/hosted/node/scanners/scanner-theia.ts +963 -952
- package/src/hosted/node-electron/plugin-ext-hosted-electron-backend-module.ts +26 -26
- package/src/hosted/node-electron/scanner-theia-electron.ts +32 -32
- package/src/main/browser/authentication-main.ts +401 -388
- package/src/main/browser/clipboard-main.ts +38 -38
- package/src/main/browser/command-registry-main.ts +130 -130
- package/src/main/browser/commands.ts +104 -104
- package/src/main/browser/comments/comment-glyph-widget.ts +66 -66
- package/src/main/browser/comments/comment-thread-widget.tsx +696 -696
- package/src/main/browser/comments/comments-context-key-service.ts +68 -68
- package/src/main/browser/comments/comments-contribution.ts +268 -268
- package/src/main/browser/comments/comments-decorator.ts +110 -110
- package/src/main/browser/comments/comments-main.ts +482 -482
- package/src/main/browser/comments/comments-service.ts +205 -205
- package/src/main/browser/custom-editors/custom-editor-opener.tsx +205 -105
- package/src/main/browser/custom-editors/custom-editor-service.ts +108 -108
- package/src/main/browser/custom-editors/custom-editor-undo-redo-handler.ts +41 -41
- package/src/main/browser/custom-editors/custom-editor-widget-factory.ts +44 -44
- package/src/main/browser/custom-editors/custom-editor-widget.ts +127 -118
- package/src/main/browser/custom-editors/custom-editors-main.ts +526 -585
- package/src/main/browser/custom-editors/plugin-custom-editor-registry.ts +126 -120
- package/src/main/browser/data-transfer/data-transfer-type-converters.ts +68 -68
- package/src/main/browser/debug/debug-main.ts +397 -397
- package/src/main/browser/debug/plugin-debug-adapter-contribution.ts +48 -48
- package/src/main/browser/debug/plugin-debug-configuration-provider.ts +63 -63
- package/src/main/browser/debug/plugin-debug-service.ts +427 -427
- package/src/main/browser/debug/plugin-debug-session-contribution-registry.ts +76 -76
- package/src/main/browser/debug/plugin-debug-session-factory.ts +115 -115
- package/src/main/browser/decorations/decorations-main.ts +146 -146
- package/src/main/browser/dialogs/modal-notification.ts +112 -112
- package/src/main/browser/dialogs/style/modal-notification.css +123 -123
- package/src/main/browser/dialogs-main.ts +185 -185
- package/src/main/browser/documents-main.ts +275 -275
- package/src/main/browser/editors-and-documents-main.ts +425 -425
- package/src/main/browser/env-main.ts +60 -60
- package/src/main/browser/file-system-main-impl.ts +267 -267
- package/src/main/browser/hierarchy/hierarchy-types-converters.ts +189 -189
- package/src/main/browser/keybindings/keybindings-contribution-handler.ts +66 -66
- package/src/main/browser/label-service-main.ts +51 -51
- package/src/main/browser/languages-main.ts +1439 -1439
- package/src/main/browser/localization-main.ts +34 -34
- package/src/main/browser/main-context.ts +210 -206
- package/src/main/browser/main-file-system-event-service.ts +76 -76
- package/src/main/browser/menus/menus-contribution-handler.ts +172 -171
- package/src/main/browser/menus/plugin-menu-command-adapter.ts +358 -337
- package/src/main/browser/menus/vscode-theia-menu-mappings.ts +118 -116
- package/src/main/browser/message-registry-main.ts +43 -43
- package/src/main/browser/notebooks/notebook-documents-and-editors-main.ts +249 -249
- package/src/main/browser/notebooks/notebook-documents-main.ts +202 -182
- package/src/main/browser/notebooks/notebook-dto.ts +131 -131
- package/src/main/browser/notebooks/notebook-editors-main.ts +88 -75
- package/src/main/browser/notebooks/notebook-kernels-main.ts +339 -339
- package/src/main/browser/notebooks/notebook-renderers-main.ts +47 -47
- package/src/main/browser/notebooks/notebooks-main.ts +164 -164
- package/src/main/browser/notebooks/renderers/cell-output-webview.tsx +452 -375
- package/src/main/browser/notebooks/renderers/output-webview-internal.ts +636 -613
- package/src/main/browser/notebooks/renderers/webview-communication.ts +107 -107
- package/src/main/browser/notification-main.ts +26 -26
- package/src/main/browser/output-channel-registry-main.ts +53 -53
- package/src/main/browser/plugin-authentication-service.ts +71 -71
- package/src/main/browser/plugin-contribution-handler.ts +698 -698
- package/src/main/browser/plugin-ext-frontend-module.ts +291 -272
- package/src/main/browser/plugin-ext-widget.tsx +132 -132
- package/src/main/browser/plugin-frontend-contribution.ts +70 -70
- package/src/main/browser/plugin-frontend-view-contribution.ts +38 -38
- package/src/main/browser/plugin-icon-service.ts +92 -92
- package/src/main/browser/plugin-icon-theme-service.ts +625 -625
- package/src/main/browser/plugin-shared-style.ts +154 -154
- package/src/main/browser/plugin-storage.ts +55 -55
- package/src/main/browser/plugin-terminal-registry.ts +27 -27
- package/src/main/browser/preference-registry-main.ts +123 -123
- package/src/main/browser/quick-open-main.ts +367 -367
- package/src/main/browser/scm-main.ts +472 -472
- package/src/main/browser/secrets-main.ts +82 -82
- package/src/main/browser/selection-provider-command.ts +45 -45
- package/src/main/browser/status-bar-message-registry-main.ts +90 -90
- package/src/main/browser/style/comments.css +345 -345
- package/src/main/browser/style/index.css +84 -84
- package/src/main/browser/style/plugin-sidebar.css +73 -73
- package/src/main/browser/style/tree.css +54 -54
- package/src/main/browser/style/webview.css +55 -55
- package/src/main/browser/tabs/tabs-main.ts +384 -384
- package/src/main/browser/tasks-main.ts +268 -268
- package/src/main/browser/terminal-main.ts +370 -370
- package/src/main/browser/test-main.ts +632 -632
- package/src/main/browser/text-editor-main.ts +478 -478
- package/src/main/browser/text-editor-model-service.ts +111 -111
- package/src/main/browser/text-editors-main.ts +234 -234
- package/src/main/browser/theme-icon-override.ts +246 -246
- package/src/main/browser/theming-main.ts +42 -42
- package/src/main/browser/timeline-main.ts +80 -80
- package/src/main/browser/uri-main.ts +72 -0
- package/src/main/browser/view/dnd-file-content-store.ts +42 -42
- package/src/main/browser/view/plugin-tree-view-node-label-provider.ts +81 -81
- package/src/main/browser/view/plugin-view-registry.ts +967 -967
- package/src/main/browser/view/plugin-view-widget.ts +221 -221
- package/src/main/browser/view/tree-view-decorator-service.ts +51 -51
- package/src/main/browser/view/tree-view-widget.tsx +931 -931
- package/src/main/browser/view/tree-views-main.ts +205 -205
- package/src/main/browser/view/view-context-key-service.ts +64 -64
- package/src/main/browser/webview/pre/fake.html +14 -14
- package/src/main/browser/webview/pre/host.js +130 -130
- package/src/main/browser/webview/pre/index.html +17 -17
- package/src/main/browser/webview/pre/main.js +682 -682
- package/src/main/browser/webview/pre/service-worker.js +296 -295
- package/src/main/browser/webview/webview-context-keys.ts +62 -62
- package/src/main/browser/webview/webview-environment.ts +87 -87
- package/src/main/browser/webview/webview-frontend-security-warnings.ts +59 -59
- package/src/main/browser/webview/webview-preferences.ts +72 -72
- package/src/main/browser/webview/webview-resource-cache.ts +88 -88
- package/src/main/browser/webview/webview-secondary-window-support.ts +47 -47
- package/src/main/browser/webview/webview-theme-data-provider.ts +124 -124
- package/src/main/browser/webview/webview.ts +718 -719
- package/src/main/browser/webview-views/webview-views-main.ts +154 -154
- package/src/main/browser/webview-views/webview-views.ts +43 -43
- package/src/main/browser/webviews-main.ts +287 -282
- package/src/main/browser/window-activity-tracker.ts +96 -96
- package/src/main/browser/window-state-main.ts +85 -85
- package/src/main/browser/workspace-main.ts +424 -424
- package/src/main/common/basic-message-registry-main.ts +53 -53
- package/src/main/common/basic-notification-main.ts +86 -86
- package/src/main/common/env-main.ts +44 -44
- package/src/main/common/plugin-paths-protocol.ts +26 -26
- package/src/main/common/plugin-theia-environment.ts +36 -36
- package/src/main/common/webview-protocol.ts +28 -28
- package/src/main/electron-browser/plugin-ext-frontend-electron-module.ts +25 -25
- package/src/main/electron-browser/webview/electron-webview-widget-factory.ts +59 -59
- package/src/main/node/errors.spec.ts +37 -37
- package/src/main/node/handlers/plugin-theia-directory-handler.ts +137 -137
- package/src/main/node/handlers/plugin-theia-file-handler.ts +66 -66
- package/src/main/node/paths/const.ts +21 -21
- package/src/main/node/paths/plugin-paths-service.ts +163 -163
- package/src/main/node/plugin-cli-contribution.ts +85 -85
- package/src/main/node/plugin-deployer-contribution.ts +35 -35
- package/src/main/node/plugin-deployer-directory-handler-context-impl.ts +45 -45
- package/src/main/node/plugin-deployer-entry-impl.ts +132 -132
- package/src/main/node/plugin-deployer-file-handler-context-impl.ts +33 -33
- package/src/main/node/plugin-deployer-impl.ts +375 -375
- package/src/main/node/plugin-deployer-proxy-entry-impl.ts +96 -96
- package/src/main/node/plugin-deployer-resolver-context-impl.ts +55 -55
- package/src/main/node/plugin-ext-backend-module.ts +106 -106
- package/src/main/node/plugin-github-resolver.ts +139 -139
- package/src/main/node/plugin-http-resolver.ts +92 -92
- package/src/main/node/plugin-localization-server.ts +42 -42
- package/src/main/node/plugin-mgmt-cli-contribution.ts +64 -64
- package/src/main/node/plugin-remote-cli-contribution.ts +36 -36
- package/src/main/node/plugin-remote-copy-contribution.ts +36 -36
- package/src/main/node/plugin-server-handler.ts +69 -69
- package/src/main/node/plugin-service.ts +97 -97
- package/src/main/node/plugin-theia-deployer-participant.ts +32 -32
- package/src/main/node/plugin-uninstallation-manager.ts +74 -74
- package/src/main/node/plugins-key-value-storage.spec.ts +110 -110
- package/src/main/node/plugins-key-value-storage.ts +161 -161
- package/src/main/node/resolvers/local-directory-plugin-deployer-resolver.ts +37 -37
- package/src/main/node/resolvers/local-plugin-deployer-resolver.ts +56 -56
- package/src/main/node/temp-dir-util.ts +36 -36
- package/src/main/node/webview-backend-security-warnings.ts +45 -45
- package/src/main/style/status-bar.css +35 -35
- package/src/plugin/authentication-ext.ts +140 -136
- package/src/plugin/clipboard-ext.ts +43 -43
- package/src/plugin/command-registry.ts +219 -219
- package/src/plugin/comments.ts +549 -549
- package/src/plugin/custom-editors.ts +334 -336
- package/src/plugin/debug/debug-ext.ts +549 -549
- package/src/plugin/debug/plugin-debug-adapter-creator.ts +50 -50
- package/src/plugin/debug/plugin-debug-adapter-session.ts +106 -106
- package/src/plugin/debug/plugin-debug-adapter-tracker.ts +85 -85
- package/src/plugin/decorations.ts +140 -140
- package/src/plugin/dialogs.ts +96 -96
- package/src/plugin/document-data.ts +366 -366
- package/src/plugin/documents.ts +283 -283
- package/src/plugin/editors-and-documents.ts +176 -176
- package/src/plugin/env.ts +134 -129
- package/src/plugin/file-system-event-service-ext-impl.ts +256 -256
- package/src/plugin/file-system-ext-impl.ts +415 -415
- package/src/plugin/known-commands.spec.ts +50 -50
- package/src/plugin/known-commands.ts +429 -428
- package/src/plugin/label-service.ts +36 -36
- package/src/plugin/languages/call-hierarchy.ts +124 -124
- package/src/plugin/languages/code-action.ts +162 -162
- package/src/plugin/languages/color.ts +75 -75
- package/src/plugin/languages/completion.ts +183 -183
- package/src/plugin/languages/declaration.ts +72 -72
- package/src/plugin/languages/definition.ts +73 -73
- package/src/plugin/languages/diagnostics.ts +325 -325
- package/src/plugin/languages/document-drop-edit.ts +44 -44
- package/src/plugin/languages/document-formatting.ts +47 -47
- package/src/plugin/languages/document-highlight.ts +61 -61
- package/src/plugin/languages/evaluatable-expression.ts +47 -47
- package/src/plugin/languages/folding.ts +46 -46
- package/src/plugin/languages/hover.ts +58 -58
- package/src/plugin/languages/implementation.ts +73 -73
- package/src/plugin/languages/inlay-hints.ts +149 -149
- package/src/plugin/languages/inline-completion.ts +126 -126
- package/src/plugin/languages/inline-values.ts +50 -50
- package/src/plugin/languages/lens.ts +102 -102
- package/src/plugin/languages/link-provider.ts +81 -81
- package/src/plugin/languages/linked-editing-range.ts +48 -48
- package/src/plugin/languages/on-type-formatting.ts +50 -50
- package/src/plugin/languages/outline.ts +126 -126
- package/src/plugin/languages/range-formatting.ts +48 -48
- package/src/plugin/languages/reference.ts +58 -58
- package/src/plugin/languages/rename.ts +130 -130
- package/src/plugin/languages/selection-range.ts +80 -80
- package/src/plugin/languages/semantic-highlighting.ts +211 -211
- package/src/plugin/languages/signature.ts +82 -82
- package/src/plugin/languages/type-definition.ts +73 -73
- package/src/plugin/languages/type-hierarchy.ts +117 -117
- package/src/plugin/languages/util.ts +26 -26
- package/src/plugin/languages/workspace-symbol.ts +66 -66
- package/src/plugin/languages-utils.ts +68 -68
- package/src/plugin/languages.ts +1022 -1022
- package/src/plugin/localization-ext.ts +89 -89
- package/src/plugin/markdown-string.ts +115 -115
- package/src/plugin/message-registry.ts +70 -70
- package/src/plugin/node/debug/debug.spec.ts +98 -98
- package/src/plugin/node/debug/plugin-node-debug-adapter-creator.ts +167 -167
- package/src/plugin/node/env-node-ext.ts +64 -64
- package/src/plugin/node/plugin-container-module.ts +165 -165
- package/src/plugin/notebook/notebook-document.ts +446 -446
- package/src/plugin/notebook/notebook-documents.ts +58 -58
- package/src/plugin/notebook/notebook-editor.ts +116 -116
- package/src/plugin/notebook/notebook-editors.ts +71 -71
- package/src/plugin/notebook/notebook-kernels.ts +631 -631
- package/src/plugin/notebook/notebook-renderers.ts +71 -71
- package/src/plugin/notebook/notebooks.ts +449 -449
- package/src/plugin/notification.ts +80 -80
- package/src/plugin/output-channel/log-output-channel.ts +108 -108
- package/src/plugin/output-channel/output-channel-item.ts +73 -73
- package/src/plugin/output-channel-registry.ts +52 -52
- package/src/plugin/path.spec.ts +40 -40
- package/src/plugin/path.ts +68 -68
- package/src/plugin/plugin-context.ts +1606 -1595
- package/src/plugin/plugin-icon-path.ts +53 -53
- package/src/plugin/plugin-manager.ts +508 -507
- package/src/plugin/plugin-storage.ts +138 -138
- package/src/plugin/preference-registry.spec.ts +288 -288
- package/src/plugin/preference-registry.ts +335 -335
- package/src/plugin/prefix-sum-computer.ts +218 -218
- package/src/plugin/quick-open.ts +735 -735
- package/src/plugin/scm.ts +919 -919
- package/src/plugin/secrets-ext.ts +104 -104
- package/src/plugin/status-bar/status-bar-item.ts +193 -193
- package/src/plugin/status-bar-message-registry.ts +103 -103
- package/src/plugin/tabs.ts +431 -431
- package/src/plugin/tasks/task-provider.ts +57 -57
- package/src/plugin/tasks/tasks.ts +252 -252
- package/src/plugin/telemetry-ext.ts +298 -298
- package/src/plugin/terminal-ext.ts +569 -566
- package/src/plugin/test-item.ts +174 -174
- package/src/plugin/tests.ts +545 -545
- package/src/plugin/text-editor.ts +581 -581
- package/src/plugin/text-editors.ts +157 -157
- package/src/plugin/theming.ts +73 -73
- package/src/plugin/timeline.ts +186 -186
- package/src/plugin/tree/tree-views.ts +682 -682
- package/src/plugin/type-converters.spec.ts +476 -476
- package/src/plugin/type-converters.ts +1768 -1748
- package/src/plugin/types-impl.spec.ts +85 -85
- package/src/plugin/types-impl.ts +4011 -4001
- package/src/plugin/uri-ext.ts +60 -0
- package/src/plugin/webview-views.ts +228 -228
- package/src/plugin/webviews.ts +468 -468
- package/src/plugin/window-state.ts +75 -75
- package/src/plugin/word-helper.ts +162 -162
- package/src/plugin/workspace.ts +505 -505
- package/src/plugin-ext-backend-electron-module.ts +24 -24
- package/src/plugin-ext-backend-module.ts +24 -24
- package/src/plugin-ext-frontend-electron-module.ts +19 -19
- package/src/plugin-ext-frontend-module.ts +19 -19
- package/lib/common/proxy-handler.d.ts +0 -73
- package/lib/common/proxy-handler.d.ts.map +0 -1
- package/lib/common/proxy-handler.js +0 -106
- package/lib/common/proxy-handler.js.map +0 -1
- package/src/common/proxy-handler.ts +0 -143
|
@@ -1,472 +1,472 @@
|
|
|
1
|
-
// *****************************************************************************
|
|
2
|
-
// Copyright (C) 2019-2021 Red Hat, Inc. and others.
|
|
3
|
-
//
|
|
4
|
-
// This program and the accompanying materials are made available under the
|
|
5
|
-
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
-
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
-
//
|
|
8
|
-
// This Source Code may also be made available under the following Secondary
|
|
9
|
-
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
-
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
-
// with the GNU Classpath Exception which is available at
|
|
12
|
-
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
-
//
|
|
14
|
-
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
-
// *****************************************************************************
|
|
16
|
-
|
|
17
|
-
/*---------------------------------------------------------------------------------------------
|
|
18
|
-
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
19
|
-
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
20
|
-
*--------------------------------------------------------------------------------------------*/
|
|
21
|
-
// code copied and modified from https://github.com/microsoft/vscode/blob/1.52.1/src/vs/workbench/api/browser/mainThreadSCM.ts
|
|
22
|
-
|
|
23
|
-
import {
|
|
24
|
-
MAIN_RPC_CONTEXT,
|
|
25
|
-
ScmExt,
|
|
26
|
-
SourceControlGroupFeatures,
|
|
27
|
-
ScmMain,
|
|
28
|
-
SourceControlProviderFeatures,
|
|
29
|
-
ScmRawResourceSplices, ScmRawResourceGroup
|
|
30
|
-
} from '../../common/plugin-api-rpc';
|
|
31
|
-
import { ScmProvider, ScmResource, ScmResourceDecorations, ScmResourceGroup, ScmCommand } from '@theia/scm/lib/browser/scm-provider';
|
|
32
|
-
import { ScmRepository } from '@theia/scm/lib/browser/scm-repository';
|
|
33
|
-
import { ScmService } from '@theia/scm/lib/browser/scm-service';
|
|
34
|
-
import { RPCProtocol } from '../../common/rpc-protocol';
|
|
35
|
-
import { interfaces } from '@theia/core/shared/inversify';
|
|
36
|
-
import { Emitter, Event } from '@theia/core/lib/common/event';
|
|
37
|
-
import { DisposableCollection } from '@theia/core/lib/common/disposable';
|
|
38
|
-
import URI from '@theia/core/lib/common/uri';
|
|
39
|
-
import { URI as vscodeURI } from '@theia/core/shared/vscode-uri';
|
|
40
|
-
import { Splice } from '../../common/arrays';
|
|
41
|
-
import { UriComponents } from '../../common/uri-components';
|
|
42
|
-
import { ColorRegistry } from '@theia/core/lib/browser/color-registry';
|
|
43
|
-
import { PluginSharedStyle } from './plugin-shared-style';
|
|
44
|
-
import { IconUrl } from '../../common';
|
|
45
|
-
import { ThemeIcon } from '@theia/monaco-editor-core/esm/vs/base/common/themables';
|
|
46
|
-
|
|
47
|
-
export class PluginScmResourceGroup implements ScmResourceGroup {
|
|
48
|
-
|
|
49
|
-
readonly resources: ScmResource[] = [];
|
|
50
|
-
|
|
51
|
-
private readonly onDidSpliceEmitter = new Emitter<Splice<ScmResource>>();
|
|
52
|
-
readonly onDidSplice = this.onDidSpliceEmitter.event;
|
|
53
|
-
|
|
54
|
-
get hideWhenEmpty(): boolean { return !!this.features.hideWhenEmpty; }
|
|
55
|
-
|
|
56
|
-
private readonly onDidChangeEmitter = new Emitter<void>();
|
|
57
|
-
readonly onDidChange: Event<void> = this.onDidChangeEmitter.event;
|
|
58
|
-
|
|
59
|
-
constructor(
|
|
60
|
-
readonly handle: number,
|
|
61
|
-
public provider: PluginScmProvider,
|
|
62
|
-
public features: SourceControlGroupFeatures,
|
|
63
|
-
public label: string,
|
|
64
|
-
public id: string
|
|
65
|
-
) { }
|
|
66
|
-
|
|
67
|
-
splice(start: number, deleteCount: number, toInsert: ScmResource[]): void {
|
|
68
|
-
this.resources.splice(start, deleteCount, ...toInsert);
|
|
69
|
-
this.onDidSpliceEmitter.fire({ start, deleteCount, toInsert });
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
updateGroup(features: SourceControlGroupFeatures): void {
|
|
73
|
-
this.features = { ...this.features, ...features };
|
|
74
|
-
this.onDidChangeEmitter.fire();
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
updateGroupLabel(label: string): void {
|
|
78
|
-
this.label = label;
|
|
79
|
-
this.onDidChangeEmitter.fire();
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
dispose(): void { }
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
export class PluginScmResource implements ScmResource {
|
|
86
|
-
|
|
87
|
-
constructor(
|
|
88
|
-
private readonly proxy: ScmExt,
|
|
89
|
-
private readonly sourceControlHandle: number,
|
|
90
|
-
private readonly groupHandle: number,
|
|
91
|
-
readonly handle: number,
|
|
92
|
-
readonly sourceUri: URI,
|
|
93
|
-
readonly group: PluginScmResourceGroup,
|
|
94
|
-
readonly decorations: ScmResourceDecorations,
|
|
95
|
-
readonly contextValue: string | undefined,
|
|
96
|
-
readonly command: ScmCommand | undefined
|
|
97
|
-
) { }
|
|
98
|
-
|
|
99
|
-
open(): Promise<void> {
|
|
100
|
-
return this.proxy.$executeResourceCommand(this.sourceControlHandle, this.groupHandle, this.handle);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
export class PluginScmProvider implements ScmProvider {
|
|
105
|
-
|
|
106
|
-
private _id = this.contextValue;
|
|
107
|
-
get id(): string { return this._id; }
|
|
108
|
-
|
|
109
|
-
readonly groups: PluginScmResourceGroup[] = [];
|
|
110
|
-
private readonly groupsByHandle: { [handle: number]: PluginScmResourceGroup; } = Object.create(null);
|
|
111
|
-
|
|
112
|
-
private readonly onDidChangeResourcesEmitter = new Emitter<void>();
|
|
113
|
-
readonly onDidChangeResources: Event<void> = this.onDidChangeResourcesEmitter.event;
|
|
114
|
-
|
|
115
|
-
private features: SourceControlProviderFeatures = {};
|
|
116
|
-
|
|
117
|
-
get handle(): number { return this._handle; }
|
|
118
|
-
get label(): string { return this._label; }
|
|
119
|
-
get rootUri(): string { return this._rootUri ? this._rootUri.toString() : ''; }
|
|
120
|
-
get contextValue(): string { return this._contextValue; }
|
|
121
|
-
|
|
122
|
-
get commitTemplate(): string { return this.features.commitTemplate || ''; }
|
|
123
|
-
get acceptInputCommand(): ScmCommand | undefined {
|
|
124
|
-
const command = this.features.acceptInputCommand;
|
|
125
|
-
if (command) {
|
|
126
|
-
const scmCommand: ScmCommand = command;
|
|
127
|
-
scmCommand.command = command.id;
|
|
128
|
-
return scmCommand;
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
get statusBarCommands(): ScmCommand[] | undefined {
|
|
132
|
-
const commands = this.features.statusBarCommands;
|
|
133
|
-
return commands?.map(command => {
|
|
134
|
-
const scmCommand: ScmCommand = command;
|
|
135
|
-
scmCommand.command = command.id;
|
|
136
|
-
return scmCommand;
|
|
137
|
-
});
|
|
138
|
-
}
|
|
139
|
-
get count(): number | undefined { return this.features.count; }
|
|
140
|
-
|
|
141
|
-
private readonly onDidChangeCommitTemplateEmitter = new Emitter<string>();
|
|
142
|
-
readonly onDidChangeCommitTemplate: Event<string> = this.onDidChangeCommitTemplateEmitter.event;
|
|
143
|
-
|
|
144
|
-
private readonly onDidChangeStatusBarCommandsEmitter = new Emitter<ScmCommand[]>();
|
|
145
|
-
get onDidChangeStatusBarCommands(): Event<ScmCommand[]> { return this.onDidChangeStatusBarCommandsEmitter.event; }
|
|
146
|
-
|
|
147
|
-
private readonly onDidChangeEmitter = new Emitter<void>();
|
|
148
|
-
readonly onDidChange: Event<void> = this.onDidChangeEmitter.event;
|
|
149
|
-
|
|
150
|
-
constructor(
|
|
151
|
-
private readonly proxy: ScmExt,
|
|
152
|
-
private readonly colors: ColorRegistry,
|
|
153
|
-
private readonly sharedStyle: PluginSharedStyle,
|
|
154
|
-
private readonly _handle: number,
|
|
155
|
-
private readonly _contextValue: string,
|
|
156
|
-
private readonly _label: string,
|
|
157
|
-
private readonly _rootUri: vscodeURI | undefined,
|
|
158
|
-
private disposables: DisposableCollection
|
|
159
|
-
) { }
|
|
160
|
-
|
|
161
|
-
updateSourceControl(features: SourceControlProviderFeatures): void {
|
|
162
|
-
this.features = { ...this.features, ...features };
|
|
163
|
-
this.onDidChangeEmitter.fire();
|
|
164
|
-
|
|
165
|
-
if (typeof features.commitTemplate !== 'undefined') {
|
|
166
|
-
this.onDidChangeCommitTemplateEmitter.fire(this.commitTemplate!);
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
if (typeof features.statusBarCommands !== 'undefined') {
|
|
170
|
-
this.onDidChangeStatusBarCommandsEmitter.fire(this.statusBarCommands!);
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
registerGroups(resourceGroups: ScmRawResourceGroup[]): void {
|
|
175
|
-
const groups = resourceGroups.map(resourceGroup => {
|
|
176
|
-
const { handle, id, label, features } = resourceGroup;
|
|
177
|
-
const group = new PluginScmResourceGroup(
|
|
178
|
-
handle,
|
|
179
|
-
this,
|
|
180
|
-
features,
|
|
181
|
-
label,
|
|
182
|
-
id
|
|
183
|
-
);
|
|
184
|
-
|
|
185
|
-
this.groupsByHandle[handle] = group;
|
|
186
|
-
return group;
|
|
187
|
-
});
|
|
188
|
-
|
|
189
|
-
this.groups.splice(this.groups.length, 0, ...groups);
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
updateGroup(handle: number, features: SourceControlGroupFeatures): void {
|
|
193
|
-
const group = this.groupsByHandle[handle];
|
|
194
|
-
|
|
195
|
-
if (!group) {
|
|
196
|
-
return;
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
group.updateGroup(features);
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
updateGroupLabel(handle: number, label: string): void {
|
|
203
|
-
const group = this.groupsByHandle[handle];
|
|
204
|
-
|
|
205
|
-
if (!group) {
|
|
206
|
-
return;
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
group.updateGroupLabel(label);
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
spliceGroupResourceStates(splices: ScmRawResourceSplices[]): void {
|
|
213
|
-
for (const splice of splices) {
|
|
214
|
-
const groupHandle = splice.handle;
|
|
215
|
-
const groupSlices = splice.splices;
|
|
216
|
-
const group = this.groupsByHandle[groupHandle];
|
|
217
|
-
|
|
218
|
-
if (!group) {
|
|
219
|
-
console.warn(`SCM group ${groupHandle} not found in provider ${this.label}`);
|
|
220
|
-
continue;
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
// reverse the splices sequence in order to apply them correctly
|
|
224
|
-
groupSlices.reverse();
|
|
225
|
-
|
|
226
|
-
for (const groupSlice of groupSlices) {
|
|
227
|
-
const { start, deleteCount, rawResources } = groupSlice;
|
|
228
|
-
const resources = rawResources.map(rawResource => {
|
|
229
|
-
const { handle, sourceUri, icons, tooltip, strikeThrough, faded, contextValue, command } = rawResource;
|
|
230
|
-
const icon = this.toIconClass(icons[0]);
|
|
231
|
-
const iconDark = this.toIconClass(icons[1]) || icon;
|
|
232
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
233
|
-
const colorVariable = (rawResource as any).colorId && this.colors.toCssVariableName((rawResource as any).colorId);
|
|
234
|
-
const decorations = {
|
|
235
|
-
icon,
|
|
236
|
-
iconDark,
|
|
237
|
-
tooltip,
|
|
238
|
-
strikeThrough,
|
|
239
|
-
// TODO remove the letter and colorId fields when the FileDecorationProvider is applied, see https://github.com/eclipse-theia/theia/pull/8911
|
|
240
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
241
|
-
letter: (rawResource as any).letter || '',
|
|
242
|
-
color: colorVariable && `var(${colorVariable})`,
|
|
243
|
-
faded
|
|
244
|
-
} as ScmResourceDecorations;
|
|
245
|
-
|
|
246
|
-
return new PluginScmResource(
|
|
247
|
-
this.proxy,
|
|
248
|
-
this.handle,
|
|
249
|
-
groupHandle,
|
|
250
|
-
handle,
|
|
251
|
-
new URI(vscodeURI.revive(sourceUri)),
|
|
252
|
-
group,
|
|
253
|
-
decorations,
|
|
254
|
-
contextValue || undefined,
|
|
255
|
-
command
|
|
256
|
-
);
|
|
257
|
-
});
|
|
258
|
-
|
|
259
|
-
group.splice(start, deleteCount, resources);
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
this.onDidChangeResourcesEmitter.fire();
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
private toIconClass(icon: IconUrl | ThemeIcon | undefined): string | undefined {
|
|
267
|
-
if (!icon) {
|
|
268
|
-
return undefined;
|
|
269
|
-
}
|
|
270
|
-
if (ThemeIcon.isThemeIcon(icon)) {
|
|
271
|
-
return ThemeIcon.asClassName(icon);
|
|
272
|
-
}
|
|
273
|
-
const reference = this.sharedStyle.toIconClass(icon);
|
|
274
|
-
this.disposables.push(reference);
|
|
275
|
-
return reference.object.iconClass;
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
unregisterGroup(handle: number): void {
|
|
279
|
-
const group = this.groupsByHandle[handle];
|
|
280
|
-
|
|
281
|
-
if (!group) {
|
|
282
|
-
return;
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
delete this.groupsByHandle[handle];
|
|
286
|
-
this.groups.splice(this.groups.indexOf(group), 1);
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
dispose(): void { }
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
export class ScmMainImpl implements ScmMain {
|
|
293
|
-
|
|
294
|
-
private readonly proxy: ScmExt;
|
|
295
|
-
private readonly scmService: ScmService;
|
|
296
|
-
private repositories = new Map<number, ScmRepository>();
|
|
297
|
-
private repositoryDisposables = new Map<number, DisposableCollection>();
|
|
298
|
-
private readonly disposables = new DisposableCollection();
|
|
299
|
-
private readonly colors: ColorRegistry;
|
|
300
|
-
private readonly sharedStyle: PluginSharedStyle;
|
|
301
|
-
|
|
302
|
-
constructor(rpc: RPCProtocol, container: interfaces.Container) {
|
|
303
|
-
this.proxy = rpc.getProxy(MAIN_RPC_CONTEXT.SCM_EXT);
|
|
304
|
-
this.scmService = container.get(ScmService);
|
|
305
|
-
this.colors = container.get(ColorRegistry);
|
|
306
|
-
this.sharedStyle = container.get(PluginSharedStyle);
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
dispose(): void {
|
|
310
|
-
this.repositories.forEach(r => r.dispose());
|
|
311
|
-
this.repositories.clear();
|
|
312
|
-
|
|
313
|
-
this.repositoryDisposables.forEach(d => d.dispose());
|
|
314
|
-
this.repositoryDisposables.clear();
|
|
315
|
-
|
|
316
|
-
this.disposables.dispose();
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
async $registerSourceControl(handle: number, id: string, label: string, rootUri: UriComponents | undefined): Promise<void> {
|
|
320
|
-
const provider = new PluginScmProvider(this.proxy, this.colors, this.sharedStyle, handle, id, label, rootUri ? vscodeURI.revive(rootUri) : undefined, this.disposables);
|
|
321
|
-
const repository = this.scmService.registerScmProvider(provider, {
|
|
322
|
-
input: {
|
|
323
|
-
validator: async value => {
|
|
324
|
-
const result = await this.proxy.$validateInput(handle, value, value.length);
|
|
325
|
-
return result && { message: result[0], type: result[1] };
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
);
|
|
330
|
-
this.repositories.set(handle, repository);
|
|
331
|
-
|
|
332
|
-
const disposables = new DisposableCollection(
|
|
333
|
-
this.scmService.onDidChangeSelectedRepository(r => {
|
|
334
|
-
if (r === repository) {
|
|
335
|
-
this.proxy.$setSelectedSourceControl(handle);
|
|
336
|
-
}
|
|
337
|
-
}),
|
|
338
|
-
repository.input.onDidChange(() => this.proxy.$onInputBoxValueChange(handle, repository.input.value))
|
|
339
|
-
);
|
|
340
|
-
|
|
341
|
-
if (this.scmService.selectedRepository === repository) {
|
|
342
|
-
setTimeout(() => this.proxy.$setSelectedSourceControl(handle), 0);
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
if (repository.input.value) {
|
|
346
|
-
setTimeout(() => this.proxy.$onInputBoxValueChange(handle, repository.input.value), 0);
|
|
347
|
-
}
|
|
348
|
-
|
|
349
|
-
this.repositoryDisposables.set(handle, disposables);
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
async $updateSourceControl(handle: number, features: SourceControlProviderFeatures): Promise<void> {
|
|
353
|
-
const repository = this.repositories.get(handle);
|
|
354
|
-
|
|
355
|
-
if (!repository) {
|
|
356
|
-
return;
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
const provider = repository.provider as PluginScmProvider;
|
|
360
|
-
provider.updateSourceControl(features);
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
async $unregisterSourceControl(handle: number): Promise<void> {
|
|
364
|
-
const repository = this.repositories.get(handle);
|
|
365
|
-
|
|
366
|
-
if (!repository) {
|
|
367
|
-
return;
|
|
368
|
-
}
|
|
369
|
-
|
|
370
|
-
this.repositoryDisposables.get(handle)!.dispose();
|
|
371
|
-
this.repositoryDisposables.delete(handle);
|
|
372
|
-
|
|
373
|
-
repository.dispose();
|
|
374
|
-
this.repositories.delete(handle);
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
$registerGroups(sourceControlHandle: number, groups: ScmRawResourceGroup[], splices: ScmRawResourceSplices[]): void {
|
|
378
|
-
const repository = this.repositories.get(sourceControlHandle);
|
|
379
|
-
|
|
380
|
-
if (!repository) {
|
|
381
|
-
return;
|
|
382
|
-
}
|
|
383
|
-
|
|
384
|
-
const provider = repository.provider as PluginScmProvider;
|
|
385
|
-
provider.registerGroups(groups);
|
|
386
|
-
provider.spliceGroupResourceStates(splices);
|
|
387
|
-
}
|
|
388
|
-
|
|
389
|
-
$updateGroup(sourceControlHandle: number, groupHandle: number, features: SourceControlGroupFeatures): void {
|
|
390
|
-
const repository = this.repositories.get(sourceControlHandle);
|
|
391
|
-
|
|
392
|
-
if (!repository) {
|
|
393
|
-
return;
|
|
394
|
-
}
|
|
395
|
-
|
|
396
|
-
const provider = repository.provider as PluginScmProvider;
|
|
397
|
-
provider.updateGroup(groupHandle, features);
|
|
398
|
-
}
|
|
399
|
-
|
|
400
|
-
$updateGroupLabel(sourceControlHandle: number, groupHandle: number, label: string): void {
|
|
401
|
-
const repository = this.repositories.get(sourceControlHandle);
|
|
402
|
-
|
|
403
|
-
if (!repository) {
|
|
404
|
-
return;
|
|
405
|
-
}
|
|
406
|
-
|
|
407
|
-
const provider = repository.provider as PluginScmProvider;
|
|
408
|
-
provider.updateGroupLabel(groupHandle, label);
|
|
409
|
-
}
|
|
410
|
-
|
|
411
|
-
$spliceResourceStates(sourceControlHandle: number, splices: ScmRawResourceSplices[]): void {
|
|
412
|
-
const repository = this.repositories.get(sourceControlHandle);
|
|
413
|
-
|
|
414
|
-
if (!repository) {
|
|
415
|
-
return;
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
const provider = repository.provider as PluginScmProvider;
|
|
419
|
-
provider.spliceGroupResourceStates(splices);
|
|
420
|
-
}
|
|
421
|
-
|
|
422
|
-
$unregisterGroup(sourceControlHandle: number, handle: number): void {
|
|
423
|
-
const repository = this.repositories.get(sourceControlHandle);
|
|
424
|
-
|
|
425
|
-
if (!repository) {
|
|
426
|
-
return;
|
|
427
|
-
}
|
|
428
|
-
|
|
429
|
-
const provider = repository.provider as PluginScmProvider;
|
|
430
|
-
provider.unregisterGroup(handle);
|
|
431
|
-
}
|
|
432
|
-
|
|
433
|
-
$setInputBoxValue(sourceControlHandle: number, value: string): void {
|
|
434
|
-
const repository = this.repositories.get(sourceControlHandle);
|
|
435
|
-
|
|
436
|
-
if (!repository) {
|
|
437
|
-
return;
|
|
438
|
-
}
|
|
439
|
-
|
|
440
|
-
repository.input.value = value;
|
|
441
|
-
}
|
|
442
|
-
|
|
443
|
-
$setInputBoxPlaceholder(sourceControlHandle: number, placeholder: string): void {
|
|
444
|
-
const repository = this.repositories.get(sourceControlHandle);
|
|
445
|
-
|
|
446
|
-
if (!repository) {
|
|
447
|
-
return;
|
|
448
|
-
}
|
|
449
|
-
|
|
450
|
-
repository.input.placeholder = placeholder;
|
|
451
|
-
}
|
|
452
|
-
|
|
453
|
-
$setInputBoxVisible(sourceControlHandle: number, visible: boolean): void {
|
|
454
|
-
const repository = this.repositories.get(sourceControlHandle);
|
|
455
|
-
|
|
456
|
-
if (!repository) {
|
|
457
|
-
return;
|
|
458
|
-
}
|
|
459
|
-
|
|
460
|
-
repository.input.visible = visible;
|
|
461
|
-
}
|
|
462
|
-
|
|
463
|
-
$setInputBoxEnabled(sourceControlHandle: number, enabled: boolean): void {
|
|
464
|
-
const repository = this.repositories.get(sourceControlHandle);
|
|
465
|
-
|
|
466
|
-
if (!repository) {
|
|
467
|
-
return;
|
|
468
|
-
}
|
|
469
|
-
|
|
470
|
-
repository.input.enabled = enabled;
|
|
471
|
-
}
|
|
472
|
-
}
|
|
1
|
+
// *****************************************************************************
|
|
2
|
+
// Copyright (C) 2019-2021 Red Hat, Inc. and others.
|
|
3
|
+
//
|
|
4
|
+
// This program and the accompanying materials are made available under the
|
|
5
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
//
|
|
8
|
+
// This Source Code may also be made available under the following Secondary
|
|
9
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
// with the GNU Classpath Exception which is available at
|
|
12
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
//
|
|
14
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
+
// *****************************************************************************
|
|
16
|
+
|
|
17
|
+
/*---------------------------------------------------------------------------------------------
|
|
18
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
19
|
+
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
20
|
+
*--------------------------------------------------------------------------------------------*/
|
|
21
|
+
// code copied and modified from https://github.com/microsoft/vscode/blob/1.52.1/src/vs/workbench/api/browser/mainThreadSCM.ts
|
|
22
|
+
|
|
23
|
+
import {
|
|
24
|
+
MAIN_RPC_CONTEXT,
|
|
25
|
+
ScmExt,
|
|
26
|
+
SourceControlGroupFeatures,
|
|
27
|
+
ScmMain,
|
|
28
|
+
SourceControlProviderFeatures,
|
|
29
|
+
ScmRawResourceSplices, ScmRawResourceGroup
|
|
30
|
+
} from '../../common/plugin-api-rpc';
|
|
31
|
+
import { ScmProvider, ScmResource, ScmResourceDecorations, ScmResourceGroup, ScmCommand } from '@theia/scm/lib/browser/scm-provider';
|
|
32
|
+
import { ScmRepository } from '@theia/scm/lib/browser/scm-repository';
|
|
33
|
+
import { ScmService } from '@theia/scm/lib/browser/scm-service';
|
|
34
|
+
import { RPCProtocol } from '../../common/rpc-protocol';
|
|
35
|
+
import { interfaces } from '@theia/core/shared/inversify';
|
|
36
|
+
import { Emitter, Event } from '@theia/core/lib/common/event';
|
|
37
|
+
import { DisposableCollection } from '@theia/core/lib/common/disposable';
|
|
38
|
+
import URI from '@theia/core/lib/common/uri';
|
|
39
|
+
import { URI as vscodeURI } from '@theia/core/shared/vscode-uri';
|
|
40
|
+
import { Splice } from '../../common/arrays';
|
|
41
|
+
import { UriComponents } from '../../common/uri-components';
|
|
42
|
+
import { ColorRegistry } from '@theia/core/lib/browser/color-registry';
|
|
43
|
+
import { PluginSharedStyle } from './plugin-shared-style';
|
|
44
|
+
import { IconUrl } from '../../common';
|
|
45
|
+
import { ThemeIcon } from '@theia/monaco-editor-core/esm/vs/base/common/themables';
|
|
46
|
+
|
|
47
|
+
export class PluginScmResourceGroup implements ScmResourceGroup {
|
|
48
|
+
|
|
49
|
+
readonly resources: ScmResource[] = [];
|
|
50
|
+
|
|
51
|
+
private readonly onDidSpliceEmitter = new Emitter<Splice<ScmResource>>();
|
|
52
|
+
readonly onDidSplice = this.onDidSpliceEmitter.event;
|
|
53
|
+
|
|
54
|
+
get hideWhenEmpty(): boolean { return !!this.features.hideWhenEmpty; }
|
|
55
|
+
|
|
56
|
+
private readonly onDidChangeEmitter = new Emitter<void>();
|
|
57
|
+
readonly onDidChange: Event<void> = this.onDidChangeEmitter.event;
|
|
58
|
+
|
|
59
|
+
constructor(
|
|
60
|
+
readonly handle: number,
|
|
61
|
+
public provider: PluginScmProvider,
|
|
62
|
+
public features: SourceControlGroupFeatures,
|
|
63
|
+
public label: string,
|
|
64
|
+
public id: string
|
|
65
|
+
) { }
|
|
66
|
+
|
|
67
|
+
splice(start: number, deleteCount: number, toInsert: ScmResource[]): void {
|
|
68
|
+
this.resources.splice(start, deleteCount, ...toInsert);
|
|
69
|
+
this.onDidSpliceEmitter.fire({ start, deleteCount, toInsert });
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
updateGroup(features: SourceControlGroupFeatures): void {
|
|
73
|
+
this.features = { ...this.features, ...features };
|
|
74
|
+
this.onDidChangeEmitter.fire();
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
updateGroupLabel(label: string): void {
|
|
78
|
+
this.label = label;
|
|
79
|
+
this.onDidChangeEmitter.fire();
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
dispose(): void { }
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export class PluginScmResource implements ScmResource {
|
|
86
|
+
|
|
87
|
+
constructor(
|
|
88
|
+
private readonly proxy: ScmExt,
|
|
89
|
+
private readonly sourceControlHandle: number,
|
|
90
|
+
private readonly groupHandle: number,
|
|
91
|
+
readonly handle: number,
|
|
92
|
+
readonly sourceUri: URI,
|
|
93
|
+
readonly group: PluginScmResourceGroup,
|
|
94
|
+
readonly decorations: ScmResourceDecorations,
|
|
95
|
+
readonly contextValue: string | undefined,
|
|
96
|
+
readonly command: ScmCommand | undefined
|
|
97
|
+
) { }
|
|
98
|
+
|
|
99
|
+
open(): Promise<void> {
|
|
100
|
+
return this.proxy.$executeResourceCommand(this.sourceControlHandle, this.groupHandle, this.handle);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export class PluginScmProvider implements ScmProvider {
|
|
105
|
+
|
|
106
|
+
private _id = this.contextValue;
|
|
107
|
+
get id(): string { return this._id; }
|
|
108
|
+
|
|
109
|
+
readonly groups: PluginScmResourceGroup[] = [];
|
|
110
|
+
private readonly groupsByHandle: { [handle: number]: PluginScmResourceGroup; } = Object.create(null);
|
|
111
|
+
|
|
112
|
+
private readonly onDidChangeResourcesEmitter = new Emitter<void>();
|
|
113
|
+
readonly onDidChangeResources: Event<void> = this.onDidChangeResourcesEmitter.event;
|
|
114
|
+
|
|
115
|
+
private features: SourceControlProviderFeatures = {};
|
|
116
|
+
|
|
117
|
+
get handle(): number { return this._handle; }
|
|
118
|
+
get label(): string { return this._label; }
|
|
119
|
+
get rootUri(): string { return this._rootUri ? this._rootUri.toString() : ''; }
|
|
120
|
+
get contextValue(): string { return this._contextValue; }
|
|
121
|
+
|
|
122
|
+
get commitTemplate(): string { return this.features.commitTemplate || ''; }
|
|
123
|
+
get acceptInputCommand(): ScmCommand | undefined {
|
|
124
|
+
const command = this.features.acceptInputCommand;
|
|
125
|
+
if (command) {
|
|
126
|
+
const scmCommand: ScmCommand = command;
|
|
127
|
+
scmCommand.command = command.id;
|
|
128
|
+
return scmCommand;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
get statusBarCommands(): ScmCommand[] | undefined {
|
|
132
|
+
const commands = this.features.statusBarCommands;
|
|
133
|
+
return commands?.map(command => {
|
|
134
|
+
const scmCommand: ScmCommand = command;
|
|
135
|
+
scmCommand.command = command.id;
|
|
136
|
+
return scmCommand;
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
get count(): number | undefined { return this.features.count; }
|
|
140
|
+
|
|
141
|
+
private readonly onDidChangeCommitTemplateEmitter = new Emitter<string>();
|
|
142
|
+
readonly onDidChangeCommitTemplate: Event<string> = this.onDidChangeCommitTemplateEmitter.event;
|
|
143
|
+
|
|
144
|
+
private readonly onDidChangeStatusBarCommandsEmitter = new Emitter<ScmCommand[]>();
|
|
145
|
+
get onDidChangeStatusBarCommands(): Event<ScmCommand[]> { return this.onDidChangeStatusBarCommandsEmitter.event; }
|
|
146
|
+
|
|
147
|
+
private readonly onDidChangeEmitter = new Emitter<void>();
|
|
148
|
+
readonly onDidChange: Event<void> = this.onDidChangeEmitter.event;
|
|
149
|
+
|
|
150
|
+
constructor(
|
|
151
|
+
private readonly proxy: ScmExt,
|
|
152
|
+
private readonly colors: ColorRegistry,
|
|
153
|
+
private readonly sharedStyle: PluginSharedStyle,
|
|
154
|
+
private readonly _handle: number,
|
|
155
|
+
private readonly _contextValue: string,
|
|
156
|
+
private readonly _label: string,
|
|
157
|
+
private readonly _rootUri: vscodeURI | undefined,
|
|
158
|
+
private disposables: DisposableCollection
|
|
159
|
+
) { }
|
|
160
|
+
|
|
161
|
+
updateSourceControl(features: SourceControlProviderFeatures): void {
|
|
162
|
+
this.features = { ...this.features, ...features };
|
|
163
|
+
this.onDidChangeEmitter.fire();
|
|
164
|
+
|
|
165
|
+
if (typeof features.commitTemplate !== 'undefined') {
|
|
166
|
+
this.onDidChangeCommitTemplateEmitter.fire(this.commitTemplate!);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
if (typeof features.statusBarCommands !== 'undefined') {
|
|
170
|
+
this.onDidChangeStatusBarCommandsEmitter.fire(this.statusBarCommands!);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
registerGroups(resourceGroups: ScmRawResourceGroup[]): void {
|
|
175
|
+
const groups = resourceGroups.map(resourceGroup => {
|
|
176
|
+
const { handle, id, label, features } = resourceGroup;
|
|
177
|
+
const group = new PluginScmResourceGroup(
|
|
178
|
+
handle,
|
|
179
|
+
this,
|
|
180
|
+
features,
|
|
181
|
+
label,
|
|
182
|
+
id
|
|
183
|
+
);
|
|
184
|
+
|
|
185
|
+
this.groupsByHandle[handle] = group;
|
|
186
|
+
return group;
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
this.groups.splice(this.groups.length, 0, ...groups);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
updateGroup(handle: number, features: SourceControlGroupFeatures): void {
|
|
193
|
+
const group = this.groupsByHandle[handle];
|
|
194
|
+
|
|
195
|
+
if (!group) {
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
group.updateGroup(features);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
updateGroupLabel(handle: number, label: string): void {
|
|
203
|
+
const group = this.groupsByHandle[handle];
|
|
204
|
+
|
|
205
|
+
if (!group) {
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
group.updateGroupLabel(label);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
spliceGroupResourceStates(splices: ScmRawResourceSplices[]): void {
|
|
213
|
+
for (const splice of splices) {
|
|
214
|
+
const groupHandle = splice.handle;
|
|
215
|
+
const groupSlices = splice.splices;
|
|
216
|
+
const group = this.groupsByHandle[groupHandle];
|
|
217
|
+
|
|
218
|
+
if (!group) {
|
|
219
|
+
console.warn(`SCM group ${groupHandle} not found in provider ${this.label}`);
|
|
220
|
+
continue;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
// reverse the splices sequence in order to apply them correctly
|
|
224
|
+
groupSlices.reverse();
|
|
225
|
+
|
|
226
|
+
for (const groupSlice of groupSlices) {
|
|
227
|
+
const { start, deleteCount, rawResources } = groupSlice;
|
|
228
|
+
const resources = rawResources.map(rawResource => {
|
|
229
|
+
const { handle, sourceUri, icons, tooltip, strikeThrough, faded, contextValue, command } = rawResource;
|
|
230
|
+
const icon = this.toIconClass(icons[0]);
|
|
231
|
+
const iconDark = this.toIconClass(icons[1]) || icon;
|
|
232
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
233
|
+
const colorVariable = (rawResource as any).colorId && this.colors.toCssVariableName((rawResource as any).colorId);
|
|
234
|
+
const decorations = {
|
|
235
|
+
icon,
|
|
236
|
+
iconDark,
|
|
237
|
+
tooltip,
|
|
238
|
+
strikeThrough,
|
|
239
|
+
// TODO remove the letter and colorId fields when the FileDecorationProvider is applied, see https://github.com/eclipse-theia/theia/pull/8911
|
|
240
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
241
|
+
letter: (rawResource as any).letter || '',
|
|
242
|
+
color: colorVariable && `var(${colorVariable})`,
|
|
243
|
+
faded
|
|
244
|
+
} as ScmResourceDecorations;
|
|
245
|
+
|
|
246
|
+
return new PluginScmResource(
|
|
247
|
+
this.proxy,
|
|
248
|
+
this.handle,
|
|
249
|
+
groupHandle,
|
|
250
|
+
handle,
|
|
251
|
+
new URI(vscodeURI.revive(sourceUri)),
|
|
252
|
+
group,
|
|
253
|
+
decorations,
|
|
254
|
+
contextValue || undefined,
|
|
255
|
+
command
|
|
256
|
+
);
|
|
257
|
+
});
|
|
258
|
+
|
|
259
|
+
group.splice(start, deleteCount, resources);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
this.onDidChangeResourcesEmitter.fire();
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
private toIconClass(icon: IconUrl | ThemeIcon | undefined): string | undefined {
|
|
267
|
+
if (!icon) {
|
|
268
|
+
return undefined;
|
|
269
|
+
}
|
|
270
|
+
if (ThemeIcon.isThemeIcon(icon)) {
|
|
271
|
+
return ThemeIcon.asClassName(icon);
|
|
272
|
+
}
|
|
273
|
+
const reference = this.sharedStyle.toIconClass(icon);
|
|
274
|
+
this.disposables.push(reference);
|
|
275
|
+
return reference.object.iconClass;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
unregisterGroup(handle: number): void {
|
|
279
|
+
const group = this.groupsByHandle[handle];
|
|
280
|
+
|
|
281
|
+
if (!group) {
|
|
282
|
+
return;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
delete this.groupsByHandle[handle];
|
|
286
|
+
this.groups.splice(this.groups.indexOf(group), 1);
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
dispose(): void { }
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
export class ScmMainImpl implements ScmMain {
|
|
293
|
+
|
|
294
|
+
private readonly proxy: ScmExt;
|
|
295
|
+
private readonly scmService: ScmService;
|
|
296
|
+
private repositories = new Map<number, ScmRepository>();
|
|
297
|
+
private repositoryDisposables = new Map<number, DisposableCollection>();
|
|
298
|
+
private readonly disposables = new DisposableCollection();
|
|
299
|
+
private readonly colors: ColorRegistry;
|
|
300
|
+
private readonly sharedStyle: PluginSharedStyle;
|
|
301
|
+
|
|
302
|
+
constructor(rpc: RPCProtocol, container: interfaces.Container) {
|
|
303
|
+
this.proxy = rpc.getProxy(MAIN_RPC_CONTEXT.SCM_EXT);
|
|
304
|
+
this.scmService = container.get(ScmService);
|
|
305
|
+
this.colors = container.get(ColorRegistry);
|
|
306
|
+
this.sharedStyle = container.get(PluginSharedStyle);
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
dispose(): void {
|
|
310
|
+
this.repositories.forEach(r => r.dispose());
|
|
311
|
+
this.repositories.clear();
|
|
312
|
+
|
|
313
|
+
this.repositoryDisposables.forEach(d => d.dispose());
|
|
314
|
+
this.repositoryDisposables.clear();
|
|
315
|
+
|
|
316
|
+
this.disposables.dispose();
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
async $registerSourceControl(handle: number, id: string, label: string, rootUri: UriComponents | undefined): Promise<void> {
|
|
320
|
+
const provider = new PluginScmProvider(this.proxy, this.colors, this.sharedStyle, handle, id, label, rootUri ? vscodeURI.revive(rootUri) : undefined, this.disposables);
|
|
321
|
+
const repository = this.scmService.registerScmProvider(provider, {
|
|
322
|
+
input: {
|
|
323
|
+
validator: async value => {
|
|
324
|
+
const result = await this.proxy.$validateInput(handle, value, value.length);
|
|
325
|
+
return result && { message: result[0], type: result[1] };
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
);
|
|
330
|
+
this.repositories.set(handle, repository);
|
|
331
|
+
|
|
332
|
+
const disposables = new DisposableCollection(
|
|
333
|
+
this.scmService.onDidChangeSelectedRepository(r => {
|
|
334
|
+
if (r === repository) {
|
|
335
|
+
this.proxy.$setSelectedSourceControl(handle);
|
|
336
|
+
}
|
|
337
|
+
}),
|
|
338
|
+
repository.input.onDidChange(() => this.proxy.$onInputBoxValueChange(handle, repository.input.value))
|
|
339
|
+
);
|
|
340
|
+
|
|
341
|
+
if (this.scmService.selectedRepository === repository) {
|
|
342
|
+
setTimeout(() => this.proxy.$setSelectedSourceControl(handle), 0);
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
if (repository.input.value) {
|
|
346
|
+
setTimeout(() => this.proxy.$onInputBoxValueChange(handle, repository.input.value), 0);
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
this.repositoryDisposables.set(handle, disposables);
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
async $updateSourceControl(handle: number, features: SourceControlProviderFeatures): Promise<void> {
|
|
353
|
+
const repository = this.repositories.get(handle);
|
|
354
|
+
|
|
355
|
+
if (!repository) {
|
|
356
|
+
return;
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
const provider = repository.provider as PluginScmProvider;
|
|
360
|
+
provider.updateSourceControl(features);
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
async $unregisterSourceControl(handle: number): Promise<void> {
|
|
364
|
+
const repository = this.repositories.get(handle);
|
|
365
|
+
|
|
366
|
+
if (!repository) {
|
|
367
|
+
return;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
this.repositoryDisposables.get(handle)!.dispose();
|
|
371
|
+
this.repositoryDisposables.delete(handle);
|
|
372
|
+
|
|
373
|
+
repository.dispose();
|
|
374
|
+
this.repositories.delete(handle);
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
$registerGroups(sourceControlHandle: number, groups: ScmRawResourceGroup[], splices: ScmRawResourceSplices[]): void {
|
|
378
|
+
const repository = this.repositories.get(sourceControlHandle);
|
|
379
|
+
|
|
380
|
+
if (!repository) {
|
|
381
|
+
return;
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
const provider = repository.provider as PluginScmProvider;
|
|
385
|
+
provider.registerGroups(groups);
|
|
386
|
+
provider.spliceGroupResourceStates(splices);
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
$updateGroup(sourceControlHandle: number, groupHandle: number, features: SourceControlGroupFeatures): void {
|
|
390
|
+
const repository = this.repositories.get(sourceControlHandle);
|
|
391
|
+
|
|
392
|
+
if (!repository) {
|
|
393
|
+
return;
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
const provider = repository.provider as PluginScmProvider;
|
|
397
|
+
provider.updateGroup(groupHandle, features);
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
$updateGroupLabel(sourceControlHandle: number, groupHandle: number, label: string): void {
|
|
401
|
+
const repository = this.repositories.get(sourceControlHandle);
|
|
402
|
+
|
|
403
|
+
if (!repository) {
|
|
404
|
+
return;
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
const provider = repository.provider as PluginScmProvider;
|
|
408
|
+
provider.updateGroupLabel(groupHandle, label);
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
$spliceResourceStates(sourceControlHandle: number, splices: ScmRawResourceSplices[]): void {
|
|
412
|
+
const repository = this.repositories.get(sourceControlHandle);
|
|
413
|
+
|
|
414
|
+
if (!repository) {
|
|
415
|
+
return;
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
const provider = repository.provider as PluginScmProvider;
|
|
419
|
+
provider.spliceGroupResourceStates(splices);
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
$unregisterGroup(sourceControlHandle: number, handle: number): void {
|
|
423
|
+
const repository = this.repositories.get(sourceControlHandle);
|
|
424
|
+
|
|
425
|
+
if (!repository) {
|
|
426
|
+
return;
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
const provider = repository.provider as PluginScmProvider;
|
|
430
|
+
provider.unregisterGroup(handle);
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
$setInputBoxValue(sourceControlHandle: number, value: string): void {
|
|
434
|
+
const repository = this.repositories.get(sourceControlHandle);
|
|
435
|
+
|
|
436
|
+
if (!repository) {
|
|
437
|
+
return;
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
repository.input.value = value;
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
$setInputBoxPlaceholder(sourceControlHandle: number, placeholder: string): void {
|
|
444
|
+
const repository = this.repositories.get(sourceControlHandle);
|
|
445
|
+
|
|
446
|
+
if (!repository) {
|
|
447
|
+
return;
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
repository.input.placeholder = placeholder;
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
$setInputBoxVisible(sourceControlHandle: number, visible: boolean): void {
|
|
454
|
+
const repository = this.repositories.get(sourceControlHandle);
|
|
455
|
+
|
|
456
|
+
if (!repository) {
|
|
457
|
+
return;
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
repository.input.visible = visible;
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
$setInputBoxEnabled(sourceControlHandle: number, enabled: boolean): void {
|
|
464
|
+
const repository = this.repositories.get(sourceControlHandle);
|
|
465
|
+
|
|
466
|
+
if (!repository) {
|
|
467
|
+
return;
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
repository.input.enabled = enabled;
|
|
471
|
+
}
|
|
472
|
+
}
|