Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'editors/code/src/debug.ts')
| -rw-r--r-- | editors/code/src/debug.ts | 77 |
1 files changed, 54 insertions, 23 deletions
diff --git a/editors/code/src/debug.ts b/editors/code/src/debug.ts index 830980f968..1f06c99576 100644 --- a/editors/code/src/debug.ts +++ b/editors/code/src/debug.ts @@ -1,14 +1,19 @@ import * as os from "os"; -import * as vscode from 'vscode'; -import * as path from 'path'; -import * as ra from './lsp_ext'; +import * as vscode from "vscode"; +import * as path from "path"; +import * as ra from "./lsp_ext"; -import { Cargo, getRustcId, getSysroot } from './toolchain'; +import { Cargo, getRustcId, getSysroot } from "./toolchain"; import { Ctx } from "./ctx"; import { prepareEnv } from "./run"; const debugOutput = vscode.window.createOutputChannel("Debug"); -type DebugConfigProvider = (config: ra.Runnable, executable: string, env: Record<string, string>, sourceFileMap?: Record<string, string>) => vscode.DebugConfiguration; +type DebugConfigProvider = ( + config: ra.Runnable, + executable: string, + env: Record<string, string>, + sourceFileMap?: Record<string, string> +) => vscode.DebugConfiguration; export async function makeDebugConfig(ctx: Ctx, runnable: ra.Runnable): Promise<void> { const scope = ctx.activeRustEditor?.document.uri; @@ -20,9 +25,13 @@ export async function makeDebugConfig(ctx: Ctx, runnable: ra.Runnable): Promise< const wsLaunchSection = vscode.workspace.getConfiguration("launch", scope); const configurations = wsLaunchSection.get<any[]>("configurations") || []; - const index = configurations.findIndex(c => c.name === debugConfig.name); + const index = configurations.findIndex((c) => c.name === debugConfig.name); if (index !== -1) { - const answer = await vscode.window.showErrorMessage(`Launch configuration '${debugConfig.name}' already exists!`, 'Cancel', 'Update'); + const answer = await vscode.window.showErrorMessage( + `Launch configuration '${debugConfig.name}' already exists!`, + "Cancel", + "Update" + ); if (answer === "Cancel") return; configurations[index] = debugConfig; @@ -40,7 +49,7 @@ export async function startDebugSession(ctx: Ctx, runnable: ra.Runnable): Promis const wsLaunchSection = vscode.workspace.getConfiguration("launch"); const configurations = wsLaunchSection.get<any[]>("configurations") || []; - const index = configurations.findIndex(c => c.name === runnable.label); + const index = configurations.findIndex((c) => c.name === runnable.label); if (-1 !== index) { debugConfig = configurations[index]; message = " (from launch.json)"; @@ -56,13 +65,16 @@ export async function startDebugSession(ctx: Ctx, runnable: ra.Runnable): Promis return vscode.debug.startDebugging(undefined, debugConfig); } -async function getDebugConfiguration(ctx: Ctx, runnable: ra.Runnable): Promise<vscode.DebugConfiguration | undefined> { +async function getDebugConfiguration( + ctx: Ctx, + runnable: ra.Runnable +): Promise<vscode.DebugConfiguration | undefined> { const editor = ctx.activeRustEditor; if (!editor) return; const knownEngines: Record<string, DebugConfigProvider> = { "vadimcn.vscode-lldb": getLldbDebugConfig, - "ms-vscode.cpptools": getCppvsDebugConfig + "ms-vscode.cpptools": getCppvsDebugConfig, }; const debugOptions = ctx.config.debug; @@ -77,8 +89,10 @@ async function getDebugConfiguration(ctx: Ctx, runnable: ra.Runnable): Promise<v } if (!debugEngine) { - await vscode.window.showErrorMessage(`Install [CodeLLDB](https://marketplace.visualstudio.com/items?itemName=vadimcn.vscode-lldb)` - + ` or [MS C++ tools](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools) extension for debugging.`); + await vscode.window.showErrorMessage( + `Install [CodeLLDB](https://marketplace.visualstudio.com/items?itemName=vadimcn.vscode-lldb)` + + ` or [MS C++ tools](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools) extension for debugging.` + ); return; } @@ -91,15 +105,17 @@ async function getDebugConfiguration(ctx: Ctx, runnable: ra.Runnable): Promise<v const workspaceFolders = vscode.workspace.workspaceFolders!; const isMultiFolderWorkspace = workspaceFolders.length > 1; const firstWorkspace = workspaceFolders[0]; - const workspace = !isMultiFolderWorkspace || !runnable.args.workspaceRoot ? - firstWorkspace : - workspaceFolders.find(w => runnable.args.workspaceRoot?.includes(w.uri.fsPath)) || firstWorkspace; + const workspace = + !isMultiFolderWorkspace || !runnable.args.workspaceRoot + ? firstWorkspace + : workspaceFolders.find((w) => runnable.args.workspaceRoot?.includes(w.uri.fsPath)) || + firstWorkspace; const wsFolder = path.normalize(workspace.uri.fsPath); - const workspaceQualifier = isMultiFolderWorkspace ? `:${workspace.name}` : ''; + const workspaceQualifier = isMultiFolderWorkspace ? `:${workspace.name}` : ""; function simplifyPath(p: string): string { // see https://github.com/rust-analyzer/rust-analyzer/pull/5513#issuecomment-663458818 for why this is needed - return path.normalize(p).replace(wsFolder, '${workspaceFolder' + workspaceQualifier + '}'); + return path.normalize(p).replace(wsFolder, "${workspaceFolder" + workspaceQualifier + "}"); } const executable = await getDebugExecutable(runnable); @@ -114,7 +130,12 @@ async function getDebugConfiguration(ctx: Ctx, runnable: ra.Runnable): Promise<v sourceFileMap[`/rustc/${commitHash}/`] = rustlib; } - const debugConfig = knownEngines[debugEngine.id](runnable, simplifyPath(executable), env, sourceFileMap); + const debugConfig = knownEngines[debugEngine.id]( + runnable, + simplifyPath(executable), + env, + sourceFileMap + ); if (debugConfig.type in debugOptions.engineSettings) { const settingsMap = (debugOptions.engineSettings as any)[debugConfig.type]; for (var key in settingsMap) { @@ -136,14 +157,19 @@ async function getDebugConfiguration(ctx: Ctx, runnable: ra.Runnable): Promise<v } async function getDebugExecutable(runnable: ra.Runnable): Promise<string> { - const cargo = new Cargo(runnable.args.workspaceRoot || '.', debugOutput); + const cargo = new Cargo(runnable.args.workspaceRoot || ".", debugOutput); const executable = await cargo.executableFromArgs(runnable.args.cargoArgs); // if we are here, there were no compilation errors. return executable; } -function getLldbDebugConfig(runnable: ra.Runnable, executable: string, env: Record<string, string>, sourceFileMap?: Record<string, string>): vscode.DebugConfiguration { +function getLldbDebugConfig( + runnable: ra.Runnable, + executable: string, + env: Record<string, string>, + sourceFileMap?: Record<string, string> +): vscode.DebugConfiguration { return { type: "lldb", request: "launch", @@ -153,13 +179,18 @@ function getLldbDebugConfig(runnable: ra.Runnable, executable: string, env: Reco cwd: runnable.args.workspaceRoot, sourceMap: sourceFileMap, sourceLanguages: ["rust"], - env + env, }; } -function getCppvsDebugConfig(runnable: ra.Runnable, executable: string, env: Record<string, string>, sourceFileMap?: Record<string, string>): vscode.DebugConfiguration { +function getCppvsDebugConfig( + runnable: ra.Runnable, + executable: string, + env: Record<string, string>, + sourceFileMap?: Record<string, string> +): vscode.DebugConfiguration { return { - type: (os.platform() === "win32") ? "cppvsdbg" : "cppdbg", + type: os.platform() === "win32" ? "cppvsdbg" : "cppdbg", request: "launch", name: runnable.label, program: executable, |