33// author: Ernest Ng <eyn5@cornell.edu>
44// author: Kevin Laeufer <laeufer@cornell.edu>
55
6+ #[ macro_use]
7+ mod macros;
68mod axi_experiment;
79mod designs;
810mod global_context;
@@ -27,6 +29,8 @@ use protocols::diagnostic::DiagnosticHandler;
2729use protocols:: ir:: { SymbolTable , Transaction } ;
2830use protocols:: parser:: parsing_helper;
2931use protocols:: typecheck:: type_check;
32+ use std:: io:: Write ;
33+ use std:: path:: Path ;
3034
3135// From the top-level directory, run:
3236// $ cargo run --package protocols-monitor -- -p protocols/tests/adders/adder_d1/add_d1.prot -w trace.fst -i add_d1:Adder
@@ -104,8 +108,45 @@ fn main() -> anyhow::Result<()> {
104108 // For concision, we disable timestamps and the module paths in the log
105109 let mut logger = env_logger:: Builder :: new ( ) ;
106110
111+ let use_color = cli. color != ColorChoice :: Never ;
107112 logger
108- . format_timestamp ( None )
113+ . format ( move |buf, record| {
114+ use clap:: builder:: styling:: { AnsiColor , Color , Style } ;
115+ use log:: Level ;
116+ let file = record
117+ . file ( )
118+ . and_then ( |f| Path :: new ( f) . file_name ( ) ?. to_str ( ) )
119+ . unwrap_or ( "?" ) ;
120+ let line = record. line ( ) . unwrap_or ( 0 ) ;
121+ let fn_name = record
122+ . target ( )
123+ . rsplit ( "::" )
124+ . next ( )
125+ . unwrap_or ( record. target ( ) ) ;
126+ let level_style = if use_color {
127+ let color = match record. level ( ) {
128+ Level :: Info => AnsiColor :: Cyan ,
129+ _ => AnsiColor :: Red ,
130+ } ;
131+ Style :: new ( ) . fg_color ( Some ( Color :: Ansi ( color) ) ) . bold ( )
132+ } else {
133+ Style :: new ( )
134+ } ;
135+ let dim_style = if use_color {
136+ Style :: new ( ) . dimmed ( )
137+ } else {
138+ Style :: new ( )
139+ } ;
140+ writeln ! (
141+ buf,
142+ "{}{file}:{line}{} {}({fn_name}){}: {}" ,
143+ dim_style. render( ) ,
144+ dim_style. render_reset( ) ,
145+ level_style. render( ) ,
146+ level_style. render_reset( ) ,
147+ record. args( )
148+ )
149+ } )
109150 . filter_level ( cli. verbosity . log_level_filter ( ) ) ;
110151
111152 if cli. color == ColorChoice :: Never {
0 commit comments