summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNico Chatzi <nico.chatzigianis@focusrite.com>2021-04-10 17:26:07 +0100
committerEmilio Cobos Álvarez <emilio@crisal.io>2021-04-11 23:15:19 +0200
commitd0d0726615e1891a66282e77d2b1daba072570cf (patch)
tree4667d9326865960173141b3f7d77127d1c14405f
parent696455d1c15e682b2b89f81f409315ea4964aef3 (diff)
Fix docstring comment for constants
-rw-r--r--src/codegen/mod.rs13
-rw-r--r--tests/expectations/tests/issue-1995.rs37
-rw-r--r--tests/headers/issue-1995.h12
3 files changed, 60 insertions, 2 deletions
diff --git a/src/codegen/mod.rs b/src/codegen/mod.rs
index e62b1a87..e498d2b2 100644
--- a/src/codegen/mod.rs
+++ b/src/codegen/mod.rs
@@ -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 ;
});
}
@@ -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 ;
});
}
@@ -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 ;
});
}
@@ -674,6 +683,7 @@ 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,
@@ -681,13 +691,12 @@ impl CodeGenerator for Var {
}
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(
diff --git a/tests/expectations/tests/issue-1995.rs b/tests/expectations/tests/issue-1995.rs
new file mode 100644
index 00000000..58e11eb2
--- /dev/null
+++ b/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))
+ );
+}
diff --git a/tests/headers/issue-1995.h b/tests/headers/issue-1995.h
new file mode 100644
index 00000000..619f6735
--- /dev/null
+++ b/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;
+}; \ No newline at end of file