Skip to content

Commit

Permalink
Fix docstring comment for constants
Browse files Browse the repository at this point in the history
  • Loading branch information
Nico Chatzi authored and emilio committed Apr 11, 2021
1 parent 696455d commit d0d0726
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 2 deletions.
13 changes: 11 additions & 2 deletions src/codegen/mod.rs
Expand Up @@ -618,12 +618,18 @@ impl CodeGenerator for Var {
return;
}

let mut attrs = vec![];
if let Some(comment) = item.comment(ctx) {
attrs.push(attributes::doc(comment));
}

let ty = self.ty().to_rust_ty_or_opaque(ctx, &());

if let Some(val) = self.val() {
match *val {
VarType::Bool(val) => {
result.push(quote! {
#(#attrs)*
pub const #canonical_ident : #ty = #val ;
});
}
Expand All @@ -643,6 +649,7 @@ impl CodeGenerator for Var {
helpers::ast_ty::uint_expr(val as _)
};
result.push(quote! {
#(#attrs)*
pub const #canonical_ident : #ty = #val ;
});
}
Expand All @@ -660,12 +667,14 @@ impl CodeGenerator for Var {
Ok(string) => {
let cstr = helpers::ast_ty::cstr_expr(string);
result.push(quote! {
#(#attrs)*
pub const #canonical_ident : &'static #ty = #cstr ;
});
}
Err(..) => {
let bytes = helpers::ast_ty::byte_array_expr(bytes);
result.push(quote! {
#(#attrs)*
pub const #canonical_ident : #ty = #bytes ;
});
}
Expand All @@ -674,20 +683,20 @@ impl CodeGenerator for Var {
VarType::Float(f) => {
match helpers::ast_ty::float_expr(ctx, f) {
Ok(expr) => result.push(quote! {
#(#attrs)*
pub const #canonical_ident : #ty = #expr ;
}),
Err(..) => return,
}
}
VarType::Char(c) => {
result.push(quote! {
#(#attrs)*
pub const #canonical_ident : #ty = #c ;
});
}
}
} else {
let mut attrs = vec![];

// If necessary, apply a `#[link_name]` attribute
let link_name = self.mangled_name().unwrap_or(self.name());
if !utils::names_will_be_identical_after_mangling(
Expand Down
37 changes: 37 additions & 0 deletions tests/expectations/tests/issue-1995.rs
@@ -0,0 +1,37 @@
#![allow(
dead_code,
non_snake_case,
non_camel_case_types,
non_upper_case_globals
)]

/// This is a constant that has a docstring
///
/// And expected to be found in generated bindings code too.
pub const FOO: ::std::os::raw::c_int = 1;
/// This is a constant that has a docstring
///
/// And expected to be found in generated bindings code too.
#[repr(C)]
#[derive(Debug, Default, Copy, Clone)]
pub struct Bar {
pub baz: ::std::os::raw::c_int,
}
#[test]
fn bindgen_test_layout_Bar() {
assert_eq!(
::std::mem::size_of::<Bar>(),
4usize,
concat!("Size of: ", stringify!(Bar))
);
assert_eq!(
::std::mem::align_of::<Bar>(),
4usize,
concat!("Alignment of ", stringify!(Bar))
);
assert_eq!(
unsafe { &(*(::std::ptr::null::<Bar>())).baz as *const _ as usize },
0usize,
concat!("Offset of field: ", stringify!(Bar), "::", stringify!(baz))
);
}
12 changes: 12 additions & 0 deletions tests/headers/issue-1995.h
@@ -0,0 +1,12 @@
/// This is a constant that has a docstring
///
/// And expected to be found in generated bindings code too.
const int FOO = 1;

/// This is a constant that has a docstring
///
/// And expected to be found in generated bindings code too.
struct Bar
{
int baz;
};

0 comments on commit d0d0726

Please sign in to comment.