@@ -183,35 +183,49 @@ fn process_doc_item(item: Node, src: &[u8]) -> Result<Option<Item>, Box<dyn Erro
183
183
} ) )
184
184
}
185
185
186
+ /// Convert the preceding sibling of a to-be-processed item into associated metadata
187
+ ///
188
+ /// An item `Node` to be processed for documentation will typically have associated
189
+ /// metadata `Node`s preceding it in the parse tree. This function returns an optional
190
+ /// `Comment` and/or optional `Feature` from processing the sibling `prev` `Node`.
191
+ ///
192
+ /// The potential cases we care about are:
193
+ /// * `prev` is not a comment, and not a feature requirement.
194
+ /// * `prev` is a Comment, and has no feature requirement before it.
195
+ /// * `prev` is a Comment, and has a feature requirement before it.
196
+ /// * `prev` is a bare feature requirement
197
+ ///
198
+ /// cbindgen won't create a comment before a feature requirement so we don't have to
199
+ /// consider that case.
186
200
fn comment_and_requirement (
187
- node : Node ,
201
+ prev : Node ,
188
202
src : & [ u8 ] ,
189
203
) -> Result < ( Option < Comment > , Option < Feature > ) , Box < dyn Error > > {
190
- let mut maybe_comment = Comment :: new ( node , src) . ok ( ) ;
204
+ let mut maybe_comment = Comment :: new ( prev , src) . ok ( ) ;
191
205
192
206
// If node wasn't a comment, see if it was an expression_statement
193
207
// that itself was preceded by a comment. This skips over
194
208
// expression-like preprocessor attributes on function decls.
195
- if let ( None , "expression_statement" , Some ( prev ) ) =
196
- ( & maybe_comment, node . kind ( ) , node . prev_sibling ( ) )
209
+ if let ( None , "expression_statement" , Some ( prev_prev ) ) =
210
+ ( & maybe_comment, prev . kind ( ) , prev . prev_sibling ( ) )
197
211
{
198
- maybe_comment = Comment :: new ( prev , src) . ok ( ) ;
212
+ maybe_comment = Comment :: new ( prev_prev , src) . ok ( ) ;
199
213
}
200
214
201
215
// If prev wasn't a comment, see if it was a feature requirement.
202
216
if maybe_comment. is_none ( ) {
203
- return Ok ( match Feature :: new ( node , src) . ok ( ) {
217
+ return Ok ( match Feature :: new ( prev , src) . ok ( ) {
204
218
Some ( feat_req) => ( None , Some ( feat_req) ) ,
205
219
None => ( None , None ) ,
206
220
} ) ;
207
221
}
208
222
209
223
// Otherwise, check the prev of the comment for a feature requirement
210
- let Some ( prev ) = node . prev_named_sibling ( ) else {
224
+ let Some ( prev_prev ) = prev . prev_named_sibling ( ) else {
211
225
return Ok ( ( maybe_comment, None ) ) ;
212
226
} ;
213
227
214
- Ok ( ( maybe_comment, Feature :: new ( prev , src) . ok ( ) ) )
228
+ Ok ( ( maybe_comment, Feature :: new ( prev_prev , src) . ok ( ) ) )
215
229
}
216
230
217
231
#[ derive( Debug , Default , Serialize ) ]
0 commit comments