From af09bcd40396ad53d66c1eb7be242aa0cb985199 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jana=20D=C3=B6nszelmann?= Date: Thu, 2 Apr 2026 08:31:58 +0200 Subject: [PATCH] factor out crate --- Cargo.lock | 15 ++++++++---- Cargo.toml | 9 +++---- logparse/Cargo.toml | 16 +++++++++++++ .../src}/ast.rs | 0 .../src}/display.rs | 0 .../mod.rs => logparse/src/lib.rs | 0 .../src}/parse.rs | 0 .../src}/proptesting.rs | 0 .../src}/spans.rs | 0 src/main.rs | 1 - src/tui/widgets/line_text.rs | 24 +++++++++---------- 11 files changed, 43 insertions(+), 22 deletions(-) create mode 100644 logparse/Cargo.toml rename {src/format_debug_output => logparse/src}/ast.rs (100%) rename {src/format_debug_output => logparse/src}/display.rs (100%) rename src/format_debug_output/mod.rs => logparse/src/lib.rs (100%) rename {src/format_debug_output => logparse/src}/parse.rs (100%) rename {src/format_debug_output => logparse/src}/proptesting.rs (100%) rename {src/format_debug_output => logparse/src}/spans.rs (100%) diff --git a/Cargo.lock b/Cargo.lock index 9f472e1..f247219 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -819,6 +819,16 @@ version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +[[package]] +name = "logparse" +version = "0.1.0" +dependencies = [ + "insta", + "proptest", + "proptest-derive", + "winnow", +] + [[package]] name = "loom" version = "0.7.2" @@ -1416,12 +1426,10 @@ dependencies = [ "clap", "crossterm", "dumpster", - "insta", "itertools", "jiff", + "logparse", "nix 0.31.1", - "proptest", - "proptest-derive", "ratatui", "ratatui-themes", "regex", @@ -1429,7 +1437,6 @@ dependencies = [ "serde_json", "thiserror 2.0.18", "tui-widget-list", - "winnow", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index ad95fc6..de9d500 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,6 +7,10 @@ edition = "2024" name = "lv" path = "./src/main.rs" +[workspace] +members = [".", "./logparse/"] +default-members = [".", "./logparse/"] + [dependencies] clap = {version="4.5", features=["derive", "string"]} jiff = {version = "0.2", features = ["serde"]} @@ -21,7 +25,4 @@ nix = {version = "0.31", features = ["process", "signal"]} regex = "1" crossterm = "*" dumpster = "2.1" -winnow = {version="1", features=["parser"]} -proptest = "1" -proptest-derive = "0.8" -insta = "1" +logparse = {path = "./logparse/", version="0.1.0"} diff --git a/logparse/Cargo.toml b/logparse/Cargo.toml new file mode 100644 index 0000000..754f748 --- /dev/null +++ b/logparse/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "logparse" +version = "0.1.0" +edition = "2024" +description = "parse arbitrary messages containing rust-like debug output to syntax highlight them" +authors = ["Jana Dönszelmann "] +license = "MIT OR Apache-2.0" +documentation = "https://docs.rs/logparse" +homepage = "https://git.donsz.nl/jana/logviewer" +repository = "https://git.donsz.nl/jana/logviewer" + +[dependencies] +winnow = {version="1", features=["parser"]} +proptest = "1" +proptest-derive = "0.8" +insta = "1" diff --git a/src/format_debug_output/ast.rs b/logparse/src/ast.rs similarity index 100% rename from src/format_debug_output/ast.rs rename to logparse/src/ast.rs diff --git a/src/format_debug_output/display.rs b/logparse/src/display.rs similarity index 100% rename from src/format_debug_output/display.rs rename to logparse/src/display.rs diff --git a/src/format_debug_output/mod.rs b/logparse/src/lib.rs similarity index 100% rename from src/format_debug_output/mod.rs rename to logparse/src/lib.rs diff --git a/src/format_debug_output/parse.rs b/logparse/src/parse.rs similarity index 100% rename from src/format_debug_output/parse.rs rename to logparse/src/parse.rs diff --git a/src/format_debug_output/proptesting.rs b/logparse/src/proptesting.rs similarity index 100% rename from src/format_debug_output/proptesting.rs rename to logparse/src/proptesting.rs diff --git a/src/format_debug_output/spans.rs b/logparse/src/spans.rs similarity index 100% rename from src/format_debug_output/spans.rs rename to logparse/src/spans.rs diff --git a/src/main.rs b/src/main.rs index c9041a6..432f20f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -9,7 +9,6 @@ use std::{ str::FromStr, }; -pub mod format_debug_output; mod tui; use clap::{Parser, Subcommand, ValueEnum, builder::PossibleValue}; diff --git a/src/tui/widgets/line_text.rs b/src/tui/widgets/line_text.rs index 0708cc3..b6f7f04 100644 --- a/src/tui/widgets/line_text.rs +++ b/src/tui/widgets/line_text.rs @@ -2,10 +2,8 @@ use std::borrow::Cow; use ratatui::text::{Line, Span, Text}; -use crate::{ - format_debug_output::{Config, SpanKind, into_spans, parse_input}, - tui::widgets::styled::Styled, -}; +use crate::tui::widgets::styled::Styled; +use logparse::{self as lp, Config, SpanKind, into_spans, parse_input}; #[derive(Debug)] pub enum Highlighted { @@ -45,7 +43,7 @@ impl LineText { #[derive(Debug)] pub struct HighlightedSpan<'a> { - span: crate::format_debug_output::Span<'a>, + span: lp::Span<'a>, highlighted: bool, } @@ -62,7 +60,7 @@ fn cow_split_at<'a>(inp: Cow<'a, str>, offset: usize) -> (Cow<'a, str>, Cow<'a, } } -fn span_len(span: &crate::format_debug_output::Span<'_>) -> usize { +fn span_len(span: &lp::Span<'_>) -> usize { match span.kind { SpanKind::Space(n) => n, _ => span.text.len(), @@ -70,7 +68,7 @@ fn span_len(span: &crate::format_debug_output::Span<'_>) -> usize { } fn highlight_spans<'a>( - i: impl Iterator>, + i: impl Iterator>, start: usize, end: usize, ) -> impl Iterator> { @@ -86,7 +84,7 @@ fn highlight_spans<'a>( }]; } - let crate::format_debug_output::Span { text, kind } = span; + let lp::Span { text, kind } = span; let mut res = Vec::new(); @@ -95,7 +93,7 @@ fn highlight_spans<'a>( let until_start = start - curr_offset; let (before, after) = cow_split_at(text, until_start); - let before_span = crate::format_debug_output::Span { kind, text: before }; + let before_span = lp::Span { kind, text: before }; let l = span_len(&before_span); if l != 0 { @@ -118,7 +116,7 @@ fn highlight_spans<'a>( // entirely within if curr_offset + text.len() <= end { - let span = crate::format_debug_output::Span { kind, text }; + let span = lp::Span { kind, text }; curr_offset += span_len(&span); res.push(HighlightedSpan { span, @@ -132,7 +130,7 @@ fn highlight_spans<'a>( let until_start = end - curr_offset; let (before, after) = cow_split_at(text, until_start); - let before_span = crate::format_debug_output::Span { kind, text: before }; + let before_span = lp::Span { kind, text: before }; curr_offset += span_len(&before_span); res.push(HighlightedSpan { @@ -149,7 +147,7 @@ fn highlight_spans<'a>( return res; } - let after = crate::format_debug_output::Span { kind, text }; + let after = lp::Span { kind, text }; curr_offset += span_len(&after); res.push(HighlightedSpan { @@ -201,7 +199,7 @@ impl Into> for Styled<'_, LineText> { .into_iter() .map( |HighlightedSpan { - span: crate::format_debug_output::Span { text, kind }, + span: lp::Span { text, kind }, highlighted, }| { let span = Span::from(text.into_owned());