---
source: crates/laburnum-syntax-macro/src/tests/cst_tests.rs
expression: "use laburnum_syntax_macro::tests::cst_tests::test_cst_with_doc_comments"
snapshot_kind: text
---
Input: >
#[laburnum_syntax(CST)]
pub struct DocumentedCST {
span: Span,
/// The opening token
open: NodeId<crate::Token>,
/// The content nodes
/// Can be multiple types
content: Vec<NodeId>,
/// The closing token
close: NodeId<crate::Token>,
}
Output: >
#[derive(Clone, PartialEq)]
pub struct DocumentedCST {
pub span: laburnum::Span,
pub open: NodeId<crate::Token>,
pub content: Vec<NodeId>,
pub close: NodeId<crate::Token>,
}
impl DocumentedCST {
pub fn span(&self) -> laburnum::Span {
self.span
}
}
#[allow(unused)]
impl std::fmt::Display for DocumentedCST {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct(
&format!(
"{}::{}", { let __mp = module_path!(); let __stripped = __mp
.find("::").map(| i | & __mp[i + 2..]).unwrap_or(__mp); if let
Some(__last_sep) = __stripped.rfind("::") { let __last_seg = &
__stripped[__last_sep + 2..]; let __name = stringify!(DocumentedCST);
let __seg_norm : std::string::String = __last_seg.chars().filter(| c
| * c != '_').collect(); let __name_norm : std::string::String =
__name.chars().filter(| c | * c != '_').collect(); if __seg_norm
.eq_ignore_ascii_case(& __name_norm) { & __stripped[..__last_sep] }
else { __stripped } } else { __stripped } },
stringify!(DocumentedCST)
),
)
.field("span", &self.span)
.finish()
}
}
#[allow(unused)]
impl std::fmt::Debug for DocumentedCST {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct(
&format!(
"{}::{}", { let __mp = module_path!(); let __stripped = __mp
.find("::").map(| i | & __mp[i + 2..]).unwrap_or(__mp); if let
Some(__last_sep) = __stripped.rfind("::") { let __last_seg = &
__stripped[__last_sep + 2..]; let __name = stringify!(DocumentedCST);
let __seg_norm : std::string::String = __last_seg.chars().filter(| c
| * c != '_').collect(); let __name_norm : std::string::String =
__name.chars().filter(| c | * c != '_').collect(); if __seg_norm
.eq_ignore_ascii_case(& __name_norm) { & __stripped[..__last_sep] }
else { __stripped } } else { __stripped } },
stringify!(DocumentedCST)
),
)
.field("span", &self.span)
.finish()
}
}
#[allow(unused)]
impl bluegum::Bluegum for DocumentedCST {
fn node(&self, b: &mut bluegum::Builder) {
use owo_colors::OwoColorize;
b.name(
&format!(
"{}::{}", { let __mp = module_path!(); let __stripped = __mp
.find("::").map(| i | & __mp[i + 2..]).unwrap_or(__mp); if let
Some(__last_sep) = __stripped.rfind("::") { let __last_seg = &
__stripped[__last_sep + 2..]; let __name = stringify!(DocumentedCST);
let __seg_norm : std::string::String = __last_seg.chars().filter(| c
| * c != '_').collect(); let __name_norm : std::string::String =
__name.chars().filter(| c | * c != '_').collect(); if __seg_norm
.eq_ignore_ascii_case(& __name_norm) { & __stripped[..__last_sep] }
else { __stripped } } else { __stripped } },
stringify!(DocumentedCST)
),
)
.debug("span", self.span);
}
}
#[allow(unused)]
impl bluegum::BluegumWithState<crate::Printer<'_>> for DocumentedCST {
fn node_with_state(&self, b: &mut bluegum::Builder, state: &crate::Printer<'_>) {
use owo_colors::OwoColorize;
use unicode_width::UnicodeWidthStr;
b.name(
&format!(
"{}::{}", { let __mp = module_path!(); let __stripped = __mp
.find("::").map(| i | & __mp[i + 2..]).unwrap_or(__mp); if let
Some(__last_sep) = __stripped.rfind("::") { let __last_seg = &
__stripped[__last_sep + 2..]; let __name = stringify!(DocumentedCST);
let __seg_norm : std::string::String = __last_seg.chars().filter(| c
| * c != '_').collect(); let __name_norm : std::string::String =
__name.chars().filter(| c | * c != '_').collect(); if __seg_norm
.eq_ignore_ascii_case(& __name_norm) { & __stripped[..__last_sep] }
else { __stripped } } else { __stripped } },
stringify!(DocumentedCST)
),
)
.debug("span", self.span);
{
let open = &self.open;
let mut t = bluegum::Builder::new();
t.name("Literal");
let s = format!("{}", open);
if s.width() > 80 {
t.alt(format!("{:.80}...", s).bright_green());
} else {
t.alt(format!("{:.80}", s).bright_green());
};
b.add_named_builder(stringify!(open), t);
let content = &self.content;
let mut t = bluegum::Builder::new();
t.name("Literal");
let s = format!("{}", content);
if s.width() > 80 {
t.alt(format!("{:.80}...", s).bright_green());
} else {
t.alt(format!("{:.80}", s).bright_green());
};
b.add_named_builder(stringify!(content), t);
let close = &self.close;
let mut t = bluegum::Builder::new();
t.name("Literal");
let s = format!("{}", close);
if s.width() > 80 {
t.alt(format!("{:.80}...", s).bright_green());
} else {
t.alt(format!("{:.80}", s).bright_green());
};
b.add_named_builder(stringify!(close), t);
};
}
}