feat(cli): add centralized render module with semantic Theme and LoreRenderer
Introduce src/cli/render.rs as the single source of truth for all terminal output styling and formatting utilities. Key components: - LoreRenderer: global singleton initialized once at startup, resolving color mode (Auto/Always/Never) against TTY state and NO_COLOR env var. This fixes lipgloss's limitation of hardcoded TrueColor rendering by gating all style application through a colors_on() check. - Theme: semantic style constants (success/warning/error/info/accent, entity refs, state colors, structural styles) that return plain Style::new() when colors are disabled. Replaces ad-hoc console::style() calls scattered across 15+ command modules. - Shared formatting utilities consolidated from duplicated implementations: format_relative_time (was in list.rs and who.rs), format_number (was in count.rs and sync_status.rs), truncate (was truncate_with_ellipsis in list.rs and truncate_summary in timeline.rs), format_labels, format_date, wrap_indent, section_divider. - LoreTable: lightweight table renderer replacing comfy-table with simple column alignment (Left/Right/Center), adaptive terminal width, and NO_COLOR-safe output. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
pub mod autocorrect;
|
||||
pub mod commands;
|
||||
pub mod progress;
|
||||
pub mod render;
|
||||
pub mod robot;
|
||||
|
||||
use clap::{Parser, Subcommand};
|
||||
@@ -810,7 +811,8 @@ pub struct EmbedArgs {
|
||||
lore timeline i:42 # Shorthand for issue:42
|
||||
lore timeline mr:99 # Direct: MR !99 and related entities
|
||||
lore timeline 'auth' --since 30d -p group/repo # Scoped to project and time
|
||||
lore timeline 'migration' --depth 2 --expand-mentions # Deep cross-reference expansion")]
|
||||
lore timeline 'migration' --depth 2 # Deep cross-reference expansion
|
||||
lore timeline 'auth' --no-mentions # Only 'closes' and 'related' edges")]
|
||||
pub struct TimelineArgs {
|
||||
/// Search text or entity reference (issue:N, i:N, mr:N, m:N)
|
||||
pub query: String,
|
||||
@@ -827,9 +829,9 @@ pub struct TimelineArgs {
|
||||
#[arg(long, default_value = "1", help_heading = "Expansion")]
|
||||
pub depth: u32,
|
||||
|
||||
/// Also follow 'mentioned' edges during expansion (high fan-out)
|
||||
#[arg(long = "expand-mentions", help_heading = "Expansion")]
|
||||
pub expand_mentions: bool,
|
||||
/// Skip 'mentioned' edges during expansion (only follow 'closes' and 'related')
|
||||
#[arg(long = "no-mentions", help_heading = "Expansion")]
|
||||
pub no_mentions: bool,
|
||||
|
||||
/// Maximum number of events to display
|
||||
#[arg(
|
||||
|
||||
Reference in New Issue
Block a user