#subcommand #cargo-subcommand #cargo #competitive #snippet

macro bin cargo-snippet

A snippet extractor for competitive programmers

16 unstable releases (3 breaking)

✓ Uses Rust 2018 edition

0.4.1 Jan 12, 2020
0.3.1 Nov 7, 2019
0.2.8 May 15, 2019
0.2.7 Feb 23, 2019
0.2.0 Mar 31, 2018

#34 in Template engine

Download history 28/week @ 2019-10-05 14/week @ 2019-10-12 21/week @ 2019-10-19 17/week @ 2019-10-26 51/week @ 2019-11-02 10/week @ 2019-11-09 15/week @ 2019-11-16 29/week @ 2019-11-23 33/week @ 2019-11-30 106/week @ 2019-12-07 3/week @ 2019-12-14 1/week @ 2019-12-21 18/week @ 2019-12-28 5/week @ 2020-01-04 122/week @ 2020-01-11

113 downloads per month

MIT license

31KB
876 lines

cargo-snippet

crates.io Build Status dependency status

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.

[dependencies]
cargo-snippet = "0.4"

Add this to src/lib.rs.

Write some snippet codes and tests.

use cargo_snippet::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.

Supported output format

  • Neosnippet
  • VScode
  • Ultisnips

You can specify output format via -t option. See cargo snippet -h.

Dependencies

~0–2.4MB
~48K SLoC