forked from TypeFox/monaco-languageclient
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.ts
74 lines (65 loc) · 3.19 KB
/
main.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/* --------------------------------------------------------------------------------------------
* Copyright (c) 2024 TypeFox and others.
* Licensed under the MIT License. See LICENSE in the package root for license information.
* ------------------------------------------------------------------------------------------ */
import * as vscode from 'vscode';
import { RegisteredFileSystemProvider, registerFileSystemOverlay } from '@codingame/monaco-vscode-files-service-override';
// this is required syntax highlighting
import '@codingame/monaco-vscode-cpp-default-extension';
import { MonacoEditorLanguageClientWrapper } from 'monaco-editor-wrapper';
import { createWrapperConfig } from './config.js';
import { ClangdWorkerHandler } from './workerHandler.js';
import { MainRemoteMessageChannelFs } from './mainRemoteMessageChannelFs.js';
import { createDefaultWorkspaceFile, disableElement } from '../../common/client/utils.js';
import { HOME_DIR, WORKSPACE_PATH } from '../definitions.js';
const wrapper = new MonacoEditorLanguageClientWrapper();
export const runClangdWrapper = async () => {
const channelLs = new MessageChannel();
const channelFs = new MessageChannel();
const fileSystemProvider = new RegisteredFileSystemProvider(false);
const workspaceFileUri = vscode.Uri.file(`${HOME_DIR}/workspace.code-workspace`);
fileSystemProvider.registerFile(createDefaultWorkspaceFile(workspaceFileUri, WORKSPACE_PATH));
registerFileSystemOverlay(1, fileSystemProvider);
const readiness = async () => {
const resourceUri = vscode.Uri.file(`${WORKSPACE_PATH}/main.cpp`);
await vscode.window.showTextDocument(resourceUri);
};
new MainRemoteMessageChannelFs(fileSystemProvider, channelFs.port1, readiness);
const clangdWorkerHandler = new ClangdWorkerHandler();
const wrapperConfig = await createWrapperConfig({
htmlContainer: document.body,
workspaceUri: vscode.Uri.file(WORKSPACE_PATH),
workspaceFileUri,
clangdWorkerHandler,
lsMessageLocalPort: channelLs.port1
});
await wrapper.init(wrapperConfig);
const initConfig = {
lsMessagePort: channelLs.port2,
fsMessagePort: channelFs.port2,
clearIndexedDb: false,
// set to true to use the compressed workspace at the specified URL
useCompressedWorkspace: false,
compressedWorkspaceUrl: new URL('../../../resources/clangd/workspace.zip', import.meta.url).href
};
const startWrapper = async () => {
await clangdWorkerHandler.init(initConfig);
await clangdWorkerHandler.launch();
await wrapper.startLanguageClients();
};
try {
document.querySelector('#button-start')?.addEventListener('click', async () => {
disableElement('button-start', true);
disableElement('button-start-fresh', true);
await startWrapper();
});
document.querySelector('#button-start-fresh')?.addEventListener('click', async () => {
initConfig.clearIndexedDb = true;
disableElement('button-start', true);
disableElement('button-start-fresh', true);
await startWrapper();
});
} catch (e) {
console.error(e);
}
};