#[render_scopegraphs]
Expand description
Aquamarine is a proc-macro that adds Mermaid diagrams to rustdoc
To inline a diagram into the documentation, use the mermaid
snippet:
#[render_scopegraphs]
/// ```rust
/// # use scopegraphs::*;
/// # use completeness::{UncheckedCompleteness};
/// # use resolve::{DataWellformedness, Resolve, ResolvedPath};
/// # use render::{RenderSettings, RenderScopeData, RenderScopeLabel};
/// #
/// # #[derive(Label, Hash, PartialEq, Eq, Debug, Clone, Copy)]
/// # enum Lbl {
/// # Lex,
/// # Imp,
/// # Def,
/// # }
/// # use Lbl::*;
/// #
/// # #[derive(Hash, PartialEq, Eq, Debug, Default, Clone)]
/// # enum TData<'a> {
/// # #[default]
/// # NoData,
/// # Data {
/// # name: &'a str,
/// # data: usize,
/// # },
/// # }
/// #
/// # use TData::*;
/// #
/// # impl RenderScopeData for TData<'_> {
/// # fn render_node(&self) -> Option<String> {
/// # match self {
/// # NoData => None,
/// # Data {name, data} => Some(format!("{name}: {data}")),
/// # }
/// # }
/// # }
/// #
/// # impl RenderScopeLabel for Lbl {
/// # fn render(&self) -> String {
/// # match self {
/// # Lex => "lex",
/// # Imp => "imp",
/// # Def => "def",
/// # }.to_string()
/// # }
/// # }
/// #
/// # impl<'a> TData<'a> {
/// # fn matches(&self, n: &str) -> bool {
/// # match self {
/// # NoData => false,
/// # Data { name, .. } => *name == n,
/// # }
/// # }
/// #
/// # fn matcher(n: &'a str) -> impl DataWellformedness<Self> {
/// # |data: &Self| data.matches(n)
/// # }
/// #
/// # fn from_default(name: &'a str) -> Self {
/// # Data { name, data: 0 }
/// # }
/// # }
/// # let storage = Storage::new();
/// # let sg: ScopeGraph<Lbl, TData, UncheckedCompleteness> =
/// # unsafe { ScopeGraph::raw(&storage) };
///
/// let s0 = sg.add_scope_default();
/// let s1 = sg.add_scope_default();
/// sg.add_edge(s0, Lex, s1);
/// sg.add_decl(s0, Def, Data { name: "x", data: 0 });
/// sg.add_decl(s1, Def, Data { name: "x", data: 1 });
///
/// sg.render_to("output.dot", RenderSettings::default()).unwrap();
/// ```
struct Foo;