git.delta.rocks / jrsonnet / refs/commits / 2cecfb0ba471

difftreelog

source

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