@theia/plugin-ext 1.34.2 → 1.34.3
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.d.ts.map +1 -1
- package/lib/main/browser/main-file-system-event-service.js +65 -68
- package/lib/main/browser/main-file-system-event-service.js.map +1 -1
- 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.d.ts.map +1 -1
- package/lib/plugin/types-impl.js +2956 -2953
- package/lib/plugin/types-impl.js.map +1 -1
- 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 -79
- 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 -3404
- 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
|
@@ -1,1387 +1,1387 @@
|
|
|
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
|
-
|
|
17
|
-
/*---------------------------------------------------------------------------------------------
|
|
18
|
-
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
19
|
-
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
20
|
-
*--------------------------------------------------------------------------------------------*/
|
|
21
|
-
|
|
22
|
-
// Method `$changeLanguage` copied and modified
|
|
23
|
-
// from https://github.com/microsoft/vscode/blob/e9c50663154c369a06355ce752b447af5b580dc3/src/vs/workbench/api/browser/mainThreadLanguages.ts#L30-L42
|
|
24
|
-
|
|
25
|
-
import {
|
|
26
|
-
LanguagesMain,
|
|
27
|
-
SerializedLanguageConfiguration,
|
|
28
|
-
SerializedRegExp,
|
|
29
|
-
SerializedIndentationRule,
|
|
30
|
-
SerializedOnEnterRule,
|
|
31
|
-
MAIN_RPC_CONTEXT,
|
|
32
|
-
LanguagesExt,
|
|
33
|
-
WorkspaceEditDto,
|
|
34
|
-
WorkspaceTextEditDto,
|
|
35
|
-
PluginInfo,
|
|
36
|
-
LanguageStatus as LanguageStatusDTO,
|
|
37
|
-
InlayHintDto,
|
|
38
|
-
IdentifiableInlineCompletions
|
|
39
|
-
} from '../../common/plugin-api-rpc';
|
|
40
|
-
import { injectable, inject } from '@theia/core/shared/inversify';
|
|
41
|
-
import {
|
|
42
|
-
SerializedDocumentFilter, MarkerData, Range, RelatedInformation,
|
|
43
|
-
MarkerSeverity, DocumentLink, WorkspaceSymbolParams, CodeAction, CompletionDto, CodeActionProviderDocumentation, InlayHint, InlayHintLabelPart, CodeActionContext
|
|
44
|
-
} from '../../common/plugin-api-rpc-model';
|
|
45
|
-
import { RPCProtocol } from '../../common/rpc-protocol';
|
|
46
|
-
import { MonacoLanguages, WorkspaceSymbolProvider } from '@theia/monaco/lib/browser/monaco-languages';
|
|
47
|
-
import CoreURI from '@theia/core/lib/common/uri';
|
|
48
|
-
import { Disposable, DisposableCollection } from '@theia/core/lib/common/disposable';
|
|
49
|
-
import { Emitter, Event } from '@theia/core/lib/common/event';
|
|
50
|
-
import { ProblemManager } from '@theia/markers/lib/browser';
|
|
51
|
-
import * as vst from '@theia/core/shared/vscode-languageserver-protocol';
|
|
52
|
-
import * as theia from '@theia/plugin';
|
|
53
|
-
import { UriComponents } from '../../common/uri-components';
|
|
54
|
-
import { CancellationToken } from '@theia/core/lib/common';
|
|
55
|
-
import { CallHierarchyService, CallHierarchyServiceProvider, CallHierarchyItem } from '@theia/callhierarchy/lib/browser';
|
|
56
|
-
import { toItemHierarchyDefinition, toUriComponents, fromItemHierarchyDefinition, fromPosition, toCaller, toCallee } from './hierarchy/hierarchy-types-converters';
|
|
57
|
-
import { TypeHierarchyService, TypeHierarchyServiceProvider } from '@theia/typehierarchy/lib/browser';
|
|
58
|
-
import { Position, DocumentUri, DiagnosticTag } from '@theia/core/shared/vscode-languageserver-protocol';
|
|
59
|
-
import { ObjectIdentifier } from '../../common/object-identifier';
|
|
60
|
-
import { mixin } from '../../common/types';
|
|
61
|
-
import { relative } from '../../common/paths-util';
|
|
62
|
-
import { decodeSemanticTokensDto } from '../../common/semantic-tokens-dto';
|
|
63
|
-
import * as monaco from '@theia/monaco-editor-core';
|
|
64
|
-
import { ExtensionIdentifier } from '@theia/monaco-editor-core/esm/vs/platform/extensions/common/extensions';
|
|
65
|
-
import { StandaloneServices } from '@theia/monaco-editor-core/esm/vs/editor/standalone/browser/standaloneServices';
|
|
66
|
-
import { IMarkerService } from '@theia/monaco-editor-core/esm/vs/platform/markers/common/markers';
|
|
67
|
-
import * as MonacoLanguageSelector from '@theia/monaco-editor-core/esm/vs/editor/common/languageSelector';
|
|
68
|
-
import * as MonacoPath from '@theia/monaco-editor-core/esm/vs/base/common/path';
|
|
69
|
-
import { IRelativePattern } from '@theia/monaco-editor-core/esm/vs/base/common/glob';
|
|
70
|
-
import { EditorLanguageStatusService, LanguageStatus as EditorLanguageStatus } from '@theia/editor/lib/browser/language-status/editor-language-status-service';
|
|
71
|
-
import { LanguageSelector, RelativePattern } from '@theia/editor/lib/common/language-selector';
|
|
72
|
-
import { ILanguageFeaturesService } from '@theia/monaco-editor-core/esm/vs/editor/common/services/languageFeatures';
|
|
73
|
-
import {
|
|
74
|
-
EvaluatableExpression,
|
|
75
|
-
EvaluatableExpressionProvider,
|
|
76
|
-
InlineValue,
|
|
77
|
-
InlineValueContext,
|
|
78
|
-
InlineValuesProvider
|
|
79
|
-
} from '@theia/monaco-editor-core/esm/vs/editor/common/languages';
|
|
80
|
-
import { ITextModel } from '@theia/monaco-editor-core/esm/vs/editor/common/model';
|
|
81
|
-
import { CodeActionTriggerKind } from '../../plugin/types-impl';
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* @monaco-uplift The public API declares these functions as (languageId: string, service).
|
|
85
|
-
* Confirm that the functions delegate to a handler that accepts a LanguageSelector rather than just a string.
|
|
86
|
-
* Relevant code in node_modules/@theia/monaco-editor-core/src/vs/editor/standalone/browser/standaloneLanguages.ts
|
|
87
|
-
*/
|
|
88
|
-
interface RegistrationFunction<T> {
|
|
89
|
-
(languageId: MonacoLanguageSelector.LanguageSelector, service: T): Disposable;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
@injectable()
|
|
93
|
-
export class LanguagesMainImpl implements LanguagesMain, Disposable {
|
|
94
|
-
|
|
95
|
-
@inject(MonacoLanguages)
|
|
96
|
-
private readonly monacoLanguages: MonacoLanguages;
|
|
97
|
-
|
|
98
|
-
@inject(ProblemManager)
|
|
99
|
-
private readonly problemManager: ProblemManager;
|
|
100
|
-
|
|
101
|
-
@inject(CallHierarchyServiceProvider)
|
|
102
|
-
private readonly callHierarchyServiceContributionRegistry: CallHierarchyServiceProvider;
|
|
103
|
-
|
|
104
|
-
@inject(TypeHierarchyServiceProvider)
|
|
105
|
-
private readonly typeHierarchyServiceContributionRegistry: TypeHierarchyServiceProvider;
|
|
106
|
-
|
|
107
|
-
@inject(EditorLanguageStatusService)
|
|
108
|
-
protected readonly languageStatusService: EditorLanguageStatusService;
|
|
109
|
-
|
|
110
|
-
private readonly proxy: LanguagesExt;
|
|
111
|
-
private readonly services = new Map<number, Disposable>();
|
|
112
|
-
private readonly toDispose = new DisposableCollection();
|
|
113
|
-
|
|
114
|
-
constructor(@inject(RPCProtocol) rpc: RPCProtocol) {
|
|
115
|
-
this.proxy = rpc.getProxy(MAIN_RPC_CONTEXT.LANGUAGES_EXT);
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
dispose(): void {
|
|
119
|
-
this.toDispose.dispose();
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
$getLanguages(): Promise<string[]> {
|
|
123
|
-
return Promise.resolve(monaco.languages.getLanguages().map(l => l.id));
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
$changeLanguage(resource: UriComponents, languageId: string): Promise<void> {
|
|
127
|
-
const uri = monaco.Uri.revive(resource);
|
|
128
|
-
const model = monaco.editor.getModel(uri);
|
|
129
|
-
if (!model) {
|
|
130
|
-
return Promise.reject(new Error('Invalid uri'));
|
|
131
|
-
}
|
|
132
|
-
const langId = monaco.languages.getEncodedLanguageId(languageId);
|
|
133
|
-
if (!langId) {
|
|
134
|
-
return Promise.reject(new Error(`Unknown language ID: ${languageId}`));
|
|
135
|
-
}
|
|
136
|
-
monaco.editor.setModelLanguage(model, languageId);
|
|
137
|
-
return Promise.resolve(undefined);
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
protected register(handle: number, service: Disposable): void {
|
|
141
|
-
this.services.set(handle, service);
|
|
142
|
-
this.toDispose.push(Disposable.create(() => this.$unregister(handle)));
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
$unregister(handle: number): void {
|
|
146
|
-
const disposable = this.services.get(handle);
|
|
147
|
-
if (disposable) {
|
|
148
|
-
this.services.delete(handle);
|
|
149
|
-
disposable.dispose();
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
$setLanguageConfiguration(handle: number, languageId: string, configuration: SerializedLanguageConfiguration): void {
|
|
154
|
-
const config: monaco.languages.LanguageConfiguration = {
|
|
155
|
-
comments: configuration.comments,
|
|
156
|
-
brackets: configuration.brackets,
|
|
157
|
-
wordPattern: reviveRegExp(configuration.wordPattern),
|
|
158
|
-
indentationRules: reviveIndentationRule(configuration.indentationRules),
|
|
159
|
-
onEnterRules: reviveOnEnterRules(configuration.onEnterRules),
|
|
160
|
-
};
|
|
161
|
-
|
|
162
|
-
this.register(handle, monaco.languages.setLanguageConfiguration(languageId, config));
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
$registerCompletionSupport(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[], triggerCharacters: string[], supportsResolveDetails: boolean): void {
|
|
166
|
-
this.register(handle,
|
|
167
|
-
(monaco.languages.registerCompletionItemProvider as RegistrationFunction<monaco.languages.CompletionItemProvider>)(this.toLanguageSelector(selector), {
|
|
168
|
-
triggerCharacters,
|
|
169
|
-
provideCompletionItems: (model, position, context, token) => this.provideCompletionItems(handle, model, position, context, token),
|
|
170
|
-
resolveCompletionItem: supportsResolveDetails
|
|
171
|
-
? (suggestion, token) => Promise.resolve(this.resolveCompletionItem(handle, suggestion, token))
|
|
172
|
-
: undefined
|
|
173
|
-
}));
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
protected provideCompletionItems(handle: number, model: monaco.editor.ITextModel, position: monaco.Position,
|
|
177
|
-
context: monaco.languages.CompletionContext, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.CompletionList> {
|
|
178
|
-
return this.proxy.$provideCompletionItems(handle, model.uri, position, context, token).then(result => {
|
|
179
|
-
if (!result) {
|
|
180
|
-
return undefined;
|
|
181
|
-
}
|
|
182
|
-
return {
|
|
183
|
-
suggestions: result.completions.map(c => Object.assign(c, {
|
|
184
|
-
range: c.range || result.defaultRange
|
|
185
|
-
})),
|
|
186
|
-
incomplete: result.incomplete,
|
|
187
|
-
dispose: () => this.proxy.$releaseCompletionItems(handle, result.id)
|
|
188
|
-
};
|
|
189
|
-
});
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
protected resolveCompletionItem(handle: number,
|
|
193
|
-
item: monaco.languages.CompletionItem, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.CompletionItem> {
|
|
194
|
-
const { parentId, id } = item as CompletionDto;
|
|
195
|
-
return this.proxy.$resolveCompletionItem(handle, [parentId, id], token).then(resolved => {
|
|
196
|
-
if (resolved) {
|
|
197
|
-
mixin(item, resolved, true);
|
|
198
|
-
}
|
|
199
|
-
return item;
|
|
200
|
-
});
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
$registerDefinitionProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
|
|
204
|
-
const languageSelector = this.toLanguageSelector(selector);
|
|
205
|
-
const definitionProvider = this.createDefinitionProvider(handle);
|
|
206
|
-
this.register(handle, (monaco.languages.registerDefinitionProvider as RegistrationFunction<monaco.languages.DefinitionProvider>)(languageSelector, definitionProvider));
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
$registerDeclarationProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
|
|
210
|
-
const languageSelector = this.toLanguageSelector(selector);
|
|
211
|
-
const declarationProvider = this.createDeclarationProvider(handle);
|
|
212
|
-
this.register(handle, (monaco.languages.registerDeclarationProvider as RegistrationFunction<monaco.languages.DeclarationProvider>)(languageSelector, declarationProvider));
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
$registerReferenceProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
|
|
216
|
-
const languageSelector = this.toLanguageSelector(selector);
|
|
217
|
-
const referenceProvider = this.createReferenceProvider(handle);
|
|
218
|
-
this.register(handle, (monaco.languages.registerReferenceProvider as RegistrationFunction<monaco.languages.ReferenceProvider>)(languageSelector, referenceProvider));
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
protected createReferenceProvider(handle: number): monaco.languages.ReferenceProvider {
|
|
222
|
-
return {
|
|
223
|
-
provideReferences: (model, position, context, token) => this.provideReferences(handle, model, position, context, token)
|
|
224
|
-
};
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
protected provideReferences(handle: number, model: monaco.editor.ITextModel, position: monaco.Position,
|
|
228
|
-
context: monaco.languages.ReferenceContext, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.Location[]> {
|
|
229
|
-
return this.proxy.$provideReferences(handle, model.uri, position, context, token).then(result => {
|
|
230
|
-
if (!result) {
|
|
231
|
-
return undefined;
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
if (Array.isArray(result)) {
|
|
235
|
-
const references: monaco.languages.Location[] = [];
|
|
236
|
-
for (const item of result) {
|
|
237
|
-
references.push({ ...item, uri: monaco.Uri.revive(item.uri) });
|
|
238
|
-
}
|
|
239
|
-
return references;
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
return undefined;
|
|
243
|
-
});
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
$registerSignatureHelpProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[], metadata: theia.SignatureHelpProviderMetadata): void {
|
|
247
|
-
const languageSelector = this.toLanguageSelector(selector);
|
|
248
|
-
const signatureHelpProvider = this.createSignatureHelpProvider(handle, metadata);
|
|
249
|
-
this.register(handle, (monaco.languages.registerSignatureHelpProvider as RegistrationFunction<monaco.languages.SignatureHelpProvider>)
|
|
250
|
-
(languageSelector, signatureHelpProvider));
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
$clearDiagnostics(id: string): void {
|
|
254
|
-
for (const uri of this.problemManager.getUris()) {
|
|
255
|
-
this.problemManager.setMarkers(new CoreURI(uri), id, []);
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
$changeDiagnostics(id: string, delta: [string, MarkerData[]][]): void {
|
|
260
|
-
for (const [uriString, markers] of delta) {
|
|
261
|
-
const uri = new CoreURI(uriString);
|
|
262
|
-
this.problemManager.setMarkers(uri, id, markers.map(reviveMarker));
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
$registerImplementationProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
|
|
267
|
-
const languageSelector = this.toLanguageSelector(selector);
|
|
268
|
-
const implementationProvider = this.createImplementationProvider(handle);
|
|
269
|
-
this.register(handle, (monaco.languages.registerImplementationProvider as RegistrationFunction<monaco.languages.ImplementationProvider>)
|
|
270
|
-
(languageSelector, implementationProvider));
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
protected createImplementationProvider(handle: number): monaco.languages.ImplementationProvider {
|
|
274
|
-
return {
|
|
275
|
-
provideImplementation: (model, position, token) => this.provideImplementation(handle, model, position, token)
|
|
276
|
-
};
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
protected provideImplementation(handle: number, model: monaco.editor.ITextModel,
|
|
280
|
-
position: monaco.Position, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.Definition> {
|
|
281
|
-
return this.proxy.$provideImplementation(handle, model.uri, position, token).then(result => {
|
|
282
|
-
if (!result) {
|
|
283
|
-
return undefined;
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
if (Array.isArray(result)) {
|
|
287
|
-
// using DefinitionLink because Location is mandatory part of DefinitionLink
|
|
288
|
-
const definitionLinks: monaco.languages.LocationLink[] = [];
|
|
289
|
-
for (const item of result) {
|
|
290
|
-
definitionLinks.push({ ...item, uri: monaco.Uri.revive(item.uri) });
|
|
291
|
-
}
|
|
292
|
-
return definitionLinks;
|
|
293
|
-
} else {
|
|
294
|
-
// single Location
|
|
295
|
-
return <monaco.languages.Location>{
|
|
296
|
-
uri: monaco.Uri.revive(result.uri),
|
|
297
|
-
range: result.range
|
|
298
|
-
};
|
|
299
|
-
}
|
|
300
|
-
});
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
$registerTypeDefinitionProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
|
|
304
|
-
const languageSelector = this.toLanguageSelector(selector);
|
|
305
|
-
const typeDefinitionProvider = this.createTypeDefinitionProvider(handle);
|
|
306
|
-
this.register(handle, (monaco.languages.registerTypeDefinitionProvider as RegistrationFunction<monaco.languages.TypeDefinitionProvider>)
|
|
307
|
-
(languageSelector, typeDefinitionProvider));
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
protected createTypeDefinitionProvider(handle: number): monaco.languages.TypeDefinitionProvider {
|
|
311
|
-
return {
|
|
312
|
-
provideTypeDefinition: (model, position, token) => this.provideTypeDefinition(handle, model, position, token)
|
|
313
|
-
};
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
protected provideTypeDefinition(handle: number, model: monaco.editor.ITextModel,
|
|
317
|
-
position: monaco.Position, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.Definition> {
|
|
318
|
-
return this.proxy.$provideTypeDefinition(handle, model.uri, position, token).then(result => {
|
|
319
|
-
if (!result) {
|
|
320
|
-
return undefined;
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
if (Array.isArray(result)) {
|
|
324
|
-
// using DefinitionLink because Location is mandatory part of DefinitionLink
|
|
325
|
-
const definitionLinks: monaco.languages.LocationLink[] = [];
|
|
326
|
-
for (const item of result) {
|
|
327
|
-
definitionLinks.push({ ...item, uri: monaco.Uri.revive(item.uri) });
|
|
328
|
-
}
|
|
329
|
-
return definitionLinks;
|
|
330
|
-
} else {
|
|
331
|
-
// single Location
|
|
332
|
-
return <monaco.languages.Location>{
|
|
333
|
-
uri: monaco.Uri.revive(result.uri),
|
|
334
|
-
range: result.range
|
|
335
|
-
};
|
|
336
|
-
}
|
|
337
|
-
});
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
$registerHoverProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
|
|
341
|
-
const languageSelector = this.toLanguageSelector(selector);
|
|
342
|
-
const hoverProvider = this.createHoverProvider(handle);
|
|
343
|
-
this.register(handle, (monaco.languages.registerHoverProvider as RegistrationFunction<monaco.languages.HoverProvider>)(languageSelector, hoverProvider));
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
protected createHoverProvider(handle: number): monaco.languages.HoverProvider {
|
|
347
|
-
return {
|
|
348
|
-
provideHover: (model, position, token) => this.provideHover(handle, model, position, token)
|
|
349
|
-
};
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
protected provideHover(handle: number, model: monaco.editor.ITextModel, position: monaco.Position,
|
|
353
|
-
token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.Hover> {
|
|
354
|
-
return this.proxy.$provideHover(handle, model.uri, position, token);
|
|
355
|
-
}
|
|
356
|
-
|
|
357
|
-
$registerEvaluatableExpressionProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
|
|
358
|
-
const languageSelector = this.toLanguageSelector(selector);
|
|
359
|
-
const evaluatableExpressionProvider = this.createEvaluatableExpressionProvider(handle);
|
|
360
|
-
this.register(handle,
|
|
361
|
-
(StandaloneServices.get(ILanguageFeaturesService).evaluatableExpressionProvider.register as RegistrationFunction<EvaluatableExpressionProvider>)
|
|
362
|
-
(languageSelector, evaluatableExpressionProvider));
|
|
363
|
-
}
|
|
364
|
-
|
|
365
|
-
protected createEvaluatableExpressionProvider(handle: number): EvaluatableExpressionProvider {
|
|
366
|
-
return {
|
|
367
|
-
provideEvaluatableExpression: (model, position, token) => this.provideEvaluatableExpression(handle, model, position, token)
|
|
368
|
-
};
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
protected provideEvaluatableExpression(handle: number, model: ITextModel, position: monaco.Position,
|
|
372
|
-
token: monaco.CancellationToken): monaco.languages.ProviderResult<EvaluatableExpression | undefined> {
|
|
373
|
-
return this.proxy.$provideEvaluatableExpression(handle, model.uri, position, token);
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
$registerInlineValuesProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
|
|
377
|
-
const languageSelector = this.toLanguageSelector(selector);
|
|
378
|
-
const inlineValuesProvider = this.createInlineValuesProvider(handle);
|
|
379
|
-
this.register(handle,
|
|
380
|
-
(StandaloneServices.get(ILanguageFeaturesService).inlineValuesProvider.register as RegistrationFunction<InlineValuesProvider>)
|
|
381
|
-
(languageSelector, inlineValuesProvider));
|
|
382
|
-
}
|
|
383
|
-
|
|
384
|
-
protected createInlineValuesProvider(handle: number): InlineValuesProvider {
|
|
385
|
-
return {
|
|
386
|
-
provideInlineValues: (model, range, context, token) => this.provideInlineValues(handle, model, range, context, token)
|
|
387
|
-
};
|
|
388
|
-
}
|
|
389
|
-
|
|
390
|
-
protected provideInlineValues(handle: number, model: ITextModel, range: Range,
|
|
391
|
-
context: InlineValueContext, token: monaco.CancellationToken): monaco.languages.ProviderResult<InlineValue[] | undefined> {
|
|
392
|
-
return this.proxy.$provideInlineValues(handle, model.uri, range, context, token);
|
|
393
|
-
}
|
|
394
|
-
|
|
395
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
396
|
-
$emitInlineValuesEvent(eventHandle: number, event?: any): void {
|
|
397
|
-
const obj = this.services.get(eventHandle);
|
|
398
|
-
if (obj instanceof Emitter) {
|
|
399
|
-
obj.fire(event);
|
|
400
|
-
}
|
|
401
|
-
}
|
|
402
|
-
|
|
403
|
-
$registerDocumentHighlightProvider(handle: number, _pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
|
|
404
|
-
const languageSelector = this.toLanguageSelector(selector);
|
|
405
|
-
const documentHighlightProvider = this.createDocumentHighlightProvider(handle);
|
|
406
|
-
this.register(handle, (monaco.languages.registerDocumentHighlightProvider as RegistrationFunction<monaco.languages.DocumentHighlightProvider>)
|
|
407
|
-
(languageSelector, documentHighlightProvider));
|
|
408
|
-
}
|
|
409
|
-
|
|
410
|
-
protected createDocumentHighlightProvider(handle: number): monaco.languages.DocumentHighlightProvider {
|
|
411
|
-
return {
|
|
412
|
-
provideDocumentHighlights: (model, position, token) => this.provideDocumentHighlights(handle, model, position, token)
|
|
413
|
-
};
|
|
414
|
-
}
|
|
415
|
-
|
|
416
|
-
protected provideDocumentHighlights(handle: number, model: monaco.editor.ITextModel, position: monaco.Position,
|
|
417
|
-
token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.DocumentHighlight[]> {
|
|
418
|
-
return this.proxy.$provideDocumentHighlights(handle, model.uri, position, token).then(result => {
|
|
419
|
-
if (!result) {
|
|
420
|
-
return undefined;
|
|
421
|
-
}
|
|
422
|
-
|
|
423
|
-
if (Array.isArray(result)) {
|
|
424
|
-
const highlights: monaco.languages.DocumentHighlight[] = [];
|
|
425
|
-
for (const item of result) {
|
|
426
|
-
highlights.push(
|
|
427
|
-
{
|
|
428
|
-
...item,
|
|
429
|
-
kind: (item.kind ? item.kind : monaco.languages.DocumentHighlightKind.Text)
|
|
430
|
-
});
|
|
431
|
-
}
|
|
432
|
-
return highlights;
|
|
433
|
-
}
|
|
434
|
-
|
|
435
|
-
return undefined;
|
|
436
|
-
});
|
|
437
|
-
}
|
|
438
|
-
|
|
439
|
-
$registerWorkspaceSymbolProvider(handle: number, pluginInfo: PluginInfo): void {
|
|
440
|
-
const workspaceSymbolProvider = this.createWorkspaceSymbolProvider(handle);
|
|
441
|
-
this.register(handle, this.monacoLanguages.registerWorkspaceSymbolProvider(workspaceSymbolProvider));
|
|
442
|
-
}
|
|
443
|
-
|
|
444
|
-
protected createWorkspaceSymbolProvider(handle: number): WorkspaceSymbolProvider {
|
|
445
|
-
return {
|
|
446
|
-
provideWorkspaceSymbols: (params, token) => this.provideWorkspaceSymbols(handle, params, token),
|
|
447
|
-
resolveWorkspaceSymbol: (symbol, token) => this.resolveWorkspaceSymbol(handle, symbol, token)
|
|
448
|
-
};
|
|
449
|
-
}
|
|
450
|
-
|
|
451
|
-
protected provideWorkspaceSymbols(handle: number, params: WorkspaceSymbolParams, token: monaco.CancellationToken): Thenable<vst.SymbolInformation[]> {
|
|
452
|
-
return this.proxy.$provideWorkspaceSymbols(handle, params.query, token);
|
|
453
|
-
}
|
|
454
|
-
|
|
455
|
-
protected resolveWorkspaceSymbol(handle: number, symbol: vst.SymbolInformation, token: monaco.CancellationToken): Thenable<vst.SymbolInformation | undefined> {
|
|
456
|
-
return this.proxy.$resolveWorkspaceSymbol(handle, symbol, token);
|
|
457
|
-
}
|
|
458
|
-
|
|
459
|
-
$registerDocumentLinkProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
|
|
460
|
-
const languageSelector = this.toLanguageSelector(selector);
|
|
461
|
-
const linkProvider = this.createLinkProvider(handle);
|
|
462
|
-
this.register(handle, (monaco.languages.registerLinkProvider as RegistrationFunction<monaco.languages.LinkProvider>)(languageSelector, linkProvider));
|
|
463
|
-
}
|
|
464
|
-
|
|
465
|
-
protected createLinkProvider(handle: number): monaco.languages.LinkProvider {
|
|
466
|
-
return {
|
|
467
|
-
provideLinks: async (model, token) => this.provideLinks(handle, model, token),
|
|
468
|
-
resolveLink: async (link, token) => this.resolveLink(handle, link, token)
|
|
469
|
-
};
|
|
470
|
-
}
|
|
471
|
-
|
|
472
|
-
protected async provideLinks(handle: number, model: monaco.editor.ITextModel,
|
|
473
|
-
token: monaco.CancellationToken): Promise<monaco.languages.ProviderResult<monaco.languages.ILinksList>> {
|
|
474
|
-
const links = await this.proxy.$provideDocumentLinks(handle, model.uri, token);
|
|
475
|
-
if (!links) {
|
|
476
|
-
return undefined;
|
|
477
|
-
}
|
|
478
|
-
return {
|
|
479
|
-
links: links.map(link => this.toMonacoLink(link)),
|
|
480
|
-
dispose: () => {
|
|
481
|
-
if (links && Array.isArray(links)) {
|
|
482
|
-
this.proxy.$releaseDocumentLinks(handle, links.map(link => ObjectIdentifier.of(link)));
|
|
483
|
-
}
|
|
484
|
-
}
|
|
485
|
-
};
|
|
486
|
-
}
|
|
487
|
-
|
|
488
|
-
protected async resolveLink(handle: number, link: monaco.languages.ILink,
|
|
489
|
-
token: monaco.CancellationToken): Promise<monaco.languages.ProviderResult<monaco.languages.ILink>> {
|
|
490
|
-
const resolved = await this.proxy.$resolveDocumentLink(handle, link, token);
|
|
491
|
-
return resolved && this.toMonacoLink(resolved);
|
|
492
|
-
}
|
|
493
|
-
|
|
494
|
-
protected toMonacoLink(link: DocumentLink): monaco.languages.ILink {
|
|
495
|
-
return {
|
|
496
|
-
...link,
|
|
497
|
-
url: !!link.url && typeof link.url !== 'string' ? monaco.Uri.revive(link.url) : link.url
|
|
498
|
-
};
|
|
499
|
-
}
|
|
500
|
-
|
|
501
|
-
$registerCodeLensSupport(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[], eventHandle: number): void {
|
|
502
|
-
const languageSelector = this.toLanguageSelector(selector);
|
|
503
|
-
const lensProvider = this.createCodeLensProvider(handle);
|
|
504
|
-
|
|
505
|
-
if (typeof eventHandle === 'number') {
|
|
506
|
-
const emitter = new Emitter<monaco.languages.CodeLensProvider>();
|
|
507
|
-
this.register(eventHandle, emitter);
|
|
508
|
-
lensProvider.onDidChange = emitter.event;
|
|
509
|
-
}
|
|
510
|
-
|
|
511
|
-
this.register(handle, (monaco.languages.registerCodeLensProvider as RegistrationFunction<monaco.languages.CodeLensProvider>)(languageSelector, lensProvider));
|
|
512
|
-
}
|
|
513
|
-
|
|
514
|
-
protected createCodeLensProvider(handle: number): monaco.languages.CodeLensProvider {
|
|
515
|
-
return {
|
|
516
|
-
provideCodeLenses: async (model, token) => this.provideCodeLenses(handle, model, token),
|
|
517
|
-
resolveCodeLens: (model, codeLens, token) => this.resolveCodeLens(handle, model, codeLens, token)
|
|
518
|
-
};
|
|
519
|
-
}
|
|
520
|
-
|
|
521
|
-
protected async provideCodeLenses(handle: number, model: monaco.editor.ITextModel,
|
|
522
|
-
token: monaco.CancellationToken): Promise<monaco.languages.ProviderResult<monaco.languages.CodeLensList>> {
|
|
523
|
-
const lenses = await this.proxy.$provideCodeLenses(handle, model.uri, token);
|
|
524
|
-
if (!lenses) {
|
|
525
|
-
return undefined;
|
|
526
|
-
}
|
|
527
|
-
return {
|
|
528
|
-
lenses,
|
|
529
|
-
dispose: () => {
|
|
530
|
-
if (lenses && Array.isArray(lenses)) {
|
|
531
|
-
this.proxy.$releaseCodeLenses(handle, lenses.map(symbol => ObjectIdentifier.of(symbol)));
|
|
532
|
-
}
|
|
533
|
-
}
|
|
534
|
-
};
|
|
535
|
-
}
|
|
536
|
-
|
|
537
|
-
protected resolveCodeLens(handle: number, model: monaco.editor.ITextModel,
|
|
538
|
-
codeLens: monaco.languages.CodeLens, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.CodeLens> {
|
|
539
|
-
return this.proxy.$resolveCodeLens(handle, model.uri, codeLens, token);
|
|
540
|
-
}
|
|
541
|
-
|
|
542
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
543
|
-
$emitCodeLensEvent(eventHandle: number, event?: any): void {
|
|
544
|
-
const obj = this.services.get(eventHandle);
|
|
545
|
-
if (obj instanceof Emitter) {
|
|
546
|
-
obj.fire(event);
|
|
547
|
-
}
|
|
548
|
-
}
|
|
549
|
-
|
|
550
|
-
$registerOutlineSupport(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[], displayName?: string): void {
|
|
551
|
-
const languageSelector = this.toLanguageSelector(selector);
|
|
552
|
-
const symbolProvider = this.createDocumentSymbolProvider(handle, displayName);
|
|
553
|
-
this.register(handle, (monaco.languages.registerDocumentSymbolProvider as RegistrationFunction<monaco.languages.DocumentSymbolProvider>)(languageSelector, symbolProvider));
|
|
554
|
-
}
|
|
555
|
-
|
|
556
|
-
protected createDocumentSymbolProvider(handle: number, displayName?: string): monaco.languages.DocumentSymbolProvider {
|
|
557
|
-
return {
|
|
558
|
-
displayName,
|
|
559
|
-
provideDocumentSymbols: (model, token) => this.provideDocumentSymbols(handle, model, token)
|
|
560
|
-
};
|
|
561
|
-
}
|
|
562
|
-
|
|
563
|
-
protected provideDocumentSymbols(handle: number, model: monaco.editor.ITextModel,
|
|
564
|
-
token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.DocumentSymbol[]> {
|
|
565
|
-
return this.proxy.$provideDocumentSymbols(handle, model.uri, token);
|
|
566
|
-
}
|
|
567
|
-
|
|
568
|
-
protected createDefinitionProvider(handle: number): monaco.languages.DefinitionProvider {
|
|
569
|
-
return {
|
|
570
|
-
provideDefinition: (model, position, token) => this.provideDefinition(handle, model, position, token)
|
|
571
|
-
};
|
|
572
|
-
}
|
|
573
|
-
|
|
574
|
-
protected createDeclarationProvider(handle: number): monaco.languages.DeclarationProvider {
|
|
575
|
-
return {
|
|
576
|
-
provideDeclaration: (model, position, token) => this.provideDeclaration(handle, model, position, token)
|
|
577
|
-
};
|
|
578
|
-
}
|
|
579
|
-
|
|
580
|
-
protected provideDeclaration(handle: number, model: monaco.editor.ITextModel, position: monaco.Position,
|
|
581
|
-
token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.Definition> {
|
|
582
|
-
return this.proxy.$provideDeclaration(handle, model.uri, position, token).then(result => {
|
|
583
|
-
if (!result) {
|
|
584
|
-
return undefined;
|
|
585
|
-
}
|
|
586
|
-
|
|
587
|
-
if (Array.isArray(result)) {
|
|
588
|
-
// using DefinitionLink because Location is mandatory part of DefinitionLink
|
|
589
|
-
const definitionLinks: monaco.languages.LocationLink[] = [];
|
|
590
|
-
for (const item of result) {
|
|
591
|
-
definitionLinks.push({ ...item, uri: monaco.Uri.revive(item.uri) });
|
|
592
|
-
}
|
|
593
|
-
return definitionLinks;
|
|
594
|
-
} else {
|
|
595
|
-
// single Location
|
|
596
|
-
return <monaco.languages.Location>{
|
|
597
|
-
uri: monaco.Uri.revive(result.uri),
|
|
598
|
-
range: result.range
|
|
599
|
-
};
|
|
600
|
-
}
|
|
601
|
-
});
|
|
602
|
-
}
|
|
603
|
-
|
|
604
|
-
protected provideDefinition(handle: number, model: monaco.editor.ITextModel,
|
|
605
|
-
position: monaco.Position, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.Definition> {
|
|
606
|
-
return this.proxy.$provideDefinition(handle, model.uri, position, token).then(result => {
|
|
607
|
-
if (!result) {
|
|
608
|
-
return undefined;
|
|
609
|
-
}
|
|
610
|
-
|
|
611
|
-
if (Array.isArray(result)) {
|
|
612
|
-
// using DefinitionLink because Location is mandatory part of DefinitionLink
|
|
613
|
-
const definitionLinks: monaco.languages.LocationLink[] = [];
|
|
614
|
-
for (const item of result) {
|
|
615
|
-
definitionLinks.push({ ...item, uri: monaco.Uri.revive(item.uri) });
|
|
616
|
-
}
|
|
617
|
-
return definitionLinks;
|
|
618
|
-
} else {
|
|
619
|
-
// single Location
|
|
620
|
-
return <monaco.languages.Location>{
|
|
621
|
-
uri: monaco.Uri.revive(result.uri),
|
|
622
|
-
range: result.range
|
|
623
|
-
};
|
|
624
|
-
}
|
|
625
|
-
});
|
|
626
|
-
}
|
|
627
|
-
|
|
628
|
-
protected createSignatureHelpProvider(handle: number, metadata: theia.SignatureHelpProviderMetadata): monaco.languages.SignatureHelpProvider {
|
|
629
|
-
return {
|
|
630
|
-
signatureHelpTriggerCharacters: metadata.triggerCharacters,
|
|
631
|
-
signatureHelpRetriggerCharacters: metadata.retriggerCharacters,
|
|
632
|
-
provideSignatureHelp: async (model, position, token, context) => this.provideSignatureHelp(handle, model, position, token, context)
|
|
633
|
-
};
|
|
634
|
-
}
|
|
635
|
-
|
|
636
|
-
protected async provideSignatureHelp(handle: number, model: monaco.editor.ITextModel,
|
|
637
|
-
position: monaco.Position, token: monaco.CancellationToken,
|
|
638
|
-
context: monaco.languages.SignatureHelpContext): Promise<monaco.languages.ProviderResult<monaco.languages.SignatureHelpResult>> {
|
|
639
|
-
const value = await this.proxy.$provideSignatureHelp(handle, model.uri, position, context, token);
|
|
640
|
-
if (!value) {
|
|
641
|
-
return undefined;
|
|
642
|
-
}
|
|
643
|
-
return {
|
|
644
|
-
value,
|
|
645
|
-
dispose: () => {
|
|
646
|
-
if (typeof value.id === 'number') {
|
|
647
|
-
this.proxy.$releaseSignatureHelp(handle, value.id);
|
|
648
|
-
}
|
|
649
|
-
}
|
|
650
|
-
};
|
|
651
|
-
}
|
|
652
|
-
|
|
653
|
-
$registerDocumentFormattingSupport(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
|
|
654
|
-
const languageSelector = this.toLanguageSelector(selector);
|
|
655
|
-
const documentFormattingEditSupport = this.createDocumentFormattingSupport(handle, pluginInfo);
|
|
656
|
-
this.register(handle, (monaco.languages.registerDocumentFormattingEditProvider as RegistrationFunction<monaco.languages.DocumentFormattingEditProvider>)
|
|
657
|
-
(languageSelector, documentFormattingEditSupport));
|
|
658
|
-
}
|
|
659
|
-
|
|
660
|
-
createDocumentFormattingSupport(handle: number, pluginInfo: PluginInfo): monaco.languages.DocumentFormattingEditProvider {
|
|
661
|
-
const provider: monaco.languages.DocumentFormattingEditProvider & { extensionId: ExtensionIdentifier } = {
|
|
662
|
-
extensionId: new ExtensionIdentifier(pluginInfo.id),
|
|
663
|
-
displayName: pluginInfo.name,
|
|
664
|
-
provideDocumentFormattingEdits: (model, options, token) =>
|
|
665
|
-
this.provideDocumentFormattingEdits(handle, model, options, token)
|
|
666
|
-
};
|
|
667
|
-
|
|
668
|
-
return provider;
|
|
669
|
-
}
|
|
670
|
-
|
|
671
|
-
protected provideDocumentFormattingEdits(handle: number, model: monaco.editor.ITextModel,
|
|
672
|
-
options: monaco.languages.FormattingOptions, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.TextEdit[]> {
|
|
673
|
-
return this.proxy.$provideDocumentFormattingEdits(handle, model.uri, options, token);
|
|
674
|
-
}
|
|
675
|
-
|
|
676
|
-
$registerRangeFormattingSupport(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
|
|
677
|
-
const languageSelector = this.toLanguageSelector(selector);
|
|
678
|
-
const rangeFormattingEditProvider = this.createRangeFormattingSupport(handle, pluginInfo);
|
|
679
|
-
this.register(handle, (monaco.languages.registerDocumentRangeFormattingEditProvider as RegistrationFunction<monaco.languages.DocumentRangeFormattingEditProvider>)
|
|
680
|
-
(languageSelector, rangeFormattingEditProvider));
|
|
681
|
-
}
|
|
682
|
-
|
|
683
|
-
createRangeFormattingSupport(handle: number, pluginInfo: PluginInfo): monaco.languages.DocumentRangeFormattingEditProvider {
|
|
684
|
-
const provider: monaco.languages.DocumentRangeFormattingEditProvider & { extensionId: ExtensionIdentifier } = {
|
|
685
|
-
extensionId: new ExtensionIdentifier(pluginInfo.id),
|
|
686
|
-
displayName: pluginInfo.name,
|
|
687
|
-
provideDocumentRangeFormattingEdits: (model, range: Range, options, token) =>
|
|
688
|
-
this.provideDocumentRangeFormattingEdits(handle, model, range, options, token)
|
|
689
|
-
};
|
|
690
|
-
|
|
691
|
-
return provider;
|
|
692
|
-
}
|
|
693
|
-
|
|
694
|
-
protected provideDocumentRangeFormattingEdits(handle: number, model: monaco.editor.ITextModel,
|
|
695
|
-
range: Range, options: monaco.languages.FormattingOptions, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.TextEdit[]> {
|
|
696
|
-
return this.proxy.$provideDocumentRangeFormattingEdits(handle, model.uri, range, options, token);
|
|
697
|
-
}
|
|
698
|
-
|
|
699
|
-
$registerOnTypeFormattingProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[], autoFormatTriggerCharacters: string[]): void {
|
|
700
|
-
const languageSelector = this.toLanguageSelector(selector);
|
|
701
|
-
const onTypeFormattingProvider = this.createOnTypeFormattingProvider(handle, autoFormatTriggerCharacters);
|
|
702
|
-
this.register(handle, (monaco.languages.registerOnTypeFormattingEditProvider as RegistrationFunction<monaco.languages.OnTypeFormattingEditProvider>)
|
|
703
|
-
(languageSelector, onTypeFormattingProvider));
|
|
704
|
-
}
|
|
705
|
-
|
|
706
|
-
protected createOnTypeFormattingProvider(
|
|
707
|
-
handle: number,
|
|
708
|
-
autoFormatTriggerCharacters: string[]
|
|
709
|
-
): monaco.languages.OnTypeFormattingEditProvider {
|
|
710
|
-
return {
|
|
711
|
-
autoFormatTriggerCharacters,
|
|
712
|
-
provideOnTypeFormattingEdits: (model, position, ch, options, token) => this.provideOnTypeFormattingEdits(handle, model, position, ch, options, token)
|
|
713
|
-
};
|
|
714
|
-
}
|
|
715
|
-
|
|
716
|
-
protected provideOnTypeFormattingEdits(handle: number, model: monaco.editor.ITextModel, position: monaco.Position,
|
|
717
|
-
ch: string, options: monaco.languages.FormattingOptions, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.TextEdit[]> {
|
|
718
|
-
return this.proxy.$provideOnTypeFormattingEdits(handle, model.uri, position, ch, options, token);
|
|
719
|
-
}
|
|
720
|
-
|
|
721
|
-
$registerFoldingRangeProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[], eventHandle: number | undefined): void {
|
|
722
|
-
const languageSelector = this.toLanguageSelector(selector);
|
|
723
|
-
const provider = this.createFoldingRangeProvider(handle);
|
|
724
|
-
|
|
725
|
-
if (typeof eventHandle === 'number') {
|
|
726
|
-
const emitter = new Emitter<monaco.languages.FoldingRangeProvider>();
|
|
727
|
-
this.services.set(eventHandle, emitter);
|
|
728
|
-
provider.onDidChange = emitter.event;
|
|
729
|
-
}
|
|
730
|
-
|
|
731
|
-
this.register(handle, (monaco.languages.registerFoldingRangeProvider as RegistrationFunction<monaco.languages.FoldingRangeProvider>)(languageSelector, provider));
|
|
732
|
-
}
|
|
733
|
-
|
|
734
|
-
createFoldingRangeProvider(handle: number): monaco.languages.FoldingRangeProvider {
|
|
735
|
-
return {
|
|
736
|
-
provideFoldingRanges: (model, context, token) => this.provideFoldingRanges(handle, model, context, token)
|
|
737
|
-
};
|
|
738
|
-
}
|
|
739
|
-
|
|
740
|
-
$emitFoldingRangeEvent(eventHandle: number, event?: unknown): void {
|
|
741
|
-
const obj = this.services.get(eventHandle);
|
|
742
|
-
if (obj instanceof Emitter) {
|
|
743
|
-
obj.fire(event);
|
|
744
|
-
}
|
|
745
|
-
}
|
|
746
|
-
|
|
747
|
-
protected provideFoldingRanges(handle: number, model: monaco.editor.ITextModel,
|
|
748
|
-
context: monaco.languages.FoldingContext, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.FoldingRange[]> {
|
|
749
|
-
return this.proxy.$provideFoldingRange(handle, model.uri, context, token);
|
|
750
|
-
}
|
|
751
|
-
|
|
752
|
-
$registerSelectionRangeProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
|
|
753
|
-
const languageSelector = this.toLanguageSelector(selector);
|
|
754
|
-
const provider = this.createSelectionRangeProvider(handle);
|
|
755
|
-
this.register(handle, (monaco.languages.registerSelectionRangeProvider as RegistrationFunction<monaco.languages.SelectionRangeProvider>)(languageSelector, provider));
|
|
756
|
-
}
|
|
757
|
-
|
|
758
|
-
protected createSelectionRangeProvider(handle: number): monaco.languages.SelectionRangeProvider {
|
|
759
|
-
return {
|
|
760
|
-
provideSelectionRanges: (model, positions, token) => this.provideSelectionRanges(handle, model, positions, token)
|
|
761
|
-
};
|
|
762
|
-
}
|
|
763
|
-
|
|
764
|
-
protected provideSelectionRanges(handle: number, model: monaco.editor.ITextModel,
|
|
765
|
-
positions: monaco.Position[], token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.SelectionRange[][]> {
|
|
766
|
-
return this.proxy.$provideSelectionRanges(handle, model.uri, positions, token);
|
|
767
|
-
}
|
|
768
|
-
|
|
769
|
-
$registerDocumentColorProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
|
|
770
|
-
const languageSelector = this.toLanguageSelector(selector);
|
|
771
|
-
const colorProvider = this.createColorProvider(handle);
|
|
772
|
-
this.register(handle, (monaco.languages.registerColorProvider as RegistrationFunction<monaco.languages.DocumentColorProvider>)(languageSelector, colorProvider));
|
|
773
|
-
}
|
|
774
|
-
|
|
775
|
-
createColorProvider(handle: number): monaco.languages.DocumentColorProvider {
|
|
776
|
-
return {
|
|
777
|
-
provideDocumentColors: (model, token) => this.provideDocumentColors(handle, model, token),
|
|
778
|
-
provideColorPresentations: (model, colorInfo, token) => this.provideColorPresentations(handle, model, colorInfo, token)
|
|
779
|
-
};
|
|
780
|
-
}
|
|
781
|
-
|
|
782
|
-
protected provideDocumentColors(handle: number, model: monaco.editor.ITextModel,
|
|
783
|
-
token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.IColorInformation[]> {
|
|
784
|
-
return this.proxy.$provideDocumentColors(handle, model.uri, token).then(documentColors =>
|
|
785
|
-
documentColors.map(documentColor => {
|
|
786
|
-
const [red, green, blue, alpha] = documentColor.color;
|
|
787
|
-
const color = {
|
|
788
|
-
red: red,
|
|
789
|
-
green: green,
|
|
790
|
-
blue: blue,
|
|
791
|
-
alpha: alpha
|
|
792
|
-
};
|
|
793
|
-
|
|
794
|
-
return {
|
|
795
|
-
color,
|
|
796
|
-
range: documentColor.range
|
|
797
|
-
};
|
|
798
|
-
})
|
|
799
|
-
);
|
|
800
|
-
}
|
|
801
|
-
|
|
802
|
-
protected provideColorPresentations(handle: number, model: monaco.editor.ITextModel,
|
|
803
|
-
colorInfo: monaco.languages.IColorInformation, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.IColorPresentation[]> {
|
|
804
|
-
return this.proxy.$provideColorPresentations(handle, model.uri, {
|
|
805
|
-
color: [
|
|
806
|
-
colorInfo.color.red,
|
|
807
|
-
colorInfo.color.green,
|
|
808
|
-
colorInfo.color.blue,
|
|
809
|
-
colorInfo.color.alpha
|
|
810
|
-
],
|
|
811
|
-
range: colorInfo.range
|
|
812
|
-
}, token);
|
|
813
|
-
}
|
|
814
|
-
|
|
815
|
-
$registerInlayHintsProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[], displayName?: string, eventHandle?: number): void {
|
|
816
|
-
const languageSelector = this.toLanguageSelector(selector);
|
|
817
|
-
const inlayHintsProvider = this.createInlayHintsProvider(handle);
|
|
818
|
-
if (typeof eventHandle === 'number') {
|
|
819
|
-
const emitter = new Emitter<void>();
|
|
820
|
-
this.register(eventHandle, emitter);
|
|
821
|
-
inlayHintsProvider.onDidChangeInlayHints = emitter.event;
|
|
822
|
-
}
|
|
823
|
-
this.register(handle, (monaco.languages.registerInlayHintsProvider as RegistrationFunction<monaco.languages.InlayHintsProvider>)(languageSelector, inlayHintsProvider));
|
|
824
|
-
|
|
825
|
-
}
|
|
826
|
-
|
|
827
|
-
createInlayHintsProvider(handle: number): monaco.languages.InlayHintsProvider {
|
|
828
|
-
return {
|
|
829
|
-
provideInlayHints: async (model: monaco.editor.ITextModel, range: Range, token: monaco.CancellationToken): Promise<monaco.languages.InlayHintList | undefined> => {
|
|
830
|
-
const result = await this.proxy.$provideInlayHints(handle, model.uri, range, token);
|
|
831
|
-
if (!result) {
|
|
832
|
-
return;
|
|
833
|
-
}
|
|
834
|
-
return {
|
|
835
|
-
hints: result.hints.map(hint => reviveHint(hint)),
|
|
836
|
-
dispose: () => {
|
|
837
|
-
if (typeof result.cacheId === 'number') {
|
|
838
|
-
this.proxy.$releaseInlayHints(handle, result.cacheId);
|
|
839
|
-
}
|
|
840
|
-
}
|
|
841
|
-
};
|
|
842
|
-
},
|
|
843
|
-
resolveInlayHint: async (hint, token): Promise<monaco.languages.InlayHint | undefined> => {
|
|
844
|
-
const dto: InlayHintDto = hint;
|
|
845
|
-
if (typeof dto.cacheId !== 'number') {
|
|
846
|
-
return hint;
|
|
847
|
-
}
|
|
848
|
-
const result = await this.proxy.$resolveInlayHint(handle, dto.cacheId, token);
|
|
849
|
-
if (token.isCancellationRequested) {
|
|
850
|
-
return undefined;
|
|
851
|
-
}
|
|
852
|
-
if (!result) {
|
|
853
|
-
return hint;
|
|
854
|
-
}
|
|
855
|
-
return {
|
|
856
|
-
...hint,
|
|
857
|
-
tooltip: result.tooltip,
|
|
858
|
-
label: reviveInlayLabel(result.label)
|
|
859
|
-
};
|
|
860
|
-
},
|
|
861
|
-
};
|
|
862
|
-
}
|
|
863
|
-
|
|
864
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
865
|
-
$emitInlayHintsEvent(eventHandle: number, event?: any): void {
|
|
866
|
-
const obj = this.services.get(eventHandle);
|
|
867
|
-
if (obj instanceof Emitter) {
|
|
868
|
-
obj.fire(event);
|
|
869
|
-
}
|
|
870
|
-
}
|
|
871
|
-
|
|
872
|
-
$registerInlineCompletionsSupport(handle: number, selector: SerializedDocumentFilter[]): void {
|
|
873
|
-
const languageSelector = this.toLanguageSelector(selector);
|
|
874
|
-
const provider: monaco.languages.InlineCompletionsProvider<IdentifiableInlineCompletions> = {
|
|
875
|
-
provideInlineCompletions: async (
|
|
876
|
-
model: monaco.editor.ITextModel,
|
|
877
|
-
position: monaco.Position,
|
|
878
|
-
context: monaco.languages.InlineCompletionContext,
|
|
879
|
-
token: CancellationToken
|
|
880
|
-
): Promise<IdentifiableInlineCompletions | undefined> => this.proxy.$provideInlineCompletions(handle, model.uri, position, context, token),
|
|
881
|
-
freeInlineCompletions: (completions: IdentifiableInlineCompletions): void => {
|
|
882
|
-
this.proxy.$freeInlineCompletionsList(handle, completions.pid);
|
|
883
|
-
}
|
|
884
|
-
};
|
|
885
|
-
this.register(handle, (monaco.languages.registerInlineCompletionsProvider as RegistrationFunction<monaco.languages.InlineCompletionsProvider>)(languageSelector, provider));
|
|
886
|
-
}
|
|
887
|
-
|
|
888
|
-
$registerQuickFixProvider(
|
|
889
|
-
handle: number,
|
|
890
|
-
pluginInfo: PluginInfo,
|
|
891
|
-
selector: SerializedDocumentFilter[],
|
|
892
|
-
providedCodeActionKinds?: string[],
|
|
893
|
-
documentation?: CodeActionProviderDocumentation
|
|
894
|
-
): void {
|
|
895
|
-
const languageSelector = this.toLanguageSelector(selector);
|
|
896
|
-
const quickFixProvider: monaco.languages.CodeActionProvider = {
|
|
897
|
-
provideCodeActions: (model, range, context, token) => {
|
|
898
|
-
const markers = StandaloneServices.get(IMarkerService)
|
|
899
|
-
.read({ resource: model.uri })
|
|
900
|
-
.filter(m => monaco.Range.areIntersectingOrTouching(m, range)) as monaco.editor.IMarkerData[];
|
|
901
|
-
return this.provideCodeActions(handle, model, range, { ...context, markers }, token);
|
|
902
|
-
},
|
|
903
|
-
resolveCodeAction: (codeAction, token) => this.resolveCodeAction(handle, codeAction, token)
|
|
904
|
-
};
|
|
905
|
-
this.register(handle, (monaco.languages.registerCodeActionProvider as RegistrationFunction<monaco.languages.CodeActionProvider>)(languageSelector, quickFixProvider));
|
|
906
|
-
}
|
|
907
|
-
|
|
908
|
-
protected async provideCodeActions(
|
|
909
|
-
handle: number,
|
|
910
|
-
model: monaco.editor.ITextModel,
|
|
911
|
-
rangeOrSelection: Range,
|
|
912
|
-
context: monaco.languages.CodeActionContext,
|
|
913
|
-
token: monaco.CancellationToken
|
|
914
|
-
): Promise<monaco.languages.CodeActionList | undefined> {
|
|
915
|
-
const actions = await this.proxy.$provideCodeActions(handle, model.uri, rangeOrSelection, this.toModelCodeActionContext(context), token);
|
|
916
|
-
if (!actions) {
|
|
917
|
-
return undefined;
|
|
918
|
-
}
|
|
919
|
-
return {
|
|
920
|
-
actions: actions.map(a => toMonacoAction(a)),
|
|
921
|
-
dispose: () => this.proxy.$releaseCodeActions(handle, actions.map(a => a.cacheId))
|
|
922
|
-
};
|
|
923
|
-
}
|
|
924
|
-
|
|
925
|
-
protected toModelCodeActionContext(context: monaco.languages.CodeActionContext): CodeActionContext {
|
|
926
|
-
return {
|
|
927
|
-
...context,
|
|
928
|
-
trigger: this.toCodeActionTriggerKind(context.trigger)
|
|
929
|
-
};
|
|
930
|
-
}
|
|
931
|
-
|
|
932
|
-
toCodeActionTriggerKind(type: monaco.languages.CodeActionTriggerType): CodeActionTriggerKind {
|
|
933
|
-
switch (type) {
|
|
934
|
-
case monaco.languages.CodeActionTriggerType.Auto:
|
|
935
|
-
return CodeActionTriggerKind.Automatic;
|
|
936
|
-
case monaco.languages.CodeActionTriggerType.Invoke:
|
|
937
|
-
return CodeActionTriggerKind.Invoke;
|
|
938
|
-
}
|
|
939
|
-
}
|
|
940
|
-
|
|
941
|
-
protected async resolveCodeAction(handle: number, codeAction: monaco.languages.CodeAction, token: monaco.CancellationToken): Promise<monaco.languages.CodeAction> {
|
|
942
|
-
// The cacheId is kept in toMonacoAction when converting a received CodeAction DTO to a monaco code action
|
|
943
|
-
const cacheId = (codeAction as CodeAction).cacheId;
|
|
944
|
-
if (cacheId !== undefined) {
|
|
945
|
-
const resolvedEdit = await this.proxy.$resolveCodeAction(handle, cacheId, token);
|
|
946
|
-
codeAction.edit = resolvedEdit && toMonacoWorkspaceEdit(resolvedEdit);
|
|
947
|
-
}
|
|
948
|
-
return codeAction;
|
|
949
|
-
}
|
|
950
|
-
|
|
951
|
-
$registerRenameProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[], supportsResolveLocation: boolean): void {
|
|
952
|
-
const languageSelector = this.toLanguageSelector(selector);
|
|
953
|
-
const renameProvider = this.createRenameProvider(handle, supportsResolveLocation);
|
|
954
|
-
this.register(handle, (monaco.languages.registerRenameProvider as RegistrationFunction<monaco.languages.RenameProvider>)(languageSelector, renameProvider));
|
|
955
|
-
}
|
|
956
|
-
|
|
957
|
-
protected createRenameProvider(handle: number, supportsResolveLocation: boolean): monaco.languages.RenameProvider {
|
|
958
|
-
return {
|
|
959
|
-
provideRenameEdits: (model, position, newName, token) => this.provideRenameEdits(handle, model, position, newName, token)
|
|
960
|
-
,
|
|
961
|
-
resolveRenameLocation: supportsResolveLocation
|
|
962
|
-
? (model, position, token) =>
|
|
963
|
-
this.resolveRenameLocation(handle, model, position, token)
|
|
964
|
-
: undefined
|
|
965
|
-
};
|
|
966
|
-
}
|
|
967
|
-
|
|
968
|
-
protected provideRenameEdits(handle: number, model: monaco.editor.ITextModel,
|
|
969
|
-
position: monaco.Position, newName: string, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.WorkspaceEdit & monaco.languages.Rejection> {
|
|
970
|
-
return this.proxy.$provideRenameEdits(handle, model.uri, position, newName, token).then(toMonacoWorkspaceEdit);
|
|
971
|
-
}
|
|
972
|
-
|
|
973
|
-
$registerCallHierarchyProvider(handle: number, selector: SerializedDocumentFilter[]): void {
|
|
974
|
-
const languageSelector = this.toLanguageSelector(selector);
|
|
975
|
-
const callHierarchyService = this.createCallHierarchyService(handle, languageSelector);
|
|
976
|
-
this.register(handle, this.callHierarchyServiceContributionRegistry.add(callHierarchyService));
|
|
977
|
-
}
|
|
978
|
-
|
|
979
|
-
protected createCallHierarchyService(handle: number, language: LanguageSelector): CallHierarchyService {
|
|
980
|
-
return {
|
|
981
|
-
selector: language,
|
|
982
|
-
getRootDefinition: (uri: DocumentUri, position: Position, cancellationToken: CancellationToken) =>
|
|
983
|
-
this.proxy.$provideRootDefinition(handle, toUriComponents(uri), fromPosition(position), cancellationToken)
|
|
984
|
-
.then(def => {
|
|
985
|
-
if (!def) { return undefined; }
|
|
986
|
-
const defs = Array.isArray(def) ? def : [def];
|
|
987
|
-
return { dispose: () => this.proxy.$releaseCallHierarchy(handle, defs[0]?._sessionId), items: defs.map(item => toItemHierarchyDefinition(item)) };
|
|
988
|
-
}),
|
|
989
|
-
getCallers:
|
|
990
|
-
(
|
|
991
|
-
definition: CallHierarchyItem,
|
|
992
|
-
cancellationToken: CancellationToken
|
|
993
|
-
) => this.proxy.$provideCallers(handle, fromItemHierarchyDefinition(definition), cancellationToken)
|
|
994
|
-
.then(result => {
|
|
995
|
-
if (!result) {
|
|
996
|
-
return undefined!;
|
|
997
|
-
}
|
|
998
|
-
|
|
999
|
-
if (Array.isArray(result)) {
|
|
1000
|
-
return result.map(toCaller);
|
|
1001
|
-
}
|
|
1002
|
-
|
|
1003
|
-
return undefined!;
|
|
1004
|
-
}),
|
|
1005
|
-
|
|
1006
|
-
getCallees:
|
|
1007
|
-
(
|
|
1008
|
-
definition: CallHierarchyItem,
|
|
1009
|
-
cancellationToken: CancellationToken
|
|
1010
|
-
) => this.proxy.$provideCallees(handle, fromItemHierarchyDefinition(definition), cancellationToken)
|
|
1011
|
-
.then(result => {
|
|
1012
|
-
if (!result) {
|
|
1013
|
-
return undefined;
|
|
1014
|
-
}
|
|
1015
|
-
if (Array.isArray(result)) {
|
|
1016
|
-
return result.map(toCallee);
|
|
1017
|
-
}
|
|
1018
|
-
|
|
1019
|
-
return undefined;
|
|
1020
|
-
})
|
|
1021
|
-
};
|
|
1022
|
-
}
|
|
1023
|
-
|
|
1024
|
-
protected resolveRenameLocation(handle: number, model: monaco.editor.ITextModel,
|
|
1025
|
-
position: monaco.Position, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.RenameLocation> {
|
|
1026
|
-
return this.proxy.$resolveRenameLocation(handle, model.uri, position, token);
|
|
1027
|
-
}
|
|
1028
|
-
|
|
1029
|
-
// --- type hierarchy
|
|
1030
|
-
$registerTypeHierarchyProvider(handle: number, selector: SerializedDocumentFilter[]): void {
|
|
1031
|
-
const languageSelector = this.toLanguageSelector(selector);
|
|
1032
|
-
const typeHierarchyService = this.createTypeHierarchyService(handle, languageSelector);
|
|
1033
|
-
this.register(handle, this.typeHierarchyServiceContributionRegistry.add(typeHierarchyService));
|
|
1034
|
-
}
|
|
1035
|
-
|
|
1036
|
-
protected createTypeHierarchyService(handle: number, language: LanguageSelector): TypeHierarchyService {
|
|
1037
|
-
return {
|
|
1038
|
-
selector: language,
|
|
1039
|
-
prepareSession: (uri: DocumentUri, position: Position, cancellationToken: CancellationToken) =>
|
|
1040
|
-
this.proxy.$prepareTypeHierarchy(handle, toUriComponents(uri), fromPosition(position), cancellationToken)
|
|
1041
|
-
.then(result => {
|
|
1042
|
-
if (!result) {
|
|
1043
|
-
return undefined;
|
|
1044
|
-
}
|
|
1045
|
-
const items = Array.isArray(result) ? result : [result];
|
|
1046
|
-
return {
|
|
1047
|
-
dispose: () => this.proxy.$releaseTypeHierarchy(handle, items[0]?._sessionId),
|
|
1048
|
-
items: items.map(item => toItemHierarchyDefinition(item))
|
|
1049
|
-
};
|
|
1050
|
-
}),
|
|
1051
|
-
provideSuperTypes: (sessionId, itemId, cancellationToken: CancellationToken) => this.proxy.$provideSuperTypes(handle, sessionId, itemId, cancellationToken)
|
|
1052
|
-
.then(results => {
|
|
1053
|
-
if (!results) {
|
|
1054
|
-
return undefined;
|
|
1055
|
-
}
|
|
1056
|
-
|
|
1057
|
-
if (Array.isArray(results)) {
|
|
1058
|
-
return results.map(toItemHierarchyDefinition);
|
|
1059
|
-
}
|
|
1060
|
-
|
|
1061
|
-
return undefined;
|
|
1062
|
-
}),
|
|
1063
|
-
provideSubTypes: async (sessionId, itemId, cancellationToken: CancellationToken) => this.proxy.$provideSubTypes(handle, sessionId, itemId, cancellationToken)
|
|
1064
|
-
.then(results => {
|
|
1065
|
-
if (!results) {
|
|
1066
|
-
return undefined;
|
|
1067
|
-
}
|
|
1068
|
-
|
|
1069
|
-
if (Array.isArray(results)) {
|
|
1070
|
-
return results.map(toItemHierarchyDefinition);
|
|
1071
|
-
}
|
|
1072
|
-
|
|
1073
|
-
return undefined;
|
|
1074
|
-
})
|
|
1075
|
-
};
|
|
1076
|
-
}
|
|
1077
|
-
|
|
1078
|
-
// --- semantic tokens
|
|
1079
|
-
$registerDocumentSemanticTokensProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[], legend: theia.SemanticTokensLegend,
|
|
1080
|
-
eventHandle: number | undefined): void {
|
|
1081
|
-
const languageSelector = this.toLanguageSelector(selector);
|
|
1082
|
-
let event: Event<void> | undefined = undefined;
|
|
1083
|
-
if (typeof eventHandle === 'number') {
|
|
1084
|
-
const emitter = new Emitter<void>();
|
|
1085
|
-
this.register(eventHandle, emitter);
|
|
1086
|
-
event = emitter.event;
|
|
1087
|
-
}
|
|
1088
|
-
const provider = this.createDocumentSemanticTokensProvider(handle, legend, event);
|
|
1089
|
-
this.register(handle, (monaco.languages.registerDocumentSemanticTokensProvider as RegistrationFunction<monaco.languages.DocumentSemanticTokensProvider>)
|
|
1090
|
-
(languageSelector, provider));
|
|
1091
|
-
}
|
|
1092
|
-
|
|
1093
|
-
protected createDocumentSemanticTokensProvider(handle: number, legend: theia.SemanticTokensLegend, event?: Event<void>): monaco.languages.DocumentSemanticTokensProvider {
|
|
1094
|
-
return {
|
|
1095
|
-
releaseDocumentSemanticTokens: resultId => {
|
|
1096
|
-
if (resultId) {
|
|
1097
|
-
this.proxy.$releaseDocumentSemanticTokens(handle, parseInt(resultId, 10));
|
|
1098
|
-
}
|
|
1099
|
-
},
|
|
1100
|
-
getLegend: () => legend,
|
|
1101
|
-
provideDocumentSemanticTokens: async (model, lastResultId, token) => {
|
|
1102
|
-
const nLastResultId = lastResultId ? parseInt(lastResultId, 10) : 0;
|
|
1103
|
-
const encodedDto = await this.proxy.$provideDocumentSemanticTokens(handle, model.uri, nLastResultId, token);
|
|
1104
|
-
if (!encodedDto) {
|
|
1105
|
-
return null;
|
|
1106
|
-
}
|
|
1107
|
-
if (token.isCancellationRequested) {
|
|
1108
|
-
return null;
|
|
1109
|
-
}
|
|
1110
|
-
const dto = decodeSemanticTokensDto(encodedDto);
|
|
1111
|
-
if (dto.type === 'full') {
|
|
1112
|
-
return {
|
|
1113
|
-
resultId: String(dto.id),
|
|
1114
|
-
data: dto.data
|
|
1115
|
-
};
|
|
1116
|
-
}
|
|
1117
|
-
return {
|
|
1118
|
-
resultId: String(dto.id),
|
|
1119
|
-
edits: dto.deltas
|
|
1120
|
-
};
|
|
1121
|
-
}
|
|
1122
|
-
};
|
|
1123
|
-
}
|
|
1124
|
-
|
|
1125
|
-
$emitDocumentSemanticTokensEvent(eventHandle: number): void {
|
|
1126
|
-
const obj = this.services.get(eventHandle);
|
|
1127
|
-
if (obj instanceof Emitter) {
|
|
1128
|
-
obj.fire(undefined);
|
|
1129
|
-
}
|
|
1130
|
-
}
|
|
1131
|
-
|
|
1132
|
-
$registerDocumentRangeSemanticTokensProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[], legend: theia.SemanticTokensLegend): void {
|
|
1133
|
-
const languageSelector = this.toLanguageSelector(selector);
|
|
1134
|
-
const provider = this.createDocumentRangeSemanticTokensProvider(handle, legend);
|
|
1135
|
-
this.register(handle, (monaco.languages.registerDocumentRangeSemanticTokensProvider as RegistrationFunction<monaco.languages.DocumentRangeSemanticTokensProvider>)
|
|
1136
|
-
(languageSelector, provider));
|
|
1137
|
-
}
|
|
1138
|
-
|
|
1139
|
-
protected createDocumentRangeSemanticTokensProvider(handle: number, legend: theia.SemanticTokensLegend): monaco.languages.DocumentRangeSemanticTokensProvider {
|
|
1140
|
-
return {
|
|
1141
|
-
getLegend: () => legend,
|
|
1142
|
-
provideDocumentRangeSemanticTokens: async (model, range, token) => {
|
|
1143
|
-
const encodedDto = await this.proxy.$provideDocumentRangeSemanticTokens(handle, model.uri, range, token);
|
|
1144
|
-
if (!encodedDto) {
|
|
1145
|
-
return null;
|
|
1146
|
-
}
|
|
1147
|
-
if (token.isCancellationRequested) {
|
|
1148
|
-
return null;
|
|
1149
|
-
}
|
|
1150
|
-
const dto = decodeSemanticTokensDto(encodedDto);
|
|
1151
|
-
if (dto.type === 'full') {
|
|
1152
|
-
return {
|
|
1153
|
-
resultId: String(dto.id),
|
|
1154
|
-
data: dto.data
|
|
1155
|
-
};
|
|
1156
|
-
}
|
|
1157
|
-
throw new Error('Unexpected');
|
|
1158
|
-
}
|
|
1159
|
-
};
|
|
1160
|
-
}
|
|
1161
|
-
|
|
1162
|
-
// --- suggest
|
|
1163
|
-
|
|
1164
|
-
protected toLanguageSelector(filters: SerializedDocumentFilter[]): MonacoLanguageSelector.LanguageSelector & LanguageSelector {
|
|
1165
|
-
return filters.map(filter => {
|
|
1166
|
-
let pattern: string | (IRelativePattern & RelativePattern) | undefined;
|
|
1167
|
-
if (typeof filter.pattern === 'string') {
|
|
1168
|
-
pattern = filter.pattern;
|
|
1169
|
-
} else if (filter.pattern) {
|
|
1170
|
-
pattern = {
|
|
1171
|
-
base: MonacoPath.normalize(filter.pattern.baseUri.toString()),
|
|
1172
|
-
pattern: filter.pattern.pattern,
|
|
1173
|
-
pathToRelative: relative
|
|
1174
|
-
};
|
|
1175
|
-
}
|
|
1176
|
-
return {
|
|
1177
|
-
language: filter.language,
|
|
1178
|
-
scheme: filter.scheme,
|
|
1179
|
-
pattern
|
|
1180
|
-
};
|
|
1181
|
-
});
|
|
1182
|
-
}
|
|
1183
|
-
|
|
1184
|
-
// --- linked editing range
|
|
1185
|
-
|
|
1186
|
-
$registerLinkedEditingRangeProvider(handle: number, selector: SerializedDocumentFilter[]): void {
|
|
1187
|
-
const languageSelector = this.toLanguageSelector(selector);
|
|
1188
|
-
const linkedEditingRangeProvider = this.createLinkedEditingRangeProvider(handle);
|
|
1189
|
-
this.register(handle,
|
|
1190
|
-
(monaco.languages.registerLinkedEditingRangeProvider as RegistrationFunction<monaco.languages.LinkedEditingRangeProvider>)(languageSelector, linkedEditingRangeProvider)
|
|
1191
|
-
);
|
|
1192
|
-
}
|
|
1193
|
-
|
|
1194
|
-
protected createLinkedEditingRangeProvider(handle: number): monaco.languages.LinkedEditingRangeProvider {
|
|
1195
|
-
return {
|
|
1196
|
-
provideLinkedEditingRanges: async (model: monaco.editor.ITextModel, position: monaco.Position, token: CancellationToken):
|
|
1197
|
-
Promise<monaco.languages.LinkedEditingRanges | undefined> => {
|
|
1198
|
-
const res = await this.proxy.$provideLinkedEditingRanges(handle, model.uri, position, token);
|
|
1199
|
-
if (res) {
|
|
1200
|
-
return {
|
|
1201
|
-
ranges: res.ranges,
|
|
1202
|
-
wordPattern: reviveRegExp(res.wordPattern)
|
|
1203
|
-
};
|
|
1204
|
-
}
|
|
1205
|
-
return undefined;
|
|
1206
|
-
}
|
|
1207
|
-
};
|
|
1208
|
-
};
|
|
1209
|
-
|
|
1210
|
-
// -- Language status
|
|
1211
|
-
|
|
1212
|
-
$setLanguageStatus(handle: number, status: LanguageStatusDTO): void {
|
|
1213
|
-
const internal: EditorLanguageStatus = { ...status, selector: this.toLanguageSelector(status.selector) };
|
|
1214
|
-
this.languageStatusService.setLanguageStatusItem(handle, internal);
|
|
1215
|
-
};
|
|
1216
|
-
|
|
1217
|
-
$removeLanguageStatus(handle: number): void {
|
|
1218
|
-
this.languageStatusService.removeLanguageStatusItem(handle);
|
|
1219
|
-
};
|
|
1220
|
-
}
|
|
1221
|
-
|
|
1222
|
-
function reviveMarker(marker: MarkerData): vst.Diagnostic {
|
|
1223
|
-
const monacoMarker: vst.Diagnostic = {
|
|
1224
|
-
code: marker.code,
|
|
1225
|
-
severity: reviveSeverity(marker.severity),
|
|
1226
|
-
range: reviveRange(marker.startLineNumber, marker.startColumn, marker.endLineNumber, marker.endColumn),
|
|
1227
|
-
message: marker.message,
|
|
1228
|
-
source: marker.source,
|
|
1229
|
-
relatedInformation: undefined
|
|
1230
|
-
};
|
|
1231
|
-
|
|
1232
|
-
if (marker.relatedInformation) {
|
|
1233
|
-
monacoMarker.relatedInformation = marker.relatedInformation.map(reviveRelated);
|
|
1234
|
-
}
|
|
1235
|
-
|
|
1236
|
-
if (marker.tags) {
|
|
1237
|
-
monacoMarker.tags = marker.tags.map(reviveTag);
|
|
1238
|
-
}
|
|
1239
|
-
|
|
1240
|
-
return monacoMarker;
|
|
1241
|
-
}
|
|
1242
|
-
|
|
1243
|
-
function reviveSeverity(severity: MarkerSeverity): vst.DiagnosticSeverity {
|
|
1244
|
-
switch (severity) {
|
|
1245
|
-
case MarkerSeverity.Error: return vst.DiagnosticSeverity.Error;
|
|
1246
|
-
case MarkerSeverity.Warning: return vst.DiagnosticSeverity.Warning;
|
|
1247
|
-
case MarkerSeverity.Info: return vst.DiagnosticSeverity.Information;
|
|
1248
|
-
case MarkerSeverity.Hint: return vst.DiagnosticSeverity.Hint;
|
|
1249
|
-
}
|
|
1250
|
-
}
|
|
1251
|
-
|
|
1252
|
-
function reviveRange(startLine: number, startColumn: number, endLine: number, endColumn: number): vst.Range {
|
|
1253
|
-
// note: language server range is 0-based, marker is 1-based, so need to deduct 1 here
|
|
1254
|
-
return {
|
|
1255
|
-
start: {
|
|
1256
|
-
line: startLine - 1,
|
|
1257
|
-
character: startColumn - 1
|
|
1258
|
-
},
|
|
1259
|
-
end: {
|
|
1260
|
-
line: endLine - 1,
|
|
1261
|
-
character: endColumn - 1
|
|
1262
|
-
}
|
|
1263
|
-
};
|
|
1264
|
-
}
|
|
1265
|
-
|
|
1266
|
-
function reviveRelated(related: RelatedInformation): vst.DiagnosticRelatedInformation {
|
|
1267
|
-
return {
|
|
1268
|
-
message: related.message,
|
|
1269
|
-
location: {
|
|
1270
|
-
uri: related.resource,
|
|
1271
|
-
range: reviveRange(related.startLineNumber, related.startColumn, related.endLineNumber, related.endColumn)
|
|
1272
|
-
}
|
|
1273
|
-
};
|
|
1274
|
-
}
|
|
1275
|
-
|
|
1276
|
-
function reviveTag(tag: DiagnosticTag): vst.DiagnosticTag {
|
|
1277
|
-
switch (tag) {
|
|
1278
|
-
case 1: return DiagnosticTag.Unnecessary;
|
|
1279
|
-
case 2: return DiagnosticTag.Deprecated;
|
|
1280
|
-
}
|
|
1281
|
-
}
|
|
1282
|
-
|
|
1283
|
-
function reviveRegExp(regExp?: SerializedRegExp): RegExp | undefined {
|
|
1284
|
-
if (typeof regExp === 'undefined' || regExp === null) {
|
|
1285
|
-
return undefined;
|
|
1286
|
-
}
|
|
1287
|
-
return new RegExp(regExp.pattern, regExp.flags);
|
|
1288
|
-
}
|
|
1289
|
-
|
|
1290
|
-
function reviveIndentationRule(indentationRule?: SerializedIndentationRule): monaco.languages.IndentationRule | undefined {
|
|
1291
|
-
if (typeof indentationRule === 'undefined' || indentationRule === null) {
|
|
1292
|
-
return undefined;
|
|
1293
|
-
}
|
|
1294
|
-
return {
|
|
1295
|
-
increaseIndentPattern: reviveRegExp(indentationRule.increaseIndentPattern)!,
|
|
1296
|
-
decreaseIndentPattern: reviveRegExp(indentationRule.decreaseIndentPattern)!,
|
|
1297
|
-
indentNextLinePattern: reviveRegExp(indentationRule.indentNextLinePattern),
|
|
1298
|
-
unIndentedLinePattern: reviveRegExp(indentationRule.unIndentedLinePattern),
|
|
1299
|
-
};
|
|
1300
|
-
}
|
|
1301
|
-
|
|
1302
|
-
function reviveOnEnterRule(onEnterRule: SerializedOnEnterRule): monaco.languages.OnEnterRule {
|
|
1303
|
-
return {
|
|
1304
|
-
beforeText: reviveRegExp(onEnterRule.beforeText)!,
|
|
1305
|
-
afterText: reviveRegExp(onEnterRule.afterText),
|
|
1306
|
-
previousLineText: reviveRegExp(onEnterRule.previousLineText),
|
|
1307
|
-
action: onEnterRule.action,
|
|
1308
|
-
};
|
|
1309
|
-
}
|
|
1310
|
-
|
|
1311
|
-
function reviveOnEnterRules(onEnterRules?: SerializedOnEnterRule[]): monaco.languages.OnEnterRule[] | undefined {
|
|
1312
|
-
if (typeof onEnterRules === 'undefined' || onEnterRules === null) {
|
|
1313
|
-
return undefined;
|
|
1314
|
-
}
|
|
1315
|
-
return onEnterRules.map(reviveOnEnterRule);
|
|
1316
|
-
}
|
|
1317
|
-
|
|
1318
|
-
function reviveInlayLabel(label: string | InlayHintLabelPart[]): string | monaco.languages.InlayHintLabelPart[] {
|
|
1319
|
-
let monacoLabel: string | monaco.languages.InlayHintLabelPart[];
|
|
1320
|
-
if (typeof label === 'string') {
|
|
1321
|
-
monacoLabel = label;
|
|
1322
|
-
} else {
|
|
1323
|
-
const parts: monaco.languages.InlayHintLabelPart[] = [];
|
|
1324
|
-
for (const part of label) {
|
|
1325
|
-
const result: monaco.languages.InlayHintLabelPart = {
|
|
1326
|
-
...part,
|
|
1327
|
-
location: !!part.location ? { range: part.location?.range, uri: monaco.Uri.revive(part.location.uri) } : undefined
|
|
1328
|
-
};
|
|
1329
|
-
parts.push(result);
|
|
1330
|
-
}
|
|
1331
|
-
monacoLabel = parts;
|
|
1332
|
-
}
|
|
1333
|
-
return monacoLabel;
|
|
1334
|
-
}
|
|
1335
|
-
|
|
1336
|
-
function reviveHint(hint: InlayHint): monaco.languages.InlayHint {
|
|
1337
|
-
return {
|
|
1338
|
-
...hint,
|
|
1339
|
-
label: reviveInlayLabel(hint.label)
|
|
1340
|
-
};
|
|
1341
|
-
}
|
|
1342
|
-
|
|
1343
|
-
function toMonacoAction(action: CodeAction): monaco.languages.CodeAction {
|
|
1344
|
-
return {
|
|
1345
|
-
...action,
|
|
1346
|
-
diagnostics: action.diagnostics ? action.diagnostics.map(m => toMonacoMarkerData(m)) : undefined,
|
|
1347
|
-
disabled: action.disabled?.reason,
|
|
1348
|
-
edit: action.edit ? toMonacoWorkspaceEdit(action.edit) : undefined
|
|
1349
|
-
};
|
|
1350
|
-
}
|
|
1351
|
-
|
|
1352
|
-
function toMonacoMarkerData(marker: MarkerData): monaco.editor.IMarkerData {
|
|
1353
|
-
return {
|
|
1354
|
-
...marker,
|
|
1355
|
-
relatedInformation: marker.relatedInformation
|
|
1356
|
-
? marker.relatedInformation.map(i => toMonacoRelatedInformation(i))
|
|
1357
|
-
: undefined
|
|
1358
|
-
};
|
|
1359
|
-
}
|
|
1360
|
-
|
|
1361
|
-
function toMonacoRelatedInformation(relatedInfo: RelatedInformation): monaco.editor.IRelatedInformation {
|
|
1362
|
-
return {
|
|
1363
|
-
...relatedInfo,
|
|
1364
|
-
resource: monaco.Uri.parse(relatedInfo.resource)
|
|
1365
|
-
};
|
|
1366
|
-
}
|
|
1367
|
-
|
|
1368
|
-
export function toMonacoWorkspaceEdit(data: WorkspaceEditDto | undefined): monaco.languages.WorkspaceEdit {
|
|
1369
|
-
return {
|
|
1370
|
-
edits: (data && data.edits || []).map(edit => {
|
|
1371
|
-
if (WorkspaceTextEditDto.is(edit)) {
|
|
1372
|
-
return <monaco.languages.IWorkspaceTextEdit>{
|
|
1373
|
-
resource: monaco.Uri.revive(edit.resource),
|
|
1374
|
-
textEdit: edit.textEdit,
|
|
1375
|
-
metadata: edit.metadata
|
|
1376
|
-
};
|
|
1377
|
-
} else {
|
|
1378
|
-
return <monaco.languages.IWorkspaceFileEdit>{
|
|
1379
|
-
newResource: monaco.Uri.revive(edit.newResource),
|
|
1380
|
-
oldResource: monaco.Uri.revive(edit.oldResource),
|
|
1381
|
-
options: edit.options,
|
|
1382
|
-
metadata: edit.metadata
|
|
1383
|
-
};
|
|
1384
|
-
}
|
|
1385
|
-
})
|
|
1386
|
-
};
|
|
1387
|
-
}
|
|
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
|
+
|
|
17
|
+
/*---------------------------------------------------------------------------------------------
|
|
18
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
19
|
+
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
20
|
+
*--------------------------------------------------------------------------------------------*/
|
|
21
|
+
|
|
22
|
+
// Method `$changeLanguage` copied and modified
|
|
23
|
+
// from https://github.com/microsoft/vscode/blob/e9c50663154c369a06355ce752b447af5b580dc3/src/vs/workbench/api/browser/mainThreadLanguages.ts#L30-L42
|
|
24
|
+
|
|
25
|
+
import {
|
|
26
|
+
LanguagesMain,
|
|
27
|
+
SerializedLanguageConfiguration,
|
|
28
|
+
SerializedRegExp,
|
|
29
|
+
SerializedIndentationRule,
|
|
30
|
+
SerializedOnEnterRule,
|
|
31
|
+
MAIN_RPC_CONTEXT,
|
|
32
|
+
LanguagesExt,
|
|
33
|
+
WorkspaceEditDto,
|
|
34
|
+
WorkspaceTextEditDto,
|
|
35
|
+
PluginInfo,
|
|
36
|
+
LanguageStatus as LanguageStatusDTO,
|
|
37
|
+
InlayHintDto,
|
|
38
|
+
IdentifiableInlineCompletions
|
|
39
|
+
} from '../../common/plugin-api-rpc';
|
|
40
|
+
import { injectable, inject } from '@theia/core/shared/inversify';
|
|
41
|
+
import {
|
|
42
|
+
SerializedDocumentFilter, MarkerData, Range, RelatedInformation,
|
|
43
|
+
MarkerSeverity, DocumentLink, WorkspaceSymbolParams, CodeAction, CompletionDto, CodeActionProviderDocumentation, InlayHint, InlayHintLabelPart, CodeActionContext
|
|
44
|
+
} from '../../common/plugin-api-rpc-model';
|
|
45
|
+
import { RPCProtocol } from '../../common/rpc-protocol';
|
|
46
|
+
import { MonacoLanguages, WorkspaceSymbolProvider } from '@theia/monaco/lib/browser/monaco-languages';
|
|
47
|
+
import CoreURI from '@theia/core/lib/common/uri';
|
|
48
|
+
import { Disposable, DisposableCollection } from '@theia/core/lib/common/disposable';
|
|
49
|
+
import { Emitter, Event } from '@theia/core/lib/common/event';
|
|
50
|
+
import { ProblemManager } from '@theia/markers/lib/browser';
|
|
51
|
+
import * as vst from '@theia/core/shared/vscode-languageserver-protocol';
|
|
52
|
+
import * as theia from '@theia/plugin';
|
|
53
|
+
import { UriComponents } from '../../common/uri-components';
|
|
54
|
+
import { CancellationToken } from '@theia/core/lib/common';
|
|
55
|
+
import { CallHierarchyService, CallHierarchyServiceProvider, CallHierarchyItem } from '@theia/callhierarchy/lib/browser';
|
|
56
|
+
import { toItemHierarchyDefinition, toUriComponents, fromItemHierarchyDefinition, fromPosition, toCaller, toCallee } from './hierarchy/hierarchy-types-converters';
|
|
57
|
+
import { TypeHierarchyService, TypeHierarchyServiceProvider } from '@theia/typehierarchy/lib/browser';
|
|
58
|
+
import { Position, DocumentUri, DiagnosticTag } from '@theia/core/shared/vscode-languageserver-protocol';
|
|
59
|
+
import { ObjectIdentifier } from '../../common/object-identifier';
|
|
60
|
+
import { mixin } from '../../common/types';
|
|
61
|
+
import { relative } from '../../common/paths-util';
|
|
62
|
+
import { decodeSemanticTokensDto } from '../../common/semantic-tokens-dto';
|
|
63
|
+
import * as monaco from '@theia/monaco-editor-core';
|
|
64
|
+
import { ExtensionIdentifier } from '@theia/monaco-editor-core/esm/vs/platform/extensions/common/extensions';
|
|
65
|
+
import { StandaloneServices } from '@theia/monaco-editor-core/esm/vs/editor/standalone/browser/standaloneServices';
|
|
66
|
+
import { IMarkerService } from '@theia/monaco-editor-core/esm/vs/platform/markers/common/markers';
|
|
67
|
+
import * as MonacoLanguageSelector from '@theia/monaco-editor-core/esm/vs/editor/common/languageSelector';
|
|
68
|
+
import * as MonacoPath from '@theia/monaco-editor-core/esm/vs/base/common/path';
|
|
69
|
+
import { IRelativePattern } from '@theia/monaco-editor-core/esm/vs/base/common/glob';
|
|
70
|
+
import { EditorLanguageStatusService, LanguageStatus as EditorLanguageStatus } from '@theia/editor/lib/browser/language-status/editor-language-status-service';
|
|
71
|
+
import { LanguageSelector, RelativePattern } from '@theia/editor/lib/common/language-selector';
|
|
72
|
+
import { ILanguageFeaturesService } from '@theia/monaco-editor-core/esm/vs/editor/common/services/languageFeatures';
|
|
73
|
+
import {
|
|
74
|
+
EvaluatableExpression,
|
|
75
|
+
EvaluatableExpressionProvider,
|
|
76
|
+
InlineValue,
|
|
77
|
+
InlineValueContext,
|
|
78
|
+
InlineValuesProvider
|
|
79
|
+
} from '@theia/monaco-editor-core/esm/vs/editor/common/languages';
|
|
80
|
+
import { ITextModel } from '@theia/monaco-editor-core/esm/vs/editor/common/model';
|
|
81
|
+
import { CodeActionTriggerKind } from '../../plugin/types-impl';
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* @monaco-uplift The public API declares these functions as (languageId: string, service).
|
|
85
|
+
* Confirm that the functions delegate to a handler that accepts a LanguageSelector rather than just a string.
|
|
86
|
+
* Relevant code in node_modules/@theia/monaco-editor-core/src/vs/editor/standalone/browser/standaloneLanguages.ts
|
|
87
|
+
*/
|
|
88
|
+
interface RegistrationFunction<T> {
|
|
89
|
+
(languageId: MonacoLanguageSelector.LanguageSelector, service: T): Disposable;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
@injectable()
|
|
93
|
+
export class LanguagesMainImpl implements LanguagesMain, Disposable {
|
|
94
|
+
|
|
95
|
+
@inject(MonacoLanguages)
|
|
96
|
+
private readonly monacoLanguages: MonacoLanguages;
|
|
97
|
+
|
|
98
|
+
@inject(ProblemManager)
|
|
99
|
+
private readonly problemManager: ProblemManager;
|
|
100
|
+
|
|
101
|
+
@inject(CallHierarchyServiceProvider)
|
|
102
|
+
private readonly callHierarchyServiceContributionRegistry: CallHierarchyServiceProvider;
|
|
103
|
+
|
|
104
|
+
@inject(TypeHierarchyServiceProvider)
|
|
105
|
+
private readonly typeHierarchyServiceContributionRegistry: TypeHierarchyServiceProvider;
|
|
106
|
+
|
|
107
|
+
@inject(EditorLanguageStatusService)
|
|
108
|
+
protected readonly languageStatusService: EditorLanguageStatusService;
|
|
109
|
+
|
|
110
|
+
private readonly proxy: LanguagesExt;
|
|
111
|
+
private readonly services = new Map<number, Disposable>();
|
|
112
|
+
private readonly toDispose = new DisposableCollection();
|
|
113
|
+
|
|
114
|
+
constructor(@inject(RPCProtocol) rpc: RPCProtocol) {
|
|
115
|
+
this.proxy = rpc.getProxy(MAIN_RPC_CONTEXT.LANGUAGES_EXT);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
dispose(): void {
|
|
119
|
+
this.toDispose.dispose();
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
$getLanguages(): Promise<string[]> {
|
|
123
|
+
return Promise.resolve(monaco.languages.getLanguages().map(l => l.id));
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
$changeLanguage(resource: UriComponents, languageId: string): Promise<void> {
|
|
127
|
+
const uri = monaco.Uri.revive(resource);
|
|
128
|
+
const model = monaco.editor.getModel(uri);
|
|
129
|
+
if (!model) {
|
|
130
|
+
return Promise.reject(new Error('Invalid uri'));
|
|
131
|
+
}
|
|
132
|
+
const langId = monaco.languages.getEncodedLanguageId(languageId);
|
|
133
|
+
if (!langId) {
|
|
134
|
+
return Promise.reject(new Error(`Unknown language ID: ${languageId}`));
|
|
135
|
+
}
|
|
136
|
+
monaco.editor.setModelLanguage(model, languageId);
|
|
137
|
+
return Promise.resolve(undefined);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
protected register(handle: number, service: Disposable): void {
|
|
141
|
+
this.services.set(handle, service);
|
|
142
|
+
this.toDispose.push(Disposable.create(() => this.$unregister(handle)));
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
$unregister(handle: number): void {
|
|
146
|
+
const disposable = this.services.get(handle);
|
|
147
|
+
if (disposable) {
|
|
148
|
+
this.services.delete(handle);
|
|
149
|
+
disposable.dispose();
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
$setLanguageConfiguration(handle: number, languageId: string, configuration: SerializedLanguageConfiguration): void {
|
|
154
|
+
const config: monaco.languages.LanguageConfiguration = {
|
|
155
|
+
comments: configuration.comments,
|
|
156
|
+
brackets: configuration.brackets,
|
|
157
|
+
wordPattern: reviveRegExp(configuration.wordPattern),
|
|
158
|
+
indentationRules: reviveIndentationRule(configuration.indentationRules),
|
|
159
|
+
onEnterRules: reviveOnEnterRules(configuration.onEnterRules),
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
this.register(handle, monaco.languages.setLanguageConfiguration(languageId, config));
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
$registerCompletionSupport(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[], triggerCharacters: string[], supportsResolveDetails: boolean): void {
|
|
166
|
+
this.register(handle,
|
|
167
|
+
(monaco.languages.registerCompletionItemProvider as RegistrationFunction<monaco.languages.CompletionItemProvider>)(this.toLanguageSelector(selector), {
|
|
168
|
+
triggerCharacters,
|
|
169
|
+
provideCompletionItems: (model, position, context, token) => this.provideCompletionItems(handle, model, position, context, token),
|
|
170
|
+
resolveCompletionItem: supportsResolveDetails
|
|
171
|
+
? (suggestion, token) => Promise.resolve(this.resolveCompletionItem(handle, suggestion, token))
|
|
172
|
+
: undefined
|
|
173
|
+
}));
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
protected provideCompletionItems(handle: number, model: monaco.editor.ITextModel, position: monaco.Position,
|
|
177
|
+
context: monaco.languages.CompletionContext, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.CompletionList> {
|
|
178
|
+
return this.proxy.$provideCompletionItems(handle, model.uri, position, context, token).then(result => {
|
|
179
|
+
if (!result) {
|
|
180
|
+
return undefined;
|
|
181
|
+
}
|
|
182
|
+
return {
|
|
183
|
+
suggestions: result.completions.map(c => Object.assign(c, {
|
|
184
|
+
range: c.range || result.defaultRange
|
|
185
|
+
})),
|
|
186
|
+
incomplete: result.incomplete,
|
|
187
|
+
dispose: () => this.proxy.$releaseCompletionItems(handle, result.id)
|
|
188
|
+
};
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
protected resolveCompletionItem(handle: number,
|
|
193
|
+
item: monaco.languages.CompletionItem, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.CompletionItem> {
|
|
194
|
+
const { parentId, id } = item as CompletionDto;
|
|
195
|
+
return this.proxy.$resolveCompletionItem(handle, [parentId, id], token).then(resolved => {
|
|
196
|
+
if (resolved) {
|
|
197
|
+
mixin(item, resolved, true);
|
|
198
|
+
}
|
|
199
|
+
return item;
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
$registerDefinitionProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
|
|
204
|
+
const languageSelector = this.toLanguageSelector(selector);
|
|
205
|
+
const definitionProvider = this.createDefinitionProvider(handle);
|
|
206
|
+
this.register(handle, (monaco.languages.registerDefinitionProvider as RegistrationFunction<monaco.languages.DefinitionProvider>)(languageSelector, definitionProvider));
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
$registerDeclarationProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
|
|
210
|
+
const languageSelector = this.toLanguageSelector(selector);
|
|
211
|
+
const declarationProvider = this.createDeclarationProvider(handle);
|
|
212
|
+
this.register(handle, (monaco.languages.registerDeclarationProvider as RegistrationFunction<monaco.languages.DeclarationProvider>)(languageSelector, declarationProvider));
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
$registerReferenceProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
|
|
216
|
+
const languageSelector = this.toLanguageSelector(selector);
|
|
217
|
+
const referenceProvider = this.createReferenceProvider(handle);
|
|
218
|
+
this.register(handle, (monaco.languages.registerReferenceProvider as RegistrationFunction<monaco.languages.ReferenceProvider>)(languageSelector, referenceProvider));
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
protected createReferenceProvider(handle: number): monaco.languages.ReferenceProvider {
|
|
222
|
+
return {
|
|
223
|
+
provideReferences: (model, position, context, token) => this.provideReferences(handle, model, position, context, token)
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
protected provideReferences(handle: number, model: monaco.editor.ITextModel, position: monaco.Position,
|
|
228
|
+
context: monaco.languages.ReferenceContext, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.Location[]> {
|
|
229
|
+
return this.proxy.$provideReferences(handle, model.uri, position, context, token).then(result => {
|
|
230
|
+
if (!result) {
|
|
231
|
+
return undefined;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
if (Array.isArray(result)) {
|
|
235
|
+
const references: monaco.languages.Location[] = [];
|
|
236
|
+
for (const item of result) {
|
|
237
|
+
references.push({ ...item, uri: monaco.Uri.revive(item.uri) });
|
|
238
|
+
}
|
|
239
|
+
return references;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
return undefined;
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
$registerSignatureHelpProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[], metadata: theia.SignatureHelpProviderMetadata): void {
|
|
247
|
+
const languageSelector = this.toLanguageSelector(selector);
|
|
248
|
+
const signatureHelpProvider = this.createSignatureHelpProvider(handle, metadata);
|
|
249
|
+
this.register(handle, (monaco.languages.registerSignatureHelpProvider as RegistrationFunction<monaco.languages.SignatureHelpProvider>)
|
|
250
|
+
(languageSelector, signatureHelpProvider));
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
$clearDiagnostics(id: string): void {
|
|
254
|
+
for (const uri of this.problemManager.getUris()) {
|
|
255
|
+
this.problemManager.setMarkers(new CoreURI(uri), id, []);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
$changeDiagnostics(id: string, delta: [string, MarkerData[]][]): void {
|
|
260
|
+
for (const [uriString, markers] of delta) {
|
|
261
|
+
const uri = new CoreURI(uriString);
|
|
262
|
+
this.problemManager.setMarkers(uri, id, markers.map(reviveMarker));
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
$registerImplementationProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
|
|
267
|
+
const languageSelector = this.toLanguageSelector(selector);
|
|
268
|
+
const implementationProvider = this.createImplementationProvider(handle);
|
|
269
|
+
this.register(handle, (monaco.languages.registerImplementationProvider as RegistrationFunction<monaco.languages.ImplementationProvider>)
|
|
270
|
+
(languageSelector, implementationProvider));
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
protected createImplementationProvider(handle: number): monaco.languages.ImplementationProvider {
|
|
274
|
+
return {
|
|
275
|
+
provideImplementation: (model, position, token) => this.provideImplementation(handle, model, position, token)
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
protected provideImplementation(handle: number, model: monaco.editor.ITextModel,
|
|
280
|
+
position: monaco.Position, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.Definition> {
|
|
281
|
+
return this.proxy.$provideImplementation(handle, model.uri, position, token).then(result => {
|
|
282
|
+
if (!result) {
|
|
283
|
+
return undefined;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
if (Array.isArray(result)) {
|
|
287
|
+
// using DefinitionLink because Location is mandatory part of DefinitionLink
|
|
288
|
+
const definitionLinks: monaco.languages.LocationLink[] = [];
|
|
289
|
+
for (const item of result) {
|
|
290
|
+
definitionLinks.push({ ...item, uri: monaco.Uri.revive(item.uri) });
|
|
291
|
+
}
|
|
292
|
+
return definitionLinks;
|
|
293
|
+
} else {
|
|
294
|
+
// single Location
|
|
295
|
+
return <monaco.languages.Location>{
|
|
296
|
+
uri: monaco.Uri.revive(result.uri),
|
|
297
|
+
range: result.range
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
$registerTypeDefinitionProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
|
|
304
|
+
const languageSelector = this.toLanguageSelector(selector);
|
|
305
|
+
const typeDefinitionProvider = this.createTypeDefinitionProvider(handle);
|
|
306
|
+
this.register(handle, (monaco.languages.registerTypeDefinitionProvider as RegistrationFunction<monaco.languages.TypeDefinitionProvider>)
|
|
307
|
+
(languageSelector, typeDefinitionProvider));
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
protected createTypeDefinitionProvider(handle: number): monaco.languages.TypeDefinitionProvider {
|
|
311
|
+
return {
|
|
312
|
+
provideTypeDefinition: (model, position, token) => this.provideTypeDefinition(handle, model, position, token)
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
protected provideTypeDefinition(handle: number, model: monaco.editor.ITextModel,
|
|
317
|
+
position: monaco.Position, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.Definition> {
|
|
318
|
+
return this.proxy.$provideTypeDefinition(handle, model.uri, position, token).then(result => {
|
|
319
|
+
if (!result) {
|
|
320
|
+
return undefined;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
if (Array.isArray(result)) {
|
|
324
|
+
// using DefinitionLink because Location is mandatory part of DefinitionLink
|
|
325
|
+
const definitionLinks: monaco.languages.LocationLink[] = [];
|
|
326
|
+
for (const item of result) {
|
|
327
|
+
definitionLinks.push({ ...item, uri: monaco.Uri.revive(item.uri) });
|
|
328
|
+
}
|
|
329
|
+
return definitionLinks;
|
|
330
|
+
} else {
|
|
331
|
+
// single Location
|
|
332
|
+
return <monaco.languages.Location>{
|
|
333
|
+
uri: monaco.Uri.revive(result.uri),
|
|
334
|
+
range: result.range
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
$registerHoverProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
|
|
341
|
+
const languageSelector = this.toLanguageSelector(selector);
|
|
342
|
+
const hoverProvider = this.createHoverProvider(handle);
|
|
343
|
+
this.register(handle, (monaco.languages.registerHoverProvider as RegistrationFunction<monaco.languages.HoverProvider>)(languageSelector, hoverProvider));
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
protected createHoverProvider(handle: number): monaco.languages.HoverProvider {
|
|
347
|
+
return {
|
|
348
|
+
provideHover: (model, position, token) => this.provideHover(handle, model, position, token)
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
protected provideHover(handle: number, model: monaco.editor.ITextModel, position: monaco.Position,
|
|
353
|
+
token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.Hover> {
|
|
354
|
+
return this.proxy.$provideHover(handle, model.uri, position, token);
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
$registerEvaluatableExpressionProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
|
|
358
|
+
const languageSelector = this.toLanguageSelector(selector);
|
|
359
|
+
const evaluatableExpressionProvider = this.createEvaluatableExpressionProvider(handle);
|
|
360
|
+
this.register(handle,
|
|
361
|
+
(StandaloneServices.get(ILanguageFeaturesService).evaluatableExpressionProvider.register as RegistrationFunction<EvaluatableExpressionProvider>)
|
|
362
|
+
(languageSelector, evaluatableExpressionProvider));
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
protected createEvaluatableExpressionProvider(handle: number): EvaluatableExpressionProvider {
|
|
366
|
+
return {
|
|
367
|
+
provideEvaluatableExpression: (model, position, token) => this.provideEvaluatableExpression(handle, model, position, token)
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
protected provideEvaluatableExpression(handle: number, model: ITextModel, position: monaco.Position,
|
|
372
|
+
token: monaco.CancellationToken): monaco.languages.ProviderResult<EvaluatableExpression | undefined> {
|
|
373
|
+
return this.proxy.$provideEvaluatableExpression(handle, model.uri, position, token);
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
$registerInlineValuesProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
|
|
377
|
+
const languageSelector = this.toLanguageSelector(selector);
|
|
378
|
+
const inlineValuesProvider = this.createInlineValuesProvider(handle);
|
|
379
|
+
this.register(handle,
|
|
380
|
+
(StandaloneServices.get(ILanguageFeaturesService).inlineValuesProvider.register as RegistrationFunction<InlineValuesProvider>)
|
|
381
|
+
(languageSelector, inlineValuesProvider));
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
protected createInlineValuesProvider(handle: number): InlineValuesProvider {
|
|
385
|
+
return {
|
|
386
|
+
provideInlineValues: (model, range, context, token) => this.provideInlineValues(handle, model, range, context, token)
|
|
387
|
+
};
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
protected provideInlineValues(handle: number, model: ITextModel, range: Range,
|
|
391
|
+
context: InlineValueContext, token: monaco.CancellationToken): monaco.languages.ProviderResult<InlineValue[] | undefined> {
|
|
392
|
+
return this.proxy.$provideInlineValues(handle, model.uri, range, context, token);
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
396
|
+
$emitInlineValuesEvent(eventHandle: number, event?: any): void {
|
|
397
|
+
const obj = this.services.get(eventHandle);
|
|
398
|
+
if (obj instanceof Emitter) {
|
|
399
|
+
obj.fire(event);
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
$registerDocumentHighlightProvider(handle: number, _pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
|
|
404
|
+
const languageSelector = this.toLanguageSelector(selector);
|
|
405
|
+
const documentHighlightProvider = this.createDocumentHighlightProvider(handle);
|
|
406
|
+
this.register(handle, (monaco.languages.registerDocumentHighlightProvider as RegistrationFunction<monaco.languages.DocumentHighlightProvider>)
|
|
407
|
+
(languageSelector, documentHighlightProvider));
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
protected createDocumentHighlightProvider(handle: number): monaco.languages.DocumentHighlightProvider {
|
|
411
|
+
return {
|
|
412
|
+
provideDocumentHighlights: (model, position, token) => this.provideDocumentHighlights(handle, model, position, token)
|
|
413
|
+
};
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
protected provideDocumentHighlights(handle: number, model: monaco.editor.ITextModel, position: monaco.Position,
|
|
417
|
+
token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.DocumentHighlight[]> {
|
|
418
|
+
return this.proxy.$provideDocumentHighlights(handle, model.uri, position, token).then(result => {
|
|
419
|
+
if (!result) {
|
|
420
|
+
return undefined;
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
if (Array.isArray(result)) {
|
|
424
|
+
const highlights: monaco.languages.DocumentHighlight[] = [];
|
|
425
|
+
for (const item of result) {
|
|
426
|
+
highlights.push(
|
|
427
|
+
{
|
|
428
|
+
...item,
|
|
429
|
+
kind: (item.kind ? item.kind : monaco.languages.DocumentHighlightKind.Text)
|
|
430
|
+
});
|
|
431
|
+
}
|
|
432
|
+
return highlights;
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
return undefined;
|
|
436
|
+
});
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
$registerWorkspaceSymbolProvider(handle: number, pluginInfo: PluginInfo): void {
|
|
440
|
+
const workspaceSymbolProvider = this.createWorkspaceSymbolProvider(handle);
|
|
441
|
+
this.register(handle, this.monacoLanguages.registerWorkspaceSymbolProvider(workspaceSymbolProvider));
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
protected createWorkspaceSymbolProvider(handle: number): WorkspaceSymbolProvider {
|
|
445
|
+
return {
|
|
446
|
+
provideWorkspaceSymbols: (params, token) => this.provideWorkspaceSymbols(handle, params, token),
|
|
447
|
+
resolveWorkspaceSymbol: (symbol, token) => this.resolveWorkspaceSymbol(handle, symbol, token)
|
|
448
|
+
};
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
protected provideWorkspaceSymbols(handle: number, params: WorkspaceSymbolParams, token: monaco.CancellationToken): Thenable<vst.SymbolInformation[]> {
|
|
452
|
+
return this.proxy.$provideWorkspaceSymbols(handle, params.query, token);
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
protected resolveWorkspaceSymbol(handle: number, symbol: vst.SymbolInformation, token: monaco.CancellationToken): Thenable<vst.SymbolInformation | undefined> {
|
|
456
|
+
return this.proxy.$resolveWorkspaceSymbol(handle, symbol, token);
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
$registerDocumentLinkProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
|
|
460
|
+
const languageSelector = this.toLanguageSelector(selector);
|
|
461
|
+
const linkProvider = this.createLinkProvider(handle);
|
|
462
|
+
this.register(handle, (monaco.languages.registerLinkProvider as RegistrationFunction<monaco.languages.LinkProvider>)(languageSelector, linkProvider));
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
protected createLinkProvider(handle: number): monaco.languages.LinkProvider {
|
|
466
|
+
return {
|
|
467
|
+
provideLinks: async (model, token) => this.provideLinks(handle, model, token),
|
|
468
|
+
resolveLink: async (link, token) => this.resolveLink(handle, link, token)
|
|
469
|
+
};
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
protected async provideLinks(handle: number, model: monaco.editor.ITextModel,
|
|
473
|
+
token: monaco.CancellationToken): Promise<monaco.languages.ProviderResult<monaco.languages.ILinksList>> {
|
|
474
|
+
const links = await this.proxy.$provideDocumentLinks(handle, model.uri, token);
|
|
475
|
+
if (!links) {
|
|
476
|
+
return undefined;
|
|
477
|
+
}
|
|
478
|
+
return {
|
|
479
|
+
links: links.map(link => this.toMonacoLink(link)),
|
|
480
|
+
dispose: () => {
|
|
481
|
+
if (links && Array.isArray(links)) {
|
|
482
|
+
this.proxy.$releaseDocumentLinks(handle, links.map(link => ObjectIdentifier.of(link)));
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
};
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
protected async resolveLink(handle: number, link: monaco.languages.ILink,
|
|
489
|
+
token: monaco.CancellationToken): Promise<monaco.languages.ProviderResult<monaco.languages.ILink>> {
|
|
490
|
+
const resolved = await this.proxy.$resolveDocumentLink(handle, link, token);
|
|
491
|
+
return resolved && this.toMonacoLink(resolved);
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
protected toMonacoLink(link: DocumentLink): monaco.languages.ILink {
|
|
495
|
+
return {
|
|
496
|
+
...link,
|
|
497
|
+
url: !!link.url && typeof link.url !== 'string' ? monaco.Uri.revive(link.url) : link.url
|
|
498
|
+
};
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
$registerCodeLensSupport(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[], eventHandle: number): void {
|
|
502
|
+
const languageSelector = this.toLanguageSelector(selector);
|
|
503
|
+
const lensProvider = this.createCodeLensProvider(handle);
|
|
504
|
+
|
|
505
|
+
if (typeof eventHandle === 'number') {
|
|
506
|
+
const emitter = new Emitter<monaco.languages.CodeLensProvider>();
|
|
507
|
+
this.register(eventHandle, emitter);
|
|
508
|
+
lensProvider.onDidChange = emitter.event;
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
this.register(handle, (monaco.languages.registerCodeLensProvider as RegistrationFunction<monaco.languages.CodeLensProvider>)(languageSelector, lensProvider));
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
protected createCodeLensProvider(handle: number): monaco.languages.CodeLensProvider {
|
|
515
|
+
return {
|
|
516
|
+
provideCodeLenses: async (model, token) => this.provideCodeLenses(handle, model, token),
|
|
517
|
+
resolveCodeLens: (model, codeLens, token) => this.resolveCodeLens(handle, model, codeLens, token)
|
|
518
|
+
};
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
protected async provideCodeLenses(handle: number, model: monaco.editor.ITextModel,
|
|
522
|
+
token: monaco.CancellationToken): Promise<monaco.languages.ProviderResult<monaco.languages.CodeLensList>> {
|
|
523
|
+
const lenses = await this.proxy.$provideCodeLenses(handle, model.uri, token);
|
|
524
|
+
if (!lenses) {
|
|
525
|
+
return undefined;
|
|
526
|
+
}
|
|
527
|
+
return {
|
|
528
|
+
lenses,
|
|
529
|
+
dispose: () => {
|
|
530
|
+
if (lenses && Array.isArray(lenses)) {
|
|
531
|
+
this.proxy.$releaseCodeLenses(handle, lenses.map(symbol => ObjectIdentifier.of(symbol)));
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
};
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
protected resolveCodeLens(handle: number, model: monaco.editor.ITextModel,
|
|
538
|
+
codeLens: monaco.languages.CodeLens, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.CodeLens> {
|
|
539
|
+
return this.proxy.$resolveCodeLens(handle, model.uri, codeLens, token);
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
543
|
+
$emitCodeLensEvent(eventHandle: number, event?: any): void {
|
|
544
|
+
const obj = this.services.get(eventHandle);
|
|
545
|
+
if (obj instanceof Emitter) {
|
|
546
|
+
obj.fire(event);
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
$registerOutlineSupport(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[], displayName?: string): void {
|
|
551
|
+
const languageSelector = this.toLanguageSelector(selector);
|
|
552
|
+
const symbolProvider = this.createDocumentSymbolProvider(handle, displayName);
|
|
553
|
+
this.register(handle, (monaco.languages.registerDocumentSymbolProvider as RegistrationFunction<monaco.languages.DocumentSymbolProvider>)(languageSelector, symbolProvider));
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
protected createDocumentSymbolProvider(handle: number, displayName?: string): monaco.languages.DocumentSymbolProvider {
|
|
557
|
+
return {
|
|
558
|
+
displayName,
|
|
559
|
+
provideDocumentSymbols: (model, token) => this.provideDocumentSymbols(handle, model, token)
|
|
560
|
+
};
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
protected provideDocumentSymbols(handle: number, model: monaco.editor.ITextModel,
|
|
564
|
+
token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.DocumentSymbol[]> {
|
|
565
|
+
return this.proxy.$provideDocumentSymbols(handle, model.uri, token);
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
protected createDefinitionProvider(handle: number): monaco.languages.DefinitionProvider {
|
|
569
|
+
return {
|
|
570
|
+
provideDefinition: (model, position, token) => this.provideDefinition(handle, model, position, token)
|
|
571
|
+
};
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
protected createDeclarationProvider(handle: number): monaco.languages.DeclarationProvider {
|
|
575
|
+
return {
|
|
576
|
+
provideDeclaration: (model, position, token) => this.provideDeclaration(handle, model, position, token)
|
|
577
|
+
};
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
protected provideDeclaration(handle: number, model: monaco.editor.ITextModel, position: monaco.Position,
|
|
581
|
+
token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.Definition> {
|
|
582
|
+
return this.proxy.$provideDeclaration(handle, model.uri, position, token).then(result => {
|
|
583
|
+
if (!result) {
|
|
584
|
+
return undefined;
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
if (Array.isArray(result)) {
|
|
588
|
+
// using DefinitionLink because Location is mandatory part of DefinitionLink
|
|
589
|
+
const definitionLinks: monaco.languages.LocationLink[] = [];
|
|
590
|
+
for (const item of result) {
|
|
591
|
+
definitionLinks.push({ ...item, uri: monaco.Uri.revive(item.uri) });
|
|
592
|
+
}
|
|
593
|
+
return definitionLinks;
|
|
594
|
+
} else {
|
|
595
|
+
// single Location
|
|
596
|
+
return <monaco.languages.Location>{
|
|
597
|
+
uri: monaco.Uri.revive(result.uri),
|
|
598
|
+
range: result.range
|
|
599
|
+
};
|
|
600
|
+
}
|
|
601
|
+
});
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
protected provideDefinition(handle: number, model: monaco.editor.ITextModel,
|
|
605
|
+
position: monaco.Position, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.Definition> {
|
|
606
|
+
return this.proxy.$provideDefinition(handle, model.uri, position, token).then(result => {
|
|
607
|
+
if (!result) {
|
|
608
|
+
return undefined;
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
if (Array.isArray(result)) {
|
|
612
|
+
// using DefinitionLink because Location is mandatory part of DefinitionLink
|
|
613
|
+
const definitionLinks: monaco.languages.LocationLink[] = [];
|
|
614
|
+
for (const item of result) {
|
|
615
|
+
definitionLinks.push({ ...item, uri: monaco.Uri.revive(item.uri) });
|
|
616
|
+
}
|
|
617
|
+
return definitionLinks;
|
|
618
|
+
} else {
|
|
619
|
+
// single Location
|
|
620
|
+
return <monaco.languages.Location>{
|
|
621
|
+
uri: monaco.Uri.revive(result.uri),
|
|
622
|
+
range: result.range
|
|
623
|
+
};
|
|
624
|
+
}
|
|
625
|
+
});
|
|
626
|
+
}
|
|
627
|
+
|
|
628
|
+
protected createSignatureHelpProvider(handle: number, metadata: theia.SignatureHelpProviderMetadata): monaco.languages.SignatureHelpProvider {
|
|
629
|
+
return {
|
|
630
|
+
signatureHelpTriggerCharacters: metadata.triggerCharacters,
|
|
631
|
+
signatureHelpRetriggerCharacters: metadata.retriggerCharacters,
|
|
632
|
+
provideSignatureHelp: async (model, position, token, context) => this.provideSignatureHelp(handle, model, position, token, context)
|
|
633
|
+
};
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
protected async provideSignatureHelp(handle: number, model: monaco.editor.ITextModel,
|
|
637
|
+
position: monaco.Position, token: monaco.CancellationToken,
|
|
638
|
+
context: monaco.languages.SignatureHelpContext): Promise<monaco.languages.ProviderResult<monaco.languages.SignatureHelpResult>> {
|
|
639
|
+
const value = await this.proxy.$provideSignatureHelp(handle, model.uri, position, context, token);
|
|
640
|
+
if (!value) {
|
|
641
|
+
return undefined;
|
|
642
|
+
}
|
|
643
|
+
return {
|
|
644
|
+
value,
|
|
645
|
+
dispose: () => {
|
|
646
|
+
if (typeof value.id === 'number') {
|
|
647
|
+
this.proxy.$releaseSignatureHelp(handle, value.id);
|
|
648
|
+
}
|
|
649
|
+
}
|
|
650
|
+
};
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
$registerDocumentFormattingSupport(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
|
|
654
|
+
const languageSelector = this.toLanguageSelector(selector);
|
|
655
|
+
const documentFormattingEditSupport = this.createDocumentFormattingSupport(handle, pluginInfo);
|
|
656
|
+
this.register(handle, (monaco.languages.registerDocumentFormattingEditProvider as RegistrationFunction<monaco.languages.DocumentFormattingEditProvider>)
|
|
657
|
+
(languageSelector, documentFormattingEditSupport));
|
|
658
|
+
}
|
|
659
|
+
|
|
660
|
+
createDocumentFormattingSupport(handle: number, pluginInfo: PluginInfo): monaco.languages.DocumentFormattingEditProvider {
|
|
661
|
+
const provider: monaco.languages.DocumentFormattingEditProvider & { extensionId: ExtensionIdentifier } = {
|
|
662
|
+
extensionId: new ExtensionIdentifier(pluginInfo.id),
|
|
663
|
+
displayName: pluginInfo.name,
|
|
664
|
+
provideDocumentFormattingEdits: (model, options, token) =>
|
|
665
|
+
this.provideDocumentFormattingEdits(handle, model, options, token)
|
|
666
|
+
};
|
|
667
|
+
|
|
668
|
+
return provider;
|
|
669
|
+
}
|
|
670
|
+
|
|
671
|
+
protected provideDocumentFormattingEdits(handle: number, model: monaco.editor.ITextModel,
|
|
672
|
+
options: monaco.languages.FormattingOptions, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.TextEdit[]> {
|
|
673
|
+
return this.proxy.$provideDocumentFormattingEdits(handle, model.uri, options, token);
|
|
674
|
+
}
|
|
675
|
+
|
|
676
|
+
$registerRangeFormattingSupport(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
|
|
677
|
+
const languageSelector = this.toLanguageSelector(selector);
|
|
678
|
+
const rangeFormattingEditProvider = this.createRangeFormattingSupport(handle, pluginInfo);
|
|
679
|
+
this.register(handle, (monaco.languages.registerDocumentRangeFormattingEditProvider as RegistrationFunction<monaco.languages.DocumentRangeFormattingEditProvider>)
|
|
680
|
+
(languageSelector, rangeFormattingEditProvider));
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
createRangeFormattingSupport(handle: number, pluginInfo: PluginInfo): monaco.languages.DocumentRangeFormattingEditProvider {
|
|
684
|
+
const provider: monaco.languages.DocumentRangeFormattingEditProvider & { extensionId: ExtensionIdentifier } = {
|
|
685
|
+
extensionId: new ExtensionIdentifier(pluginInfo.id),
|
|
686
|
+
displayName: pluginInfo.name,
|
|
687
|
+
provideDocumentRangeFormattingEdits: (model, range: Range, options, token) =>
|
|
688
|
+
this.provideDocumentRangeFormattingEdits(handle, model, range, options, token)
|
|
689
|
+
};
|
|
690
|
+
|
|
691
|
+
return provider;
|
|
692
|
+
}
|
|
693
|
+
|
|
694
|
+
protected provideDocumentRangeFormattingEdits(handle: number, model: monaco.editor.ITextModel,
|
|
695
|
+
range: Range, options: monaco.languages.FormattingOptions, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.TextEdit[]> {
|
|
696
|
+
return this.proxy.$provideDocumentRangeFormattingEdits(handle, model.uri, range, options, token);
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
$registerOnTypeFormattingProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[], autoFormatTriggerCharacters: string[]): void {
|
|
700
|
+
const languageSelector = this.toLanguageSelector(selector);
|
|
701
|
+
const onTypeFormattingProvider = this.createOnTypeFormattingProvider(handle, autoFormatTriggerCharacters);
|
|
702
|
+
this.register(handle, (monaco.languages.registerOnTypeFormattingEditProvider as RegistrationFunction<monaco.languages.OnTypeFormattingEditProvider>)
|
|
703
|
+
(languageSelector, onTypeFormattingProvider));
|
|
704
|
+
}
|
|
705
|
+
|
|
706
|
+
protected createOnTypeFormattingProvider(
|
|
707
|
+
handle: number,
|
|
708
|
+
autoFormatTriggerCharacters: string[]
|
|
709
|
+
): monaco.languages.OnTypeFormattingEditProvider {
|
|
710
|
+
return {
|
|
711
|
+
autoFormatTriggerCharacters,
|
|
712
|
+
provideOnTypeFormattingEdits: (model, position, ch, options, token) => this.provideOnTypeFormattingEdits(handle, model, position, ch, options, token)
|
|
713
|
+
};
|
|
714
|
+
}
|
|
715
|
+
|
|
716
|
+
protected provideOnTypeFormattingEdits(handle: number, model: monaco.editor.ITextModel, position: monaco.Position,
|
|
717
|
+
ch: string, options: monaco.languages.FormattingOptions, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.TextEdit[]> {
|
|
718
|
+
return this.proxy.$provideOnTypeFormattingEdits(handle, model.uri, position, ch, options, token);
|
|
719
|
+
}
|
|
720
|
+
|
|
721
|
+
$registerFoldingRangeProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[], eventHandle: number | undefined): void {
|
|
722
|
+
const languageSelector = this.toLanguageSelector(selector);
|
|
723
|
+
const provider = this.createFoldingRangeProvider(handle);
|
|
724
|
+
|
|
725
|
+
if (typeof eventHandle === 'number') {
|
|
726
|
+
const emitter = new Emitter<monaco.languages.FoldingRangeProvider>();
|
|
727
|
+
this.services.set(eventHandle, emitter);
|
|
728
|
+
provider.onDidChange = emitter.event;
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
this.register(handle, (monaco.languages.registerFoldingRangeProvider as RegistrationFunction<monaco.languages.FoldingRangeProvider>)(languageSelector, provider));
|
|
732
|
+
}
|
|
733
|
+
|
|
734
|
+
createFoldingRangeProvider(handle: number): monaco.languages.FoldingRangeProvider {
|
|
735
|
+
return {
|
|
736
|
+
provideFoldingRanges: (model, context, token) => this.provideFoldingRanges(handle, model, context, token)
|
|
737
|
+
};
|
|
738
|
+
}
|
|
739
|
+
|
|
740
|
+
$emitFoldingRangeEvent(eventHandle: number, event?: unknown): void {
|
|
741
|
+
const obj = this.services.get(eventHandle);
|
|
742
|
+
if (obj instanceof Emitter) {
|
|
743
|
+
obj.fire(event);
|
|
744
|
+
}
|
|
745
|
+
}
|
|
746
|
+
|
|
747
|
+
protected provideFoldingRanges(handle: number, model: monaco.editor.ITextModel,
|
|
748
|
+
context: monaco.languages.FoldingContext, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.FoldingRange[]> {
|
|
749
|
+
return this.proxy.$provideFoldingRange(handle, model.uri, context, token);
|
|
750
|
+
}
|
|
751
|
+
|
|
752
|
+
$registerSelectionRangeProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
|
|
753
|
+
const languageSelector = this.toLanguageSelector(selector);
|
|
754
|
+
const provider = this.createSelectionRangeProvider(handle);
|
|
755
|
+
this.register(handle, (monaco.languages.registerSelectionRangeProvider as RegistrationFunction<monaco.languages.SelectionRangeProvider>)(languageSelector, provider));
|
|
756
|
+
}
|
|
757
|
+
|
|
758
|
+
protected createSelectionRangeProvider(handle: number): monaco.languages.SelectionRangeProvider {
|
|
759
|
+
return {
|
|
760
|
+
provideSelectionRanges: (model, positions, token) => this.provideSelectionRanges(handle, model, positions, token)
|
|
761
|
+
};
|
|
762
|
+
}
|
|
763
|
+
|
|
764
|
+
protected provideSelectionRanges(handle: number, model: monaco.editor.ITextModel,
|
|
765
|
+
positions: monaco.Position[], token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.SelectionRange[][]> {
|
|
766
|
+
return this.proxy.$provideSelectionRanges(handle, model.uri, positions, token);
|
|
767
|
+
}
|
|
768
|
+
|
|
769
|
+
$registerDocumentColorProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
|
|
770
|
+
const languageSelector = this.toLanguageSelector(selector);
|
|
771
|
+
const colorProvider = this.createColorProvider(handle);
|
|
772
|
+
this.register(handle, (monaco.languages.registerColorProvider as RegistrationFunction<monaco.languages.DocumentColorProvider>)(languageSelector, colorProvider));
|
|
773
|
+
}
|
|
774
|
+
|
|
775
|
+
createColorProvider(handle: number): monaco.languages.DocumentColorProvider {
|
|
776
|
+
return {
|
|
777
|
+
provideDocumentColors: (model, token) => this.provideDocumentColors(handle, model, token),
|
|
778
|
+
provideColorPresentations: (model, colorInfo, token) => this.provideColorPresentations(handle, model, colorInfo, token)
|
|
779
|
+
};
|
|
780
|
+
}
|
|
781
|
+
|
|
782
|
+
protected provideDocumentColors(handle: number, model: monaco.editor.ITextModel,
|
|
783
|
+
token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.IColorInformation[]> {
|
|
784
|
+
return this.proxy.$provideDocumentColors(handle, model.uri, token).then(documentColors =>
|
|
785
|
+
documentColors.map(documentColor => {
|
|
786
|
+
const [red, green, blue, alpha] = documentColor.color;
|
|
787
|
+
const color = {
|
|
788
|
+
red: red,
|
|
789
|
+
green: green,
|
|
790
|
+
blue: blue,
|
|
791
|
+
alpha: alpha
|
|
792
|
+
};
|
|
793
|
+
|
|
794
|
+
return {
|
|
795
|
+
color,
|
|
796
|
+
range: documentColor.range
|
|
797
|
+
};
|
|
798
|
+
})
|
|
799
|
+
);
|
|
800
|
+
}
|
|
801
|
+
|
|
802
|
+
protected provideColorPresentations(handle: number, model: monaco.editor.ITextModel,
|
|
803
|
+
colorInfo: monaco.languages.IColorInformation, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.IColorPresentation[]> {
|
|
804
|
+
return this.proxy.$provideColorPresentations(handle, model.uri, {
|
|
805
|
+
color: [
|
|
806
|
+
colorInfo.color.red,
|
|
807
|
+
colorInfo.color.green,
|
|
808
|
+
colorInfo.color.blue,
|
|
809
|
+
colorInfo.color.alpha
|
|
810
|
+
],
|
|
811
|
+
range: colorInfo.range
|
|
812
|
+
}, token);
|
|
813
|
+
}
|
|
814
|
+
|
|
815
|
+
$registerInlayHintsProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[], displayName?: string, eventHandle?: number): void {
|
|
816
|
+
const languageSelector = this.toLanguageSelector(selector);
|
|
817
|
+
const inlayHintsProvider = this.createInlayHintsProvider(handle);
|
|
818
|
+
if (typeof eventHandle === 'number') {
|
|
819
|
+
const emitter = new Emitter<void>();
|
|
820
|
+
this.register(eventHandle, emitter);
|
|
821
|
+
inlayHintsProvider.onDidChangeInlayHints = emitter.event;
|
|
822
|
+
}
|
|
823
|
+
this.register(handle, (monaco.languages.registerInlayHintsProvider as RegistrationFunction<monaco.languages.InlayHintsProvider>)(languageSelector, inlayHintsProvider));
|
|
824
|
+
|
|
825
|
+
}
|
|
826
|
+
|
|
827
|
+
createInlayHintsProvider(handle: number): monaco.languages.InlayHintsProvider {
|
|
828
|
+
return {
|
|
829
|
+
provideInlayHints: async (model: monaco.editor.ITextModel, range: Range, token: monaco.CancellationToken): Promise<monaco.languages.InlayHintList | undefined> => {
|
|
830
|
+
const result = await this.proxy.$provideInlayHints(handle, model.uri, range, token);
|
|
831
|
+
if (!result) {
|
|
832
|
+
return;
|
|
833
|
+
}
|
|
834
|
+
return {
|
|
835
|
+
hints: result.hints.map(hint => reviveHint(hint)),
|
|
836
|
+
dispose: () => {
|
|
837
|
+
if (typeof result.cacheId === 'number') {
|
|
838
|
+
this.proxy.$releaseInlayHints(handle, result.cacheId);
|
|
839
|
+
}
|
|
840
|
+
}
|
|
841
|
+
};
|
|
842
|
+
},
|
|
843
|
+
resolveInlayHint: async (hint, token): Promise<monaco.languages.InlayHint | undefined> => {
|
|
844
|
+
const dto: InlayHintDto = hint;
|
|
845
|
+
if (typeof dto.cacheId !== 'number') {
|
|
846
|
+
return hint;
|
|
847
|
+
}
|
|
848
|
+
const result = await this.proxy.$resolveInlayHint(handle, dto.cacheId, token);
|
|
849
|
+
if (token.isCancellationRequested) {
|
|
850
|
+
return undefined;
|
|
851
|
+
}
|
|
852
|
+
if (!result) {
|
|
853
|
+
return hint;
|
|
854
|
+
}
|
|
855
|
+
return {
|
|
856
|
+
...hint,
|
|
857
|
+
tooltip: result.tooltip,
|
|
858
|
+
label: reviveInlayLabel(result.label)
|
|
859
|
+
};
|
|
860
|
+
},
|
|
861
|
+
};
|
|
862
|
+
}
|
|
863
|
+
|
|
864
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
865
|
+
$emitInlayHintsEvent(eventHandle: number, event?: any): void {
|
|
866
|
+
const obj = this.services.get(eventHandle);
|
|
867
|
+
if (obj instanceof Emitter) {
|
|
868
|
+
obj.fire(event);
|
|
869
|
+
}
|
|
870
|
+
}
|
|
871
|
+
|
|
872
|
+
$registerInlineCompletionsSupport(handle: number, selector: SerializedDocumentFilter[]): void {
|
|
873
|
+
const languageSelector = this.toLanguageSelector(selector);
|
|
874
|
+
const provider: monaco.languages.InlineCompletionsProvider<IdentifiableInlineCompletions> = {
|
|
875
|
+
provideInlineCompletions: async (
|
|
876
|
+
model: monaco.editor.ITextModel,
|
|
877
|
+
position: monaco.Position,
|
|
878
|
+
context: monaco.languages.InlineCompletionContext,
|
|
879
|
+
token: CancellationToken
|
|
880
|
+
): Promise<IdentifiableInlineCompletions | undefined> => this.proxy.$provideInlineCompletions(handle, model.uri, position, context, token),
|
|
881
|
+
freeInlineCompletions: (completions: IdentifiableInlineCompletions): void => {
|
|
882
|
+
this.proxy.$freeInlineCompletionsList(handle, completions.pid);
|
|
883
|
+
}
|
|
884
|
+
};
|
|
885
|
+
this.register(handle, (monaco.languages.registerInlineCompletionsProvider as RegistrationFunction<monaco.languages.InlineCompletionsProvider>)(languageSelector, provider));
|
|
886
|
+
}
|
|
887
|
+
|
|
888
|
+
$registerQuickFixProvider(
|
|
889
|
+
handle: number,
|
|
890
|
+
pluginInfo: PluginInfo,
|
|
891
|
+
selector: SerializedDocumentFilter[],
|
|
892
|
+
providedCodeActionKinds?: string[],
|
|
893
|
+
documentation?: CodeActionProviderDocumentation
|
|
894
|
+
): void {
|
|
895
|
+
const languageSelector = this.toLanguageSelector(selector);
|
|
896
|
+
const quickFixProvider: monaco.languages.CodeActionProvider = {
|
|
897
|
+
provideCodeActions: (model, range, context, token) => {
|
|
898
|
+
const markers = StandaloneServices.get(IMarkerService)
|
|
899
|
+
.read({ resource: model.uri })
|
|
900
|
+
.filter(m => monaco.Range.areIntersectingOrTouching(m, range)) as monaco.editor.IMarkerData[];
|
|
901
|
+
return this.provideCodeActions(handle, model, range, { ...context, markers }, token);
|
|
902
|
+
},
|
|
903
|
+
resolveCodeAction: (codeAction, token) => this.resolveCodeAction(handle, codeAction, token)
|
|
904
|
+
};
|
|
905
|
+
this.register(handle, (monaco.languages.registerCodeActionProvider as RegistrationFunction<monaco.languages.CodeActionProvider>)(languageSelector, quickFixProvider));
|
|
906
|
+
}
|
|
907
|
+
|
|
908
|
+
protected async provideCodeActions(
|
|
909
|
+
handle: number,
|
|
910
|
+
model: monaco.editor.ITextModel,
|
|
911
|
+
rangeOrSelection: Range,
|
|
912
|
+
context: monaco.languages.CodeActionContext,
|
|
913
|
+
token: monaco.CancellationToken
|
|
914
|
+
): Promise<monaco.languages.CodeActionList | undefined> {
|
|
915
|
+
const actions = await this.proxy.$provideCodeActions(handle, model.uri, rangeOrSelection, this.toModelCodeActionContext(context), token);
|
|
916
|
+
if (!actions) {
|
|
917
|
+
return undefined;
|
|
918
|
+
}
|
|
919
|
+
return {
|
|
920
|
+
actions: actions.map(a => toMonacoAction(a)),
|
|
921
|
+
dispose: () => this.proxy.$releaseCodeActions(handle, actions.map(a => a.cacheId))
|
|
922
|
+
};
|
|
923
|
+
}
|
|
924
|
+
|
|
925
|
+
protected toModelCodeActionContext(context: monaco.languages.CodeActionContext): CodeActionContext {
|
|
926
|
+
return {
|
|
927
|
+
...context,
|
|
928
|
+
trigger: this.toCodeActionTriggerKind(context.trigger)
|
|
929
|
+
};
|
|
930
|
+
}
|
|
931
|
+
|
|
932
|
+
toCodeActionTriggerKind(type: monaco.languages.CodeActionTriggerType): CodeActionTriggerKind {
|
|
933
|
+
switch (type) {
|
|
934
|
+
case monaco.languages.CodeActionTriggerType.Auto:
|
|
935
|
+
return CodeActionTriggerKind.Automatic;
|
|
936
|
+
case monaco.languages.CodeActionTriggerType.Invoke:
|
|
937
|
+
return CodeActionTriggerKind.Invoke;
|
|
938
|
+
}
|
|
939
|
+
}
|
|
940
|
+
|
|
941
|
+
protected async resolveCodeAction(handle: number, codeAction: monaco.languages.CodeAction, token: monaco.CancellationToken): Promise<monaco.languages.CodeAction> {
|
|
942
|
+
// The cacheId is kept in toMonacoAction when converting a received CodeAction DTO to a monaco code action
|
|
943
|
+
const cacheId = (codeAction as CodeAction).cacheId;
|
|
944
|
+
if (cacheId !== undefined) {
|
|
945
|
+
const resolvedEdit = await this.proxy.$resolveCodeAction(handle, cacheId, token);
|
|
946
|
+
codeAction.edit = resolvedEdit && toMonacoWorkspaceEdit(resolvedEdit);
|
|
947
|
+
}
|
|
948
|
+
return codeAction;
|
|
949
|
+
}
|
|
950
|
+
|
|
951
|
+
$registerRenameProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[], supportsResolveLocation: boolean): void {
|
|
952
|
+
const languageSelector = this.toLanguageSelector(selector);
|
|
953
|
+
const renameProvider = this.createRenameProvider(handle, supportsResolveLocation);
|
|
954
|
+
this.register(handle, (monaco.languages.registerRenameProvider as RegistrationFunction<monaco.languages.RenameProvider>)(languageSelector, renameProvider));
|
|
955
|
+
}
|
|
956
|
+
|
|
957
|
+
protected createRenameProvider(handle: number, supportsResolveLocation: boolean): monaco.languages.RenameProvider {
|
|
958
|
+
return {
|
|
959
|
+
provideRenameEdits: (model, position, newName, token) => this.provideRenameEdits(handle, model, position, newName, token)
|
|
960
|
+
,
|
|
961
|
+
resolveRenameLocation: supportsResolveLocation
|
|
962
|
+
? (model, position, token) =>
|
|
963
|
+
this.resolveRenameLocation(handle, model, position, token)
|
|
964
|
+
: undefined
|
|
965
|
+
};
|
|
966
|
+
}
|
|
967
|
+
|
|
968
|
+
protected provideRenameEdits(handle: number, model: monaco.editor.ITextModel,
|
|
969
|
+
position: monaco.Position, newName: string, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.WorkspaceEdit & monaco.languages.Rejection> {
|
|
970
|
+
return this.proxy.$provideRenameEdits(handle, model.uri, position, newName, token).then(toMonacoWorkspaceEdit);
|
|
971
|
+
}
|
|
972
|
+
|
|
973
|
+
$registerCallHierarchyProvider(handle: number, selector: SerializedDocumentFilter[]): void {
|
|
974
|
+
const languageSelector = this.toLanguageSelector(selector);
|
|
975
|
+
const callHierarchyService = this.createCallHierarchyService(handle, languageSelector);
|
|
976
|
+
this.register(handle, this.callHierarchyServiceContributionRegistry.add(callHierarchyService));
|
|
977
|
+
}
|
|
978
|
+
|
|
979
|
+
protected createCallHierarchyService(handle: number, language: LanguageSelector): CallHierarchyService {
|
|
980
|
+
return {
|
|
981
|
+
selector: language,
|
|
982
|
+
getRootDefinition: (uri: DocumentUri, position: Position, cancellationToken: CancellationToken) =>
|
|
983
|
+
this.proxy.$provideRootDefinition(handle, toUriComponents(uri), fromPosition(position), cancellationToken)
|
|
984
|
+
.then(def => {
|
|
985
|
+
if (!def) { return undefined; }
|
|
986
|
+
const defs = Array.isArray(def) ? def : [def];
|
|
987
|
+
return { dispose: () => this.proxy.$releaseCallHierarchy(handle, defs[0]?._sessionId), items: defs.map(item => toItemHierarchyDefinition(item)) };
|
|
988
|
+
}),
|
|
989
|
+
getCallers:
|
|
990
|
+
(
|
|
991
|
+
definition: CallHierarchyItem,
|
|
992
|
+
cancellationToken: CancellationToken
|
|
993
|
+
) => this.proxy.$provideCallers(handle, fromItemHierarchyDefinition(definition), cancellationToken)
|
|
994
|
+
.then(result => {
|
|
995
|
+
if (!result) {
|
|
996
|
+
return undefined!;
|
|
997
|
+
}
|
|
998
|
+
|
|
999
|
+
if (Array.isArray(result)) {
|
|
1000
|
+
return result.map(toCaller);
|
|
1001
|
+
}
|
|
1002
|
+
|
|
1003
|
+
return undefined!;
|
|
1004
|
+
}),
|
|
1005
|
+
|
|
1006
|
+
getCallees:
|
|
1007
|
+
(
|
|
1008
|
+
definition: CallHierarchyItem,
|
|
1009
|
+
cancellationToken: CancellationToken
|
|
1010
|
+
) => this.proxy.$provideCallees(handle, fromItemHierarchyDefinition(definition), cancellationToken)
|
|
1011
|
+
.then(result => {
|
|
1012
|
+
if (!result) {
|
|
1013
|
+
return undefined;
|
|
1014
|
+
}
|
|
1015
|
+
if (Array.isArray(result)) {
|
|
1016
|
+
return result.map(toCallee);
|
|
1017
|
+
}
|
|
1018
|
+
|
|
1019
|
+
return undefined;
|
|
1020
|
+
})
|
|
1021
|
+
};
|
|
1022
|
+
}
|
|
1023
|
+
|
|
1024
|
+
protected resolveRenameLocation(handle: number, model: monaco.editor.ITextModel,
|
|
1025
|
+
position: monaco.Position, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.RenameLocation> {
|
|
1026
|
+
return this.proxy.$resolveRenameLocation(handle, model.uri, position, token);
|
|
1027
|
+
}
|
|
1028
|
+
|
|
1029
|
+
// --- type hierarchy
|
|
1030
|
+
$registerTypeHierarchyProvider(handle: number, selector: SerializedDocumentFilter[]): void {
|
|
1031
|
+
const languageSelector = this.toLanguageSelector(selector);
|
|
1032
|
+
const typeHierarchyService = this.createTypeHierarchyService(handle, languageSelector);
|
|
1033
|
+
this.register(handle, this.typeHierarchyServiceContributionRegistry.add(typeHierarchyService));
|
|
1034
|
+
}
|
|
1035
|
+
|
|
1036
|
+
protected createTypeHierarchyService(handle: number, language: LanguageSelector): TypeHierarchyService {
|
|
1037
|
+
return {
|
|
1038
|
+
selector: language,
|
|
1039
|
+
prepareSession: (uri: DocumentUri, position: Position, cancellationToken: CancellationToken) =>
|
|
1040
|
+
this.proxy.$prepareTypeHierarchy(handle, toUriComponents(uri), fromPosition(position), cancellationToken)
|
|
1041
|
+
.then(result => {
|
|
1042
|
+
if (!result) {
|
|
1043
|
+
return undefined;
|
|
1044
|
+
}
|
|
1045
|
+
const items = Array.isArray(result) ? result : [result];
|
|
1046
|
+
return {
|
|
1047
|
+
dispose: () => this.proxy.$releaseTypeHierarchy(handle, items[0]?._sessionId),
|
|
1048
|
+
items: items.map(item => toItemHierarchyDefinition(item))
|
|
1049
|
+
};
|
|
1050
|
+
}),
|
|
1051
|
+
provideSuperTypes: (sessionId, itemId, cancellationToken: CancellationToken) => this.proxy.$provideSuperTypes(handle, sessionId, itemId, cancellationToken)
|
|
1052
|
+
.then(results => {
|
|
1053
|
+
if (!results) {
|
|
1054
|
+
return undefined;
|
|
1055
|
+
}
|
|
1056
|
+
|
|
1057
|
+
if (Array.isArray(results)) {
|
|
1058
|
+
return results.map(toItemHierarchyDefinition);
|
|
1059
|
+
}
|
|
1060
|
+
|
|
1061
|
+
return undefined;
|
|
1062
|
+
}),
|
|
1063
|
+
provideSubTypes: async (sessionId, itemId, cancellationToken: CancellationToken) => this.proxy.$provideSubTypes(handle, sessionId, itemId, cancellationToken)
|
|
1064
|
+
.then(results => {
|
|
1065
|
+
if (!results) {
|
|
1066
|
+
return undefined;
|
|
1067
|
+
}
|
|
1068
|
+
|
|
1069
|
+
if (Array.isArray(results)) {
|
|
1070
|
+
return results.map(toItemHierarchyDefinition);
|
|
1071
|
+
}
|
|
1072
|
+
|
|
1073
|
+
return undefined;
|
|
1074
|
+
})
|
|
1075
|
+
};
|
|
1076
|
+
}
|
|
1077
|
+
|
|
1078
|
+
// --- semantic tokens
|
|
1079
|
+
$registerDocumentSemanticTokensProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[], legend: theia.SemanticTokensLegend,
|
|
1080
|
+
eventHandle: number | undefined): void {
|
|
1081
|
+
const languageSelector = this.toLanguageSelector(selector);
|
|
1082
|
+
let event: Event<void> | undefined = undefined;
|
|
1083
|
+
if (typeof eventHandle === 'number') {
|
|
1084
|
+
const emitter = new Emitter<void>();
|
|
1085
|
+
this.register(eventHandle, emitter);
|
|
1086
|
+
event = emitter.event;
|
|
1087
|
+
}
|
|
1088
|
+
const provider = this.createDocumentSemanticTokensProvider(handle, legend, event);
|
|
1089
|
+
this.register(handle, (monaco.languages.registerDocumentSemanticTokensProvider as RegistrationFunction<monaco.languages.DocumentSemanticTokensProvider>)
|
|
1090
|
+
(languageSelector, provider));
|
|
1091
|
+
}
|
|
1092
|
+
|
|
1093
|
+
protected createDocumentSemanticTokensProvider(handle: number, legend: theia.SemanticTokensLegend, event?: Event<void>): monaco.languages.DocumentSemanticTokensProvider {
|
|
1094
|
+
return {
|
|
1095
|
+
releaseDocumentSemanticTokens: resultId => {
|
|
1096
|
+
if (resultId) {
|
|
1097
|
+
this.proxy.$releaseDocumentSemanticTokens(handle, parseInt(resultId, 10));
|
|
1098
|
+
}
|
|
1099
|
+
},
|
|
1100
|
+
getLegend: () => legend,
|
|
1101
|
+
provideDocumentSemanticTokens: async (model, lastResultId, token) => {
|
|
1102
|
+
const nLastResultId = lastResultId ? parseInt(lastResultId, 10) : 0;
|
|
1103
|
+
const encodedDto = await this.proxy.$provideDocumentSemanticTokens(handle, model.uri, nLastResultId, token);
|
|
1104
|
+
if (!encodedDto) {
|
|
1105
|
+
return null;
|
|
1106
|
+
}
|
|
1107
|
+
if (token.isCancellationRequested) {
|
|
1108
|
+
return null;
|
|
1109
|
+
}
|
|
1110
|
+
const dto = decodeSemanticTokensDto(encodedDto);
|
|
1111
|
+
if (dto.type === 'full') {
|
|
1112
|
+
return {
|
|
1113
|
+
resultId: String(dto.id),
|
|
1114
|
+
data: dto.data
|
|
1115
|
+
};
|
|
1116
|
+
}
|
|
1117
|
+
return {
|
|
1118
|
+
resultId: String(dto.id),
|
|
1119
|
+
edits: dto.deltas
|
|
1120
|
+
};
|
|
1121
|
+
}
|
|
1122
|
+
};
|
|
1123
|
+
}
|
|
1124
|
+
|
|
1125
|
+
$emitDocumentSemanticTokensEvent(eventHandle: number): void {
|
|
1126
|
+
const obj = this.services.get(eventHandle);
|
|
1127
|
+
if (obj instanceof Emitter) {
|
|
1128
|
+
obj.fire(undefined);
|
|
1129
|
+
}
|
|
1130
|
+
}
|
|
1131
|
+
|
|
1132
|
+
$registerDocumentRangeSemanticTokensProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[], legend: theia.SemanticTokensLegend): void {
|
|
1133
|
+
const languageSelector = this.toLanguageSelector(selector);
|
|
1134
|
+
const provider = this.createDocumentRangeSemanticTokensProvider(handle, legend);
|
|
1135
|
+
this.register(handle, (monaco.languages.registerDocumentRangeSemanticTokensProvider as RegistrationFunction<monaco.languages.DocumentRangeSemanticTokensProvider>)
|
|
1136
|
+
(languageSelector, provider));
|
|
1137
|
+
}
|
|
1138
|
+
|
|
1139
|
+
protected createDocumentRangeSemanticTokensProvider(handle: number, legend: theia.SemanticTokensLegend): monaco.languages.DocumentRangeSemanticTokensProvider {
|
|
1140
|
+
return {
|
|
1141
|
+
getLegend: () => legend,
|
|
1142
|
+
provideDocumentRangeSemanticTokens: async (model, range, token) => {
|
|
1143
|
+
const encodedDto = await this.proxy.$provideDocumentRangeSemanticTokens(handle, model.uri, range, token);
|
|
1144
|
+
if (!encodedDto) {
|
|
1145
|
+
return null;
|
|
1146
|
+
}
|
|
1147
|
+
if (token.isCancellationRequested) {
|
|
1148
|
+
return null;
|
|
1149
|
+
}
|
|
1150
|
+
const dto = decodeSemanticTokensDto(encodedDto);
|
|
1151
|
+
if (dto.type === 'full') {
|
|
1152
|
+
return {
|
|
1153
|
+
resultId: String(dto.id),
|
|
1154
|
+
data: dto.data
|
|
1155
|
+
};
|
|
1156
|
+
}
|
|
1157
|
+
throw new Error('Unexpected');
|
|
1158
|
+
}
|
|
1159
|
+
};
|
|
1160
|
+
}
|
|
1161
|
+
|
|
1162
|
+
// --- suggest
|
|
1163
|
+
|
|
1164
|
+
protected toLanguageSelector(filters: SerializedDocumentFilter[]): MonacoLanguageSelector.LanguageSelector & LanguageSelector {
|
|
1165
|
+
return filters.map(filter => {
|
|
1166
|
+
let pattern: string | (IRelativePattern & RelativePattern) | undefined;
|
|
1167
|
+
if (typeof filter.pattern === 'string') {
|
|
1168
|
+
pattern = filter.pattern;
|
|
1169
|
+
} else if (filter.pattern) {
|
|
1170
|
+
pattern = {
|
|
1171
|
+
base: MonacoPath.normalize(filter.pattern.baseUri.toString()),
|
|
1172
|
+
pattern: filter.pattern.pattern,
|
|
1173
|
+
pathToRelative: relative
|
|
1174
|
+
};
|
|
1175
|
+
}
|
|
1176
|
+
return {
|
|
1177
|
+
language: filter.language,
|
|
1178
|
+
scheme: filter.scheme,
|
|
1179
|
+
pattern
|
|
1180
|
+
};
|
|
1181
|
+
});
|
|
1182
|
+
}
|
|
1183
|
+
|
|
1184
|
+
// --- linked editing range
|
|
1185
|
+
|
|
1186
|
+
$registerLinkedEditingRangeProvider(handle: number, selector: SerializedDocumentFilter[]): void {
|
|
1187
|
+
const languageSelector = this.toLanguageSelector(selector);
|
|
1188
|
+
const linkedEditingRangeProvider = this.createLinkedEditingRangeProvider(handle);
|
|
1189
|
+
this.register(handle,
|
|
1190
|
+
(monaco.languages.registerLinkedEditingRangeProvider as RegistrationFunction<monaco.languages.LinkedEditingRangeProvider>)(languageSelector, linkedEditingRangeProvider)
|
|
1191
|
+
);
|
|
1192
|
+
}
|
|
1193
|
+
|
|
1194
|
+
protected createLinkedEditingRangeProvider(handle: number): monaco.languages.LinkedEditingRangeProvider {
|
|
1195
|
+
return {
|
|
1196
|
+
provideLinkedEditingRanges: async (model: monaco.editor.ITextModel, position: monaco.Position, token: CancellationToken):
|
|
1197
|
+
Promise<monaco.languages.LinkedEditingRanges | undefined> => {
|
|
1198
|
+
const res = await this.proxy.$provideLinkedEditingRanges(handle, model.uri, position, token);
|
|
1199
|
+
if (res) {
|
|
1200
|
+
return {
|
|
1201
|
+
ranges: res.ranges,
|
|
1202
|
+
wordPattern: reviveRegExp(res.wordPattern)
|
|
1203
|
+
};
|
|
1204
|
+
}
|
|
1205
|
+
return undefined;
|
|
1206
|
+
}
|
|
1207
|
+
};
|
|
1208
|
+
};
|
|
1209
|
+
|
|
1210
|
+
// -- Language status
|
|
1211
|
+
|
|
1212
|
+
$setLanguageStatus(handle: number, status: LanguageStatusDTO): void {
|
|
1213
|
+
const internal: EditorLanguageStatus = { ...status, selector: this.toLanguageSelector(status.selector) };
|
|
1214
|
+
this.languageStatusService.setLanguageStatusItem(handle, internal);
|
|
1215
|
+
};
|
|
1216
|
+
|
|
1217
|
+
$removeLanguageStatus(handle: number): void {
|
|
1218
|
+
this.languageStatusService.removeLanguageStatusItem(handle);
|
|
1219
|
+
};
|
|
1220
|
+
}
|
|
1221
|
+
|
|
1222
|
+
function reviveMarker(marker: MarkerData): vst.Diagnostic {
|
|
1223
|
+
const monacoMarker: vst.Diagnostic = {
|
|
1224
|
+
code: marker.code,
|
|
1225
|
+
severity: reviveSeverity(marker.severity),
|
|
1226
|
+
range: reviveRange(marker.startLineNumber, marker.startColumn, marker.endLineNumber, marker.endColumn),
|
|
1227
|
+
message: marker.message,
|
|
1228
|
+
source: marker.source,
|
|
1229
|
+
relatedInformation: undefined
|
|
1230
|
+
};
|
|
1231
|
+
|
|
1232
|
+
if (marker.relatedInformation) {
|
|
1233
|
+
monacoMarker.relatedInformation = marker.relatedInformation.map(reviveRelated);
|
|
1234
|
+
}
|
|
1235
|
+
|
|
1236
|
+
if (marker.tags) {
|
|
1237
|
+
monacoMarker.tags = marker.tags.map(reviveTag);
|
|
1238
|
+
}
|
|
1239
|
+
|
|
1240
|
+
return monacoMarker;
|
|
1241
|
+
}
|
|
1242
|
+
|
|
1243
|
+
function reviveSeverity(severity: MarkerSeverity): vst.DiagnosticSeverity {
|
|
1244
|
+
switch (severity) {
|
|
1245
|
+
case MarkerSeverity.Error: return vst.DiagnosticSeverity.Error;
|
|
1246
|
+
case MarkerSeverity.Warning: return vst.DiagnosticSeverity.Warning;
|
|
1247
|
+
case MarkerSeverity.Info: return vst.DiagnosticSeverity.Information;
|
|
1248
|
+
case MarkerSeverity.Hint: return vst.DiagnosticSeverity.Hint;
|
|
1249
|
+
}
|
|
1250
|
+
}
|
|
1251
|
+
|
|
1252
|
+
function reviveRange(startLine: number, startColumn: number, endLine: number, endColumn: number): vst.Range {
|
|
1253
|
+
// note: language server range is 0-based, marker is 1-based, so need to deduct 1 here
|
|
1254
|
+
return {
|
|
1255
|
+
start: {
|
|
1256
|
+
line: startLine - 1,
|
|
1257
|
+
character: startColumn - 1
|
|
1258
|
+
},
|
|
1259
|
+
end: {
|
|
1260
|
+
line: endLine - 1,
|
|
1261
|
+
character: endColumn - 1
|
|
1262
|
+
}
|
|
1263
|
+
};
|
|
1264
|
+
}
|
|
1265
|
+
|
|
1266
|
+
function reviveRelated(related: RelatedInformation): vst.DiagnosticRelatedInformation {
|
|
1267
|
+
return {
|
|
1268
|
+
message: related.message,
|
|
1269
|
+
location: {
|
|
1270
|
+
uri: related.resource,
|
|
1271
|
+
range: reviveRange(related.startLineNumber, related.startColumn, related.endLineNumber, related.endColumn)
|
|
1272
|
+
}
|
|
1273
|
+
};
|
|
1274
|
+
}
|
|
1275
|
+
|
|
1276
|
+
function reviveTag(tag: DiagnosticTag): vst.DiagnosticTag {
|
|
1277
|
+
switch (tag) {
|
|
1278
|
+
case 1: return DiagnosticTag.Unnecessary;
|
|
1279
|
+
case 2: return DiagnosticTag.Deprecated;
|
|
1280
|
+
}
|
|
1281
|
+
}
|
|
1282
|
+
|
|
1283
|
+
function reviveRegExp(regExp?: SerializedRegExp): RegExp | undefined {
|
|
1284
|
+
if (typeof regExp === 'undefined' || regExp === null) {
|
|
1285
|
+
return undefined;
|
|
1286
|
+
}
|
|
1287
|
+
return new RegExp(regExp.pattern, regExp.flags);
|
|
1288
|
+
}
|
|
1289
|
+
|
|
1290
|
+
function reviveIndentationRule(indentationRule?: SerializedIndentationRule): monaco.languages.IndentationRule | undefined {
|
|
1291
|
+
if (typeof indentationRule === 'undefined' || indentationRule === null) {
|
|
1292
|
+
return undefined;
|
|
1293
|
+
}
|
|
1294
|
+
return {
|
|
1295
|
+
increaseIndentPattern: reviveRegExp(indentationRule.increaseIndentPattern)!,
|
|
1296
|
+
decreaseIndentPattern: reviveRegExp(indentationRule.decreaseIndentPattern)!,
|
|
1297
|
+
indentNextLinePattern: reviveRegExp(indentationRule.indentNextLinePattern),
|
|
1298
|
+
unIndentedLinePattern: reviveRegExp(indentationRule.unIndentedLinePattern),
|
|
1299
|
+
};
|
|
1300
|
+
}
|
|
1301
|
+
|
|
1302
|
+
function reviveOnEnterRule(onEnterRule: SerializedOnEnterRule): monaco.languages.OnEnterRule {
|
|
1303
|
+
return {
|
|
1304
|
+
beforeText: reviveRegExp(onEnterRule.beforeText)!,
|
|
1305
|
+
afterText: reviveRegExp(onEnterRule.afterText),
|
|
1306
|
+
previousLineText: reviveRegExp(onEnterRule.previousLineText),
|
|
1307
|
+
action: onEnterRule.action,
|
|
1308
|
+
};
|
|
1309
|
+
}
|
|
1310
|
+
|
|
1311
|
+
function reviveOnEnterRules(onEnterRules?: SerializedOnEnterRule[]): monaco.languages.OnEnterRule[] | undefined {
|
|
1312
|
+
if (typeof onEnterRules === 'undefined' || onEnterRules === null) {
|
|
1313
|
+
return undefined;
|
|
1314
|
+
}
|
|
1315
|
+
return onEnterRules.map(reviveOnEnterRule);
|
|
1316
|
+
}
|
|
1317
|
+
|
|
1318
|
+
function reviveInlayLabel(label: string | InlayHintLabelPart[]): string | monaco.languages.InlayHintLabelPart[] {
|
|
1319
|
+
let monacoLabel: string | monaco.languages.InlayHintLabelPart[];
|
|
1320
|
+
if (typeof label === 'string') {
|
|
1321
|
+
monacoLabel = label;
|
|
1322
|
+
} else {
|
|
1323
|
+
const parts: monaco.languages.InlayHintLabelPart[] = [];
|
|
1324
|
+
for (const part of label) {
|
|
1325
|
+
const result: monaco.languages.InlayHintLabelPart = {
|
|
1326
|
+
...part,
|
|
1327
|
+
location: !!part.location ? { range: part.location?.range, uri: monaco.Uri.revive(part.location.uri) } : undefined
|
|
1328
|
+
};
|
|
1329
|
+
parts.push(result);
|
|
1330
|
+
}
|
|
1331
|
+
monacoLabel = parts;
|
|
1332
|
+
}
|
|
1333
|
+
return monacoLabel;
|
|
1334
|
+
}
|
|
1335
|
+
|
|
1336
|
+
function reviveHint(hint: InlayHint): monaco.languages.InlayHint {
|
|
1337
|
+
return {
|
|
1338
|
+
...hint,
|
|
1339
|
+
label: reviveInlayLabel(hint.label)
|
|
1340
|
+
};
|
|
1341
|
+
}
|
|
1342
|
+
|
|
1343
|
+
function toMonacoAction(action: CodeAction): monaco.languages.CodeAction {
|
|
1344
|
+
return {
|
|
1345
|
+
...action,
|
|
1346
|
+
diagnostics: action.diagnostics ? action.diagnostics.map(m => toMonacoMarkerData(m)) : undefined,
|
|
1347
|
+
disabled: action.disabled?.reason,
|
|
1348
|
+
edit: action.edit ? toMonacoWorkspaceEdit(action.edit) : undefined
|
|
1349
|
+
};
|
|
1350
|
+
}
|
|
1351
|
+
|
|
1352
|
+
function toMonacoMarkerData(marker: MarkerData): monaco.editor.IMarkerData {
|
|
1353
|
+
return {
|
|
1354
|
+
...marker,
|
|
1355
|
+
relatedInformation: marker.relatedInformation
|
|
1356
|
+
? marker.relatedInformation.map(i => toMonacoRelatedInformation(i))
|
|
1357
|
+
: undefined
|
|
1358
|
+
};
|
|
1359
|
+
}
|
|
1360
|
+
|
|
1361
|
+
function toMonacoRelatedInformation(relatedInfo: RelatedInformation): monaco.editor.IRelatedInformation {
|
|
1362
|
+
return {
|
|
1363
|
+
...relatedInfo,
|
|
1364
|
+
resource: monaco.Uri.parse(relatedInfo.resource)
|
|
1365
|
+
};
|
|
1366
|
+
}
|
|
1367
|
+
|
|
1368
|
+
export function toMonacoWorkspaceEdit(data: WorkspaceEditDto | undefined): monaco.languages.WorkspaceEdit {
|
|
1369
|
+
return {
|
|
1370
|
+
edits: (data && data.edits || []).map(edit => {
|
|
1371
|
+
if (WorkspaceTextEditDto.is(edit)) {
|
|
1372
|
+
return <monaco.languages.IWorkspaceTextEdit>{
|
|
1373
|
+
resource: monaco.Uri.revive(edit.resource),
|
|
1374
|
+
textEdit: edit.textEdit,
|
|
1375
|
+
metadata: edit.metadata
|
|
1376
|
+
};
|
|
1377
|
+
} else {
|
|
1378
|
+
return <monaco.languages.IWorkspaceFileEdit>{
|
|
1379
|
+
newResource: monaco.Uri.revive(edit.newResource),
|
|
1380
|
+
oldResource: monaco.Uri.revive(edit.oldResource),
|
|
1381
|
+
options: edit.options,
|
|
1382
|
+
metadata: edit.metadata
|
|
1383
|
+
};
|
|
1384
|
+
}
|
|
1385
|
+
})
|
|
1386
|
+
};
|
|
1387
|
+
}
|