feat(export): allow trace levels to be controlled
This commit is contained in:
parent
79ccc55499
commit
aa3896e92a
|
@ -466,7 +466,7 @@ where
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn export(&self, module: &str, name: &str) -> Result<Export, Error> {
|
pub fn export(&self, module: &str, name: &str, tracing: Tracing) -> Result<Export, Error> {
|
||||||
self.checked_modules
|
self.checked_modules
|
||||||
.get(module)
|
.get(module)
|
||||||
.and_then(|checked_module| {
|
.and_then(|checked_module| {
|
||||||
|
@ -476,7 +476,7 @@ where
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
.map(|(checked_module, func)| {
|
.map(|(checked_module, func)| {
|
||||||
let mut generator = self.new_generator(Tracing::silent());
|
let mut generator = self.new_generator(tracing);
|
||||||
|
|
||||||
Export::from_function(func, checked_module, &mut generator, &self.checked_modules)
|
Export::from_function(func, checked_module, &mut generator, &self.checked_modules)
|
||||||
})
|
})
|
||||||
|
|
|
@ -1,7 +1,10 @@
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
|
||||||
|
use aiken_lang::ast::{TraceLevel, Tracing};
|
||||||
use aiken_project::{options::Options, watch::with_project};
|
use aiken_project::{options::Options, watch::with_project};
|
||||||
|
|
||||||
|
use super::build::{filter_traces_parser, trace_level_parser};
|
||||||
|
|
||||||
#[derive(clap::Args)]
|
#[derive(clap::Args)]
|
||||||
pub struct Args {
|
pub struct Args {
|
||||||
/// Path to project
|
/// Path to project
|
||||||
|
@ -14,6 +17,24 @@ pub struct Args {
|
||||||
/// Name of the function within the module
|
/// Name of the function within the module
|
||||||
#[clap(short, long)]
|
#[clap(short, long)]
|
||||||
name: String,
|
name: String,
|
||||||
|
|
||||||
|
/// Filter traces to be considered during testing:
|
||||||
|
/// - user-defined: only consider traces that you've explicitly defined (either through the
|
||||||
|
/// 'trace' keyword of via the trace-if-false ('?') operator.
|
||||||
|
/// - compiler-generated: only included internal traces generated by the Aiken compiler, for
|
||||||
|
/// example in usage of 'expect'.
|
||||||
|
/// - all: include both user-defined and compiler-generated traces.
|
||||||
|
/// [optional] [default: all]
|
||||||
|
#[clap(short, long, value_parser=filter_traces_parser(), default_missing_value="all", verbatim_doc_comment)]
|
||||||
|
filter_traces: Option<fn(TraceLevel) -> Tracing>,
|
||||||
|
|
||||||
|
/// Choose the verbosity level of traces:
|
||||||
|
/// - silent: disable traces altogether
|
||||||
|
/// - compact: only culprit line numbers are shown on failures
|
||||||
|
/// - verbose: enable full verbose traces as provided by the user or the compiler
|
||||||
|
/// [optional]
|
||||||
|
#[clap(short, long, value_parser=trace_level_parser(), default_value_t=TraceLevel::Verbose, verbatim_doc_comment)]
|
||||||
|
trace_level: TraceLevel,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn exec(
|
pub fn exec(
|
||||||
|
@ -21,12 +42,21 @@ pub fn exec(
|
||||||
directory,
|
directory,
|
||||||
module,
|
module,
|
||||||
name,
|
name,
|
||||||
|
filter_traces,
|
||||||
|
trace_level,
|
||||||
}: Args,
|
}: Args,
|
||||||
) -> miette::Result<()> {
|
) -> miette::Result<()> {
|
||||||
with_project(directory.as_deref(), false, |p| {
|
with_project(directory.as_deref(), false, |p| {
|
||||||
p.compile(Options::default())?;
|
p.compile(Options::default())?;
|
||||||
|
|
||||||
let export = p.export(&module, &name)?;
|
let export = p.export(
|
||||||
|
&module,
|
||||||
|
&name,
|
||||||
|
match filter_traces {
|
||||||
|
Some(filter_traces) => filter_traces(trace_level),
|
||||||
|
None => Tracing::All(trace_level),
|
||||||
|
},
|
||||||
|
)?;
|
||||||
|
|
||||||
let json = serde_json::to_string_pretty(&export).unwrap();
|
let json = serde_json::to_string_pretty(&export).unwrap();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue