#macro #diagram #syntax #generate #macro-rules #definition #css

macro_railroad

一个用于生成Rust宏语法图的库

8个版本

0.1.7 2024年7月26日
0.1.6 2024年7月14日
0.1.5 2023年4月29日
0.1.4 2023年3月19日
0.1.0 2019年2月23日

#43 in 进程宏

Download history 27/week @ 2024-04-24 12/week @ 2024-05-01 408/week @ 2024-05-08 113/week @ 2024-05-15 26/week @ 2024-05-22 113/week @ 2024-05-29 9/week @ 2024-06-05 7/week @ 2024-06-12 85/week @ 2024-06-19 15/week @ 2024-06-26 106/week @ 2024-07-03 179/week @ 2024-07-10 59/week @ 2024-07-17 238/week @ 2024-07-24 49/week @ 2024-07-31 125/week @ 2024-08-07

480 每月下载量
3 个crate中使用 (2 直接)

MIT 许可证

62KB
1.5K SLoC

Build status Crates.io Version

实时演示 (代码)

适用于Firefox、Chrome和Edge的浏览器插件

一个用于生成Rust的macro_rules!()宏的语法("railroad")图的库。

图以可伸缩矢量图形的形式生成,布局细节由可定制的CSS控制。

例如,给定nom的method定义

macro_rules! method {
    ($name:ident<$a:ty>( $i:ty ) -> $o:ty, $self_:ident, $submac:ident!( $($args:tt)* )) => { ... };
    ($name:ident<$a:ty,$i:ty,$o:ty,$e:ty>, $self_:ident, $submac:ident!( $($args:tt)* )) => { ... };
    ($name:ident<$a:ty,$i:ty,$o:ty>, $self_:ident, $submac:ident!( $($args:tt)* )) => { ... };
    ($name:ident<$a:ty,$o:ty>, $self_:ident, $submac:ident!( $($args:tt)* )) => { ... };
    ($name:ident<$a:ty>, $self_:ident, $submac:ident!( $($args:tt)* )) => { ... };
    (pub $name:ident<$a:ty>( $i:ty ) -> $o:ty, $self_:ident, $submac:ident!( $($args:tt)* )) => { ... };
    (pub $name:ident<$a:ty,$i:ty,$o:ty,$e:ty>, $self_:ident, $submac:ident!( $($args:tt)* )) => { ... };
    (pub $name:ident<$a:ty,$i:ty,$o:ty>, $self_:ident, $submac:ident!( $($args:tt)* )) => { ... };
    (pub $name:ident<$a:ty,$o:ty>, $self_:ident, $submac:ident!( $($args:tt)* )) => { ... };
    (pub $name:ident<$a:ty>, $self_:ident, $submac:ident!( $($args:tt)* )) => { ... };
    ($name:ident<$a:ty>( $i:ty ) -> $o:ty, mut $self_:ident, $submac:ident!( $($args:tt)* )) => { ... };
    ($name:ident<$a:ty,$i:ty,$o:ty,$e:ty>, mut $self_:ident, $submac:ident!( $($args:tt)* )) => { ... };
    ($name:ident<$a:ty,$i:ty,$o:ty>, mut $self_:ident, $submac:ident!( $($args:tt)* )) => { ... };
    ($name:ident<$a:ty,$o:ty>, mut $self_:ident, $submac:ident!( $($args:tt)* )) => { ... };
    ($name:ident<$a:ty>, mut $self_:ident, $submac:ident!( $($args:tt)* )) => { ... };
    (pub $name:ident<$a:ty>( $i:ty ) -> $o:ty, mut $self_:ident, $submac:ident!( $($args:tt)* )) => { ... };
    (pub $name:ident<$a:ty,$i:ty,$o:ty,$e:ty>, mut $self_:ident, $submac:ident!( $($args:tt)* )) => { ... };
    (pub $name:ident<$a:ty,$i:ty,$o:ty>, mut $self_:ident, $submac:ident!( $($args:tt)* )) => { ... };
    (pub $name:ident<$a:ty,$o:ty>, mut $self_:ident, $submac:ident!( $($args:tt)* )) => { ... };
    (pub $name:ident<$a:ty>, mut $self_:ident, $submac:ident!( $($args:tt)* )) => { ... };
}

...该库生成一个SVG,使用默认CSS渲染为

Syntax diagram for nom::method


要生成这里显示的示例,请运行

cargo run --example various

这将输出一些HTML文件到/examples;请随意在/examples/various.rs中修改演示。

示例

依赖项

~0.7–1.7MB
~32K SLoC