diff options
author | Nico Chatzi <nico.chatzigianis@focusrite.com> | 2021-04-10 17:26:07 +0100 |
---|---|---|
committer | Emilio Cobos Álvarez <emilio@crisal.io> | 2021-04-11 23:15:19 +0200 |
commit | d0d0726615e1891a66282e77d2b1daba072570cf (patch) | |
tree | 4667d9326865960173141b3f7d77127d1c14405f | |
parent | 696455d1c15e682b2b89f81f409315ea4964aef3 (diff) |
Fix docstring comment for constants
-rw-r--r-- | src/codegen/mod.rs | 13 | ||||
-rw-r--r-- | tests/expectations/tests/issue-1995.rs | 37 | ||||
-rw-r--r-- | tests/headers/issue-1995.h | 12 |
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 |