# cargo-snippet
[](https://crates.io/crates/cargo-snippet)
[](https://travis-ci.org/hatoo/cargo-snippet)
A snippet extractor for competitive programmers.
You can manage code snippet with test and bench !!
## Installing
You need nightly rust.
```
$ cargo install cargo-snippet --features="binaries"
```
## Usage
Create a project for snippet.
```
$ cargo new mysnippet
```
Add dependencies to Cargo.toml.
```toml
[dependencies]
cargo-snippet = "0.2"
```
Add this to src/lib.rs.
```rust
#![feature(plugin)]
#![plugin(cargo_snippet)]
```
Write some snippet codes and tests.
```rust
#![feature(plugin)]
#![plugin(cargo_snippet)]
// Annotate snippet name
#[snippet = "mymath"]
#[snippet = "gcd"]
fn gcd(a: u64, b: u64) -> u64 {
if b == 0 {
a
} else {
gcd(b, a % b)
}
}
// Also works
#[snippet(name = "mymath")]
// Equivalent to #[snippet = "lcm"]
#[snippet]
fn lcm(a: u64, b: u64) -> u64 {
a / gcd(a, b) * b
}
#[snippet]
// Include snippet
#[snippet(include = "gcd")]
fn gcd_list(list: &[u64]) -> u64 {
list.iter().fold(list[0], |a, b| gcd(a, b));
}
#[test]
fn test_gcd() {
assert_eq!(gcd(57, 3), 3);
}
#[test]
fn test_lcm() {
assert_eq!(lcm(3, 19), 57);
}
```
You can test.
```
$ cargo test
```
Extract snippet !
```
$ cargo snippet
snippet gcd
fn gcd(a: u64, b: u64) -> u64 {
if b == 0 {
a
} else {
gcd(b, a % b)
}
}
snippet gcd_list
fn gcd(a: u64, b: u64) -> u64 {
if b == 0 {
a
} else {
gcd(b, a % b)
}
}
fn gcd_list(list: &[u64]) -> u64 {
list.iter().fold(list[0], |a, b| gcd(a, b));
}
snippet lcm
fn lcm(a: u64, b: u64) -> u64 {
a / gcd(a, b) * b
}
snippet mymath
fn gcd(a: u64, b: u64) -> u64 {
if b == 0 {
a
} else {
gcd(b, a % b)
}
}
fn lcm(a: u64, b: u64) -> u64 {
a / gcd(a, b) * b
}
```
## Example
My snippets [here](https://github.com/hatoo/competitive-rust-snippets.git).
## Supported output format
* Neosnippet
* VScode
* Ultisnips
You can specify output format via `-t` option.
See `cargo snippet -h`.