From 43e40b61e392c6c4fa18aaddde04cdb472e4754e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jana=20D=C3=B6nszelmann?= Date: Thu, 2 Apr 2026 10:40:13 +0200 Subject: [PATCH] angle brackets --- logparse/Cargo.toml | 2 +- logparse/src/parse.rs | 6 ++++-- logparse/src/spans.rs | 28 +++++++++++++++++++++++++--- 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/logparse/Cargo.toml b/logparse/Cargo.toml index 113e793..7f86bde 100644 --- a/logparse/Cargo.toml +++ b/logparse/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "logparse" -version = "0.1.1" +version = "0.1.2" edition = "2024" description = "parse arbitrary messages containing rust-like debug output to syntax highlight them" authors = ["Jana Dönszelmann "] diff --git a/logparse/src/parse.rs b/logparse/src/parse.rs index f112385..fd24dd9 100644 --- a/logparse/src/parse.rs +++ b/logparse/src/parse.rs @@ -264,7 +264,8 @@ impl<'a> Token<'a> { Path::parse().map(Self::Path), AnyString::parse().map(Self::String), delimited, - Atom::parse(alt((Separator::parse().value(""), ")", "]", "}"))).map(Self::Atom), + Atom::parse(alt((Separator::parse().value(""), ")", "]", "}", ">"))) + .map(Self::Atom), )), ) } @@ -313,13 +314,14 @@ impl<'a> Delimited<'a> { "delimited", ( opt(( - Atom::parse(alt(("(", "[", "{", Separator::parse().value("")))), + Atom::parse(alt(("(", "[", "{", "<", Separator::parse().value("")))), Space::parse(), )), alt(( literal('(').map(|_| literal(')').value(Delimiter::Paren)), literal('[').map(|_| literal(']').value(Delimiter::Bracket)), literal('{').map(|_| literal('}').value(Delimiter::Brace)), + literal('<').map(|_| literal('>').value(Delimiter::Angle)), )) .flat_map(|end| Segments::parse(end)), ) diff --git a/logparse/src/spans.rs b/logparse/src/spans.rs index bf73383..59844a7 100644 --- a/logparse/src/spans.rs +++ b/logparse/src/spans.rs @@ -225,7 +225,17 @@ mod private { match prefix { Some((Atom::Text(text), space)) => { - cx.push(text, SpanKind::Constructor); + cx.push( + text, + match delimiter { + Delimiter::Bracket => SpanKind::Constructor, + Delimiter::Paren if space.0.is_empty() => SpanKind::Constructor, + Delimiter::Paren => SpanKind::Text, + Delimiter::Brace => SpanKind::Text, + Delimiter::Angle if space.0.is_empty() => SpanKind::Constructor, + Delimiter::Angle => SpanKind::Text, + }, + ); space.into_spans(cx); } None => {} @@ -741,7 +751,13 @@ mod tests { ), ), ( - "", + "Trait", Text, ), + ( + ">", + Delimiter( + 0, + ), + ), ( " ", Space(