@@ -109,21 +109,19 @@ pub fn render(
109
109
} ;
110
110
111
111
let mut alias_doc = format ! (
112
- "{name} ({accs}) register accessor: {description}\n \n {}" ,
112
+ "{name} ({accs}) register accessor: {description}{} {}" ,
113
113
api_docs(
114
114
access. can_read( ) ,
115
115
access. can_write( ) ,
116
116
register. properties. reset_value. is_some( ) ,
117
117
& mod_ty,
118
118
false ,
119
- register . read_action ,
120
- ) ?
119
+ ) ? ,
120
+ read_action_docs ( access . can_read ( ) , register . read_action ) ,
121
121
) ;
122
- if mod_ty != "cfg" {
123
- alias_doc +=
124
- format ! ( "\n \n For information about available fields see [`mod@{mod_ty}`] module" )
125
- . as_str ( ) ;
126
- }
122
+ alias_doc +=
123
+ format ! ( "\n \n For information about available fields see [`mod@{mod_ty}`] module" )
124
+ . as_str ( ) ;
127
125
let mut out = TokenStream :: new ( ) ;
128
126
out. extend ( quote ! {
129
127
#[ doc = #alias_doc]
@@ -149,19 +147,35 @@ pub fn render(
149
147
}
150
148
}
151
149
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
+
152
167
fn api_docs (
153
168
can_read : bool ,
154
169
can_write : bool ,
155
170
can_reset : bool ,
156
171
module : & Ident ,
157
172
inmodule : bool ,
158
- read_action : Option < ReadAction > ,
159
173
) -> Result < String , std:: fmt:: Error > {
160
174
fn method ( s : & str ) -> String {
161
- format ! ( "[`{s}`](crate::generic:: Reg::{s})" )
175
+ format ! ( "[`{s}`](crate::Reg::{s})" )
162
176
}
163
177
164
- let mut doc = String :: new ( ) ;
178
+ let mut doc = String :: from ( " \n \n " ) ;
165
179
166
180
if can_read {
167
181
write ! (
@@ -170,17 +184,6 @@ fn api_docs(
170
184
method( "read" ) ,
171
185
if inmodule { "(R)" } else { "" } ,
172
186
) ?;
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 ( ' ' ) ;
184
187
}
185
188
186
189
if can_write {
@@ -203,7 +206,7 @@ fn api_docs(
203
206
}
204
207
205
208
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" ) ) ?;
207
210
}
208
211
209
212
doc. push_str ( "See [API](https://docs.rs/svd2rust/#read--modify--write-api)." ) ;
@@ -220,12 +223,13 @@ pub fn render_register_mod(
220
223
) -> Result < TokenStream > {
221
224
let properties = & register. properties ;
222
225
let name = util:: name_of ( register, config. ignore_groups ) ;
226
+ let rname = & register. name ;
223
227
let span = Span :: call_site ( ) ;
224
228
let regspec_ty = regspec ( & name, config, span) ;
225
229
let mod_ty = ident ( & name, config, "register_mod" , span) ;
226
230
let rsize = properties
227
231
. size
228
- . ok_or_else ( || anyhow ! ( "Register {} has no `size` field" , register . name ) ) ?;
232
+ . ok_or_else ( || anyhow ! ( "Register {rname } has no `size` field" ) ) ?;
229
233
let rsize = if rsize < 8 {
230
234
8
231
235
} else if rsize. is_power_of_two ( ) {
@@ -236,7 +240,7 @@ pub fn render_register_mod(
236
240
let rty = rsize. to_ty ( ) ?;
237
241
let description = util:: escape_special_chars (
238
242
util:: respace ( & register. description . clone ( ) . unwrap_or_else ( || {
239
- warn ! ( "Missing description for register {}" , register . name ) ;
243
+ warn ! ( "Missing description for register {rname}" ) ;
240
244
Default :: default ( )
241
245
} ) )
242
246
. as_ref ( ) ,
@@ -249,15 +253,15 @@ pub fn render_register_mod(
249
253
let can_reset = properties. reset_value . is_some ( ) ;
250
254
251
255
if can_read {
252
- let desc = format ! ( "Register `{}` reader" , register . name ) ;
256
+ let desc = format ! ( "Register `{rname }` reader" ) ;
253
257
mod_items. extend ( quote ! {
254
258
#[ doc = #desc]
255
259
pub type R = crate :: R <#regspec_ty>;
256
260
} ) ;
257
261
}
258
262
259
263
if can_write {
260
- let desc = format ! ( "Register `{}` writer" , register . name ) ;
264
+ let desc = format ! ( "Register `{rname }` writer" ) ;
261
265
mod_items. extend ( quote ! {
262
266
#[ doc = #desc]
263
267
pub type W = crate :: W <#regspec_ty>;
@@ -356,15 +360,9 @@ pub fn render_register_mod(
356
360
}
357
361
358
362
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) ,
368
366
) ;
369
367
370
368
mod_items. extend ( quote ! {
@@ -663,15 +661,11 @@ pub fn fields(
663
661
let rv = properties. reset_value . map ( |rv| ( rv >> offset) & mask) ;
664
662
let fty = width. to_ty ( ) ?;
665
663
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 {
669
665
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)
672
667
} else {
673
- use_cast = true ;
674
- use_mask = true ;
668
+ ( true , true )
675
669
} ;
676
670
677
671
let mut lookup_results = Vec :: new ( ) ;
@@ -724,7 +718,8 @@ pub fn fields(
724
718
725
719
let brief_suffix = if let Field :: Array ( _, de) = & f {
726
720
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})" )
728
723
} else {
729
724
let suffixes: Vec < _ > = de. indexes ( ) . collect ( ) ;
730
725
format ! ( "({})" , suffixes. join( "," ) )
@@ -955,12 +950,14 @@ pub fn fields(
955
950
} ;
956
951
let mut readerdoc = field_reader_brief. clone ( ) ;
957
952
if let Some ( action) = f. read_action {
958
- readerdoc += match action {
959
- ReadAction :: Clear => "\n \n The field is **cleared** (set to zero) following a read operation." ,
960
- ReadAction :: Set => "\n \n The field is **set** (set to ones) following a read operation." ,
961
- ReadAction :: Modify => "\n \n The field is **modified** in some way after a read operation." ,
962
- ReadAction :: ModifyExternal => "\n \n One 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>" ) ;
964
961
}
965
962
mod_items. extend ( quote ! {
966
963
#[ doc = #readerdoc]
@@ -996,7 +993,7 @@ pub fn fields(
996
993
let increment = de. dim_increment ;
997
994
let doc = description. expand_dim ( & brief_suffix) ;
998
995
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> " ) ;
1000
997
let offset_calc = calculate_offset ( increment, offset, true ) ;
1001
998
let value = quote ! { ( ( self . bits >> #offset_calc) & #hexmask) #cast } ;
1002
999
let dim = unsuffixed ( de. dim ) ;
@@ -1283,7 +1280,7 @@ pub fn fields(
1283
1280
let offset_calc = calculate_offset ( increment, offset, false ) ;
1284
1281
let doc = & description. expand_dim ( & brief_suffix) ;
1285
1282
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> " ) ;
1287
1284
let dim = unsuffixed ( de. dim ) ;
1288
1285
w_impl_items. extend ( quote ! {
1289
1286
#[ doc = #doc]
@@ -1420,7 +1417,7 @@ impl Variant {
1420
1417
. ok_or_else ( || anyhow ! ( "EnumeratedValue {} has no `<value>` entry" , ev. name) ) ?;
1421
1418
Self :: from_value ( value, ev, config)
1422
1419
} )
1423
- . collect :: < Result < Vec < _ > > > ( )
1420
+ . collect ( )
1424
1421
}
1425
1422
fn from_value ( value : u64 , ev : & EnumeratedValue , config : & Config ) -> Result < Self > {
1426
1423
let span = Span :: call_site ( ) ;
0 commit comments