Unnamed repository; edit this file 'description' to name the repository.
| -rw-r--r-- | helix-loader/src/grammar.rs | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/helix-loader/src/grammar.rs b/helix-loader/src/grammar.rs index 7f83b70f..4e9f2156 100644 --- a/helix-loader/src/grammar.rs +++ b/helix-loader/src/grammar.rs @@ -1,6 +1,8 @@ use anyhow::{anyhow, bail, Context, Result}; use serde::{Deserialize, Serialize}; use std::fs; +use std::sync::atomic::{AtomicUsize, Ordering}; +use std::sync::Arc; use std::time::SystemTime; use std::{ collections::HashSet, @@ -93,8 +95,21 @@ pub fn fetch_grammars(strict: bool) -> Result<()> { let mut grammars = get_grammar_configs()?; grammars.retain(|grammar| !matches!(grammar.source, GrammarSource::Local { .. })); - println!("Fetching {} grammars", grammars.len()); - let results = run_parallel(grammars, fetch_grammar); + let total = grammars.len(); + let counter = Arc::new(AtomicUsize::new(0)); + + println!("Fetching {} grammars", total); + let counter = Arc::clone(&counter); + + let results = run_parallel(grammars, move |grammar| { + let current = counter.fetch_add(1, Ordering::Relaxed) + 1; + + println!( + "Fetching grammars ({}/{}): {}", + current, total, grammar.grammar_id + ); + fetch_grammar(grammar) + }); let mut errors = Vec::new(); let mut git_updated = Vec::new(); @@ -153,8 +168,20 @@ pub fn build_grammars(target: Option<String>, strict: bool) -> Result<()> { ensure_git_is_available()?; let grammars = get_grammar_configs()?; + + let total = grammars.len(); + let counter = Arc::new(AtomicUsize::new(0)); + println!("Building {} grammars", grammars.len()); + + let counter = Arc::clone(&counter); let results = run_parallel(grammars, move |grammar| { + let current = counter.fetch_add(1, Ordering::Relaxed) + 1; + + println!( + "Building grammars ({}/{}): {}", + current, total, grammar.grammar_id + ); build_grammar(grammar, target.as_deref()) }); |