@theia/plugin-ext 1.34.3 → 1.34.4
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/LICENSE +641 -641
- package/README.md +54 -54
- package/lib/common/arrays.d.ts +19 -19
- package/lib/common/arrays.js +46 -46
- package/lib/common/assert.d.ts +1 -1
- package/lib/common/assert.js +25 -25
- package/lib/common/cache.d.ts +11 -11
- package/lib/common/cache.js +47 -47
- package/lib/common/character-classifier.d.ts +18 -18
- package/lib/common/character-classifier.js +60 -60
- package/lib/common/collections.d.ts +4 -4
- package/lib/common/collections.js +39 -39
- package/lib/common/connection.d.ts +54 -54
- package/lib/common/connection.js +107 -107
- package/lib/common/disposable-util.d.ts +6 -6
- package/lib/common/disposable-util.js +37 -37
- package/lib/common/editor-options.d.ts +30 -30
- package/lib/common/editor-options.js +72 -72
- package/lib/common/env.d.ts +3 -3
- package/lib/common/env.js +17 -17
- package/lib/common/errors.d.ts +3 -3
- package/lib/common/errors.js +42 -42
- package/lib/common/id-generator.d.ts +6 -6
- package/lib/common/id-generator.js +28 -28
- package/lib/common/index.d.ts +3 -3
- package/lib/common/index.js +33 -33
- package/lib/common/link-computer.d.ts +41 -41
- package/lib/common/link-computer.js +275 -275
- package/lib/common/object-identifier.d.ts +8 -8
- package/lib/common/object-identifier.js +32 -32
- package/lib/common/objects.d.ts +1 -1
- package/lib/common/objects.js +46 -46
- package/lib/common/paths-util.d.ts +3 -3
- package/lib/common/paths-util.js +144 -144
- package/lib/common/plugin-api-rpc-model.d.ts +728 -728
- package/lib/common/plugin-api-rpc-model.js +173 -173
- package/lib/common/plugin-api-rpc.d.ts +1710 -1710
- package/lib/common/plugin-api-rpc.js +279 -279
- package/lib/common/plugin-ext-api-contribution.d.ts +58 -58
- package/lib/common/plugin-ext-api-contribution.js +5 -5
- package/lib/common/plugin-identifiers.d.ts +40 -40
- package/lib/common/plugin-identifiers.js +80 -80
- package/lib/common/plugin-protocol.d.ts +840 -840
- package/lib/common/plugin-protocol.js +67 -67
- package/lib/common/proxy-handler.d.ts +65 -65
- package/lib/common/proxy-handler.js +97 -97
- package/lib/common/reference-map.d.ts +7 -7
- package/lib/common/reference-map.js +39 -39
- package/lib/common/rpc-protocol.d.ts +65 -65
- package/lib/common/rpc-protocol.js +229 -229
- package/lib/common/semantic-tokens-dto.d.ts +18 -18
- package/lib/common/semantic-tokens-dto.js +162 -162
- package/lib/common/types.d.ts +37 -37
- package/lib/common/types.js +121 -121
- package/lib/common/uint.d.ts +7 -7
- package/lib/common/uint.js +33 -33
- package/lib/common/uri-components.d.ts +39 -39
- package/lib/common/uri-components.js +66 -66
- package/lib/hosted/browser/hosted-plugin-watcher.d.ts +15 -15
- package/lib/hosted/browser/hosted-plugin-watcher.js +59 -59
- package/lib/hosted/browser/hosted-plugin.d.ts +145 -145
- package/lib/hosted/browser/hosted-plugin.js +787 -787
- package/lib/hosted/browser/plugin-worker.d.ts +6 -6
- package/lib/hosted/browser/plugin-worker.js +57 -57
- package/lib/hosted/browser/worker/debug-stub.d.ts +3 -3
- package/lib/hosted/browser/worker/debug-stub.js +29 -29
- package/lib/hosted/browser/worker/plugin-manifest-loader.d.ts +2 -2
- package/lib/hosted/browser/worker/plugin-manifest-loader.js +107 -107
- package/lib/hosted/browser/worker/worker-env-ext.d.ts +14 -14
- package/lib/hosted/browser/worker/worker-env-ext.js +38 -38
- package/lib/hosted/browser/worker/worker-main.d.ts +1 -1
- package/lib/hosted/browser/worker/worker-main.js +192 -192
- package/lib/hosted/node/hosted-plugin-cli-contribution.d.ts +16 -16
- package/lib/hosted/node/hosted-plugin-cli-contribution.js +76 -76
- package/lib/hosted/node/hosted-plugin-deployer-handler.d.ts +42 -42
- package/lib/hosted/node/hosted-plugin-deployer-handler.js +264 -264
- package/lib/hosted/node/hosted-plugin-localization-service.d.ts +34 -34
- package/lib/hosted/node/hosted-plugin-localization-service.js +239 -239
- package/lib/hosted/node/hosted-plugin-process.d.ts +47 -47
- package/lib/hosted/node/hosted-plugin-process.js +224 -224
- package/lib/hosted/node/hosted-plugin-protocol.d.ts +21 -21
- package/lib/hosted/node/hosted-plugin-protocol.js +36 -36
- package/lib/hosted/node/hosted-plugin.d.ts +36 -36
- package/lib/hosted/node/hosted-plugin.js +118 -118
- package/lib/hosted/node/metadata-scanner.d.ts +17 -17
- package/lib/hosted/node/metadata-scanner.js +82 -82
- package/lib/hosted/node/plugin-ext-hosted-backend-module.d.ts +3 -3
- package/lib/hosted/node/plugin-ext-hosted-backend-module.js +73 -73
- package/lib/hosted/node/plugin-host-proxy.d.ts +17 -17
- package/lib/hosted/node/plugin-host-proxy.js +69 -69
- package/lib/hosted/node/plugin-host-rpc.d.ts +21 -21
- package/lib/hosted/node/plugin-host-rpc.js +216 -216
- package/lib/hosted/node/plugin-host.d.ts +1 -1
- package/lib/hosted/node/plugin-host.js +101 -101
- package/lib/hosted/node/plugin-manifest-loader.d.ts +1 -1
- package/lib/hosted/node/plugin-manifest-loader.js +34 -34
- package/lib/hosted/node/plugin-reader.d.ts +25 -25
- package/lib/hosted/node/plugin-reader.js +141 -141
- package/lib/hosted/node/plugin-service.d.ts +39 -39
- package/lib/hosted/node/plugin-service.js +193 -193
- package/lib/hosted/node/scanners/backend-init-theia.d.ts +2 -2
- package/lib/hosted/node/scanners/backend-init-theia.js +60 -60
- package/lib/hosted/node/scanners/file-plugin-uri-factory.d.ts +10 -10
- package/lib/hosted/node/scanners/file-plugin-uri-factory.js +40 -40
- package/lib/hosted/node/scanners/grammars-reader.d.ts +5 -5
- package/lib/hosted/node/scanners/grammars-reader.js +63 -63
- package/lib/hosted/node/scanners/plugin-uri-factory.d.ts +16 -16
- package/lib/hosted/node/scanners/plugin-uri-factory.js +19 -19
- package/lib/hosted/node/scanners/scanner-theia.d.ts +56 -56
- package/lib/hosted/node/scanners/scanner-theia.js +842 -842
- package/lib/hosted/node-electron/plugin-ext-hosted-electron-backend-module.d.ts +2 -2
- package/lib/hosted/node-electron/plugin-ext-hosted-electron-backend-module.js +26 -26
- package/lib/hosted/node-electron/scanner-theia-electron.d.ts +5 -5
- package/lib/hosted/node-electron/scanner-theia-electron.js +40 -40
- package/lib/main/browser/authentication-main.d.ts +51 -51
- package/lib/main/browser/authentication-main.js +299 -299
- package/lib/main/browser/clipboard-main.d.ts +9 -9
- package/lib/main/browser/clipboard-main.js +32 -32
- package/lib/main/browser/command-registry-main.d.ts +23 -23
- package/lib/main/browser/command-registry-main.js +97 -97
- package/lib/main/browser/commands.d.ts +12 -12
- package/lib/main/browser/commands.js +102 -102
- package/lib/main/browser/comments/comment-glyph-widget.d.ts +12 -12
- package/lib/main/browser/comments/comment-glyph-widget.js +42 -42
- package/lib/main/browser/comments/comment-thread-widget.d.ts +153 -153
- package/lib/main/browser/comments/comment-thread-widget.js +466 -466
- package/lib/main/browser/comments/comments-context-key-service.d.ts +17 -17
- package/lib/main/browser/comments/comments-context-key-service.js +80 -80
- package/lib/main/browser/comments/comments-contribution.d.ts +31 -31
- package/lib/main/browser/comments/comments-contribution.js +264 -264
- package/lib/main/browser/comments/comments-decorator.d.ts +15 -15
- package/lib/main/browser/comments/comments-decorator.js +107 -107
- package/lib/main/browser/comments/comments-main.d.ts +106 -106
- package/lib/main/browser/comments/comments-main.js +341 -341
- package/lib/main/browser/comments/comments-service.d.ts +75 -75
- package/lib/main/browser/comments/comments-service.js +120 -120
- package/lib/main/browser/custom-editors/custom-editor-contribution.d.ts +6 -6
- package/lib/main/browser/custom-editors/custom-editor-contribution.js +50 -50
- package/lib/main/browser/custom-editors/custom-editor-opener.d.ts +21 -21
- package/lib/main/browser/custom-editors/custom-editor-opener.js +111 -111
- package/lib/main/browser/custom-editors/custom-editor-service.d.ts +16 -16
- package/lib/main/browser/custom-editors/custom-editor-service.js +102 -102
- package/lib/main/browser/custom-editors/custom-editor-widget-factory.d.ts +9 -9
- package/lib/main/browser/custom-editors/custom-editor-widget-factory.js +39 -39
- package/lib/main/browser/custom-editors/custom-editor-widget.d.ts +36 -36
- package/lib/main/browser/custom-editors/custom-editor-widget.js +115 -115
- package/lib/main/browser/custom-editors/custom-editors-main.d.ts +120 -120
- package/lib/main/browser/custom-editors/custom-editors-main.js +447 -447
- package/lib/main/browser/custom-editors/plugin-custom-editor-registry.d.ts +23 -23
- package/lib/main/browser/custom-editors/plugin-custom-editor-registry.js +142 -142
- package/lib/main/browser/custom-editors/undo-redo-service.d.ts +23 -23
- package/lib/main/browser/custom-editors/undo-redo-service.js +110 -110
- package/lib/main/browser/debug/debug-main.d.ts +48 -48
- package/lib/main/browser/debug/debug-main.js +295 -295
- package/lib/main/browser/debug/plugin-debug-adapter-contribution.d.ts +18 -18
- package/lib/main/browser/debug/plugin-debug-adapter-contribution.js +42 -42
- package/lib/main/browser/debug/plugin-debug-configuration-provider.d.ts +12 -12
- package/lib/main/browser/debug/plugin-debug-configuration-provider.js +38 -38
- package/lib/main/browser/debug/plugin-debug-service.d.ts +52 -52
- package/lib/main/browser/debug/plugin-debug-service.js +283 -283
- package/lib/main/browser/debug/plugin-debug-session-contribution-registry.d.ts +30 -30
- package/lib/main/browser/debug/plugin-debug-session-contribution-registry.js +75 -75
- package/lib/main/browser/debug/plugin-debug-session-factory.d.ts +55 -55
- package/lib/main/browser/debug/plugin-debug-session-factory.js +70 -70
- package/lib/main/browser/decorations/decorations-main.d.ts +15 -15
- package/lib/main/browser/decorations/decorations-main.js +119 -119
- package/lib/main/browser/dialogs/modal-notification.d.ts +18 -18
- package/lib/main/browser/dialogs/modal-notification.js +107 -107
- package/lib/main/browser/dialogs-main.d.ts +16 -16
- package/lib/main/browser/dialogs-main.js +162 -162
- package/lib/main/browser/documents-main.d.ts +50 -50
- package/lib/main/browser/documents-main.js +249 -249
- package/lib/main/browser/editors-and-documents-main.d.ts +32 -32
- package/lib/main/browser/editors-and-documents-main.js +301 -301
- package/lib/main/browser/env-main.d.ts +15 -15
- package/lib/main/browser/env-main.js +82 -82
- package/lib/main/browser/file-system-main-impl.d.ts +27 -27
- package/lib/main/browser/file-system-main-impl.js +199 -199
- package/lib/main/browser/hierarchy/hierarchy-types-converters.d.ts +24 -24
- package/lib/main/browser/hierarchy/hierarchy-types-converters.js +174 -174
- package/lib/main/browser/keybindings/keybindings-contribution-handler.d.ts +9 -9
- package/lib/main/browser/keybindings/keybindings-contribution-handler.js +77 -77
- package/lib/main/browser/label-service-main.d.ts +10 -10
- package/lib/main/browser/label-service-main.js +46 -46
- package/lib/main/browser/languages-main.d.ts +136 -136
- package/lib/main/browser/languages-main.js +1116 -1116
- package/lib/main/browser/main-context.d.ts +3 -3
- package/lib/main/browser/main-context.js +137 -137
- package/lib/main/browser/main-file-system-event-service.d.ts +7 -7
- package/lib/main/browser/main-file-system-event-service.js +65 -65
- package/lib/main/browser/menus/menus-contribution-handler.d.ts +29 -29
- package/lib/main/browser/menus/menus-contribution-handler.js +194 -194
- package/lib/main/browser/menus/plugin-menu-command-adapter.d.ts +43 -43
- package/lib/main/browser/menus/plugin-menu-command-adapter.js +279 -279
- package/lib/main/browser/menus/vscode-theia-menu-mappings.d.ts +17 -17
- package/lib/main/browser/menus/vscode-theia-menu-mappings.js +93 -93
- package/lib/main/browser/message-registry-main.d.ts +8 -8
- package/lib/main/browser/message-registry-main.js +52 -52
- package/lib/main/browser/notification-main.d.ts +18 -18
- package/lib/main/browser/notification-main.js +75 -75
- package/lib/main/browser/output-channel-registry-main.d.ts +10 -10
- package/lib/main/browser/output-channel-registry-main.js +60 -60
- package/lib/main/browser/plugin-authentication-service.d.ts +13 -13
- package/lib/main/browser/plugin-authentication-service.js +80 -80
- package/lib/main/browser/plugin-contribution-handler.d.ts +66 -66
- package/lib/main/browser/plugin-contribution-handler.js +580 -580
- package/lib/main/browser/plugin-ext-frontend-module.d.ts +7 -7
- package/lib/main/browser/plugin-ext-frontend-module.js +216 -216
- package/lib/main/browser/plugin-ext-widget.d.ts +28 -28
- package/lib/main/browser/plugin-ext-widget.js +129 -129
- package/lib/main/browser/plugin-frontend-contribution.d.ts +6 -6
- package/lib/main/browser/plugin-frontend-contribution.js +45 -45
- package/lib/main/browser/plugin-frontend-view-contribution.d.ts +6 -6
- package/lib/main/browser/plugin-frontend-view-contribution.js +50 -50
- package/lib/main/browser/plugin-icon-theme-service.d.ts +135 -135
- package/lib/main/browser/plugin-icon-theme-service.js +519 -519
- package/lib/main/browser/plugin-shared-style.d.ts +36 -36
- package/lib/main/browser/plugin-shared-style.js +126 -126
- package/lib/main/browser/plugin-storage.d.ts +13 -13
- package/lib/main/browser/plugin-storage.js +46 -46
- package/lib/main/browser/plugin-terminal-registry.d.ts +4 -4
- package/lib/main/browser/plugin-terminal-registry.js +34 -34
- package/lib/main/browser/preference-registry-main.d.ts +19 -19
- package/lib/main/browser/preference-registry-main.js +104 -104
- package/lib/main/browser/quick-open-main.d.ts +31 -31
- package/lib/main/browser/quick-open-main.js +274 -274
- package/lib/main/browser/scm-main.d.ts +100 -100
- package/lib/main/browser/scm-main.js +330 -330
- package/lib/main/browser/secrets-main.d.ts +12 -12
- package/lib/main/browser/secrets-main.js +67 -67
- package/lib/main/browser/selection-provider-command.d.ts +12 -12
- package/lib/main/browser/selection-provider-command.js +57 -57
- package/lib/main/browser/status-bar-message-registry-main.d.ts +16 -16
- package/lib/main/browser/status-bar-message-registry-main.js +55 -55
- package/lib/main/browser/tabs/tabs-main.d.ts +40 -40
- package/lib/main/browser/tabs/tabs-main.js +282 -282
- package/lib/main/browser/tasks-main.d.ts +33 -33
- package/lib/main/browser/tasks-main.js +205 -205
- package/lib/main/browser/terminal-main.d.ts +49 -49
- package/lib/main/browser/terminal-main.js +268 -268
- package/lib/main/browser/text-editor-main.d.ts +47 -47
- package/lib/main/browser/text-editor-main.js +374 -374
- package/lib/main/browser/text-editor-model-service.d.ts +28 -28
- package/lib/main/browser/text-editor-model-service.js +108 -108
- package/lib/main/browser/text-editors-main.d.ts +38 -38
- package/lib/main/browser/text-editors-main.js +158 -158
- package/lib/main/browser/theme-icon-override.d.ts +1 -1
- package/lib/main/browser/theme-icon-override.js +247 -247
- package/lib/main/browser/theming-main.d.ts +9 -9
- package/lib/main/browser/theming-main.js +35 -35
- package/lib/main/browser/timeline-main.d.ts +13 -13
- package/lib/main/browser/timeline-main.js +46 -46
- package/lib/main/browser/view/dnd-file-content-store.d.ts +7 -7
- package/lib/main/browser/view/dnd-file-content-store.js +51 -51
- package/lib/main/browser/view/plugin-tree-view-node-label-provider.d.ts +11 -11
- package/lib/main/browser/view/plugin-tree-view-node-label-provider.js +90 -90
- package/lib/main/browser/view/plugin-view-registry.d.ts +106 -106
- package/lib/main/browser/view/plugin-view-registry.js +836 -836
- package/lib/main/browser/view/plugin-view-widget.d.ts +50 -50
- package/lib/main/browser/view/plugin-view-widget.js +166 -166
- package/lib/main/browser/view/tree-view-decorator-service.d.ts +30 -30
- package/lib/main/browser/view/tree-view-decorator-service.js +68 -68
- package/lib/main/browser/view/tree-view-widget.d.ts +160 -160
- package/lib/main/browser/view/tree-view-widget.js +761 -761
- package/lib/main/browser/view/tree-views-main.d.ts +31 -31
- package/lib/main/browser/view/tree-views-main.js +163 -163
- package/lib/main/browser/view/view-context-key-service.d.ts +30 -30
- package/lib/main/browser/view/view-context-key-service.js +84 -84
- package/lib/main/browser/view-column-service.d.ts +23 -23
- package/lib/main/browser/view-column-service.js +129 -129
- package/lib/main/browser/webview/webview-environment.d.ts +15 -15
- package/lib/main/browser/webview/webview-environment.js +93 -93
- package/lib/main/browser/webview/webview-frontend-security-warnings.d.ts +11 -11
- package/lib/main/browser/webview/webview-frontend-security-warnings.js +73 -73
- package/lib/main/browser/webview/webview-preferences.d.ts +12 -12
- package/lib/main/browser/webview/webview-preferences.js +57 -57
- package/lib/main/browser/webview/webview-resource-cache.d.ts +17 -17
- package/lib/main/browser/webview/webview-resource-cache.js +90 -90
- package/lib/main/browser/webview/webview-theme-data-provider.d.ts +30 -30
- package/lib/main/browser/webview/webview-theme-data-provider.js +132 -132
- package/lib/main/browser/webview/webview-widget-factory.d.ts +8 -8
- package/lib/main/browser/webview/webview-widget-factory.js +38 -38
- package/lib/main/browser/webview/webview.d.ts +130 -130
- package/lib/main/browser/webview/webview.js +549 -549
- package/lib/main/browser/webview-views/webview-views-main.d.ts +30 -30
- package/lib/main/browser/webview-views/webview-views-main.js +126 -126
- package/lib/main/browser/webview-views/webview-views.d.ts +14 -14
- package/lib/main/browser/webview-views/webview-views.js +22 -22
- package/lib/main/browser/webviews-main.d.ts +39 -39
- package/lib/main/browser/webviews-main.js +231 -231
- package/lib/main/browser/window-state-main.d.ts +16 -16
- package/lib/main/browser/window-state-main.js +61 -61
- package/lib/main/browser/workspace-main.d.ts +69 -69
- package/lib/main/browser/workspace-main.js +316 -316
- package/lib/main/common/plugin-paths-protocol.d.ts +8 -8
- package/lib/main/common/plugin-paths-protocol.js +21 -21
- package/lib/main/common/plugin-theia-environment.d.ts +7 -7
- package/lib/main/common/plugin-theia-environment.js +47 -47
- package/lib/main/common/webview-protocol.d.ts +12 -12
- package/lib/main/common/webview-protocol.js +31 -31
- package/lib/main/electron-browser/plugin-ext-frontend-electron-module.d.ts +3 -3
- package/lib/main/electron-browser/plugin-ext-frontend-electron-module.js +25 -25
- package/lib/main/electron-browser/webview/electron-webview-widget-factory.d.ts +22 -22
- package/lib/main/electron-browser/webview/electron-webview-widget-factory.js +64 -64
- package/lib/main/node/handlers/plugin-theia-directory-handler.d.ts +10 -10
- package/lib/main/node/handlers/plugin-theia-directory-handler.js +113 -113
- package/lib/main/node/handlers/plugin-theia-file-handler.d.ts +9 -9
- package/lib/main/node/handlers/plugin-theia-file-handler.js +66 -66
- package/lib/main/node/paths/const.d.ts +5 -5
- package/lib/main/node/paths/const.js +24 -24
- package/lib/main/node/paths/plugin-paths-service.d.ts +23 -23
- package/lib/main/node/paths/plugin-paths-service.js +169 -169
- package/lib/main/node/plugin-cli-contribution.d.ts +21 -21
- package/lib/main/node/plugin-cli-contribution.js +84 -84
- package/lib/main/node/plugin-deployer-contribution.d.ts +8 -8
- package/lib/main/node/plugin-deployer-contribution.js +47 -47
- package/lib/main/node/plugin-deployer-directory-handler-context-impl.d.ts +7 -7
- package/lib/main/node/plugin-deployer-directory-handler-context-impl.js +44 -44
- package/lib/main/node/plugin-deployer-entry-impl.d.ts +34 -34
- package/lib/main/node/plugin-deployer-entry-impl.js +109 -109
- package/lib/main/node/plugin-deployer-file-handler-context-impl.d.ts +7 -7
- package/lib/main/node/plugin-deployer-file-handler-context-impl.js +31 -31
- package/lib/main/node/plugin-deployer-impl.d.ts +61 -61
- package/lib/main/node/plugin-deployer-impl.js +341 -341
- package/lib/main/node/plugin-deployer-proxy-entry-impl.d.ts +29 -29
- package/lib/main/node/plugin-deployer-proxy-entry-impl.js +98 -98
- package/lib/main/node/plugin-deployer-resolver-context-impl.d.ts +15 -15
- package/lib/main/node/plugin-deployer-resolver-context-impl.js +42 -42
- package/lib/main/node/plugin-ext-backend-module.d.ts +2 -2
- package/lib/main/node/plugin-ext-backend-module.js +70 -70
- package/lib/main/node/plugin-github-resolver.d.ts +21 -21
- package/lib/main/node/plugin-github-resolver.js +142 -142
- package/lib/main/node/plugin-http-resolver.d.ts +18 -18
- package/lib/main/node/plugin-http-resolver.js +91 -91
- package/lib/main/node/plugin-localization-backend-contribution.d.ts +9 -9
- package/lib/main/node/plugin-localization-backend-contribution.js +58 -58
- package/lib/main/node/plugin-server-handler.d.ts +16 -16
- package/lib/main/node/plugin-server-handler.js +74 -74
- package/lib/main/node/plugin-service.d.ts +19 -19
- package/lib/main/node/plugin-service.js +91 -91
- package/lib/main/node/plugin-theia-deployer-participant.d.ts +6 -6
- package/lib/main/node/plugin-theia-deployer-participant.js +43 -43
- package/lib/main/node/plugin-uninstallation-manager.d.ts +14 -14
- package/lib/main/node/plugin-uninstallation-manager.js +84 -84
- package/lib/main/node/plugins-key-value-storage.d.ts +15 -15
- package/lib/main/node/plugins-key-value-storage.js +128 -128
- package/lib/main/node/resolvers/local-directory-plugin-deployer-resolver.d.ts +7 -7
- package/lib/main/node/resolvers/local-directory-plugin-deployer-resolver.js +43 -43
- package/lib/main/node/resolvers/local-plugin-deployer-resolver.d.ts +8 -8
- package/lib/main/node/resolvers/local-plugin-deployer-resolver.js +59 -59
- package/lib/main/node/temp-dir-util.d.ts +1 -1
- package/lib/main/node/temp-dir-util.js +30 -30
- package/lib/main/node/webview-backend-security-warnings.d.ts +5 -5
- package/lib/main/node/webview-backend-security-warnings.js +51 -51
- package/lib/plugin/authentication-ext.d.ts +34 -34
- package/lib/plugin/authentication-ext.js +94 -94
- package/lib/plugin/clipboard-ext.d.ts +9 -9
- package/lib/plugin/clipboard-ext.js +31 -31
- package/lib/plugin/command-registry.d.ts +43 -43
- package/lib/plugin/command-registry.js +176 -176
- package/lib/plugin/comments.d.ts +89 -89
- package/lib/plugin/comments.js +368 -368
- package/lib/plugin/custom-editors.d.ts +47 -47
- package/lib/plugin/custom-editors.js +255 -255
- package/lib/plugin/debug/debug-ext.d.ts +86 -86
- package/lib/plugin/debug/debug-ext.js +391 -391
- package/lib/plugin/debug/plugin-debug-adapter-creator.d.ts +10 -10
- package/lib/plugin/debug/plugin-debug-adapter-creator.js +41 -41
- package/lib/plugin/debug/plugin-debug-adapter-session.d.ts +26 -26
- package/lib/plugin/debug/plugin-debug-adapter-session.js +96 -96
- package/lib/plugin/debug/plugin-debug-adapter-tracker.d.ts +12 -12
- package/lib/plugin/debug/plugin-debug-adapter-tracker.js +77 -77
- package/lib/plugin/decorations.d.ts +14 -14
- package/lib/plugin/decorations.js +112 -112
- package/lib/plugin/dialogs.d.ts +10 -10
- package/lib/plugin/dialogs.js +91 -91
- package/lib/plugin/document-data.d.ts +38 -38
- package/lib/plugin/document-data.js +309 -309
- package/lib/plugin/documents.d.ts +56 -56
- package/lib/plugin/documents.js +253 -253
- package/lib/plugin/editors-and-documents.d.ts +26 -26
- package/lib/plugin/editors-and-documents.js +137 -137
- package/lib/plugin/env.d.ts +42 -42
- package/lib/plugin/env.js +101 -101
- package/lib/plugin/file-system-event-service-ext-impl.d.ts +40 -40
- package/lib/plugin/file-system-event-service-ext-impl.js +203 -203
- package/lib/plugin/file-system-ext-impl.d.ts +50 -50
- package/lib/plugin/file-system-ext-impl.js +354 -354
- package/lib/plugin/known-commands.d.ts +5 -5
- package/lib/plugin/known-commands.js +386 -386
- package/lib/plugin/known-commands.spec.d.ts +1 -1
- package/lib/plugin/known-commands.spec.js +42 -42
- package/lib/plugin/label-service.d.ts +11 -11
- package/lib/plugin/label-service.js +35 -35
- package/lib/plugin/languages/call-hierarchy.d.ts +20 -20
- package/lib/plugin/languages/call-hierarchy.js +101 -101
- package/lib/plugin/languages/code-action.d.ts +24 -24
- package/lib/plugin/languages/code-action.js +137 -137
- package/lib/plugin/languages/color.d.ts +12 -12
- package/lib/plugin/languages/color.js +58 -58
- package/lib/plugin/languages/completion.d.ts +20 -20
- package/lib/plugin/languages/completion.js +161 -161
- package/lib/plugin/languages/declaration.d.ts +11 -11
- package/lib/plugin/languages/declaration.js +58 -58
- package/lib/plugin/languages/definition.d.ts +11 -11
- package/lib/plugin/languages/definition.js +58 -58
- package/lib/plugin/languages/diagnostics.d.ts +49 -49
- package/lib/plugin/languages/diagnostics.js +281 -281
- package/lib/plugin/languages/document-formatting.d.ts +10 -10
- package/lib/plugin/languages/document-formatting.js +40 -40
- package/lib/plugin/languages/document-highlight.d.ts +12 -12
- package/lib/plugin/languages/document-highlight.js +50 -50
- package/lib/plugin/languages/evaluatable-expression.d.ts +11 -11
- package/lib/plugin/languages/evaluatable-expression.js +40 -40
- package/lib/plugin/languages/folding.d.ts +10 -10
- package/lib/plugin/languages/folding.js +39 -39
- package/lib/plugin/languages/hover.d.ts +11 -11
- package/lib/plugin/languages/hover.js +48 -48
- package/lib/plugin/languages/implementation.d.ts +11 -11
- package/lib/plugin/languages/implementation.js +58 -58
- package/lib/plugin/languages/inlay-hints.d.ts +19 -19
- package/lib/plugin/languages/inlay-hints.js +127 -127
- package/lib/plugin/languages/inline-completion.d.ts +20 -20
- package/lib/plugin/languages/inline-completion.js +93 -93
- package/lib/plugin/languages/inline-values.d.ts +10 -10
- package/lib/plugin/languages/inline-values.js +44 -44
- package/lib/plugin/languages/lens.d.ts +19 -19
- package/lib/plugin/languages/lens.js +89 -89
- package/lib/plugin/languages/link-provider.d.ts +14 -14
- package/lib/plugin/languages/link-provider.js +71 -71
- package/lib/plugin/languages/linked-editing-range.d.ts +11 -11
- package/lib/plugin/languages/linked-editing-range.js +40 -40
- package/lib/plugin/languages/on-type-formatting.d.ts +11 -11
- package/lib/plugin/languages/on-type-formatting.js +41 -41
- package/lib/plugin/languages/outline.d.ts +20 -20
- package/lib/plugin/languages/outline.js +115 -115
- package/lib/plugin/languages/range-formatting.d.ts +10 -10
- package/lib/plugin/languages/range-formatting.js +41 -41
- package/lib/plugin/languages/reference.d.ts +11 -11
- package/lib/plugin/languages/reference.js +47 -47
- package/lib/plugin/languages/rename.d.ts +14 -14
- package/lib/plugin/languages/rename.js +114 -114
- package/lib/plugin/languages/selection-range.d.ts +11 -11
- package/lib/plugin/languages/selection-range.js +65 -65
- package/lib/plugin/languages/semantic-highlighting.d.ts +28 -28
- package/lib/plugin/languages/semantic-highlighting.js +175 -175
- package/lib/plugin/languages/signature.d.ts +15 -15
- package/lib/plugin/languages/signature.js +71 -71
- package/lib/plugin/languages/type-definition.d.ts +11 -11
- package/lib/plugin/languages/type-definition.js +58 -58
- package/lib/plugin/languages/type-hierarchy.d.ts +18 -18
- package/lib/plugin/languages/type-hierarchy.js +95 -95
- package/lib/plugin/languages/util.d.ts +4 -4
- package/lib/plugin/languages/util.js +27 -27
- package/lib/plugin/languages/workspace-symbol.d.ts +8 -8
- package/lib/plugin/languages/workspace-symbol.js +61 -61
- package/lib/plugin/languages-utils.d.ts +5 -5
- package/lib/plugin/languages-utils.js +52 -52
- package/lib/plugin/languages.d.ts +118 -118
- package/lib/plugin/languages.js +679 -679
- package/lib/plugin/markdown-string.d.ts +24 -24
- package/lib/plugin/markdown-string.js +124 -124
- package/lib/plugin/message-registry.d.ts +8 -8
- package/lib/plugin/message-registry.js +60 -60
- package/lib/plugin/node/debug/debug.spec.d.ts +1 -1
- package/lib/plugin/node/debug/debug.spec.js +67 -67
- package/lib/plugin/node/debug/plugin-node-debug-adapter-creator.d.ts +17 -17
- package/lib/plugin/node/debug/plugin-node-debug-adapter-creator.js +154 -154
- package/lib/plugin/node/env-node-ext.d.ts +21 -21
- package/lib/plugin/node/env-node-ext.js +63 -63
- package/lib/plugin/notification.d.ts +17 -17
- package/lib/plugin/notification.js +67 -67
- package/lib/plugin/output-channel/output-channel-item.d.ts +17 -17
- package/lib/plugin/output-channel/output-channel-item.js +51 -51
- package/lib/plugin/output-channel-registry.d.ts +8 -8
- package/lib/plugin/output-channel-registry.js +35 -35
- package/lib/plugin/path.d.ts +2 -2
- package/lib/plugin/path.js +59 -59
- package/lib/plugin/path.spec.d.ts +1 -1
- package/lib/plugin/path.spec.js +34 -34
- package/lib/plugin/plugin-context.d.ts +56 -56
- package/lib/plugin/plugin-context.js +1072 -1072
- package/lib/plugin/plugin-icon-path.d.ts +11 -11
- package/lib/plugin/plugin-icon-path.js +49 -49
- package/lib/plugin/plugin-manager.d.ts +80 -80
- package/lib/plugin/plugin-manager.js +366 -366
- package/lib/plugin/plugin-storage.d.ts +36 -36
- package/lib/plugin/plugin-storage.js +99 -99
- package/lib/plugin/preference-registry.d.ts +36 -36
- package/lib/plugin/preference-registry.js +295 -295
- package/lib/plugin/preference-registry.spec.d.ts +1 -1
- package/lib/plugin/preference-registry.spec.js +251 -251
- package/lib/plugin/prefix-sum-computer.d.ts +30 -30
- package/lib/plugin/prefix-sum-computer.js +172 -172
- package/lib/plugin/quick-open.d.ts +202 -202
- package/lib/plugin/quick-open.js +637 -637
- package/lib/plugin/scm.d.ts +53 -53
- package/lib/plugin/scm.js +713 -713
- package/lib/plugin/secrets-ext.d.ts +30 -30
- package/lib/plugin/secrets-ext.js +68 -68
- package/lib/plugin/status-bar/status-bar-item.d.ts +44 -44
- package/lib/plugin/status-bar/status-bar-item.js +122 -122
- package/lib/plugin/status-bar-message-registry.d.ts +20 -20
- package/lib/plugin/status-bar-message-registry.js +84 -84
- package/lib/plugin/stubs/tests-api.d.ts +22 -22
- package/lib/plugin/stubs/tests-api.js +66 -66
- package/lib/plugin/tabs.d.ts +22 -22
- package/lib/plugin/tabs.js +358 -358
- package/lib/plugin/tasks/task-provider.d.ts +8 -8
- package/lib/plugin/tasks/task-provider.js +56 -56
- package/lib/plugin/tasks/tasks.d.ts +45 -45
- package/lib/plugin/tasks/tasks.js +210 -210
- package/lib/plugin/terminal-ext.d.ts +101 -101
- package/lib/plugin/terminal-ext.js +422 -422
- package/lib/plugin/text-editor.d.ts +100 -100
- package/lib/plugin/text-editor.js +409 -409
- package/lib/plugin/text-editors.d.ts +37 -37
- package/lib/plugin/text-editors.js +126 -126
- package/lib/plugin/theming.d.ts +15 -15
- package/lib/plugin/theming.js +61 -61
- package/lib/plugin/timeline.d.ts +20 -20
- package/lib/plugin/timeline.js +152 -152
- package/lib/plugin/tree/tree-views.d.ts +93 -93
- package/lib/plugin/tree/tree-views.js +523 -523
- package/lib/plugin/type-converters.d.ts +131 -131
- package/lib/plugin/type-converters.js +1292 -1292
- package/lib/plugin/type-converters.spec.d.ts +1 -1
- package/lib/plugin/type-converters.spec.js +391 -391
- package/lib/plugin/types-impl.d.ts +1464 -1464
- package/lib/plugin/types-impl.js +2956 -2956
- package/lib/plugin/types-impl.spec.d.ts +1 -1
- package/lib/plugin/types-impl.spec.js +78 -78
- package/lib/plugin/webview-views.d.ts +52 -52
- package/lib/plugin/webview-views.js +144 -144
- package/lib/plugin/webviews.d.ts +95 -95
- package/lib/plugin/webviews.js +340 -340
- package/lib/plugin/window-state.d.ts +16 -16
- package/lib/plugin/window-state.js +55 -55
- package/lib/plugin/word-helper.d.ts +21 -21
- package/lib/plugin/word-helper.js +125 -125
- package/lib/plugin/workspace.d.ts +53 -53
- package/lib/plugin/workspace.js +371 -371
- package/lib/plugin-ext-backend-electron-module.d.ts +3 -3
- package/lib/plugin-ext-backend-electron-module.js +24 -24
- package/lib/plugin-ext-backend-module.d.ts +3 -3
- package/lib/plugin-ext-backend-module.js +24 -24
- package/lib/plugin-ext-frontend-electron-module.d.ts +2 -2
- package/lib/plugin-ext-frontend-electron-module.js +19 -19
- package/lib/plugin-ext-frontend-module.d.ts +2 -2
- package/lib/plugin-ext-frontend-module.js +19 -19
- package/package.json +27 -27
- package/src/common/arrays.ts +54 -54
- 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 +37 -37
- 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 +37 -37
- package/src/common/id-generator.ts +26 -26
- package/src/common/index.ts +24 -24
- 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 +864 -864
- package/src/common/plugin-api-rpc.ts +2202 -2202
- package/src/common/plugin-ext-api-contribution.ts +82 -82
- package/src/common/plugin-identifiers.ts +84 -84
- package/src/common/plugin-protocol.ts +987 -987
- package/src/common/proxy-handler.ts +126 -126
- package/src/common/reference-map.ts +38 -38
- package/src/common/rpc-protocol.ts +272 -272
- package/src/common/semantic-tokens-dto.ts +182 -182
- package/src/common/types.ts +129 -129
- package/src/common/uint.ts +37 -37
- package/src/common/uri-components.ts +85 -85
- package/src/hosted/browser/hosted-plugin-watcher.ts +54 -54
- package/src/hosted/browser/hosted-plugin.ts +830 -830
- package/src/hosted/browser/plugin-worker.ts +52 -52
- package/src/hosted/browser/worker/debug-stub.ts +28 -28
- package/src/hosted/browser/worker/plugin-manifest-loader.ts +114 -114
- package/src/hosted/browser/worker/worker-env-ext.ts +41 -41
- package/src/hosted/browser/worker/worker-main.ts +221 -221
- package/src/hosted/node/hosted-plugin-cli-contribution.ts +75 -75
- package/src/hosted/node/hosted-plugin-deployer-handler.ts +261 -261
- package/src/hosted/node/hosted-plugin-localization-service.ts +254 -254
- 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-ext-hosted-backend-module.ts +80 -80
- package/src/hosted/node/plugin-host-proxy.ts +80 -80
- package/src/hosted/node/plugin-host-rpc.ts +245 -245
- package/src/hosted/node/plugin-host.ts +108 -108
- package/src/hosted/node/plugin-manifest-loader.ts +31 -31
- package/src/hosted/node/plugin-reader.ts +131 -131
- package/src/hosted/node/plugin-service.ts +175 -175
- 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 +56 -56
- package/src/hosted/node/scanners/plugin-uri-factory.ts +33 -33
- package/src/hosted/node/scanners/scanner-theia.ts +938 -938
- 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 +369 -369
- package/src/main/browser/clipboard-main.ts +38 -38
- package/src/main/browser/command-registry-main.ts +110 -110
- 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 +691 -691
- package/src/main/browser/comments/comments-context-key-service.ts +68 -68
- package/src/main/browser/comments/comments-contribution.ts +264 -264
- package/src/main/browser/comments/comments-decorator.ts +110 -110
- package/src/main/browser/comments/comments-main.ts +465 -465
- package/src/main/browser/comments/comments-service.ts +205 -205
- package/src/main/browser/custom-editors/custom-editor-contribution.ts +38 -38
- package/src/main/browser/custom-editors/custom-editor-opener.tsx +105 -105
- package/src/main/browser/custom-editors/custom-editor-service.ts +108 -108
- package/src/main/browser/custom-editors/custom-editor-widget-factory.ts +44 -44
- package/src/main/browser/custom-editors/custom-editor-widget.ts +127 -127
- package/src/main/browser/custom-editors/custom-editors-main.ts +606 -606
- package/src/main/browser/custom-editors/plugin-custom-editor-registry.ts +142 -142
- package/src/main/browser/custom-editors/undo-redo-service.ts +120 -120
- package/src/main/browser/debug/debug-main.ts +373 -373
- 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 +338 -338
- package/src/main/browser/debug/plugin-debug-session-contribution-registry.ts +76 -76
- package/src/main/browser/debug/plugin-debug-session-factory.ts +105 -105
- package/src/main/browser/decorations/decorations-main.ts +146 -146
- package/src/main/browser/dialogs/modal-notification.ts +110 -110
- 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 +289 -289
- package/src/main/browser/editors-and-documents-main.ts +394 -394
- package/src/main/browser/env-main.ts +87 -87
- package/src/main/browser/file-system-main-impl.ts +263 -263
- 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 +1387 -1387
- package/src/main/browser/main-context.ts +187 -187
- package/src/main/browser/main-file-system-event-service.ts +76 -76
- package/src/main/browser/menus/menus-contribution-handler.ts +162 -162
- package/src/main/browser/menus/plugin-menu-command-adapter.ts +264 -264
- package/src/main/browser/menus/vscode-theia-menu-mappings.ts +91 -91
- package/src/main/browser/message-registry-main.ts +56 -56
- package/src/main/browser/notification-main.ts +86 -86
- 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 +609 -609
- package/src/main/browser/plugin-ext-frontend-module.ts +249 -249
- package/src/main/browser/plugin-ext-widget.tsx +132 -132
- package/src/main/browser/plugin-frontend-contribution.ts +35 -35
- package/src/main/browser/plugin-frontend-view-contribution.ts +38 -38
- package/src/main/browser/plugin-icon-theme-service.ts +585 -585
- package/src/main/browser/plugin-shared-style.ts +133 -133
- 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 +324 -324
- package/src/main/browser/scm-main.ts +453 -453
- package/src/main/browser/secrets-main.ts +82 -82
- package/src/main/browser/selection-provider-command.ts +46 -46
- 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 +85 -85
- package/src/main/browser/style/plugin-sidebar.css +73 -73
- package/src/main/browser/style/test.svg +13 -13
- package/src/main/browser/style/tree.css +52 -52
- package/src/main/browser/style/webview.css +53 -53
- package/src/main/browser/tabs/tabs-main.ts +323 -323
- package/src/main/browser/tasks-main.ts +268 -268
- package/src/main/browser/terminal-main.ts +301 -301
- package/src/main/browser/text-editor-main.ts +463 -463
- package/src/main/browser/text-editor-model-service.ts +102 -102
- package/src/main/browser/text-editors-main.ts +206 -206
- package/src/main/browser/theme-icon-override.ts +252 -252
- package/src/main/browser/theming-main.ts +42 -42
- package/src/main/browser/timeline-main.ts +80 -80
- 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 +885 -885
- package/src/main/browser/view/plugin-view-widget.ts +173 -173
- package/src/main/browser/view/tree-view-decorator-service.ts +51 -51
- package/src/main/browser/view/tree-view-widget.tsx +859 -859
- package/src/main/browser/view/tree-views-main.ts +191 -191
- package/src/main/browser/view/view-context-key-service.ts +77 -77
- package/src/main/browser/view-column-service.ts +125 -125
- 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 +632 -632
- package/src/main/browser/webview/pre/service-worker.js +295 -295
- package/src/main/browser/webview/webview-environment.ts +83 -83
- 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-theme-data-provider.ts +124 -124
- package/src/main/browser/webview/webview-widget-factory.ts +43 -43
- package/src/main/browser/webview/webview.ts +629 -629
- package/src/main/browser/webview-views/webview-views-main.ts +142 -142
- package/src/main/browser/webview-views/webview-views.ts +38 -38
- package/src/main/browser/webviews-main.ts +269 -269
- package/src/main/browser/window-state-main.ts +76 -76
- package/src/main/browser/workspace-main.ts +383 -383
- 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 +70 -70
- package/src/main/node/handlers/plugin-theia-directory-handler.ts +105 -105
- package/src/main/node/handlers/plugin-theia-file-handler.ts +54 -54
- package/src/main/node/paths/const.ts +21 -21
- package/src/main/node/paths/plugin-paths-service.ts +170 -170
- package/src/main/node/plugin-cli-contribution.ts +85 -85
- package/src/main/node/plugin-deployer-contribution.ts +34 -34
- package/src/main/node/plugin-deployer-directory-handler-context-impl.ts +45 -45
- package/src/main/node/plugin-deployer-entry-impl.ts +130 -130
- package/src/main/node/plugin-deployer-file-handler-context-impl.ts +33 -33
- package/src/main/node/plugin-deployer-impl.ts +367 -367
- 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 +93 -93
- package/src/main/node/plugin-github-resolver.ts +148 -148
- package/src/main/node/plugin-http-resolver.ts +91 -91
- package/src/main/node/plugin-localization-backend-contribution.ts +42 -42
- package/src/main/node/plugin-server-handler.ts +69 -69
- package/src/main/node/plugin-service.ts +82 -82
- 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.ts +117 -117
- 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 +27 -27
- 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 +125 -125
- package/src/plugin/clipboard-ext.ts +37 -37
- package/src/plugin/command-registry.ts +218 -218
- package/src/plugin/comments.ts +518 -518
- package/src/plugin/custom-editors.ts +336 -336
- package/src/plugin/debug/debug-ext.ts +487 -487
- 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 +170 -170
- package/src/plugin/env.ts +134 -134
- package/src/plugin/file-system-event-service-ext-impl.ts +256 -256
- package/src/plugin/file-system-ext-impl.ts +412 -412
- package/src/plugin/known-commands.spec.ts +50 -50
- package/src/plugin/known-commands.ts +412 -412
- 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 +179 -179
- 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-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 +79 -79
- 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 +56 -56
- package/src/plugin/languages.ts +969 -969
- package/src/plugin/markdown-string.ts +115 -115
- package/src/plugin/message-registry.ts +65 -65
- package/src/plugin/node/debug/debug.spec.ts +94 -94
- package/src/plugin/node/debug/plugin-node-debug-adapter-creator.ts +167 -167
- package/src/plugin/node/env-node-ext.ts +69 -69
- package/src/plugin/notification.ts +80 -80
- package/src/plugin/output-channel/output-channel-item.ts +73 -73
- package/src/plugin/output-channel-registry.ts +39 -39
- package/src/plugin/path.spec.ts +40 -40
- package/src/plugin/path.ts +68 -68
- package/src/plugin/plugin-context.ts +1387 -1387
- package/src/plugin/plugin-icon-path.ts +50 -50
- package/src/plugin/plugin-manager.ts +446 -446
- package/src/plugin/plugin-storage.ts +120 -120
- package/src/plugin/preference-registry.spec.ts +299 -299
- package/src/plugin/preference-registry.ts +337 -337
- package/src/plugin/prefix-sum-computer.ts +218 -218
- package/src/plugin/quick-open.ts +772 -772
- package/src/plugin/scm.ts +910 -910
- package/src/plugin/secrets-ext.ts +84 -84
- package/src/plugin/status-bar/status-bar-item.ts +193 -193
- package/src/plugin/status-bar-message-registry.ts +103 -103
- package/src/plugin/stubs/tests-api.ts +96 -96
- package/src/plugin/tabs.ts +426 -426
- package/src/plugin/tasks/task-provider.ts +60 -60
- package/src/plugin/tasks/tasks.ts +247 -247
- package/src/plugin/terminal-ext.ts +494 -494
- package/src/plugin/text-editor.ts +522 -522
- package/src/plugin/text-editors.ts +150 -150
- package/src/plugin/theming.ts +73 -73
- package/src/plugin/timeline.ts +186 -186
- package/src/plugin/tree/tree-views.ts +612 -612
- package/src/plugin/type-converters.spec.ts +476 -476
- package/src/plugin/type-converters.ts +1350 -1350
- package/src/plugin/types-impl.spec.ts +85 -85
- package/src/plugin/types-impl.ts +3407 -3407
- package/src/plugin/webview-views.ts +213 -213
- package/src/plugin/webviews.ts +433 -433
- package/src/plugin/window-state.ts +68 -68
- package/src/plugin/word-helper.ts +162 -162
- package/src/plugin/workspace.ts +448 -448
- 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/src/typings/index.d.ts +25 -25
package/src/plugin/quick-open.ts
CHANGED
|
@@ -1,772 +1,772 @@
|
|
|
1
|
-
// *****************************************************************************
|
|
2
|
-
// Copyright (C) 2018 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 WITH Classpath-exception-2.0
|
|
15
|
-
// *****************************************************************************
|
|
16
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
17
|
-
import {
|
|
18
|
-
QuickOpenExt, PLUGIN_RPC_CONTEXT as Ext, QuickOpenMain, TransferInputBox, Plugin,
|
|
19
|
-
Item, TransferQuickInputButton, TransferQuickPickItems, TransferQuickInput
|
|
20
|
-
} from '../common/plugin-api-rpc';
|
|
21
|
-
import * as theia from '@theia/plugin';
|
|
22
|
-
import { CancellationToken } from '@theia/core/lib/common/cancellation';
|
|
23
|
-
import { RPCProtocol } from '../common/rpc-protocol';
|
|
24
|
-
import { Emitter, Event } from '@theia/core/lib/common/event';
|
|
25
|
-
import { DisposableCollection } from '@theia/core/lib/common/disposable';
|
|
26
|
-
import { InputBoxValidationSeverity, QuickInputButtons, QuickPickItemKind, ThemeIcon } from './types-impl';
|
|
27
|
-
import { URI } from '@theia/core/shared/vscode-uri';
|
|
28
|
-
import * as path from 'path';
|
|
29
|
-
import { convertToTransferQuickPickItems } from './type-converters';
|
|
30
|
-
import { PluginPackage } from '../common/plugin-protocol';
|
|
31
|
-
import { QuickInputButtonHandle } from '@theia/core/lib/browser';
|
|
32
|
-
import { MaybePromise } from '@theia/core/lib/common/types';
|
|
33
|
-
import Severity from '@theia/monaco-editor-core/esm/vs/base/common/severity';
|
|
34
|
-
import { ThemeIcon as MonacoThemeIcon } from '@theia/monaco-editor-core/esm/vs/platform/theme/common/themeService';
|
|
35
|
-
|
|
36
|
-
const canceledName = 'Canceled';
|
|
37
|
-
/**
|
|
38
|
-
* Checks if the given error is a promise in canceled state
|
|
39
|
-
*/
|
|
40
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
41
|
-
export function isPromiseCanceledError(error: any): boolean {
|
|
42
|
-
return error instanceof Error && error.name === canceledName && error.message === canceledName;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
export function getIconUris(iconPath: theia.QuickInputButton['iconPath']): { dark: URI, light: URI } | { id: string } {
|
|
46
|
-
if (ThemeIcon.is(iconPath)) {
|
|
47
|
-
return { id: iconPath.id };
|
|
48
|
-
}
|
|
49
|
-
const dark = getDarkIconUri(iconPath as URI | { light: URI; dark: URI; });
|
|
50
|
-
const light = getLightIconUri(iconPath as URI | { light: URI; dark: URI; });
|
|
51
|
-
// Tolerate strings: https://github.com/microsoft/vscode/issues/110432#issuecomment-726144556
|
|
52
|
-
return {
|
|
53
|
-
dark: typeof dark === 'string' ? URI.file(dark) : dark,
|
|
54
|
-
light: typeof light === 'string' ? URI.file(light) : light
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
export function getLightIconUri(iconPath: URI | { light: URI; dark: URI; }): URI {
|
|
59
|
-
return typeof iconPath === 'object' && 'light' in iconPath ? iconPath.light : iconPath;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
export function getDarkIconUri(iconPath: URI | { light: URI; dark: URI; }): URI {
|
|
63
|
-
return typeof iconPath === 'object' && 'dark' in iconPath ? iconPath.dark : iconPath;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
export function getIconPathOrClass(button: theia.QuickInputButton): { iconPath: { dark: URI; light?: URI | undefined; } | undefined; iconClass: string | undefined; } {
|
|
67
|
-
const iconPathOrIconClass = getIconUris(button.iconPath);
|
|
68
|
-
let iconPath: { dark: URI; light?: URI | undefined } | undefined;
|
|
69
|
-
let iconClass: string | undefined;
|
|
70
|
-
if ('id' in iconPathOrIconClass) {
|
|
71
|
-
iconClass = MonacoThemeIcon.asClassName(iconPathOrIconClass);
|
|
72
|
-
} else {
|
|
73
|
-
iconPath = iconPathOrIconClass;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
return {
|
|
77
|
-
iconPath,
|
|
78
|
-
iconClass
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
export class QuickOpenExtImpl implements QuickOpenExt {
|
|
83
|
-
private proxy: QuickOpenMain;
|
|
84
|
-
private onDidSelectItem: undefined | ((handle: number) => void);
|
|
85
|
-
private validateInputHandler?: (input: string) => MaybePromise<string | theia.InputBoxValidationMessage | null | undefined>;
|
|
86
|
-
private _sessions = new Map<number, QuickInputExt>(); // Each quickinput will have a number so that we know where to fire events
|
|
87
|
-
private _instances = 0;
|
|
88
|
-
|
|
89
|
-
constructor(rpc: RPCProtocol) {
|
|
90
|
-
this.proxy = rpc.getProxy(Ext.QUICK_OPEN_MAIN);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
/* eslint-disable max-len */
|
|
94
|
-
showQuickPick(itemsOrItemsPromise: Array<theia.QuickPickItem> | Promise<Array<theia.QuickPickItem>>, options: theia.QuickPickOptions & { canPickMany: true; }, token?: theia.CancellationToken): Promise<Array<theia.QuickPickItem> | undefined>;
|
|
95
|
-
showQuickPick(itemsOrItemsPromise: string[] | Promise<string[]>, options?: theia.QuickPickOptions, token?: theia.CancellationToken): Promise<string | undefined>;
|
|
96
|
-
showQuickPick(itemsOrItemsPromise: Array<theia.QuickPickItem> | Promise<Array<theia.QuickPickItem>>, options?: theia.QuickPickOptions, token?: theia.CancellationToken): Promise<theia.QuickPickItem | undefined>;
|
|
97
|
-
showQuickPick(itemsOrItemsPromise: Item[] | Promise<Item[]>, options?: theia.QuickPickOptions, token: theia.CancellationToken = CancellationToken.None): Promise<Item | Item[] | undefined> {
|
|
98
|
-
this.onDidSelectItem = undefined;
|
|
99
|
-
|
|
100
|
-
const itemsPromise = <Promise<Item[]>>Promise.resolve(itemsOrItemsPromise);
|
|
101
|
-
|
|
102
|
-
const instance = ++this._instances;
|
|
103
|
-
|
|
104
|
-
const widgetPromise = this.proxy.$show(instance, {
|
|
105
|
-
title: options && options.title,
|
|
106
|
-
canPickMany: options && options.canPickMany,
|
|
107
|
-
placeHolder: options && options.placeHolder,
|
|
108
|
-
matchOnDescription: options && options.matchOnDescription,
|
|
109
|
-
matchOnDetail: options && options.matchOnDetail,
|
|
110
|
-
ignoreFocusLost: options && options.ignoreFocusOut
|
|
111
|
-
}, token);
|
|
112
|
-
|
|
113
|
-
const widgetClosedMarker = {};
|
|
114
|
-
const widgetClosedPromise = widgetPromise.then(() => widgetClosedMarker);
|
|
115
|
-
|
|
116
|
-
return Promise.race([widgetClosedPromise, itemsPromise]).then(result => {
|
|
117
|
-
if (result === widgetClosedMarker) {
|
|
118
|
-
return undefined;
|
|
119
|
-
}
|
|
120
|
-
return itemsPromise.then(async items => {
|
|
121
|
-
const pickItems: Array<TransferQuickPickItems> = convertToTransferQuickPickItems(items);
|
|
122
|
-
|
|
123
|
-
if (options && typeof options.onDidSelectItem === 'function') {
|
|
124
|
-
this.onDidSelectItem = handle => {
|
|
125
|
-
options.onDidSelectItem!(items[handle]);
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
this.proxy.$setItems(instance, pickItems);
|
|
130
|
-
|
|
131
|
-
return widgetPromise.then(handle => {
|
|
132
|
-
if (typeof handle === 'number') {
|
|
133
|
-
if (options && options.canPickMany) {
|
|
134
|
-
return Array.of(items[handle]);
|
|
135
|
-
} else {
|
|
136
|
-
return items[handle];
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
} else if (Array.isArray(handle)) {
|
|
140
|
-
return handle.map(h => items[h]);
|
|
141
|
-
}
|
|
142
|
-
return undefined;
|
|
143
|
-
});
|
|
144
|
-
});
|
|
145
|
-
}).then(undefined, err => {
|
|
146
|
-
if (isPromiseCanceledError(err)) {
|
|
147
|
-
return undefined;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
this.proxy.$setError(instance, err);
|
|
151
|
-
|
|
152
|
-
return Promise.reject(err);
|
|
153
|
-
});
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
$onItemSelected(handle: number): void {
|
|
157
|
-
if (this.onDidSelectItem) {
|
|
158
|
-
this.onDidSelectItem(handle);
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
// ---- input
|
|
163
|
-
|
|
164
|
-
showInput(options?: theia.InputBoxOptions, token: theia.CancellationToken = CancellationToken.None): PromiseLike<string | undefined> {
|
|
165
|
-
this.validateInputHandler = options?.validateInput;
|
|
166
|
-
if (!options) { options = { placeHolder: '' }; }
|
|
167
|
-
return this.proxy.$input(options, typeof this.validateInputHandler === 'function', token);
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
async showInputBox(options: TransferInputBox): Promise<string | undefined> {
|
|
171
|
-
this.validateInputHandler = typeof options.validateInput === 'function' ? options.validateInput : undefined;
|
|
172
|
-
return this.proxy.$showInputBox(options, typeof this.validateInputHandler === 'function');
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
async $validateInput(input: string): Promise<string | { content: string; severity: Severity; } | null | undefined> {
|
|
176
|
-
if (!this.validateInputHandler) {
|
|
177
|
-
return;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
const result = await this.validateInputHandler(input);
|
|
181
|
-
if (!result || typeof result === 'string') {
|
|
182
|
-
return result;
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
let severity: Severity;
|
|
186
|
-
switch (result.severity) {
|
|
187
|
-
case InputBoxValidationSeverity.Info:
|
|
188
|
-
severity = Severity.Info;
|
|
189
|
-
break;
|
|
190
|
-
case InputBoxValidationSeverity.Warning:
|
|
191
|
-
severity = Severity.Warning;
|
|
192
|
-
break;
|
|
193
|
-
case InputBoxValidationSeverity.Error:
|
|
194
|
-
severity = Severity.Error;
|
|
195
|
-
break;
|
|
196
|
-
default:
|
|
197
|
-
severity = result.message ? Severity.Error : Severity.Ignore;
|
|
198
|
-
break;
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
return {
|
|
202
|
-
content: result.message,
|
|
203
|
-
severity
|
|
204
|
-
};
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
// ---- QuickInput
|
|
208
|
-
|
|
209
|
-
createQuickPick<T extends theia.QuickPickItem>(plugin: Plugin): theia.QuickPick<T> {
|
|
210
|
-
const session: any = new QuickPickExt<T>(this, this.proxy, plugin, () => this._sessions.delete(session._id));
|
|
211
|
-
this._sessions.set(session._id, session);
|
|
212
|
-
return session;
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
createInputBox(plugin: Plugin): theia.InputBox {
|
|
216
|
-
const session: any = new InputBoxExt(this, this.proxy, plugin, () => this._sessions.delete(session._id));
|
|
217
|
-
this._sessions.set(session._id, session);
|
|
218
|
-
return session;
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
hide(): void {
|
|
222
|
-
this.proxy.$hide();
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
async $acceptOnDidAccept(sessionId: number): Promise<void> {
|
|
226
|
-
const session = this._sessions.get(sessionId);
|
|
227
|
-
if (session) {
|
|
228
|
-
session._fireAccept();
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
async $acceptDidChangeValue(sessionId: number, changedValue: string): Promise<void> {
|
|
233
|
-
const session = this._sessions.get(sessionId);
|
|
234
|
-
if (session) {
|
|
235
|
-
session._fireChangedValue(changedValue);
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
async $acceptOnDidHide(sessionId: number): Promise<void> {
|
|
240
|
-
const session = this._sessions.get(sessionId);
|
|
241
|
-
if (session) {
|
|
242
|
-
session._fireHide();
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
async $acceptOnDidTriggerButton(sessionId: number, btn: QuickInputButtonHandle): Promise<void> {
|
|
247
|
-
const session = this._sessions.get(sessionId);
|
|
248
|
-
if (session) {
|
|
249
|
-
if (btn.index === -1) {
|
|
250
|
-
session._fireButtonTrigger(QuickInputButtons.Back);
|
|
251
|
-
} else if (session && (session instanceof InputBoxExt || session instanceof QuickPickExt)) {
|
|
252
|
-
const btnFromIndex = session.buttons[btn.index];
|
|
253
|
-
session._fireButtonTrigger(btnFromIndex as theia.QuickInputButton);
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
$onDidChangeActive(sessionId: number, handles: number[]): void {
|
|
259
|
-
const session = this._sessions.get(sessionId);
|
|
260
|
-
if (session instanceof QuickPickExt) {
|
|
261
|
-
session._fireDidChangeActive(handles);
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
$onDidChangeSelection(sessionId: number, handles: number[]): void {
|
|
266
|
-
const session = this._sessions.get(sessionId);
|
|
267
|
-
if (session instanceof QuickPickExt) {
|
|
268
|
-
session._fireDidChangeSelection(handles);
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
$onDidTriggerItemButton(sessionId: number, itemHandle: number, buttonHandle: number): void {
|
|
273
|
-
const session = this._sessions.get(sessionId);
|
|
274
|
-
if (session instanceof QuickPickExt) {
|
|
275
|
-
session._fireDidTriggerItemButton(itemHandle, buttonHandle);
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
export class QuickInputExt implements theia.QuickInput {
|
|
282
|
-
|
|
283
|
-
private static _nextId = 1;
|
|
284
|
-
_id = QuickInputExt._nextId++;
|
|
285
|
-
|
|
286
|
-
private _busy: boolean;
|
|
287
|
-
private _enabled: boolean;
|
|
288
|
-
private _ignoreFocusOut: boolean;
|
|
289
|
-
private _step: number | undefined;
|
|
290
|
-
private _title: string | undefined;
|
|
291
|
-
private _totalSteps: number | undefined;
|
|
292
|
-
private _value: string;
|
|
293
|
-
private _placeholder: string | undefined;
|
|
294
|
-
private _buttons: theia.QuickInputButton[] = [];
|
|
295
|
-
private _handlesToButtons = new Map<number, theia.QuickInputButton>();
|
|
296
|
-
protected expectingHide = false;
|
|
297
|
-
protected visible: boolean;
|
|
298
|
-
private _disposed = false;
|
|
299
|
-
protected disposableCollection: DisposableCollection;
|
|
300
|
-
|
|
301
|
-
private onDidAcceptEmitter: Emitter<void>;
|
|
302
|
-
/**
|
|
303
|
-
* it has to be named `_onDidChangeValueEmitter`, since Gitlens extension relies on it
|
|
304
|
-
* https://github.com/eamodio/vscode-gitlens/blob/f22a9cd4199ac498c217643282a6a412e1fc01ae/src/commands/gitCommands.ts#L242-L243
|
|
305
|
-
*/
|
|
306
|
-
private _onDidChangeValueEmitter: Emitter<string>;
|
|
307
|
-
private onDidHideEmitter: Emitter<void>;
|
|
308
|
-
private onDidTriggerButtonEmitter: Emitter<theia.QuickInputButton>;
|
|
309
|
-
private _updateTimeout: any;
|
|
310
|
-
private _pendingUpdate: TransferQuickInput = { id: this._id };
|
|
311
|
-
|
|
312
|
-
constructor(readonly quickOpen: QuickOpenExtImpl, readonly quickOpenMain: QuickOpenMain, readonly plugin: Plugin, private _onDidDispose: () => void) {
|
|
313
|
-
this.title = undefined;
|
|
314
|
-
this.step = undefined;
|
|
315
|
-
this.totalSteps = undefined;
|
|
316
|
-
this.enabled = true;
|
|
317
|
-
this.busy = false;
|
|
318
|
-
this.ignoreFocusOut = false;
|
|
319
|
-
this.value = '';
|
|
320
|
-
|
|
321
|
-
this.visible = false;
|
|
322
|
-
|
|
323
|
-
this.disposableCollection = new DisposableCollection();
|
|
324
|
-
this.disposableCollection.push(this.onDidAcceptEmitter = new Emitter());
|
|
325
|
-
this.disposableCollection.push(this._onDidChangeValueEmitter = new Emitter());
|
|
326
|
-
this.disposableCollection.push(this.onDidHideEmitter = new Emitter());
|
|
327
|
-
this.disposableCollection.push(this.onDidTriggerButtonEmitter = new Emitter());
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
get title(): string | undefined {
|
|
331
|
-
return this._title;
|
|
332
|
-
}
|
|
333
|
-
|
|
334
|
-
set title(title: string | undefined) {
|
|
335
|
-
this._title = title;
|
|
336
|
-
this.update({ title });
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
get step(): number | undefined {
|
|
340
|
-
return this._step;
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
set step(step: number | undefined) {
|
|
344
|
-
this._step = step;
|
|
345
|
-
this.update({ step });
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
get totalSteps(): number | undefined {
|
|
349
|
-
return this._totalSteps;
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
set totalSteps(totalSteps: number | undefined) {
|
|
353
|
-
this._totalSteps = totalSteps;
|
|
354
|
-
this.update({ totalSteps });
|
|
355
|
-
}
|
|
356
|
-
|
|
357
|
-
get enabled(): boolean {
|
|
358
|
-
return this._enabled;
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
set enabled(enabled: boolean) {
|
|
362
|
-
this._enabled = enabled;
|
|
363
|
-
this.update({ enabled });
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
get busy(): boolean {
|
|
367
|
-
return this._busy;
|
|
368
|
-
}
|
|
369
|
-
|
|
370
|
-
set busy(busy: boolean) {
|
|
371
|
-
this._busy = busy;
|
|
372
|
-
this.update({ busy });
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
get ignoreFocusOut(): boolean {
|
|
376
|
-
return this._ignoreFocusOut;
|
|
377
|
-
}
|
|
378
|
-
|
|
379
|
-
set ignoreFocusOut(ignoreFocusOut: boolean) {
|
|
380
|
-
this._ignoreFocusOut = ignoreFocusOut;
|
|
381
|
-
this.update({ ignoreFocusOut });
|
|
382
|
-
}
|
|
383
|
-
|
|
384
|
-
get value(): string {
|
|
385
|
-
return this._value;
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
set value(value: string) {
|
|
389
|
-
this._value = value;
|
|
390
|
-
this.update({ value });
|
|
391
|
-
}
|
|
392
|
-
|
|
393
|
-
get placeholder(): string | undefined {
|
|
394
|
-
return this._placeholder;
|
|
395
|
-
}
|
|
396
|
-
|
|
397
|
-
set placeholder(placeholder: string | undefined) {
|
|
398
|
-
this._placeholder = placeholder;
|
|
399
|
-
this.update({ placeholder });
|
|
400
|
-
}
|
|
401
|
-
|
|
402
|
-
get buttons(): theia.QuickInputButton[] {
|
|
403
|
-
return this._buttons;
|
|
404
|
-
}
|
|
405
|
-
|
|
406
|
-
set buttons(buttons: theia.QuickInputButton[]) {
|
|
407
|
-
this._buttons = buttons.slice();
|
|
408
|
-
this._handlesToButtons.clear();
|
|
409
|
-
buttons.forEach((button, i) => {
|
|
410
|
-
const handle = button === QuickInputButtons.Back ? -1 : i;
|
|
411
|
-
this._handlesToButtons.set(handle, button);
|
|
412
|
-
});
|
|
413
|
-
this.update({
|
|
414
|
-
buttons: buttons.map<TransferQuickInputButton>((button, i) => ({
|
|
415
|
-
iconPath: getIconUris(button.iconPath),
|
|
416
|
-
iconClass: ThemeIcon.is(button.iconPath) ? MonacoThemeIcon.asClassName(button.iconPath) : undefined,
|
|
417
|
-
tooltip: button.tooltip,
|
|
418
|
-
handle: button === QuickInputButtons.Back ? -1 : i,
|
|
419
|
-
}))
|
|
420
|
-
});
|
|
421
|
-
}
|
|
422
|
-
|
|
423
|
-
show(): void {
|
|
424
|
-
this.visible = true;
|
|
425
|
-
this.expectingHide = true;
|
|
426
|
-
this.update({ visible: true });
|
|
427
|
-
}
|
|
428
|
-
|
|
429
|
-
dispose(): void {
|
|
430
|
-
if (this._disposed) {
|
|
431
|
-
return;
|
|
432
|
-
}
|
|
433
|
-
this._disposed = true;
|
|
434
|
-
this._fireHide();
|
|
435
|
-
this.disposableCollection.dispose();
|
|
436
|
-
this._onDidDispose();
|
|
437
|
-
this.quickOpenMain.$dispose(this._id);
|
|
438
|
-
}
|
|
439
|
-
|
|
440
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
441
|
-
protected update(properties: Record<string, any>): void {
|
|
442
|
-
if (this._disposed) {
|
|
443
|
-
return;
|
|
444
|
-
}
|
|
445
|
-
for (const key of Object.keys(properties)) {
|
|
446
|
-
const value = properties[key];
|
|
447
|
-
this._pendingUpdate[key] = value === undefined ? null : value;
|
|
448
|
-
}
|
|
449
|
-
|
|
450
|
-
if ('visible' in this._pendingUpdate) {
|
|
451
|
-
if (this._updateTimeout) {
|
|
452
|
-
clearTimeout(this._updateTimeout);
|
|
453
|
-
this._updateTimeout = undefined;
|
|
454
|
-
}
|
|
455
|
-
this.dispatchUpdate();
|
|
456
|
-
} else if (this.visible && !this._updateTimeout) {
|
|
457
|
-
// Defer the update so that multiple changes to setters dont cause a redraw each
|
|
458
|
-
this._updateTimeout = setTimeout(() => {
|
|
459
|
-
this._updateTimeout = undefined;
|
|
460
|
-
this.dispatchUpdate();
|
|
461
|
-
}, 0);
|
|
462
|
-
}
|
|
463
|
-
}
|
|
464
|
-
|
|
465
|
-
private dispatchUpdate(): void {
|
|
466
|
-
this.quickOpenMain.$createOrUpdate(this._pendingUpdate);
|
|
467
|
-
this._pendingUpdate = { id: this._id };
|
|
468
|
-
}
|
|
469
|
-
|
|
470
|
-
hide(): void {
|
|
471
|
-
this.quickOpenMain.$hide();
|
|
472
|
-
this.dispose();
|
|
473
|
-
}
|
|
474
|
-
|
|
475
|
-
protected convertURL(iconPath: URI | { light: string | URI; dark: string | URI } | ThemeIcon):
|
|
476
|
-
URI | { light: string | URI; dark: string | URI } | ThemeIcon {
|
|
477
|
-
const toUrl = (arg: string | URI) => {
|
|
478
|
-
arg = arg instanceof URI && arg.scheme === 'file' ? arg.fsPath : arg;
|
|
479
|
-
if (typeof arg !== 'string') {
|
|
480
|
-
return arg.toString(true);
|
|
481
|
-
}
|
|
482
|
-
const { packagePath } = this.plugin.rawModel;
|
|
483
|
-
const absolutePath = path.isAbsolute(arg) ? arg : path.join(packagePath, arg);
|
|
484
|
-
const normalizedPath = path.normalize(absolutePath);
|
|
485
|
-
const relativePath = path.relative(packagePath, normalizedPath);
|
|
486
|
-
return PluginPackage.toPluginUrl(this.plugin.rawModel, relativePath);
|
|
487
|
-
};
|
|
488
|
-
if (ThemeIcon.is(iconPath)) {
|
|
489
|
-
return iconPath;
|
|
490
|
-
} else if (typeof iconPath === 'string' || iconPath instanceof URI) {
|
|
491
|
-
return URI.parse(toUrl(iconPath));
|
|
492
|
-
} else {
|
|
493
|
-
const { light, dark } = iconPath as { light: string | URI, dark: string | URI };
|
|
494
|
-
return {
|
|
495
|
-
light: toUrl(light),
|
|
496
|
-
dark: toUrl(dark)
|
|
497
|
-
};
|
|
498
|
-
}
|
|
499
|
-
}
|
|
500
|
-
|
|
501
|
-
_fireAccept(): void {
|
|
502
|
-
this.onDidAcceptEmitter.fire(undefined);
|
|
503
|
-
}
|
|
504
|
-
|
|
505
|
-
_fireChangedValue(changedValue: string): void {
|
|
506
|
-
this._value = changedValue;
|
|
507
|
-
this._onDidChangeValueEmitter.fire(changedValue);
|
|
508
|
-
}
|
|
509
|
-
|
|
510
|
-
_fireHide(): void {
|
|
511
|
-
if (this.expectingHide) {
|
|
512
|
-
this.expectingHide = false;
|
|
513
|
-
this.onDidHideEmitter.fire(undefined);
|
|
514
|
-
}
|
|
515
|
-
}
|
|
516
|
-
|
|
517
|
-
_fireButtonTrigger(btn: theia.QuickInputButton): void {
|
|
518
|
-
this.onDidTriggerButtonEmitter.fire(btn);
|
|
519
|
-
}
|
|
520
|
-
|
|
521
|
-
get onDidHide(): Event<void> {
|
|
522
|
-
return this.onDidHideEmitter.event;
|
|
523
|
-
}
|
|
524
|
-
|
|
525
|
-
get onDidAccept(): Event<void> {
|
|
526
|
-
return this.onDidAcceptEmitter.event;
|
|
527
|
-
}
|
|
528
|
-
|
|
529
|
-
get onDidChangeValue(): Event<string> {
|
|
530
|
-
return this._onDidChangeValueEmitter.event;
|
|
531
|
-
}
|
|
532
|
-
|
|
533
|
-
get onDidTriggerButton(): Event<theia.QuickInputButton> {
|
|
534
|
-
return this.onDidTriggerButtonEmitter.event;
|
|
535
|
-
}
|
|
536
|
-
}
|
|
537
|
-
|
|
538
|
-
/**
|
|
539
|
-
* Base implementation of {@link InputBox} that uses {@link QuickOpenExt}.
|
|
540
|
-
* Missing functionality is going to be implemented in the scope of https://github.com/eclipse-theia/theia/issues/5109
|
|
541
|
-
*/
|
|
542
|
-
export class InputBoxExt extends QuickInputExt implements theia.InputBox {
|
|
543
|
-
|
|
544
|
-
private _password: boolean;
|
|
545
|
-
private _prompt: string | undefined;
|
|
546
|
-
private _valueSelection: readonly [number, number] | undefined;
|
|
547
|
-
private _validationMessage: string | undefined;
|
|
548
|
-
|
|
549
|
-
constructor(
|
|
550
|
-
override readonly quickOpen: QuickOpenExtImpl,
|
|
551
|
-
override readonly quickOpenMain: QuickOpenMain,
|
|
552
|
-
override readonly plugin: Plugin,
|
|
553
|
-
onDispose: () => void
|
|
554
|
-
) {
|
|
555
|
-
super(quickOpen, quickOpenMain, plugin, onDispose);
|
|
556
|
-
|
|
557
|
-
this.buttons = [];
|
|
558
|
-
this.password = false;
|
|
559
|
-
this.value = '';
|
|
560
|
-
}
|
|
561
|
-
|
|
562
|
-
get password(): boolean {
|
|
563
|
-
return this._password;
|
|
564
|
-
}
|
|
565
|
-
|
|
566
|
-
set password(password: boolean) {
|
|
567
|
-
this._password = password;
|
|
568
|
-
this.update({ password });
|
|
569
|
-
}
|
|
570
|
-
|
|
571
|
-
get prompt(): string | undefined {
|
|
572
|
-
return this._prompt;
|
|
573
|
-
}
|
|
574
|
-
|
|
575
|
-
set prompt(prompt: string | undefined) {
|
|
576
|
-
this._prompt = prompt;
|
|
577
|
-
this.update({ prompt });
|
|
578
|
-
}
|
|
579
|
-
|
|
580
|
-
get valueSelection(): readonly [number, number] | undefined {
|
|
581
|
-
return this._valueSelection;
|
|
582
|
-
}
|
|
583
|
-
|
|
584
|
-
set valueSelection(valueSelection: readonly [number, number] | undefined) {
|
|
585
|
-
this._valueSelection = valueSelection;
|
|
586
|
-
this.update({ valueSelection });
|
|
587
|
-
}
|
|
588
|
-
|
|
589
|
-
get validationMessage(): string | undefined {
|
|
590
|
-
return this._validationMessage;
|
|
591
|
-
}
|
|
592
|
-
|
|
593
|
-
set validationMessage(validationMessage: string | undefined) {
|
|
594
|
-
if (this._validationMessage !== validationMessage) {
|
|
595
|
-
this._validationMessage = validationMessage;
|
|
596
|
-
this.update({ validationMessage });
|
|
597
|
-
}
|
|
598
|
-
}
|
|
599
|
-
}
|
|
600
|
-
|
|
601
|
-
/**
|
|
602
|
-
* Base implementation of {@link QuickPick} that uses {@link QuickOpenExt}.
|
|
603
|
-
* Missing functionality is going to be implemented in the scope of https://github.com/eclipse-theia/theia/issues/5059
|
|
604
|
-
*/
|
|
605
|
-
export class QuickPickExt<T extends theia.QuickPickItem> extends QuickInputExt implements theia.QuickPick<T> {
|
|
606
|
-
private _items: T[] = [];
|
|
607
|
-
private _handlesToItems = new Map<number, T>();
|
|
608
|
-
private _itemsToHandles = new Map<T, number>();
|
|
609
|
-
private _canSelectMany = false;
|
|
610
|
-
private _matchOnDescription = true;
|
|
611
|
-
private _matchOnDetail = true;
|
|
612
|
-
private _sortByLabel = true;
|
|
613
|
-
private _keepScrollPosition = false;
|
|
614
|
-
private _activeItems: T[] = [];
|
|
615
|
-
private _selectedItems: T[] = [];
|
|
616
|
-
private readonly _onDidChangeActiveEmitter = new Emitter<T[]>();
|
|
617
|
-
private readonly _onDidChangeSelectionEmitter = new Emitter<T[]>();
|
|
618
|
-
private readonly _onDidTriggerItemButtonEmitter = new Emitter<theia.QuickPickItemButtonEvent<T>>();
|
|
619
|
-
|
|
620
|
-
constructor(
|
|
621
|
-
override readonly quickOpen: QuickOpenExtImpl,
|
|
622
|
-
override readonly quickOpenMain: QuickOpenMain,
|
|
623
|
-
override readonly plugin: Plugin,
|
|
624
|
-
onDispose: () => void
|
|
625
|
-
) {
|
|
626
|
-
super(quickOpen, quickOpenMain, plugin, onDispose);
|
|
627
|
-
this.buttons = [];
|
|
628
|
-
|
|
629
|
-
this.disposableCollection.push(this._onDidChangeActiveEmitter);
|
|
630
|
-
this.disposableCollection.push(this._onDidChangeSelectionEmitter);
|
|
631
|
-
this.disposableCollection.push(this._onDidTriggerItemButtonEmitter);
|
|
632
|
-
|
|
633
|
-
this.update({ type: 'quickPick' });
|
|
634
|
-
}
|
|
635
|
-
|
|
636
|
-
get items(): T[] {
|
|
637
|
-
return this._items;
|
|
638
|
-
}
|
|
639
|
-
|
|
640
|
-
set items(items: T[]) {
|
|
641
|
-
this._items = items.slice();
|
|
642
|
-
this._handlesToItems.clear();
|
|
643
|
-
this._itemsToHandles.clear();
|
|
644
|
-
items.forEach((item, i) => {
|
|
645
|
-
this._handlesToItems.set(i, item);
|
|
646
|
-
this._itemsToHandles.set(item, i);
|
|
647
|
-
});
|
|
648
|
-
|
|
649
|
-
const pickItems: TransferQuickPickItems[] = [];
|
|
650
|
-
for (let handle = 0; handle < items.length; handle++) {
|
|
651
|
-
const item = items[handle];
|
|
652
|
-
if (item.kind === QuickPickItemKind.Separator) {
|
|
653
|
-
pickItems.push({ type: 'separator', label: item.label, handle });
|
|
654
|
-
} else {
|
|
655
|
-
pickItems.push({
|
|
656
|
-
kind: item.kind,
|
|
657
|
-
label: item.label,
|
|
658
|
-
description: item.description,
|
|
659
|
-
handle,
|
|
660
|
-
detail: item.detail,
|
|
661
|
-
picked: item.picked,
|
|
662
|
-
alwaysShow: item.alwaysShow,
|
|
663
|
-
buttons: item.buttons?.map<TransferQuickInputButton>((button, index) => ({
|
|
664
|
-
iconPath: getIconUris(button.iconPath),
|
|
665
|
-
iconClass: ThemeIcon.is(button.iconPath) ? MonacoThemeIcon.asClassName(button.iconPath) : undefined,
|
|
666
|
-
tooltip: button.tooltip,
|
|
667
|
-
handle: button === QuickInputButtons.Back ? -1 : index,
|
|
668
|
-
}))
|
|
669
|
-
});
|
|
670
|
-
}
|
|
671
|
-
}
|
|
672
|
-
|
|
673
|
-
this.update({
|
|
674
|
-
items: pickItems,
|
|
675
|
-
});
|
|
676
|
-
}
|
|
677
|
-
|
|
678
|
-
get canSelectMany(): boolean {
|
|
679
|
-
return this._canSelectMany;
|
|
680
|
-
}
|
|
681
|
-
|
|
682
|
-
set canSelectMany(canSelectMany: boolean) {
|
|
683
|
-
this._canSelectMany = canSelectMany;
|
|
684
|
-
this.update({ canSelectMany });
|
|
685
|
-
}
|
|
686
|
-
|
|
687
|
-
get matchOnDescription(): boolean {
|
|
688
|
-
return this._matchOnDescription;
|
|
689
|
-
}
|
|
690
|
-
|
|
691
|
-
set matchOnDescription(matchOnDescription: boolean) {
|
|
692
|
-
this._matchOnDescription = matchOnDescription;
|
|
693
|
-
this.update({ matchOnDescription });
|
|
694
|
-
}
|
|
695
|
-
|
|
696
|
-
get matchOnDetail(): boolean {
|
|
697
|
-
return this._matchOnDetail;
|
|
698
|
-
}
|
|
699
|
-
|
|
700
|
-
set matchOnDetail(matchOnDetail: boolean) {
|
|
701
|
-
this._matchOnDetail = matchOnDetail;
|
|
702
|
-
this.update({ matchOnDetail });
|
|
703
|
-
}
|
|
704
|
-
|
|
705
|
-
get sortByLabel(): boolean {
|
|
706
|
-
return this._sortByLabel;
|
|
707
|
-
}
|
|
708
|
-
|
|
709
|
-
set sortByLabel(sortByLabel: boolean) {
|
|
710
|
-
this._sortByLabel = sortByLabel;
|
|
711
|
-
this.update({ sortByLabel });
|
|
712
|
-
}
|
|
713
|
-
|
|
714
|
-
get keepScrollPosition(): boolean {
|
|
715
|
-
return this._keepScrollPosition;
|
|
716
|
-
}
|
|
717
|
-
|
|
718
|
-
set keepScrollPosition(keepScrollPosition: boolean) {
|
|
719
|
-
this._keepScrollPosition = keepScrollPosition;
|
|
720
|
-
this.update({ keepScrollPosition });
|
|
721
|
-
}
|
|
722
|
-
|
|
723
|
-
get activeItems(): T[] {
|
|
724
|
-
return this._activeItems;
|
|
725
|
-
}
|
|
726
|
-
|
|
727
|
-
set activeItems(activeItems: T[]) {
|
|
728
|
-
this._activeItems = activeItems.filter(item => this._itemsToHandles.has(item));
|
|
729
|
-
this.update({ activeItems: this._activeItems.map(item => this._itemsToHandles.get(item)) });
|
|
730
|
-
}
|
|
731
|
-
|
|
732
|
-
onDidChangeActive = this._onDidChangeActiveEmitter.event;
|
|
733
|
-
|
|
734
|
-
get selectedItems(): T[] {
|
|
735
|
-
return this._selectedItems;
|
|
736
|
-
}
|
|
737
|
-
|
|
738
|
-
set selectedItems(selectedItems: T[]) {
|
|
739
|
-
this._selectedItems = selectedItems.filter(item => this._itemsToHandles.has(item));
|
|
740
|
-
this.update({ selectedItems: this._selectedItems.map(item => this._itemsToHandles.get(item)) });
|
|
741
|
-
}
|
|
742
|
-
|
|
743
|
-
onDidChangeSelection = this._onDidChangeSelectionEmitter.event;
|
|
744
|
-
|
|
745
|
-
_fireDidChangeActive(handles: number[]): void {
|
|
746
|
-
const items = handles.map(handle => this._handlesToItems.get(handle)).filter(e => !!e) as T[];
|
|
747
|
-
this._activeItems = items;
|
|
748
|
-
this._onDidChangeActiveEmitter.fire(items);
|
|
749
|
-
}
|
|
750
|
-
|
|
751
|
-
_fireDidChangeSelection(handles: number[]): void {
|
|
752
|
-
const items = handles.map(handle => this._handlesToItems.get(handle)).filter(e => !!e) as T[];
|
|
753
|
-
this._selectedItems = items;
|
|
754
|
-
this._onDidChangeSelectionEmitter.fire(items);
|
|
755
|
-
}
|
|
756
|
-
|
|
757
|
-
onDidTriggerItemButton = this._onDidTriggerItemButtonEmitter.event;
|
|
758
|
-
|
|
759
|
-
_fireDidTriggerItemButton(itemHandle: number, buttonHandle: number): void {
|
|
760
|
-
const item = this._handlesToItems.get(itemHandle)!;
|
|
761
|
-
if (!item || !item.buttons || !item.buttons.length) {
|
|
762
|
-
return;
|
|
763
|
-
}
|
|
764
|
-
const button = item.buttons[buttonHandle];
|
|
765
|
-
if (button) {
|
|
766
|
-
this._onDidTriggerItemButtonEmitter.fire({
|
|
767
|
-
button,
|
|
768
|
-
item
|
|
769
|
-
});
|
|
770
|
-
}
|
|
771
|
-
}
|
|
772
|
-
}
|
|
1
|
+
// *****************************************************************************
|
|
2
|
+
// Copyright (C) 2018 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 WITH Classpath-exception-2.0
|
|
15
|
+
// *****************************************************************************
|
|
16
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
17
|
+
import {
|
|
18
|
+
QuickOpenExt, PLUGIN_RPC_CONTEXT as Ext, QuickOpenMain, TransferInputBox, Plugin,
|
|
19
|
+
Item, TransferQuickInputButton, TransferQuickPickItems, TransferQuickInput
|
|
20
|
+
} from '../common/plugin-api-rpc';
|
|
21
|
+
import * as theia from '@theia/plugin';
|
|
22
|
+
import { CancellationToken } from '@theia/core/lib/common/cancellation';
|
|
23
|
+
import { RPCProtocol } from '../common/rpc-protocol';
|
|
24
|
+
import { Emitter, Event } from '@theia/core/lib/common/event';
|
|
25
|
+
import { DisposableCollection } from '@theia/core/lib/common/disposable';
|
|
26
|
+
import { InputBoxValidationSeverity, QuickInputButtons, QuickPickItemKind, ThemeIcon } from './types-impl';
|
|
27
|
+
import { URI } from '@theia/core/shared/vscode-uri';
|
|
28
|
+
import * as path from 'path';
|
|
29
|
+
import { convertToTransferQuickPickItems } from './type-converters';
|
|
30
|
+
import { PluginPackage } from '../common/plugin-protocol';
|
|
31
|
+
import { QuickInputButtonHandle } from '@theia/core/lib/browser';
|
|
32
|
+
import { MaybePromise } from '@theia/core/lib/common/types';
|
|
33
|
+
import Severity from '@theia/monaco-editor-core/esm/vs/base/common/severity';
|
|
34
|
+
import { ThemeIcon as MonacoThemeIcon } from '@theia/monaco-editor-core/esm/vs/platform/theme/common/themeService';
|
|
35
|
+
|
|
36
|
+
const canceledName = 'Canceled';
|
|
37
|
+
/**
|
|
38
|
+
* Checks if the given error is a promise in canceled state
|
|
39
|
+
*/
|
|
40
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
41
|
+
export function isPromiseCanceledError(error: any): boolean {
|
|
42
|
+
return error instanceof Error && error.name === canceledName && error.message === canceledName;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export function getIconUris(iconPath: theia.QuickInputButton['iconPath']): { dark: URI, light: URI } | { id: string } {
|
|
46
|
+
if (ThemeIcon.is(iconPath)) {
|
|
47
|
+
return { id: iconPath.id };
|
|
48
|
+
}
|
|
49
|
+
const dark = getDarkIconUri(iconPath as URI | { light: URI; dark: URI; });
|
|
50
|
+
const light = getLightIconUri(iconPath as URI | { light: URI; dark: URI; });
|
|
51
|
+
// Tolerate strings: https://github.com/microsoft/vscode/issues/110432#issuecomment-726144556
|
|
52
|
+
return {
|
|
53
|
+
dark: typeof dark === 'string' ? URI.file(dark) : dark,
|
|
54
|
+
light: typeof light === 'string' ? URI.file(light) : light
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export function getLightIconUri(iconPath: URI | { light: URI; dark: URI; }): URI {
|
|
59
|
+
return typeof iconPath === 'object' && 'light' in iconPath ? iconPath.light : iconPath;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export function getDarkIconUri(iconPath: URI | { light: URI; dark: URI; }): URI {
|
|
63
|
+
return typeof iconPath === 'object' && 'dark' in iconPath ? iconPath.dark : iconPath;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export function getIconPathOrClass(button: theia.QuickInputButton): { iconPath: { dark: URI; light?: URI | undefined; } | undefined; iconClass: string | undefined; } {
|
|
67
|
+
const iconPathOrIconClass = getIconUris(button.iconPath);
|
|
68
|
+
let iconPath: { dark: URI; light?: URI | undefined } | undefined;
|
|
69
|
+
let iconClass: string | undefined;
|
|
70
|
+
if ('id' in iconPathOrIconClass) {
|
|
71
|
+
iconClass = MonacoThemeIcon.asClassName(iconPathOrIconClass);
|
|
72
|
+
} else {
|
|
73
|
+
iconPath = iconPathOrIconClass;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
return {
|
|
77
|
+
iconPath,
|
|
78
|
+
iconClass
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export class QuickOpenExtImpl implements QuickOpenExt {
|
|
83
|
+
private proxy: QuickOpenMain;
|
|
84
|
+
private onDidSelectItem: undefined | ((handle: number) => void);
|
|
85
|
+
private validateInputHandler?: (input: string) => MaybePromise<string | theia.InputBoxValidationMessage | null | undefined>;
|
|
86
|
+
private _sessions = new Map<number, QuickInputExt>(); // Each quickinput will have a number so that we know where to fire events
|
|
87
|
+
private _instances = 0;
|
|
88
|
+
|
|
89
|
+
constructor(rpc: RPCProtocol) {
|
|
90
|
+
this.proxy = rpc.getProxy(Ext.QUICK_OPEN_MAIN);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/* eslint-disable max-len */
|
|
94
|
+
showQuickPick(itemsOrItemsPromise: Array<theia.QuickPickItem> | Promise<Array<theia.QuickPickItem>>, options: theia.QuickPickOptions & { canPickMany: true; }, token?: theia.CancellationToken): Promise<Array<theia.QuickPickItem> | undefined>;
|
|
95
|
+
showQuickPick(itemsOrItemsPromise: string[] | Promise<string[]>, options?: theia.QuickPickOptions, token?: theia.CancellationToken): Promise<string | undefined>;
|
|
96
|
+
showQuickPick(itemsOrItemsPromise: Array<theia.QuickPickItem> | Promise<Array<theia.QuickPickItem>>, options?: theia.QuickPickOptions, token?: theia.CancellationToken): Promise<theia.QuickPickItem | undefined>;
|
|
97
|
+
showQuickPick(itemsOrItemsPromise: Item[] | Promise<Item[]>, options?: theia.QuickPickOptions, token: theia.CancellationToken = CancellationToken.None): Promise<Item | Item[] | undefined> {
|
|
98
|
+
this.onDidSelectItem = undefined;
|
|
99
|
+
|
|
100
|
+
const itemsPromise = <Promise<Item[]>>Promise.resolve(itemsOrItemsPromise);
|
|
101
|
+
|
|
102
|
+
const instance = ++this._instances;
|
|
103
|
+
|
|
104
|
+
const widgetPromise = this.proxy.$show(instance, {
|
|
105
|
+
title: options && options.title,
|
|
106
|
+
canPickMany: options && options.canPickMany,
|
|
107
|
+
placeHolder: options && options.placeHolder,
|
|
108
|
+
matchOnDescription: options && options.matchOnDescription,
|
|
109
|
+
matchOnDetail: options && options.matchOnDetail,
|
|
110
|
+
ignoreFocusLost: options && options.ignoreFocusOut
|
|
111
|
+
}, token);
|
|
112
|
+
|
|
113
|
+
const widgetClosedMarker = {};
|
|
114
|
+
const widgetClosedPromise = widgetPromise.then(() => widgetClosedMarker);
|
|
115
|
+
|
|
116
|
+
return Promise.race([widgetClosedPromise, itemsPromise]).then(result => {
|
|
117
|
+
if (result === widgetClosedMarker) {
|
|
118
|
+
return undefined;
|
|
119
|
+
}
|
|
120
|
+
return itemsPromise.then(async items => {
|
|
121
|
+
const pickItems: Array<TransferQuickPickItems> = convertToTransferQuickPickItems(items);
|
|
122
|
+
|
|
123
|
+
if (options && typeof options.onDidSelectItem === 'function') {
|
|
124
|
+
this.onDidSelectItem = handle => {
|
|
125
|
+
options.onDidSelectItem!(items[handle]);
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
this.proxy.$setItems(instance, pickItems);
|
|
130
|
+
|
|
131
|
+
return widgetPromise.then(handle => {
|
|
132
|
+
if (typeof handle === 'number') {
|
|
133
|
+
if (options && options.canPickMany) {
|
|
134
|
+
return Array.of(items[handle]);
|
|
135
|
+
} else {
|
|
136
|
+
return items[handle];
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
} else if (Array.isArray(handle)) {
|
|
140
|
+
return handle.map(h => items[h]);
|
|
141
|
+
}
|
|
142
|
+
return undefined;
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
}).then(undefined, err => {
|
|
146
|
+
if (isPromiseCanceledError(err)) {
|
|
147
|
+
return undefined;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
this.proxy.$setError(instance, err);
|
|
151
|
+
|
|
152
|
+
return Promise.reject(err);
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
$onItemSelected(handle: number): void {
|
|
157
|
+
if (this.onDidSelectItem) {
|
|
158
|
+
this.onDidSelectItem(handle);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
// ---- input
|
|
163
|
+
|
|
164
|
+
showInput(options?: theia.InputBoxOptions, token: theia.CancellationToken = CancellationToken.None): PromiseLike<string | undefined> {
|
|
165
|
+
this.validateInputHandler = options?.validateInput;
|
|
166
|
+
if (!options) { options = { placeHolder: '' }; }
|
|
167
|
+
return this.proxy.$input(options, typeof this.validateInputHandler === 'function', token);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
async showInputBox(options: TransferInputBox): Promise<string | undefined> {
|
|
171
|
+
this.validateInputHandler = typeof options.validateInput === 'function' ? options.validateInput : undefined;
|
|
172
|
+
return this.proxy.$showInputBox(options, typeof this.validateInputHandler === 'function');
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
async $validateInput(input: string): Promise<string | { content: string; severity: Severity; } | null | undefined> {
|
|
176
|
+
if (!this.validateInputHandler) {
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
const result = await this.validateInputHandler(input);
|
|
181
|
+
if (!result || typeof result === 'string') {
|
|
182
|
+
return result;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
let severity: Severity;
|
|
186
|
+
switch (result.severity) {
|
|
187
|
+
case InputBoxValidationSeverity.Info:
|
|
188
|
+
severity = Severity.Info;
|
|
189
|
+
break;
|
|
190
|
+
case InputBoxValidationSeverity.Warning:
|
|
191
|
+
severity = Severity.Warning;
|
|
192
|
+
break;
|
|
193
|
+
case InputBoxValidationSeverity.Error:
|
|
194
|
+
severity = Severity.Error;
|
|
195
|
+
break;
|
|
196
|
+
default:
|
|
197
|
+
severity = result.message ? Severity.Error : Severity.Ignore;
|
|
198
|
+
break;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
return {
|
|
202
|
+
content: result.message,
|
|
203
|
+
severity
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// ---- QuickInput
|
|
208
|
+
|
|
209
|
+
createQuickPick<T extends theia.QuickPickItem>(plugin: Plugin): theia.QuickPick<T> {
|
|
210
|
+
const session: any = new QuickPickExt<T>(this, this.proxy, plugin, () => this._sessions.delete(session._id));
|
|
211
|
+
this._sessions.set(session._id, session);
|
|
212
|
+
return session;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
createInputBox(plugin: Plugin): theia.InputBox {
|
|
216
|
+
const session: any = new InputBoxExt(this, this.proxy, plugin, () => this._sessions.delete(session._id));
|
|
217
|
+
this._sessions.set(session._id, session);
|
|
218
|
+
return session;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
hide(): void {
|
|
222
|
+
this.proxy.$hide();
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
async $acceptOnDidAccept(sessionId: number): Promise<void> {
|
|
226
|
+
const session = this._sessions.get(sessionId);
|
|
227
|
+
if (session) {
|
|
228
|
+
session._fireAccept();
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
async $acceptDidChangeValue(sessionId: number, changedValue: string): Promise<void> {
|
|
233
|
+
const session = this._sessions.get(sessionId);
|
|
234
|
+
if (session) {
|
|
235
|
+
session._fireChangedValue(changedValue);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
async $acceptOnDidHide(sessionId: number): Promise<void> {
|
|
240
|
+
const session = this._sessions.get(sessionId);
|
|
241
|
+
if (session) {
|
|
242
|
+
session._fireHide();
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
async $acceptOnDidTriggerButton(sessionId: number, btn: QuickInputButtonHandle): Promise<void> {
|
|
247
|
+
const session = this._sessions.get(sessionId);
|
|
248
|
+
if (session) {
|
|
249
|
+
if (btn.index === -1) {
|
|
250
|
+
session._fireButtonTrigger(QuickInputButtons.Back);
|
|
251
|
+
} else if (session && (session instanceof InputBoxExt || session instanceof QuickPickExt)) {
|
|
252
|
+
const btnFromIndex = session.buttons[btn.index];
|
|
253
|
+
session._fireButtonTrigger(btnFromIndex as theia.QuickInputButton);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
$onDidChangeActive(sessionId: number, handles: number[]): void {
|
|
259
|
+
const session = this._sessions.get(sessionId);
|
|
260
|
+
if (session instanceof QuickPickExt) {
|
|
261
|
+
session._fireDidChangeActive(handles);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
$onDidChangeSelection(sessionId: number, handles: number[]): void {
|
|
266
|
+
const session = this._sessions.get(sessionId);
|
|
267
|
+
if (session instanceof QuickPickExt) {
|
|
268
|
+
session._fireDidChangeSelection(handles);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
$onDidTriggerItemButton(sessionId: number, itemHandle: number, buttonHandle: number): void {
|
|
273
|
+
const session = this._sessions.get(sessionId);
|
|
274
|
+
if (session instanceof QuickPickExt) {
|
|
275
|
+
session._fireDidTriggerItemButton(itemHandle, buttonHandle);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
export class QuickInputExt implements theia.QuickInput {
|
|
282
|
+
|
|
283
|
+
private static _nextId = 1;
|
|
284
|
+
_id = QuickInputExt._nextId++;
|
|
285
|
+
|
|
286
|
+
private _busy: boolean;
|
|
287
|
+
private _enabled: boolean;
|
|
288
|
+
private _ignoreFocusOut: boolean;
|
|
289
|
+
private _step: number | undefined;
|
|
290
|
+
private _title: string | undefined;
|
|
291
|
+
private _totalSteps: number | undefined;
|
|
292
|
+
private _value: string;
|
|
293
|
+
private _placeholder: string | undefined;
|
|
294
|
+
private _buttons: theia.QuickInputButton[] = [];
|
|
295
|
+
private _handlesToButtons = new Map<number, theia.QuickInputButton>();
|
|
296
|
+
protected expectingHide = false;
|
|
297
|
+
protected visible: boolean;
|
|
298
|
+
private _disposed = false;
|
|
299
|
+
protected disposableCollection: DisposableCollection;
|
|
300
|
+
|
|
301
|
+
private onDidAcceptEmitter: Emitter<void>;
|
|
302
|
+
/**
|
|
303
|
+
* it has to be named `_onDidChangeValueEmitter`, since Gitlens extension relies on it
|
|
304
|
+
* https://github.com/eamodio/vscode-gitlens/blob/f22a9cd4199ac498c217643282a6a412e1fc01ae/src/commands/gitCommands.ts#L242-L243
|
|
305
|
+
*/
|
|
306
|
+
private _onDidChangeValueEmitter: Emitter<string>;
|
|
307
|
+
private onDidHideEmitter: Emitter<void>;
|
|
308
|
+
private onDidTriggerButtonEmitter: Emitter<theia.QuickInputButton>;
|
|
309
|
+
private _updateTimeout: any;
|
|
310
|
+
private _pendingUpdate: TransferQuickInput = { id: this._id };
|
|
311
|
+
|
|
312
|
+
constructor(readonly quickOpen: QuickOpenExtImpl, readonly quickOpenMain: QuickOpenMain, readonly plugin: Plugin, private _onDidDispose: () => void) {
|
|
313
|
+
this.title = undefined;
|
|
314
|
+
this.step = undefined;
|
|
315
|
+
this.totalSteps = undefined;
|
|
316
|
+
this.enabled = true;
|
|
317
|
+
this.busy = false;
|
|
318
|
+
this.ignoreFocusOut = false;
|
|
319
|
+
this.value = '';
|
|
320
|
+
|
|
321
|
+
this.visible = false;
|
|
322
|
+
|
|
323
|
+
this.disposableCollection = new DisposableCollection();
|
|
324
|
+
this.disposableCollection.push(this.onDidAcceptEmitter = new Emitter());
|
|
325
|
+
this.disposableCollection.push(this._onDidChangeValueEmitter = new Emitter());
|
|
326
|
+
this.disposableCollection.push(this.onDidHideEmitter = new Emitter());
|
|
327
|
+
this.disposableCollection.push(this.onDidTriggerButtonEmitter = new Emitter());
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
get title(): string | undefined {
|
|
331
|
+
return this._title;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
set title(title: string | undefined) {
|
|
335
|
+
this._title = title;
|
|
336
|
+
this.update({ title });
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
get step(): number | undefined {
|
|
340
|
+
return this._step;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
set step(step: number | undefined) {
|
|
344
|
+
this._step = step;
|
|
345
|
+
this.update({ step });
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
get totalSteps(): number | undefined {
|
|
349
|
+
return this._totalSteps;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
set totalSteps(totalSteps: number | undefined) {
|
|
353
|
+
this._totalSteps = totalSteps;
|
|
354
|
+
this.update({ totalSteps });
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
get enabled(): boolean {
|
|
358
|
+
return this._enabled;
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
set enabled(enabled: boolean) {
|
|
362
|
+
this._enabled = enabled;
|
|
363
|
+
this.update({ enabled });
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
get busy(): boolean {
|
|
367
|
+
return this._busy;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
set busy(busy: boolean) {
|
|
371
|
+
this._busy = busy;
|
|
372
|
+
this.update({ busy });
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
get ignoreFocusOut(): boolean {
|
|
376
|
+
return this._ignoreFocusOut;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
set ignoreFocusOut(ignoreFocusOut: boolean) {
|
|
380
|
+
this._ignoreFocusOut = ignoreFocusOut;
|
|
381
|
+
this.update({ ignoreFocusOut });
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
get value(): string {
|
|
385
|
+
return this._value;
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
set value(value: string) {
|
|
389
|
+
this._value = value;
|
|
390
|
+
this.update({ value });
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
get placeholder(): string | undefined {
|
|
394
|
+
return this._placeholder;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
set placeholder(placeholder: string | undefined) {
|
|
398
|
+
this._placeholder = placeholder;
|
|
399
|
+
this.update({ placeholder });
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
get buttons(): theia.QuickInputButton[] {
|
|
403
|
+
return this._buttons;
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
set buttons(buttons: theia.QuickInputButton[]) {
|
|
407
|
+
this._buttons = buttons.slice();
|
|
408
|
+
this._handlesToButtons.clear();
|
|
409
|
+
buttons.forEach((button, i) => {
|
|
410
|
+
const handle = button === QuickInputButtons.Back ? -1 : i;
|
|
411
|
+
this._handlesToButtons.set(handle, button);
|
|
412
|
+
});
|
|
413
|
+
this.update({
|
|
414
|
+
buttons: buttons.map<TransferQuickInputButton>((button, i) => ({
|
|
415
|
+
iconPath: getIconUris(button.iconPath),
|
|
416
|
+
iconClass: ThemeIcon.is(button.iconPath) ? MonacoThemeIcon.asClassName(button.iconPath) : undefined,
|
|
417
|
+
tooltip: button.tooltip,
|
|
418
|
+
handle: button === QuickInputButtons.Back ? -1 : i,
|
|
419
|
+
}))
|
|
420
|
+
});
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
show(): void {
|
|
424
|
+
this.visible = true;
|
|
425
|
+
this.expectingHide = true;
|
|
426
|
+
this.update({ visible: true });
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
dispose(): void {
|
|
430
|
+
if (this._disposed) {
|
|
431
|
+
return;
|
|
432
|
+
}
|
|
433
|
+
this._disposed = true;
|
|
434
|
+
this._fireHide();
|
|
435
|
+
this.disposableCollection.dispose();
|
|
436
|
+
this._onDidDispose();
|
|
437
|
+
this.quickOpenMain.$dispose(this._id);
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
441
|
+
protected update(properties: Record<string, any>): void {
|
|
442
|
+
if (this._disposed) {
|
|
443
|
+
return;
|
|
444
|
+
}
|
|
445
|
+
for (const key of Object.keys(properties)) {
|
|
446
|
+
const value = properties[key];
|
|
447
|
+
this._pendingUpdate[key] = value === undefined ? null : value;
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
if ('visible' in this._pendingUpdate) {
|
|
451
|
+
if (this._updateTimeout) {
|
|
452
|
+
clearTimeout(this._updateTimeout);
|
|
453
|
+
this._updateTimeout = undefined;
|
|
454
|
+
}
|
|
455
|
+
this.dispatchUpdate();
|
|
456
|
+
} else if (this.visible && !this._updateTimeout) {
|
|
457
|
+
// Defer the update so that multiple changes to setters dont cause a redraw each
|
|
458
|
+
this._updateTimeout = setTimeout(() => {
|
|
459
|
+
this._updateTimeout = undefined;
|
|
460
|
+
this.dispatchUpdate();
|
|
461
|
+
}, 0);
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
private dispatchUpdate(): void {
|
|
466
|
+
this.quickOpenMain.$createOrUpdate(this._pendingUpdate);
|
|
467
|
+
this._pendingUpdate = { id: this._id };
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
hide(): void {
|
|
471
|
+
this.quickOpenMain.$hide();
|
|
472
|
+
this.dispose();
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
protected convertURL(iconPath: URI | { light: string | URI; dark: string | URI } | ThemeIcon):
|
|
476
|
+
URI | { light: string | URI; dark: string | URI } | ThemeIcon {
|
|
477
|
+
const toUrl = (arg: string | URI) => {
|
|
478
|
+
arg = arg instanceof URI && arg.scheme === 'file' ? arg.fsPath : arg;
|
|
479
|
+
if (typeof arg !== 'string') {
|
|
480
|
+
return arg.toString(true);
|
|
481
|
+
}
|
|
482
|
+
const { packagePath } = this.plugin.rawModel;
|
|
483
|
+
const absolutePath = path.isAbsolute(arg) ? arg : path.join(packagePath, arg);
|
|
484
|
+
const normalizedPath = path.normalize(absolutePath);
|
|
485
|
+
const relativePath = path.relative(packagePath, normalizedPath);
|
|
486
|
+
return PluginPackage.toPluginUrl(this.plugin.rawModel, relativePath);
|
|
487
|
+
};
|
|
488
|
+
if (ThemeIcon.is(iconPath)) {
|
|
489
|
+
return iconPath;
|
|
490
|
+
} else if (typeof iconPath === 'string' || iconPath instanceof URI) {
|
|
491
|
+
return URI.parse(toUrl(iconPath));
|
|
492
|
+
} else {
|
|
493
|
+
const { light, dark } = iconPath as { light: string | URI, dark: string | URI };
|
|
494
|
+
return {
|
|
495
|
+
light: toUrl(light),
|
|
496
|
+
dark: toUrl(dark)
|
|
497
|
+
};
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
_fireAccept(): void {
|
|
502
|
+
this.onDidAcceptEmitter.fire(undefined);
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
_fireChangedValue(changedValue: string): void {
|
|
506
|
+
this._value = changedValue;
|
|
507
|
+
this._onDidChangeValueEmitter.fire(changedValue);
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
_fireHide(): void {
|
|
511
|
+
if (this.expectingHide) {
|
|
512
|
+
this.expectingHide = false;
|
|
513
|
+
this.onDidHideEmitter.fire(undefined);
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
_fireButtonTrigger(btn: theia.QuickInputButton): void {
|
|
518
|
+
this.onDidTriggerButtonEmitter.fire(btn);
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
get onDidHide(): Event<void> {
|
|
522
|
+
return this.onDidHideEmitter.event;
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
get onDidAccept(): Event<void> {
|
|
526
|
+
return this.onDidAcceptEmitter.event;
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
get onDidChangeValue(): Event<string> {
|
|
530
|
+
return this._onDidChangeValueEmitter.event;
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
get onDidTriggerButton(): Event<theia.QuickInputButton> {
|
|
534
|
+
return this.onDidTriggerButtonEmitter.event;
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
/**
|
|
539
|
+
* Base implementation of {@link InputBox} that uses {@link QuickOpenExt}.
|
|
540
|
+
* Missing functionality is going to be implemented in the scope of https://github.com/eclipse-theia/theia/issues/5109
|
|
541
|
+
*/
|
|
542
|
+
export class InputBoxExt extends QuickInputExt implements theia.InputBox {
|
|
543
|
+
|
|
544
|
+
private _password: boolean;
|
|
545
|
+
private _prompt: string | undefined;
|
|
546
|
+
private _valueSelection: readonly [number, number] | undefined;
|
|
547
|
+
private _validationMessage: string | undefined;
|
|
548
|
+
|
|
549
|
+
constructor(
|
|
550
|
+
override readonly quickOpen: QuickOpenExtImpl,
|
|
551
|
+
override readonly quickOpenMain: QuickOpenMain,
|
|
552
|
+
override readonly plugin: Plugin,
|
|
553
|
+
onDispose: () => void
|
|
554
|
+
) {
|
|
555
|
+
super(quickOpen, quickOpenMain, plugin, onDispose);
|
|
556
|
+
|
|
557
|
+
this.buttons = [];
|
|
558
|
+
this.password = false;
|
|
559
|
+
this.value = '';
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
get password(): boolean {
|
|
563
|
+
return this._password;
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
set password(password: boolean) {
|
|
567
|
+
this._password = password;
|
|
568
|
+
this.update({ password });
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
get prompt(): string | undefined {
|
|
572
|
+
return this._prompt;
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
set prompt(prompt: string | undefined) {
|
|
576
|
+
this._prompt = prompt;
|
|
577
|
+
this.update({ prompt });
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
get valueSelection(): readonly [number, number] | undefined {
|
|
581
|
+
return this._valueSelection;
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
set valueSelection(valueSelection: readonly [number, number] | undefined) {
|
|
585
|
+
this._valueSelection = valueSelection;
|
|
586
|
+
this.update({ valueSelection });
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
get validationMessage(): string | undefined {
|
|
590
|
+
return this._validationMessage;
|
|
591
|
+
}
|
|
592
|
+
|
|
593
|
+
set validationMessage(validationMessage: string | undefined) {
|
|
594
|
+
if (this._validationMessage !== validationMessage) {
|
|
595
|
+
this._validationMessage = validationMessage;
|
|
596
|
+
this.update({ validationMessage });
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
/**
|
|
602
|
+
* Base implementation of {@link QuickPick} that uses {@link QuickOpenExt}.
|
|
603
|
+
* Missing functionality is going to be implemented in the scope of https://github.com/eclipse-theia/theia/issues/5059
|
|
604
|
+
*/
|
|
605
|
+
export class QuickPickExt<T extends theia.QuickPickItem> extends QuickInputExt implements theia.QuickPick<T> {
|
|
606
|
+
private _items: T[] = [];
|
|
607
|
+
private _handlesToItems = new Map<number, T>();
|
|
608
|
+
private _itemsToHandles = new Map<T, number>();
|
|
609
|
+
private _canSelectMany = false;
|
|
610
|
+
private _matchOnDescription = true;
|
|
611
|
+
private _matchOnDetail = true;
|
|
612
|
+
private _sortByLabel = true;
|
|
613
|
+
private _keepScrollPosition = false;
|
|
614
|
+
private _activeItems: T[] = [];
|
|
615
|
+
private _selectedItems: T[] = [];
|
|
616
|
+
private readonly _onDidChangeActiveEmitter = new Emitter<T[]>();
|
|
617
|
+
private readonly _onDidChangeSelectionEmitter = new Emitter<T[]>();
|
|
618
|
+
private readonly _onDidTriggerItemButtonEmitter = new Emitter<theia.QuickPickItemButtonEvent<T>>();
|
|
619
|
+
|
|
620
|
+
constructor(
|
|
621
|
+
override readonly quickOpen: QuickOpenExtImpl,
|
|
622
|
+
override readonly quickOpenMain: QuickOpenMain,
|
|
623
|
+
override readonly plugin: Plugin,
|
|
624
|
+
onDispose: () => void
|
|
625
|
+
) {
|
|
626
|
+
super(quickOpen, quickOpenMain, plugin, onDispose);
|
|
627
|
+
this.buttons = [];
|
|
628
|
+
|
|
629
|
+
this.disposableCollection.push(this._onDidChangeActiveEmitter);
|
|
630
|
+
this.disposableCollection.push(this._onDidChangeSelectionEmitter);
|
|
631
|
+
this.disposableCollection.push(this._onDidTriggerItemButtonEmitter);
|
|
632
|
+
|
|
633
|
+
this.update({ type: 'quickPick' });
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
get items(): T[] {
|
|
637
|
+
return this._items;
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
set items(items: T[]) {
|
|
641
|
+
this._items = items.slice();
|
|
642
|
+
this._handlesToItems.clear();
|
|
643
|
+
this._itemsToHandles.clear();
|
|
644
|
+
items.forEach((item, i) => {
|
|
645
|
+
this._handlesToItems.set(i, item);
|
|
646
|
+
this._itemsToHandles.set(item, i);
|
|
647
|
+
});
|
|
648
|
+
|
|
649
|
+
const pickItems: TransferQuickPickItems[] = [];
|
|
650
|
+
for (let handle = 0; handle < items.length; handle++) {
|
|
651
|
+
const item = items[handle];
|
|
652
|
+
if (item.kind === QuickPickItemKind.Separator) {
|
|
653
|
+
pickItems.push({ type: 'separator', label: item.label, handle });
|
|
654
|
+
} else {
|
|
655
|
+
pickItems.push({
|
|
656
|
+
kind: item.kind,
|
|
657
|
+
label: item.label,
|
|
658
|
+
description: item.description,
|
|
659
|
+
handle,
|
|
660
|
+
detail: item.detail,
|
|
661
|
+
picked: item.picked,
|
|
662
|
+
alwaysShow: item.alwaysShow,
|
|
663
|
+
buttons: item.buttons?.map<TransferQuickInputButton>((button, index) => ({
|
|
664
|
+
iconPath: getIconUris(button.iconPath),
|
|
665
|
+
iconClass: ThemeIcon.is(button.iconPath) ? MonacoThemeIcon.asClassName(button.iconPath) : undefined,
|
|
666
|
+
tooltip: button.tooltip,
|
|
667
|
+
handle: button === QuickInputButtons.Back ? -1 : index,
|
|
668
|
+
}))
|
|
669
|
+
});
|
|
670
|
+
}
|
|
671
|
+
}
|
|
672
|
+
|
|
673
|
+
this.update({
|
|
674
|
+
items: pickItems,
|
|
675
|
+
});
|
|
676
|
+
}
|
|
677
|
+
|
|
678
|
+
get canSelectMany(): boolean {
|
|
679
|
+
return this._canSelectMany;
|
|
680
|
+
}
|
|
681
|
+
|
|
682
|
+
set canSelectMany(canSelectMany: boolean) {
|
|
683
|
+
this._canSelectMany = canSelectMany;
|
|
684
|
+
this.update({ canSelectMany });
|
|
685
|
+
}
|
|
686
|
+
|
|
687
|
+
get matchOnDescription(): boolean {
|
|
688
|
+
return this._matchOnDescription;
|
|
689
|
+
}
|
|
690
|
+
|
|
691
|
+
set matchOnDescription(matchOnDescription: boolean) {
|
|
692
|
+
this._matchOnDescription = matchOnDescription;
|
|
693
|
+
this.update({ matchOnDescription });
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
get matchOnDetail(): boolean {
|
|
697
|
+
return this._matchOnDetail;
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
set matchOnDetail(matchOnDetail: boolean) {
|
|
701
|
+
this._matchOnDetail = matchOnDetail;
|
|
702
|
+
this.update({ matchOnDetail });
|
|
703
|
+
}
|
|
704
|
+
|
|
705
|
+
get sortByLabel(): boolean {
|
|
706
|
+
return this._sortByLabel;
|
|
707
|
+
}
|
|
708
|
+
|
|
709
|
+
set sortByLabel(sortByLabel: boolean) {
|
|
710
|
+
this._sortByLabel = sortByLabel;
|
|
711
|
+
this.update({ sortByLabel });
|
|
712
|
+
}
|
|
713
|
+
|
|
714
|
+
get keepScrollPosition(): boolean {
|
|
715
|
+
return this._keepScrollPosition;
|
|
716
|
+
}
|
|
717
|
+
|
|
718
|
+
set keepScrollPosition(keepScrollPosition: boolean) {
|
|
719
|
+
this._keepScrollPosition = keepScrollPosition;
|
|
720
|
+
this.update({ keepScrollPosition });
|
|
721
|
+
}
|
|
722
|
+
|
|
723
|
+
get activeItems(): T[] {
|
|
724
|
+
return this._activeItems;
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
set activeItems(activeItems: T[]) {
|
|
728
|
+
this._activeItems = activeItems.filter(item => this._itemsToHandles.has(item));
|
|
729
|
+
this.update({ activeItems: this._activeItems.map(item => this._itemsToHandles.get(item)) });
|
|
730
|
+
}
|
|
731
|
+
|
|
732
|
+
onDidChangeActive = this._onDidChangeActiveEmitter.event;
|
|
733
|
+
|
|
734
|
+
get selectedItems(): T[] {
|
|
735
|
+
return this._selectedItems;
|
|
736
|
+
}
|
|
737
|
+
|
|
738
|
+
set selectedItems(selectedItems: T[]) {
|
|
739
|
+
this._selectedItems = selectedItems.filter(item => this._itemsToHandles.has(item));
|
|
740
|
+
this.update({ selectedItems: this._selectedItems.map(item => this._itemsToHandles.get(item)) });
|
|
741
|
+
}
|
|
742
|
+
|
|
743
|
+
onDidChangeSelection = this._onDidChangeSelectionEmitter.event;
|
|
744
|
+
|
|
745
|
+
_fireDidChangeActive(handles: number[]): void {
|
|
746
|
+
const items = handles.map(handle => this._handlesToItems.get(handle)).filter(e => !!e) as T[];
|
|
747
|
+
this._activeItems = items;
|
|
748
|
+
this._onDidChangeActiveEmitter.fire(items);
|
|
749
|
+
}
|
|
750
|
+
|
|
751
|
+
_fireDidChangeSelection(handles: number[]): void {
|
|
752
|
+
const items = handles.map(handle => this._handlesToItems.get(handle)).filter(e => !!e) as T[];
|
|
753
|
+
this._selectedItems = items;
|
|
754
|
+
this._onDidChangeSelectionEmitter.fire(items);
|
|
755
|
+
}
|
|
756
|
+
|
|
757
|
+
onDidTriggerItemButton = this._onDidTriggerItemButtonEmitter.event;
|
|
758
|
+
|
|
759
|
+
_fireDidTriggerItemButton(itemHandle: number, buttonHandle: number): void {
|
|
760
|
+
const item = this._handlesToItems.get(itemHandle)!;
|
|
761
|
+
if (!item || !item.buttons || !item.buttons.length) {
|
|
762
|
+
return;
|
|
763
|
+
}
|
|
764
|
+
const button = item.buttons[buttonHandle];
|
|
765
|
+
if (button) {
|
|
766
|
+
this._onDidTriggerItemButtonEmitter.fire({
|
|
767
|
+
button,
|
|
768
|
+
item
|
|
769
|
+
});
|
|
770
|
+
}
|
|
771
|
+
}
|
|
772
|
+
}
|