git.delta.rocks / jrsonnet / refs/commits / 0f5ef44c0f70

difftreelog

source

crates/jrsonnet-cli/src/trace.rs1.2 KiBsourcehistory
1use clap::{Parser, ValueEnum};2use jrsonnet_evaluator::trace::{CompactFormat, ExplainingFormat, PathResolver, TraceFormat};34#[derive(PartialEq, Eq, ValueEnum, Clone)]5pub enum TraceFormatName {6	/// Only show `filename:line:column`7	Compact,8	/// Display source code with attached trace annotations9	Explaining,10}1112#[derive(Parser)]13#[clap(next_help_heading = "STACK TRACE VISUAL")]14pub struct TraceOpts {15	/// Format of stack traces' display in console.16	#[clap(long)]17	trace_format: Option<TraceFormatName>,18	/// Amount of stack trace elements to be displayed.19	/// If set to `0` then full stack trace will be displayed.20	#[clap(long, short = 't', default_value = "20")]21	max_trace: usize,22}23impl TraceOpts {24	pub fn trace_format(&self) -> Box<dyn TraceFormat> {25		let resolver = PathResolver::new_cwd_fallback();26		let max_trace = self.max_trace;27		let format: Box<dyn TraceFormat> = match self28			.trace_format29			.as_ref()30			.unwrap_or(&TraceFormatName::Compact)31		{32			TraceFormatName::Compact => Box::new(CompactFormat {33				resolver,34				padding: 4,35				max_trace,36			}),37			TraceFormatName::Explaining => Box::new(ExplainingFormat {38				resolver,39				max_trace,40			}),41		};42		format43	}44}