Skip to content

Commit 46a93f7

Browse files
committed
add register reader/writer links
1 parent d19c646 commit 46a93f7

File tree

2 files changed

+26
-9
lines changed

2 files changed

+26
-9
lines changed

CHANGELOG.md

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

1010
- Fix when `atomics` features is generated but not enabled
11+
- move hidden structs into module, add register reader/writer links into `SPEC` docs (#736)
1112
- removed register writer & reader wrappers, generic `REG` in field writers (#731)
1213
- Updated syn to version 2 (#732)
1314
- Let readable field fetch doc from svd description (#734)

src/generate/register.rs

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use proc_macro2::{Ident, Punct, Spacing, Span, TokenStream};
88
use quote::{quote, ToTokens};
99
use std::borrow::Cow;
1010
use std::collections::HashSet;
11+
use std::fmt::Write;
1112
use svd_parser::expand::{
1213
derive_enumerated_values, derive_field, BlockPath, EnumPath, FieldPath, Index, RegisterPath,
1314
};
@@ -138,19 +139,28 @@ pub fn render_register_mod(
138139
);
139140

140141
let mut mod_items = TokenStream::new();
141-
let mut methods = vec![];
142142

143143
let can_read = access.can_read();
144144
let can_write = access.can_write();
145145
let can_reset = properties.reset_value.is_some();
146146

147+
let mut doc = format!("{description}\n");
148+
149+
fn method(s: &str) -> String {
150+
format!("[`{s}`](crate::generic::Reg::{s})")
151+
}
152+
147153
if can_read {
148154
let desc = format!("Register `{}` reader", register.name);
149155
mod_items.extend(quote! {
150156
#[doc = #desc]
151157
pub type R = crate::R<#regspec_ident>;
152158
});
153-
methods.push("read");
159+
write!(
160+
doc,
161+
"\nThis register you can {} with [`R`].",
162+
method("read")
163+
)?;
154164
}
155165

156166
if can_write {
@@ -159,17 +169,29 @@ pub fn render_register_mod(
159169
#[doc = #desc]
160170
pub type W = crate::W<#regspec_ident>;
161171
});
172+
let mut methods = Vec::new();
162173
methods.push("write_with_zero");
163174
if can_reset {
164175
methods.push("reset");
165176
methods.push("write");
166177
}
178+
write!(
179+
doc,
180+
"\nThis register you can {} with [`W`].",
181+
methods
182+
.iter()
183+
.map(|m| method(m))
184+
.collect::<Vec<_>>()
185+
.join(", ")
186+
)?;
167187
}
168188

169189
if can_read && can_write {
170-
methods.push("modify");
190+
write!(doc, "\nAnd {} with [`R`] and [`W`].", method("modify"))?;
171191
}
172192

193+
doc.push_str("\nSee [API](https://docs.rs/svd2rust/#read--modify--write-api).");
194+
173195
let mut r_impl_items = TokenStream::new();
174196
let mut r_debug_impl = TokenStream::new();
175197
let mut w_impl_items = TokenStream::new();
@@ -310,12 +332,6 @@ pub fn render_register_mod(
310332
close.to_tokens(&mut mod_items);
311333
}
312334

313-
let methods = methods
314-
.iter()
315-
.map(|s| format!("[`{s}`](crate::generic::Reg::{s})"))
316-
.collect::<Vec<_>>();
317-
let mut doc = format!("{description}\n\nThis register you can {}. See [API](https://docs.rs/svd2rust/#read--modify--write-api).", methods.join(", "));
318-
319335
if name_snake_case != "cfg" {
320336
doc += format!(
321337
"\n\nFor information about available fields see [{name_snake_case}](index.html) module"

0 commit comments

Comments
 (0)