Skip to content

Commit 7adb298

Browse files
authored
Merge pull request #845 from rust-embedded/clean
little cleanups
2 parents 02d165a + e7ee523 commit 7adb298

File tree

3 files changed

+56
-68
lines changed

3 files changed

+56
-68
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
77

88
## [Unreleased]
99

10+
- Use `warning` class in docs
1011
- Refactor `Accessor`
1112

1213
## [v0.33.3] - 2024-05-10

src/generate/register.rs

+50-53
Original file line numberDiff line numberDiff line change
@@ -109,21 +109,19 @@ pub fn render(
109109
};
110110

111111
let mut alias_doc = format!(
112-
"{name} ({accs}) register accessor: {description}\n\n{}",
112+
"{name} ({accs}) register accessor: {description}{}{}",
113113
api_docs(
114114
access.can_read(),
115115
access.can_write(),
116116
register.properties.reset_value.is_some(),
117117
&mod_ty,
118118
false,
119-
register.read_action,
120-
)?
119+
)?,
120+
read_action_docs(access.can_read(), register.read_action),
121121
);
122-
if mod_ty != "cfg" {
123-
alias_doc +=
124-
format!("\n\nFor information about available fields see [`mod@{mod_ty}`] module")
125-
.as_str();
126-
}
122+
alias_doc +=
123+
format!("\n\nFor information about available fields see [`mod@{mod_ty}`] module")
124+
.as_str();
127125
let mut out = TokenStream::new();
128126
out.extend(quote! {
129127
#[doc = #alias_doc]
@@ -149,19 +147,35 @@ pub fn render(
149147
}
150148
}
151149

150+
fn read_action_docs(can_read: bool, read_action: Option<ReadAction>) -> String {
151+
let mut doc = String::new();
152+
if can_read {
153+
if let Some(action) = read_action {
154+
doc.push_str("\n\n<div class=\"warning\">");
155+
doc.push_str(match action {
156+
ReadAction::Clear => "The register is <b>cleared</b> (set to zero) following a read operation.",
157+
ReadAction::Set => "The register is <b>set</b> (set to ones) following a read operation.",
158+
ReadAction::Modify => "The register is <b>modified</b> in some way after a read operation.",
159+
ReadAction::ModifyExternal => "One or more dependent resources other than the current register are immediately affected by a read operation.",
160+
});
161+
doc.push_str("</div>");
162+
}
163+
}
164+
doc
165+
}
166+
152167
fn api_docs(
153168
can_read: bool,
154169
can_write: bool,
155170
can_reset: bool,
156171
module: &Ident,
157172
inmodule: bool,
158-
read_action: Option<ReadAction>,
159173
) -> Result<String, std::fmt::Error> {
160174
fn method(s: &str) -> String {
161-
format!("[`{s}`](crate::generic::Reg::{s})")
175+
format!("[`{s}`](crate::Reg::{s})")
162176
}
163177

164-
let mut doc = String::new();
178+
let mut doc = String::from("\n\n");
165179

166180
if can_read {
167181
write!(
@@ -170,17 +184,6 @@ fn api_docs(
170184
method("read"),
171185
if inmodule { "(R)" } else { "" },
172186
)?;
173-
174-
if let Some(action) = read_action {
175-
doc.push_str("WARN: ");
176-
doc.push_str(match action {
177-
ReadAction::Clear => "The register is **cleared** (set to zero) following a read operation.",
178-
ReadAction::Set => "The register is **set** (set to ones) following a read operation.",
179-
ReadAction::Modify => "The register is **modified** in some way after a read operation.",
180-
ReadAction::ModifyExternal => "One or more dependent resources other than the current register are immediately affected by a read operation.",
181-
});
182-
}
183-
doc.push(' ');
184187
}
185188

186189
if can_write {
@@ -203,7 +206,7 @@ fn api_docs(
203206
}
204207

205208
if can_read && can_write {
206-
write!(doc, "You can also {} this register. ", method("modify"),)?;
209+
write!(doc, "You can also {} this register. ", method("modify"))?;
207210
}
208211

209212
doc.push_str("See [API](https://docs.rs/svd2rust/#read--modify--write-api).");
@@ -220,12 +223,13 @@ pub fn render_register_mod(
220223
) -> Result<TokenStream> {
221224
let properties = &register.properties;
222225
let name = util::name_of(register, config.ignore_groups);
226+
let rname = &register.name;
223227
let span = Span::call_site();
224228
let regspec_ty = regspec(&name, config, span);
225229
let mod_ty = ident(&name, config, "register_mod", span);
226230
let rsize = properties
227231
.size
228-
.ok_or_else(|| anyhow!("Register {} has no `size` field", register.name))?;
232+
.ok_or_else(|| anyhow!("Register {rname} has no `size` field"))?;
229233
let rsize = if rsize < 8 {
230234
8
231235
} else if rsize.is_power_of_two() {
@@ -236,7 +240,7 @@ pub fn render_register_mod(
236240
let rty = rsize.to_ty()?;
237241
let description = util::escape_special_chars(
238242
util::respace(&register.description.clone().unwrap_or_else(|| {
239-
warn!("Missing description for register {}", register.name);
243+
warn!("Missing description for register {rname}");
240244
Default::default()
241245
}))
242246
.as_ref(),
@@ -249,15 +253,15 @@ pub fn render_register_mod(
249253
let can_reset = properties.reset_value.is_some();
250254

251255
if can_read {
252-
let desc = format!("Register `{}` reader", register.name);
256+
let desc = format!("Register `{rname}` reader");
253257
mod_items.extend(quote! {
254258
#[doc = #desc]
255259
pub type R = crate::R<#regspec_ty>;
256260
});
257261
}
258262

259263
if can_write {
260-
let desc = format!("Register `{}` writer", register.name);
264+
let desc = format!("Register `{rname}` writer");
261265
mod_items.extend(quote! {
262266
#[doc = #desc]
263267
pub type W = crate::W<#regspec_ty>;
@@ -356,15 +360,9 @@ pub fn render_register_mod(
356360
}
357361

358362
let doc = format!(
359-
"{description}\n\n{}",
360-
api_docs(
361-
can_read,
362-
can_write,
363-
can_reset,
364-
&mod_ty,
365-
true,
366-
register.read_action,
367-
)?
363+
"{description}{}{}",
364+
api_docs(can_read, can_write, can_reset, &mod_ty, true)?,
365+
read_action_docs(access.can_read(), register.read_action),
368366
);
369367

370368
mod_items.extend(quote! {
@@ -663,15 +661,11 @@ pub fn fields(
663661
let rv = properties.reset_value.map(|rv| (rv >> offset) & mask);
664662
let fty = width.to_ty()?;
665663

666-
let use_mask;
667-
let use_cast;
668-
if let Some(size) = properties.size {
664+
let (use_cast, use_mask) = if let Some(size) = properties.size {
669665
let size = size.to_ty_width()?;
670-
use_cast = size != width.to_ty_width()?;
671-
use_mask = size != width;
666+
(size != width.to_ty_width()?, size != width)
672667
} else {
673-
use_cast = true;
674-
use_mask = true;
668+
(true, true)
675669
};
676670

677671
let mut lookup_results = Vec::new();
@@ -724,7 +718,8 @@ pub fn fields(
724718

725719
let brief_suffix = if let Field::Array(_, de) = &f {
726720
if let Some(range) = de.indexes_as_range() {
727-
format!("({}-{})", *range.start(), *range.end())
721+
let (start, end) = range.into_inner();
722+
format!("({start}-{end})")
728723
} else {
729724
let suffixes: Vec<_> = de.indexes().collect();
730725
format!("({})", suffixes.join(","))
@@ -955,12 +950,14 @@ pub fn fields(
955950
};
956951
let mut readerdoc = field_reader_brief.clone();
957952
if let Some(action) = f.read_action {
958-
readerdoc += match action {
959-
ReadAction::Clear => "\n\nThe field is **cleared** (set to zero) following a read operation.",
960-
ReadAction::Set => "\n\nThe field is **set** (set to ones) following a read operation.",
961-
ReadAction::Modify => "\n\nThe field is **modified** in some way after a read operation.",
962-
ReadAction::ModifyExternal => "\n\nOne or more dependent resources other than the current field are immediately affected by a read operation.",
963-
};
953+
readerdoc.push_str("\n\n<div class=\"warning\">");
954+
readerdoc.push_str(match action {
955+
ReadAction::Clear => "The field is <b>cleared</b> (set to zero) following a read operation.",
956+
ReadAction::Set => "The field is <b>set</b> (set to ones) following a read operation.",
957+
ReadAction::Modify => "The field is <b>modified</b> in some way after a read operation.",
958+
ReadAction::ModifyExternal => "One or more dependent resources other than the current field are immediately affected by a read operation.",
959+
});
960+
readerdoc.push_str("</div>");
964961
}
965962
mod_items.extend(quote! {
966963
#[doc = #readerdoc]
@@ -996,7 +993,7 @@ pub fn fields(
996993
let increment = de.dim_increment;
997994
let doc = description.expand_dim(&brief_suffix);
998995
let first_name = svd::array::names(f, de).next().unwrap();
999-
let note = format!("NOTE: `n` is number of field in register. `n == 0` corresponds to `{first_name}` field");
996+
let note = format!("<div class=\"warning\">`n` is number of field in register. `n == 0` corresponds to `{first_name}` field.</div>");
1000997
let offset_calc = calculate_offset(increment, offset, true);
1001998
let value = quote! { ((self.bits >> #offset_calc) & #hexmask) #cast };
1002999
let dim = unsuffixed(de.dim);
@@ -1283,7 +1280,7 @@ pub fn fields(
12831280
let offset_calc = calculate_offset(increment, offset, false);
12841281
let doc = &description.expand_dim(&brief_suffix);
12851282
let first_name = svd::array::names(f, de).next().unwrap();
1286-
let note = format!("NOTE: `n` is number of field in register. `n == 0` corresponds to `{first_name}` field");
1283+
let note = format!("<div class=\"warning\">`n` is number of field in register. `n == 0` corresponds to `{first_name}` field.</div>");
12871284
let dim = unsuffixed(de.dim);
12881285
w_impl_items.extend(quote! {
12891286
#[doc = #doc]
@@ -1420,7 +1417,7 @@ impl Variant {
14201417
.ok_or_else(|| anyhow!("EnumeratedValue {} has no `<value>` entry", ev.name))?;
14211418
Self::from_value(value, ev, config)
14221419
})
1423-
.collect::<Result<Vec<_>>>()
1420+
.collect()
14241421
}
14251422
fn from_value(value: u64, ev: &EnumeratedValue, config: &Config) -> Result<Self> {
14261423
let span = Span::call_site();

src/util.rs

+5-15
Original file line numberDiff line numberDiff line change
@@ -356,12 +356,7 @@ impl U32Ext for u32 {
356356
16 => "u16",
357357
32 => "u32",
358358
64 => "u64",
359-
_ => {
360-
return Err(anyhow!(
361-
"can't convert {} bits into register size type",
362-
*self
363-
))
364-
}
359+
_ => return Err(anyhow!("can't convert {self} bits into register size type")),
365360
})
366361
}
367362
fn to_ty(&self) -> Result<Ident> {
@@ -374,8 +369,7 @@ impl U32Ext for u32 {
374369
33..=64 => "u64",
375370
_ => {
376371
return Err(anyhow!(
377-
"can't convert {} bits into a Rust integral type",
378-
*self
372+
"can't convert {self} bits into a Rust integral type"
379373
))
380374
}
381375
},
@@ -392,8 +386,7 @@ impl U32Ext for u32 {
392386
33..=64 => 64,
393387
_ => {
394388
return Err(anyhow!(
395-
"can't convert {} bits into a Rust integral type width",
396-
*self
389+
"can't convert {self} bits into a Rust integral type width"
397390
))
398391
}
399392
})
@@ -437,11 +430,8 @@ pub trait DimSuffix {
437430
impl DimSuffix for str {
438431
fn expand_dim(&self, suffix: &str) -> Cow<str> {
439432
if self.contains("%s") {
440-
if self.contains("[%s]") {
441-
self.replace("[%s]", suffix).into()
442-
} else {
443-
self.replace("%s", suffix).into()
444-
}
433+
self.replace(if self.contains("[%s]") { "[%s]" } else { "%s" }, suffix)
434+
.into()
445435
} else {
446436
self.into()
447437
}

0 commit comments

Comments
 (0)