Skip to content

Commit c91d823

Browse files
committed
Improve Could not find errors
1 parent 6525c97 commit c91d823

File tree

4 files changed

+71
-14
lines changed

4 files changed

+71
-14
lines changed

CHANGELOG-rust.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ This changelog tracks the Rust `svdtools` project. See
55

66
## [Unreleased]
77

8+
* Improve "Could not find errors"
9+
810
## [v0.3.3] 2023-10-02
911

1012
* Fast fix for #161

src/patch/device.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -387,7 +387,14 @@ impl DeviceExt for Device {
387387
.with_context(|| format!("Processing peripheral `{}`", ptag.name))?;
388388
}
389389
if pcount == 0 {
390-
Err(anyhow!("Could not find `{pspec}`"))
390+
Err(anyhow!(
391+
"Could not find `{pspec}. Present peripherals: {}.`",
392+
self.peripherals
393+
.iter()
394+
.map(|p| p.name.as_str())
395+
.collect::<Vec<_>>()
396+
.join(", ")
397+
))
391398
} else {
392399
Ok(())
393400
}

src/patch/peripheral.rs

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -643,7 +643,13 @@ impl RegisterBlockExt for Peripheral {
643643
.with_context(|| format!("Processing register `{}`", rtag.name))?;
644644
}
645645
if rcount == 0 {
646-
Err(anyhow!("Could not find `{pname}:{rspec}`"))
646+
Err(anyhow!(
647+
"Could not find `{pname}:{rspec}. Present registers: {}.`",
648+
self.registers()
649+
.map(|r| r.name.as_str())
650+
.collect::<Vec<_>>()
651+
.join(", ")
652+
))
647653
} else {
648654
Ok(())
649655
}
@@ -659,7 +665,13 @@ impl RegisterBlockExt for Peripheral {
659665
.with_context(|| format!("Processing cluster `{}`", ctag.name))?;
660666
}
661667
if ccount == 0 {
662-
Err(anyhow!("Could not find `{pname}:{cspec}`"))
668+
Err(anyhow!(
669+
"Could not find `{pname}:{cspec}. Present clusters: {}.`",
670+
self.clusters()
671+
.map(|c| c.name.as_str())
672+
.collect::<Vec<_>>()
673+
.join(", ")
674+
))
663675
} else {
664676
Ok(())
665677
}
@@ -1088,7 +1100,14 @@ impl RegisterBlockExt for Cluster {
10881100
.with_context(|| format!("Processing register `{}`", rtag.name))?;
10891101
}
10901102
if rcount == 0 {
1091-
Err(anyhow!("Could not find `{pname}:{rspec}`"))
1103+
Err(anyhow!(
1104+
"Could not find `{pname}:{}:{rspec}. Present registers: {}.`",
1105+
self.name,
1106+
self.registers()
1107+
.map(|r| r.name.as_str())
1108+
.collect::<Vec<_>>()
1109+
.join(", ")
1110+
))
10921111
} else {
10931112
Ok(())
10941113
}
@@ -1104,7 +1123,14 @@ impl RegisterBlockExt for Cluster {
11041123
.with_context(|| format!("Processing cluster `{}`", ctag.name))?;
11051124
}
11061125
if ccount == 0 {
1107-
Err(anyhow!("Could not find `{pname}:{cspec}`"))
1126+
Err(anyhow!(
1127+
"Could not find `{pname}:{}:{cspec}. Present clusters: {}.`",
1128+
self.name,
1129+
self.clusters()
1130+
.map(|c| c.name.as_str())
1131+
.collect::<Vec<_>>()
1132+
.join(", ")
1133+
))
11081134
} else {
11091135
Ok(())
11101136
}

src/patch/register.rs

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -321,8 +321,12 @@ impl RegisterExt for Register {
321321

322322
if names.is_empty() {
323323
return Err(anyhow!(
324-
"Could not find any fields to merge {}.{key}",
325-
self.name
324+
"Could not find any fields to merge {}:{key}. Present fields: {}.`",
325+
self.name,
326+
self.fields()
327+
.map(|f| f.name.as_str())
328+
.collect::<Vec<_>>()
329+
.join(", ")
326330
));
327331
}
328332
let mut bitwidth = 0;
@@ -430,15 +434,19 @@ impl RegisterExt for Register {
430434
let (new_fields, name) = match (it.next(), it.next()) {
431435
(None, _) => {
432436
return Err(anyhow!(
433-
"Could not find any fields to split {}.{fspec}",
434-
self.name
435-
))
437+
"Could not find any fields to split {}:{fspec}. Present fields: {}.`",
438+
self.name,
439+
self.fields()
440+
.map(|f| f.name.as_str())
441+
.collect::<Vec<_>>()
442+
.join(", ")
443+
));
436444
}
437445
(Some(_), Some(_)) => {
438446
return Err(anyhow!(
439-
"Only one field can be spitted at time {}.{fspec}",
447+
"Only one field can be splitted at time {}:{fspec}",
440448
self.name
441-
))
449+
));
442450
}
443451
(Some(first), None) => {
444452
let name = if let Some(n) = fsplit.get_str("name")? {
@@ -687,7 +695,14 @@ impl RegisterExt for Register {
687695
.map(|f| (f.bit_range.offset, f.name.to_string()))
688696
.collect::<Vec<_>>();
689697
if offsets.is_empty() {
690-
return Err(anyhow!("Could not find {pname}:{}.{fspec}", self.name));
698+
return Err(anyhow!(
699+
"Could not find field {pname}:{}:{fspec}. Present fields: {}.`",
700+
self.name,
701+
self.fields()
702+
.map(|f| f.name.as_str())
703+
.collect::<Vec<_>>()
704+
.join(", ")
705+
));
691706
}
692707
let (min_offset, fname) = offsets.iter().min_by_key(|on| on.0).unwrap();
693708
let name = make_ev_name(&fname.replace("%s", ""), usage)?;
@@ -727,7 +742,14 @@ impl RegisterExt for Register {
727742
set_any = true;
728743
}
729744
if !set_any {
730-
return Err(anyhow!("Could not find {pname}:{}.{fspec}", self.name));
745+
return Err(anyhow!(
746+
"Could not find field {pname}:{}:{fspec}. Present fields: {}.`",
747+
self.name,
748+
self.fields()
749+
.map(|f| f.name.as_str())
750+
.collect::<Vec<_>>()
751+
.join(", ")
752+
));
731753
}
732754
Ok(())
733755
}

0 commit comments

Comments
 (0)