bindgen
uses rustfmt
to format the emitted bindings. This section describes how to adjust the rustfmt
behavior when being used from bindgen
.
rustfmt.toml
configuration filerustfmt
should automatically use any rustfmt.toml
file that is present in the directory from where bindgen
will be run. If you want to use a configuration file that has a different name or that is in a different directory you can use the --rustfmt-configuration-file
flag or the Builder::rustfmt_configuration_file
method.
rustfmt
If the rustfmt
command does not correspond to a nightly release of rustfmt
but you have rustup
available, you can use nightly
by following these steps:
bindgen
as a CLI applicationUse rustup run
to run bindgen
:
$ rustup run nightly bindgen [ARGS]
bindgen
as a libraryTake the output of the following command:
$ rustup which rustfmt --toolchain=nightly
and pass it to Builder::with_rustfmt
:
use bindgen::Builder; use std::process::Command; fn main() { let output = Command::new("rustup") .args(["which", "rustfmt", "--toolchain", "nightly"]) .output() .expect("Could not spawn `rustup` command"); assert!( output.status.success(), "Unsuccessful status code when running `rustup`: {:?}", output ); let rustfmt_path = String::from_utf8(output.stdout).expect("The `rustfmt` path is not valid `utf-8`"); let bindings = Builder::default() .header("path/to/input.h") .with_rustfmt(rustfmt_path) .generate() .expect("Could not generate bindings"); bindings .write_to_file("path/to/output.rs") .expect("Could not write bindings"); }
These two methods also apply to any other toolchain available in your system.
prettyplease
The prettyplease
crate is a minimal formatter for generated code. To format bindings using prettyplease
you have to invoke bindgen
with either the --formatter=prettyplease
flag or the the bindgen::Builder::formatter(bindgen::Formatter::Prettyplease)
. One of its advantages is that prettyplease
can be used in minimal environments where the Rust toolchain is not installed.
#[doc]
attributes?bindgen
emits all the documentation using #[doc]
attributes by default. If you want to use the more user-friendly ///
syntax, you have two options:
rustfmt
rustfmt
can be configured to normalize documentation. To do so, you have to create a rustfmt.toml
file with the following contents:
normalize_doc_attributes = true
Then, you have set up bindgen
so it passes this file to rustfmt
. Given that the normalize_doc_attributes
option is unstable, you also have to set up bindgen to use a nightly
release of rustfmt
.
prettyplease
prettyplease
normalizes documentation without any additional configuration. Then you just have to tell bindgen
to use prettyplease
as the code formatter.