Skip to content

Commit

Permalink
Add a new command to help users migrate launch.json configurations
Browse files Browse the repository at this point in the history
Ruby LSP now provides better logging and error messages when the debugger
failed to start. And we plan to keep improving the debugging experience
in the future.

If users are currently using vscode-rdbg and want to try Ruby LSP, we can
help them migrate their launch.json configurations to the format used by
Ruby LSP.
  • Loading branch information
st0012 committed Dec 18, 2024
1 parent 53cbea6 commit f4b6baa
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 0 deletions.
5 changes: 5 additions & 0 deletions vscode/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,11 @@
"command": "rubyLsp.collectRubyLspInfo",
"title": "Collect Ruby LSP information for issue reporting",
"category": "Ruby LSP"
},
{
"command": "rubyLsp.migrateLaunchConfiguration",
"title": "Migrate launch.json configurations from rdbg to ruby_lsp",
"category": "Ruby LSP"
}
],
"configuration": {
Expand Down
1 change: 1 addition & 0 deletions vscode/src/common.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ export enum Command {
NewMinitestFile = "rubyLsp.newMinitestFile",
CollectRubyLspInfo = "rubyLsp.collectRubyLspInfo",
StartServerInDebugMode = "rubyLsp.startServerInDebugMode",
MigrateLaunchConfiguration = "rubyLsp.migrateLaunchConfiguration",
}

export interface RubyInterface {
Expand Down
62 changes: 62 additions & 0 deletions vscode/src/rubyLsp.ts
Original file line number Diff line number Diff line change
Expand Up @@ -597,6 +597,68 @@ export class RubyLsp {
},
),
);
vscode.commands.registerCommand(
Command.MigrateLaunchConfiguration,
async () => {
const workspace = await this.showWorkspacePick();

if (!workspace) {
return;
}

const launchConfig =
(vscode.workspace
.getConfiguration("launch")
?.get("configurations") as any[]) || [];

const updatedLaunchConfig = launchConfig.map((config: any) => {
if (config.type === "rdbg") {
if (config.request === "launch") {
const newConfig = { ...config };
newConfig.type = "ruby_lsp";

if (newConfig.askParameters !== true) {
delete newConfig.rdbgPath;
delete newConfig.cwd;
delete newConfig.useBundler;

const command = (newConfig.command || "").replace(
"${workspaceRoot}/",
"",
);
const script = newConfig.script || "";
const args = (newConfig.args || []).join(" ");
newConfig.program = `${command} ${script} ${args}`.trim();

delete newConfig.command;
delete newConfig.script;
delete newConfig.args;
delete newConfig.askParameters;
}

return newConfig;
} else if (config.request === "attach") {
const newConfig = { ...config };
newConfig.type = "ruby_lsp";
// rdbg's `debugPort` could be socket path, or port number, or host:port
// we don't do complex parsing here, just assume it's socket path
newConfig.debugSocketPath = config.debugPort;

return newConfig;
}
}
return config;
});

await vscode.workspace
.getConfiguration("launch")
.update(
"configurations",
updatedLaunchConfig,
vscode.ConfigurationTarget.Workspace,
);
},
);
}

// Get the current active workspace based on which file is opened in the editor
Expand Down

0 comments on commit f4b6baa

Please sign in to comment.