return values visualized

This commit is contained in:
Jana Dönszelmann 2026-02-24 23:55:25 +01:00
parent 5c6ced8ca0
commit 7d149ee17e
No known key found for this signature in database
3 changed files with 44 additions and 24 deletions

View file

@ -182,7 +182,22 @@ impl LogViewer {
pub fn footer_fields(&self) -> Vec<(String, serde_json::Value)> {
if let Some((selected, _)) = self.selected() {
selected.all_fields().fields.into_iter().collect::<Vec<_>>()
let ret = match selected.as_ref() {
LogEntry::Single { .. } => Default::default(),
LogEntry::Sub { sub_entries, .. } => sub_entries.last().and_then(|i| {
i.all_fields()
.fields
.get_key_value("return")
.map(|(k, v)| (k.clone(), v.clone()))
}),
};
selected
.all_relevant_fields()
.fields
.into_iter()
.chain(ret)
.collect::<Vec<_>>()
} else {
Vec::new()
}

View file

@ -1,6 +1,5 @@
use itertools::Itertools;
use ratatui_themes::{Theme, ThemeName};
use serde_json::de;
use std::{
fs::{self, DirEntry},
io,
@ -24,7 +23,7 @@ use ratatui::{
crossterm::event::{self, Event, KeyCode, KeyModifiers},
layout::{Constraint, HorizontalAlignment, Layout, Rect},
style::Style,
text::{Line, Span, Text},
text::{Line, Text},
widgets::{
Block, Clear, List, ListItem, ListState, Padding, Paragraph, StatefulWidget, Widget, Wrap,
},
@ -231,7 +230,7 @@ impl App {
},
(KeyCode::Char('g') | KeyCode::End, tab) => match tab {
Tab::FileChooser { state, .. } => state.select_last(),
Tab::LogViewer(lv) => {}
Tab::LogViewer(_) => {}
Tab::Empty => {}
Tab::CreateFilter { .. } => {}
},
@ -252,17 +251,13 @@ impl App {
lv.switch_focus();
}
(KeyCode::Char('r'), Tab::LogViewer(lv)) => {
if let Some(file) = &mut self.current_file {
let filter = initialize_filter(lv, Some(FilterKind::Remove));
self.push_tab(Tab::CreateFilter { filter });
}
}
(KeyCode::Char('i'), Tab::LogViewer(lv)) => {
if let Some(file) = &mut self.current_file {
let filter = initialize_filter(lv, Some(FilterKind::Inline));
self.push_tab(Tab::CreateFilter { filter });
}
}
(KeyCode::Enter, tab) => match tab {
Tab::FileChooser { files, state, .. } => {
if let Some(selected) = state.selected()
@ -273,7 +268,7 @@ impl App {
self.current_file = Some(i.clone());
self.replace_tab(Tab::LogViewer(LogViewer::new(i.iter())));
}
Err(e) => {
Err(_) => {
panic!()
}
}
@ -370,7 +365,7 @@ impl Widget for &mut App {
};
let footer_area = {
let mut block = Block::bordered()
let block = Block::bordered()
.style(default)
.border_style(if footer_focused {
border_selected

View file

@ -76,6 +76,13 @@ impl LogEntry {
}
}
pub fn all_relevant_fields(&self) -> LogFields {
let mut res = self.all_fields();
res.fields
.retain(|k, v| !(k == "message" && (v == "enter" || v == "exit")));
res
}
pub fn count(&self) -> usize {
match self {
LogEntry::Single { .. } => 1,
@ -93,12 +100,19 @@ impl LogEntry {
const NO_MESSAGE: &str = "<no message>";
const SPACES_BEFORE: &str = " ";
let indent = " >".repeat(inline_depth);
let single_field = |raw: &RawLogEntry| {
raw.fields
.message()
.map(|i| i.to_string())
.or_else(|| raw.fields.fields.get("return").map(|i| format!("{i}")))
.unwrap_or_else(|| NO_MESSAGE.to_string())
};
match self {
LogEntry::Single { raw } => format!(
"{SPACES_BEFORE}┃{indent}{}",
raw.fields.message().unwrap_or(NO_MESSAGE)
)
.into(),
LogEntry::Single { raw } => {
format!("{SPACES_BEFORE}{indent}{}", single_field(raw)).into()
}
LogEntry::Sub {
enter, sub_entries, ..
} => {
@ -111,11 +125,7 @@ impl LogEntry {
self.count().wrapping_sub(1)
))
} else {
format!(
"{SPACES_BEFORE}┃{indent}{}",
enter.fields.message().unwrap_or(NO_MESSAGE)
)
.into()
format!("{SPACES_BEFORE}{indent}{}", single_field(enter)).into()
}
}
}