MCPcopy Index your code
hub / github.com/dtolnay/seq-macro

github.com/dtolnay/seq-macro @0.3.6

Chat with this repo
repository ↗ · DeepWiki ↗ · release 0.3.6 ↗ · + Follow
50 symbols 88 edges 8 files 1 documented · 2%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

seq!

github crates.io docs.rs build status

A seq! macro to repeat a fragment of source code and substitute into each repetition a sequential numeric counter.

[dependencies]
seq-macro = "0.3"
use seq_macro::seq;

fn main() {
    let tuple = (1000, 100, 10);
    let mut sum = 0;

    // Expands to:
    //
    //     sum += tuple.0;
    //     sum += tuple.1;
    //     sum += tuple.2;
    //
    // This cannot be written using an ordinary for-loop because elements of
    // a tuple can only be accessed by their integer literal index, not by a
    // variable.
    seq!(N in 0..=2 {
        sum += tuple.N;
    });

    assert_eq!(sum, 1110);
}
  • If the input tokens contain a section surrounded by #( ... )* then only that part is repeated.

  • The numeric counter can be pasted onto the end of some prefix to form sequential identifiers.

use seq_macro::seq;

seq!(N in 64..=127 {
    #[derive(Debug)]
    enum Demo {
        // Expands to Variant64, Variant65, ...
        #(
            Variant~N,
        )*
    }
});

fn main() {
    assert_eq!("Variant99", format!("{:?}", Demo::Variant99));
}
  • Byte and character ranges are supported: b'a'..=b'z', 'a'..='z'.

  • If the range bounds are written in binary, octal, hex, or with zero padding, those features are preserved in any generated tokens.

use seq_macro::seq;

seq!(P in 0x000..=0x00F {
    // expands to structs Pin000, ..., Pin009, Pin00A, ..., Pin00F
    struct Pin~P;
});

License

Licensed under either of Apache License, Version 2.0 or MIT license at your option.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Core symbols most depended-on inside this repo

syntax
called by 7
src/parse.rs
next_token
called by 5
src/parse.rs
into_iter
called by 4
src/lib.rs
require_punct
called by 3
src/parse.rs
require_value
called by 2
src/parse.rs
substitute_value
called by 2
src/lib.rs
into_compile_error
called by 1
src/parse.rs
require_ident
called by 1
src/parse.rs

Shape

Function 38
Class 6
Method 4
Enum 2

Languages

Rust100%

Modules by API surface

tests/test.rs20 symbols
src/parse.rs13 symbols
src/lib.rs13 symbols
tests/ui/suffix-mismatch.rs1 symbols
tests/ui/kind-mismatch.rs1 symbols
tests/ui/compile-error-span.rs1 symbols
tests/compiletest.rs1 symbols

For agents

$ claude mcp add seq-macro \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact