Skip to content

Commit b41d3ef

Browse files
committed
Fix debug tree item + error messages
Signed-off-by: paulober <[email protected]>
1 parent 77f058e commit b41d3ef

File tree

5 files changed

+64
-49
lines changed

5 files changed

+64
-49
lines changed

package-lock.json

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@
210210
"command": "raspberry-pi-pico.switchBuildType",
211211
"title": "Switch Build Type",
212212
"category": "Raspberry Pi Pico",
213-
"enablement": "raspberry-pi-pico.isPicoProject"
213+
"enablement": "raspberry-pi-pico.isPicoProject && !raspberry-pi-pico.isRustProject"
214214
},
215215
{
216216
"command": "raspberry-pi-pico.importProject",

src/commands/conditionalDebugging.mts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ export default class ConditionalDebuggingCommand extends Command {
3030
}
3131

3232
void commands.executeCommand(`${extensionName}.${DebugLayoutCommand.id}`);
33-
void debug.startDebugging(wsFolder, "rp2040-project");
33+
void debug.startDebugging(wsFolder, "Pico Debug (probe-rs)");
3434

3535
return;
3636
}

src/utils/projectGeneration/projectRust.mts

Lines changed: 52 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@ import { TomlInlineObject, writeTomlFile } from "./tomlUtil.mjs";
55
import Logger, { LoggerSource } from "../../logger.mjs";
66
import { unknownErrorToString } from "../errorHelper.mjs";
77
import { mkdir, writeFile } from "fs/promises";
8-
import { promisify } from "util";
9-
import { exec } from "child_process";
108
import {
119
GetChipCommand,
1210
GetOpenOCDRootCommand,
@@ -17,8 +15,6 @@ import { extensionName } from "../../commands/command.mjs";
1715
import { commands, window } from "vscode";
1816
import LaunchTargetPathCommand from "../../commands/launchTargetPath.mjs";
1917

20-
const execAsync = promisify(exec);
21-
2218
async function generateVSCodeConfig(projectRoot: string): Promise<boolean> {
2319
const vsc = join(projectRoot, ".vscode");
2420

@@ -151,7 +147,6 @@ async function generateVSCodeConfig(projectRoot: string): Promise<boolean> {
151147
"${command:raspberry-pi-pico.launchTargetPathRelease}",
152148
"-t",
153149
"elf",
154-
"-f",
155150
],
156151
presentation: {
157152
reveal: "always",
@@ -184,34 +179,6 @@ async function generateVSCodeConfig(projectRoot: string): Promise<boolean> {
184179
}
185180
}
186181

187-
async function initGit(projectRoot: string): Promise<boolean> {
188-
try {
189-
// TODO: timeouts
190-
await execAsync("git init", {
191-
cwd: projectRoot,
192-
});
193-
await execAsync(
194-
"git submodule add https://github.com/rp-rs/rp-hal.git rp-hal",
195-
{
196-
cwd: projectRoot,
197-
}
198-
);
199-
await execAsync("git submodule update --init --recursive", {
200-
cwd: projectRoot,
201-
});
202-
203-
return true;
204-
} catch (error) {
205-
Logger.error(
206-
LoggerSource.projectRust,
207-
"Failed to initialize git",
208-
unknownErrorToString(error)
209-
);
210-
211-
return false;
212-
}
213-
}
214-
215182
async function generateMainRs(projectRoot: string): Promise<boolean> {
216183
const mainRs = `//! # GPIO 'Blinky' Example
217184
//!
@@ -466,7 +433,6 @@ async function generateCargoToml(
466433
"thumbv6m-none-eabi": {
467434
dependencies: {
468435
"rp2040-hal": new TomlInlineObject({
469-
path: "./rp-hal/rp2040-hal",
470436
version: "0.11",
471437
features: ["rt", "critical-section-impl"],
472438
}),
@@ -477,7 +443,6 @@ async function generateCargoToml(
477443
"riscv32imac-unknown-none-elf": {
478444
dependencies: {
479445
"rp235x-hal": new TomlInlineObject({
480-
path: "./rp-hal/rp235x-hal",
481446
version: "0.3",
482447
features: ["rt", "critical-section-impl"],
483448
}),
@@ -487,7 +452,6 @@ async function generateCargoToml(
487452
'"thumbv8m.main-none-eabihf"': {
488453
dependencies: {
489454
"rp235x-hal": new TomlInlineObject({
490-
path: "./rp-hal/rp235x-hal",
491455
version: "0.3",
492456
features: ["rt", "critical-section-impl"],
493457
}),
@@ -1321,58 +1285,101 @@ export async function generateRustProject(
13211285
try {
13221286
await mkdir(projectFolder, { recursive: true });
13231287
} catch (error) {
1324-
Logger.error(
1325-
LoggerSource.projectRust,
1326-
"Failed to create project folder",
1327-
unknownErrorToString(error)
1328-
);
1288+
const msg = unknownErrorToString(error);
1289+
if (
1290+
msg.includes("EPERM") ||
1291+
msg.includes("EACCES") ||
1292+
msg.includes("access denied")
1293+
) {
1294+
Logger.error(
1295+
LoggerSource.projectRust,
1296+
"Failed to create project folder",
1297+
"Permission denied. Please check your permissions."
1298+
);
1299+
1300+
void window.showErrorMessage(
1301+
"Failed to create project folder. Permission denied - Please check your permissions."
1302+
);
1303+
} else {
1304+
Logger.error(
1305+
LoggerSource.projectRust,
1306+
"Failed to create project folder",
1307+
unknownErrorToString(error)
1308+
);
1309+
1310+
void window.showErrorMessage(
1311+
"Failed to create project folder. See the output panel for more details."
1312+
);
1313+
}
13291314

13301315
return false;
13311316
}
13321317

13331318
// TODO: do all in parallel
13341319
let result = await generateCargoToml(projectFolder, projectName);
13351320
if (!result) {
1321+
Logger.debug(
1322+
LoggerSource.projectRust,
1323+
"Failed to generate Cargo.toml file"
1324+
);
1325+
13361326
return false;
13371327
}
13381328

13391329
result = await generateMemoryLayouts(projectFolder);
13401330
if (!result) {
1331+
Logger.debug(LoggerSource.projectRust, "Failed to generate memory.x files");
1332+
13411333
return false;
13421334
}
13431335

13441336
result = await generateBuildRs(projectFolder);
13451337
if (!result) {
1338+
Logger.debug(LoggerSource.projectRust, "Failed to generate build.rs file");
1339+
13461340
return false;
13471341
}
13481342

13491343
result = await generateGitIgnore(projectFolder);
13501344
if (!result) {
1345+
Logger.debug(
1346+
LoggerSource.projectRust,
1347+
"Failed to generate .gitignore file"
1348+
);
1349+
13511350
return false;
13521351
}
13531352

13541353
result = await generateCargoConfig(projectFolder);
13551354
if (!result) {
1355+
Logger.debug(
1356+
LoggerSource.projectRust,
1357+
"Failed to generate .cargo/config.toml file"
1358+
);
1359+
13561360
return false;
13571361
}
13581362

13591363
result = await generateMainRs(projectFolder);
13601364
if (!result) {
1365+
Logger.debug(LoggerSource.projectRust, "Failed to generate main.rs file");
1366+
13611367
return false;
13621368
}
13631369

13641370
result = await generateVSCodeConfig(projectFolder);
13651371
if (!result) {
1366-
return false;
1367-
}
1372+
Logger.debug(
1373+
LoggerSource.projectRust,
1374+
"Failed to generate .vscode configuration files."
1375+
);
13681376

1369-
result = await initGit(projectFolder);
1370-
if (!result) {
13711377
return false;
13721378
}
13731379

13741380
// add .pico-rs file
13751381
try {
1382+
// TODO: dynamic selection of RP2040 or RP2350 (risc-v or arm)
13761383
await writeFile(join(projectFolder, ".pico-rs"), "rp2350");
13771384
} catch (error) {
13781385
Logger.error(

src/webview/newRustProjectPanel.mts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -306,8 +306,9 @@ export class NewRustProjectPanel {
306306
if (!result) {
307307
this._logger.error("Failed to generate Rust project.");
308308

309-
void window.showErrorMessage(
310-
"Failed to generate Rust project. Please try again and check your settings."
309+
void window.setStatusBarMessage(
310+
"Failed to generate Rust project. See the output panel for more details.",
311+
7000
311312
);
312313

313314
return;

0 commit comments

Comments
 (0)