@@ -85,7 +85,16 @@ pub fn get_language(name: &str) -> Result<Language> {
8585 Ok(language)
8686}
8787
88+fn ensure_git_is_available() -> Result<()> {
89+ match which::which("git") {
90+ Ok(_cmd) => Ok(()),
91+ Err(err) => Err(anyhow::anyhow!("'git' could not be found ({err})")),
92+ }
93+}
94+
8895pub fn fetch_grammars() -> Result<()> {
96+ ensure_git_is_available()?;
97+
8998 // We do not need to fetch local grammars.
9099 let mut grammars = get_grammar_configs()?;
91100 grammars.retain(|grammar| !matches!(grammar.source, GrammarSource::Local { .. }));
@@ -145,6 +154,8 @@ pub fn fetch_grammars() -> Result<()> {
145154}
146155
147156pub fn build_grammars(target: Option<String>) -> Result<()> {
157+ ensure_git_is_available()?;
158+
148159 let grammars = get_grammar_configs()?;
149160 println!("Building {} grammars", grammars.len());
150161 let results = run_parallel(grammars, move |grammar| {