# ruby-prism-sys
Rust bindings to [ruby/prism](https://github.com/ruby/prism)'s C API.
## Examples
Currently the best examples are found in the integration tests (in `tests/`).
## Documentation
Since this crate has not been released, docs are not yet online anywhere. You can generate them,
however, from this directory in this repo by running `cargo doc`, then opening
`target/doc/ruby_prism_sys/index.html` in your browser. (You could, instead, combine those two steps by
doing `cargo doc --open`!)
## Development
### Dependencies
In addition to the Ruby prism dependencies, you shouldn't need anything else besides Rust.
### Updating bindings
`build.rs` (which gets called as part of running `cargo build`, `cargo test`, etc) is where we tell
`bindgen` which types, functions, etc. that we want it to generate for us. It's smart enough to know
to generate dependencies for items we specify in there (ex. `pm_parser_t` has fields of type
`pm_token_t`, but we don't need to tell `bindgen` about `pm_token_t`--it'll figure it out and
generate bindings for that type too).
If you want to generate new bindings, update `build.rs` accordingly, then run `cargo doc` and check
the docs; that should tell you if `bindgen` generated all the things you need or not.
### Testing
Since almost all of the code is generated by the well-tested
[`bindgen`](https://github.com/rust-lang/rust-bindgen) crate, we only have some cursory integration
tests in `tests/`, really just validating types and functions got generated appropriately. (They
also give some hints about how to use the API from Rust!) To run the tests, run `cargo test`.
Any new publicly exposed C API additions should get a test or two.