Skip to content

Commit 3aa9f25

Browse files
authored
Move generic debugger client code to mlc (#977)
1 parent b1debde commit 3aa9f25

File tree

9 files changed

+77
-72
lines changed

9 files changed

+77
-72
lines changed

packages/client/package.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@
5151
"./editorApp": {
5252
"types": "./lib/editorApp/index.d.ts",
5353
"default": "./lib/editorApp/index.js"
54+
},
55+
"./debugger": {
56+
"types": "./lib/debugger/index.d.ts",
57+
"default": "./lib/debugger/index.js"
5458
}
5559
},
5660
"typesVersions": {
@@ -78,6 +82,9 @@
7882
],
7983
"editorApp": [
8084
"lib/editorApp/index"
85+
],
86+
"debugger": [
87+
"lib/debugger/index"
8188
]
8289
}
8390
},

packages/examples/src/debugger/client/debugger.ts renamed to packages/client/src/debugger/index.ts

Lines changed: 61 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,57 @@
33
* Licensed under the MIT License. See LICENSE in the package root for license information.
44
* ------------------------------------------------------------------------------------------ */
55

6-
import * as vscode from 'vscode';
6+
import { RegisteredMemoryFile } from '@codingame/monaco-vscode-files-service-override';
7+
import type { Logger } from 'monaco-languageclient/common';
78
import type { ExtensionConfig } from 'monaco-languageclient/vscodeApiWrapper';
8-
import type { ConfigParams, InitMessage } from '../common/definitions.js';
9+
import * as vscode from 'vscode';
10+
import { Uri } from 'vscode';
911

1012
// This is derived from:
1113
// https://github.com/CodinGame/monaco-vscode-api/blob/main/demo/src/features/debugger.ts
1214
// The client configuration is generic and can be used for a another language
1315

16+
export type FileDefinition = {
17+
path: string;
18+
code: string;
19+
uri: Uri;
20+
}
21+
22+
export type InitMessage = {
23+
id: 'init',
24+
files: Record<string, FileDefinition>
25+
defaultFile: string;
26+
debuggerExecCall: string;
27+
};
28+
29+
export type ConfigParams = {
30+
extensionName: string;
31+
version: string;
32+
publisher: string;
33+
languageId: string;
34+
documentSelector: string[];
35+
homeDir: string;
36+
workspaceRoot: string;
37+
workspaceFile: Uri;
38+
htmlContainer: HTMLElement;
39+
protocol: 'ws' | 'wss';
40+
hostname: string;
41+
port: number;
42+
files: Map<string, FileDefinition>;
43+
defaultFile: string;
44+
helpContainerCmd: string;
45+
debuggerExecCall: string;
46+
}
47+
1448
export const provideDebuggerExtensionConfig = (config: ConfigParams): ExtensionConfig => {
1549
const filesOrContents = new Map<string, string | URL>();
1650
filesOrContents.set('./extension.js', '// nothing');
1751

1852
return {
1953
config: {
2054
name: config.extensionName,
21-
publisher: 'TypeFox',
22-
version: '1.0.0',
55+
publisher: config.publisher,
56+
version: config.version,
2357
engines: {
2458
vscode: '*'
2559
},
@@ -47,7 +81,7 @@ export const provideDebuggerExtensionConfig = (config: ConfigParams): ExtensionC
4781
};
4882
};
4983

50-
export const configureDebugging = async (api: typeof vscode, config: ConfigParams) => {
84+
export const configureDebugging = async (api: typeof vscode, config: ConfigParams, logger?: Logger) => {
5185
class WebsocketDebugAdapter implements vscode.DebugAdapter {
5286
private websocket: WebSocket;
5387

@@ -93,7 +127,7 @@ export const configureDebugging = async (api: typeof vscode, config: ConfigParam
93127
debuggerExecCall: config.debuggerExecCall
94128
};
95129
for (const [name, fileDef] of config.files.entries()) {
96-
console.log(`Found: ${name} Sending file: ${fileDef.path}`);
130+
logger?.info(`Found: ${name} Sending file: ${fileDef.path}`);
97131
initMessage.files[name] = {
98132
path: fileDef.path,
99133
code: fileDef.code,
@@ -105,10 +139,30 @@ export const configureDebugging = async (api: typeof vscode, config: ConfigParam
105139
// eslint-disable-next-line @typescript-eslint/no-explicit-any
106140
adapter.onDidSendMessage((message: any) => {
107141
if (message.type === 'event' && message.event === 'output') {
108-
console.log('OUTPUT', message.body.output);
142+
logger?.info('OUTPUT', message.body.output);
109143
}
110144
});
111145
return new api.DebugAdapterInlineImplementation(adapter);
112146
}
113147
});
114148
};
149+
150+
export const createDebugLaunchConfigFile = (workspacePath: string, type: string) => {
151+
return new RegisteredMemoryFile(
152+
Uri.file(`${workspacePath}/.vscode/launch.json`),
153+
JSON.stringify(
154+
{
155+
version: '0.2.0',
156+
configurations: [
157+
{
158+
name: 'Debugger: Lauch',
159+
type,
160+
request: 'attach',
161+
}
162+
]
163+
},
164+
null,
165+
2
166+
)
167+
);
168+
};

packages/examples/resources/debugger/Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ FROM ghcr.io/graalvm/graalpy-community:24
22

33
RUN curl https://get.volta.sh | bash
44
ENV VOLTA_FEATURE_PNPM=1
5-
ENV VOLTA_HOME "/root/.volta"
6-
ENV PATH "$VOLTA_HOME/bin:$PATH"
5+
ENV VOLTA_HOME="/root/.volta"
6+
ENV PATH="$VOLTA_HOME/bin:$PATH"
77

88
RUN volta install node@22
99

packages/examples/resources/debugger/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
},
3434
"dependencies": {
3535
"express": "~4.21.2",
36+
"monaco-languageclient": "~10.1.0",
3637
"ws": "~8.18.0"
3738
},
3839
"devDependencies": {

packages/examples/src/debugger/common/definitions.ts

Lines changed: 0 additions & 58 deletions
This file was deleted.

packages/examples/src/debugger/server/debugServer.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import * as fs from 'node:fs';
88
import { exec } from 'node:child_process';
99
import express from 'express';
1010
import { WebSocketServer } from 'ws';
11-
import type { InitMessage } from '../common/definitions.js';
11+
import type { InitMessage } from 'monaco-languageclient/debugger';
1212
import { DAPSocket } from './DAPSocket.js';
1313

1414
// This is derived from:

packages/examples/src/python/client/config.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import getBannerServiceOverride from '@codingame/monaco-vscode-view-banner-servi
2222
import getStatusBarServiceOverride from '@codingame/monaco-vscode-view-status-bar-service-override';
2323
import getTitleBarServiceOverride from '@codingame/monaco-vscode-view-title-bar-service-override';
2424
import { createUrl } from 'monaco-languageclient/common';
25+
import { createDebugLaunchConfigFile, provideDebuggerExtensionConfig, type ConfigParams, type FileDefinition } from 'monaco-languageclient/debugger';
2526
import type { EditorAppConfig } from 'monaco-languageclient/editorApp';
2627
import type { LanguageClientConfig } from 'monaco-languageclient/lcwrapper';
2728
import { createDefaultLocaleConfiguration } from 'monaco-languageclient/vscodeApiLocales';
@@ -34,14 +35,14 @@ import badPyCode from '../../../resources/python/bad.py?raw';
3435
import helloPyCode from '../../../resources/python/hello.py?raw';
3536
import hello2PyCode from '../../../resources/python/hello2.py?raw';
3637
import { createDefaultWorkspaceContent } from '../../common/client/utils.js';
37-
import { provideDebuggerExtensionConfig } from '../../debugger/client/debugger.js';
38-
import { createDebugLaunchConfigFile, type ConfigParams, type FileDefinition } from '../../debugger/common/definitions.js';
3938

4039
export const createDefaultConfigParams = (homeDir: string, htmlContainer: HTMLElement): ConfigParams => {
4140
const files = new Map<string, FileDefinition>();
4241
const workspaceRoot = `${homeDir}/workspace`;
4342
const configParams: ConfigParams = {
4443
extensionName: 'debugger-py-client',
44+
publisher: 'TypeFox',
45+
version: '1.0.0',
4546
languageId: 'python',
4647
documentSelector: ['python', 'py'],
4748
homeDir,

packages/examples/src/python/client/main.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { EditorApp } from 'monaco-languageclient/editorApp';
88
import { LanguageClientWrapper } from 'monaco-languageclient/lcwrapper';
99
import { MonacoVscodeApiWrapper } from 'monaco-languageclient/vscodeApiWrapper';
1010
import * as vscode from 'vscode';
11-
import { configureDebugging } from '../../debugger/client/debugger.js';
11+
import { configureDebugging } from 'monaco-languageclient/debugger';
1212
import { createPythonAppConfig } from './config.js';
1313

1414
export const runPythonWrapper = async () => {

packages/examples/src/python/client/reactPython.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import type { MonacoVscodeApiWrapper } from 'monaco-languageclient/vscodeApiWrap
99
import React from 'react';
1010
import ReactDOM from 'react-dom/client';
1111
import * as vscode from 'vscode';
12-
import { configureDebugging } from '../../debugger/client/debugger.js';
12+
import { configureDebugging } from 'monaco-languageclient/debugger';
1313
import { createPythonAppConfig } from './config.js';
1414

1515
export const runPythonReact = async () => {

0 commit comments

Comments
 (0)