Skip to content

Commit 0b76da7

Browse files
authored
Merge pull request #778 from fortify-iq/better-errors
Beautify error messages
2 parents ee3f1cc + 2d9da30 commit 0b76da7

File tree

4 files changed

+19
-36
lines changed

4 files changed

+19
-36
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
1111

1212
- Add iterators for register/cluster/field arrays
1313
- Use parentheses instead of square brackets in docs for field arrays
14+
- Better display parsing errors
1415

1516
## [v0.31.1] - 2023-11-27
1617

src/generate/device.rs

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -199,23 +199,17 @@ pub fn render(d: &Device, config: &Config, device_x: &mut String) -> Result<Toke
199199
}
200200

201201
debug!("Rendering peripheral {}", p.name);
202-
match peripheral::render(p, &index, config) {
203-
Ok(periph) => out.extend(periph),
204-
Err(e) => {
205-
let descrip = p.description.as_deref().unwrap_or("No description");
206-
let group_name = p.group_name.as_deref().unwrap_or("No group name");
207-
let mut context_string = format!(
208-
"Rendering error at peripheral\nName: {}\nDescription: {descrip}\nGroup: {group_name}",
209-
p.name
210-
);
211-
if let Some(dname) = p.derived_from.as_ref() {
212-
context_string = format!("{context_string}\nDerived from: {dname}");
213-
}
214-
let mut e = Err(e);
215-
e = e.with_context(|| context_string);
216-
return e;
202+
let periph = peripheral::render(p, &index, config).with_context(|| {
203+
let group_name = p.group_name.as_deref().unwrap_or("No group name");
204+
let mut context_string =
205+
format!("can't render peripheral '{}', group '{group_name}'", p.name);
206+
if let Some(dname) = p.derived_from.as_ref() {
207+
context_string += &format!(", derived from: '{dname}'");
217208
}
218-
};
209+
context_string
210+
})?;
211+
212+
out.extend(periph);
219213

220214
if p.registers
221215
.as_ref()

src/generate/peripheral.rs

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -671,22 +671,15 @@ fn expand(
671671
match &erc {
672672
RegisterCluster::Register(register) => {
673673
let reg_name = &register.name;
674-
let expanded_reg =
675-
expand_register(register, derive_info, config).with_context(|| {
676-
let descrip = register.description.as_deref().unwrap_or("No description");
677-
format!(
678-
"Error expanding register\nName: {reg_name}\nDescription: {descrip}"
679-
)
680-
})?;
674+
let expanded_reg = expand_register(register, derive_info, config)
675+
.with_context(|| format!("can't expand register '{reg_name}'"))?;
681676
trace!("Register: {reg_name}");
682677
ercs_expanded.extend(expanded_reg);
683678
}
684679
RegisterCluster::Cluster(cluster) => {
685680
let cluster_name = &cluster.name;
686-
let expanded_cluster = expand_cluster(cluster, config).with_context(|| {
687-
let descrip = cluster.description.as_deref().unwrap_or("No description");
688-
format!("Error expanding cluster\nName: {cluster_name}\nDescription: {descrip}")
689-
})?;
681+
let expanded_cluster = expand_cluster(cluster, config)
682+
.with_context(|| format!("can't expand cluster '{cluster_name}'"))?;
690683
trace!("Cluster: {cluster_name}");
691684
ercs_expanded.extend(expanded_cluster);
692685
}
@@ -1359,13 +1352,8 @@ fn render_ercs(
13591352
}
13601353
}
13611354
let reg_name = &reg.name;
1362-
let rendered_reg =
1363-
register::render(reg, path, rpath, index, config).with_context(|| {
1364-
let descrip = reg.description.as_deref().unwrap_or("No description");
1365-
format!(
1366-
"Error rendering register\nName: {reg_name}\nDescription: {descrip}"
1367-
)
1368-
})?;
1355+
let rendered_reg = register::render(reg, path, rpath, index, config)
1356+
.with_context(|| format!("can't render register '{reg_name}'"))?;
13691357
mod_items.extend(rendered_reg)
13701358
}
13711359
}

src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -578,7 +578,7 @@ pub enum SvdError {
578578
#[error("Cannot format crate")]
579579
Fmt,
580580
#[error("Cannot render SVD device")]
581-
Render,
581+
Render(#[from] anyhow::Error),
582582
}
583583

584584
/// Generates rust code for the specified svd content.
@@ -588,7 +588,7 @@ pub fn generate(input: &str, config: &Config) -> Result<Generation> {
588588
let device = load_from(input, config)?;
589589
let mut device_x = String::new();
590590
let items =
591-
generate::device::render(&device, config, &mut device_x).map_err(|_| SvdError::Render)?;
591+
generate::device::render(&device, config, &mut device_x).map_err(SvdError::Render)?;
592592

593593
let mut lib_rs = String::new();
594594
writeln!(

0 commit comments

Comments
 (0)