From abcac40f2d8c4aeb1b87eb58747e0eb024d90e0f Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Wed, 13 Mar 2019 15:51:27 -0700 Subject: [PATCH] cli: Add a --time flag to highlight subcommand --- cli/src/highlight.rs | 11 +++++++++++ cli/src/main.rs | 6 ++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/cli/src/highlight.rs b/cli/src/highlight.rs index 703c4053..e7bb8818 100644 --- a/cli/src/highlight.rs +++ b/cli/src/highlight.rs @@ -6,6 +6,7 @@ use serde::ser::SerializeMap; use serde::{Deserialize, Deserializer, Serialize, Serializer}; use serde_json::{json, Value}; use std::collections::HashMap; +use std::time::Instant; use std::{fmt, fs, io, path}; use tree_sitter::{Language, PropertySheet}; use tree_sitter_highlight::{highlight, highlight_html, HighlightEvent, Properties, Scope}; @@ -254,10 +255,13 @@ pub fn ansi( source: &[u8], language: Language, property_sheet: &PropertySheet, + print_time: bool, ) -> Result<()> { use std::io::Write; let stdout = io::stdout(); let mut stdout = stdout.lock(); + + let time = Instant::now(); let mut scope_stack = Vec::new(); for event in highlight(source, language, property_sheet, |s| { language_for_injection_string(loader, s) @@ -278,6 +282,13 @@ pub fn ansi( } } } + + if print_time { + let duration = time.elapsed(); + let duration_ms = duration.as_secs() * 1000 + duration.subsec_nanos() as u64 / 1000000; + eprintln!("{} ms", duration_ms); + } + Ok(()) } diff --git a/cli/src/main.rs b/cli/src/main.rs index 3769efa0..15499622 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -76,7 +76,8 @@ fn run() -> error::Result<()> { .required(true), ) .arg(Arg::with_name("scope").long("scope").takes_value(true)) - .arg(Arg::with_name("html").long("html").short("h")), + .arg(Arg::with_name("html").long("html").short("h")) + .arg(Arg::with_name("time").long("time").short("t")), ) .get_matches(); @@ -167,6 +168,7 @@ fn run() -> error::Result<()> { } else if let Some(matches) = matches.subcommand_matches("highlight") { let paths = matches.values_of("path").unwrap().into_iter(); let html_mode = matches.is_present("html"); + let time = matches.is_present("time"); loader.find_all_languages(&config.parser_directories)?; if html_mode { @@ -201,7 +203,7 @@ fn run() -> error::Result<()> { if html_mode { highlight::html(&loader, &config.theme, &source, language, sheet)?; } else { - highlight::ansi(&loader, &config.theme, &source, language, sheet)?; + highlight::ansi(&loader, &config.theme, &source, language, sheet, time)?; } } else { return Err(error::Error(format!(