@@ -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 \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 ( ) ;
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+
152167fn 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 \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>" ) ;
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 ( ) ;
0 commit comments