Skip to content

Commit 877196f

Browse files
bors[bot]luojia65
andauthored
Merge #553
553: Fixes in multi line description generation r=burrbull a=luojia65 This pull request contains two fixes: 1. New line separators are now rendered in enumerated values. 2. Multi line field descriptions are now rendered correctly in write and read registers. This issue happened because the original code accidentally unescaped and respaced twice in field parse proccess. It uses escaped description [L292](https://github.com/rust-embedded/svd2rust/compare/master...luojia65:fix-new-line?expand=1#diff-ff493acd6701940416e9725ce824c71d3039b5c56efc3721cf15d1688b3f7deaL292) as input, but in `desctiption_with_bits` function later [L1001](https://github.com/rust-embedded/svd2rust/compare/master...luojia65:fix-new-line?expand=1#diff-ff493acd6701940416e9725ce824c71d3039b5c56efc3721cf15d1688b3f7deaL1001 ) it unescaped again, resulting in loss of new line separators `\n`. Before: ![图片](https://user-images.githubusercontent.com/40385009/141669374-2d6246c6-d6a0-4e9f-b107-5fc2b53c1498.png) After: ![图片](https://user-images.githubusercontent.com/40385009/141669385-8850d267-7879-4600-a5d1-d29cb0d6ab20.png) Co-authored-by: luojia65 <me@luojia.cc>
2 parents 413829c + 0419ced commit 877196f

File tree

2 files changed

+9
-10
lines changed

2 files changed

+9
-10
lines changed

CHANGELOG.md

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

1212
- Bug with `use_mask`
1313
- Correct derive for register (cluster) array (needs `svd-rs` 0.11.2)
14+
- New line separators are now rendered in enumerated values
15+
- Multi line field descriptions are now rendered correctly in write and read registers
1416

1517
### Added
1618

src/generate/register.rs

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -289,11 +289,8 @@ pub fn fields(
289289
let name_sc = Ident::new(&name.to_sanitized_snake_case(), span);
290290
let name_pc = name.to_sanitized_upper_case();
291291
let bits = Ident::new(if width == 1 { "bit" } else { "bits" }, span);
292-
let description = if let Some(d) = &f.description {
293-
util::respace(&util::escape_brackets(d))
294-
} else {
295-
"".to_owned()
296-
};
292+
let description_raw = f.description.as_ref().map(|s| s.as_str()).unwrap_or(""); // raw description, if absent using empty string
293+
let description = util::respace(&util::escape_brackets(description_raw));
297294

298295
let can_read = can_read
299296
&& (f.access != Some(Access::WriteOnly))
@@ -427,7 +424,7 @@ pub fn fields(
427424
Span::call_site(),
428425
);
429426
let doc = util::replace_suffix(
430-
&description_with_bits(&description, sub_offset, width),
427+
&description_with_bits(&description_raw, sub_offset, width),
431428
suffix,
432429
);
433430
r_impl_items.extend(quote! {
@@ -439,7 +436,7 @@ pub fn fields(
439436
});
440437
}
441438
} else {
442-
let doc = description_with_bits(&description, offset, width);
439+
let doc = description_with_bits(&description_raw, offset, width);
443440
r_impl_items.extend(quote! {
444441
#[doc = #doc]
445442
#inline
@@ -792,7 +789,7 @@ pub fn fields(
792789
Span::call_site(),
793790
);
794791
let doc = util::replace_suffix(
795-
&description_with_bits(&description, sub_offset, width),
792+
&description_with_bits(&description_raw, sub_offset, width),
796793
suffix,
797794
);
798795
let sub_offset = util::unsuffixed(sub_offset as u64);
@@ -815,7 +812,7 @@ pub fn fields(
815812
}
816813
}
817814
} else {
818-
let doc = description_with_bits(&description, offset, width);
815+
let doc = description_with_bits(&description_raw, offset, width);
819816
w_impl_items.extend(quote! {
820817
#[doc = #doc]
821818
#inline
@@ -935,7 +932,7 @@ fn add_from_variants(
935932

936933
let mut vars = TokenStream::new();
937934
for v in variants.iter().map(|v| {
938-
let desc = util::escape_brackets(&format!("{}: {}", v.value, v.doc));
935+
let desc = util::escape_brackets(&util::respace(&format!("{}: {}", v.value, v.doc)));
939936
let pcv = &v.pc;
940937
let pcval = &util::unsuffixed(v.value);
941938
quote! {

0 commit comments

Comments
 (0)