From 2cbeeae5da0b5c3d8c50d1dd522f900a1f86b8fa Mon Sep 17 00:00:00 2001 From: erikwastaken <46598911+erikwastaken@users.noreply.github.com> Date: Tue, 23 May 2023 12:34:12 +0200 Subject: CLI option for emitting diagnostics in a unix-style short format (#1176) --- cli/src/args.rs | 43 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 34 insertions(+), 9 deletions(-) (limited to 'cli/src/args.rs') diff --git a/cli/src/args.rs b/cli/src/args.rs index fbd5ec2d..d794347c 100644 --- a/cli/src/args.rs +++ b/cli/src/args.rs @@ -1,11 +1,16 @@ +use std::fmt::{self, Display, Formatter}; use std::path::PathBuf; -use clap::{ArgAction, Parser, Subcommand}; +use clap::{ArgAction, Parser, Subcommand, ValueEnum}; /// typst creates PDF files from .typ files #[derive(Debug, Clone, Parser)] #[clap(name = "typst", version = crate::typst_version(), author)] pub struct CliArguments { + /// The typst command to run + #[command(subcommand)] + pub command: Command, + /// Add additional directories to search for fonts #[clap(long = "font-path", env = "TYPST_FONT_PATHS", value_name = "DIR", action = ArgAction::Append)] pub font_paths: Vec, @@ -14,16 +19,28 @@ pub struct CliArguments { #[clap(long = "root", env = "TYPST_ROOT", value_name = "DIR")] pub root: Option, - /// The typst command to run - #[command(subcommand)] - pub command: Command, - /// Sets the level of logging verbosity: /// -v = warning & error, -vv = info, -vvv = debug, -vvvv = trace #[clap(short, long, action = ArgAction::Count)] pub verbosity: u8, } +/// Which format to use for diagnostics. +#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, ValueEnum)] +pub enum DiagnosticFormat { + Human, + Short, +} + +impl Display for DiagnosticFormat { + fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { + self.to_possible_value() + .expect("no values are skipped") + .get_name() + .fmt(f) + } +} + /// What to do. #[derive(Debug, Clone, Subcommand)] #[command()] @@ -69,13 +86,21 @@ pub struct CompileCommand { #[arg(long = "open")] pub open: Option>, - /// Produces a flamegraph of the compilation process - #[arg(long = "flamegraph", value_name = "OUTPUT_SVG")] - pub flamegraph: Option>, - /// The PPI to use if exported as PNG #[arg(long = "ppi")] pub ppi: Option, + + /// In which format to emit diagnostics + #[clap( + long, + default_value_t = DiagnosticFormat::Human, + value_parser = clap::value_parser!(DiagnosticFormat) + )] + pub diagnostic_format: DiagnosticFormat, + + /// Produces a flamegraph of the compilation process + #[arg(long = "flamegraph", value_name = "OUTPUT_SVG")] + pub flamegraph: Option>, } /// List all discovered fonts in system and custom font paths -- cgit v1.2.3