load syntaxes in parallel
This commit is contained in:
parent
a8773aac63
commit
5de308c0c4
|
@ -1,6 +1,7 @@
|
||||||
use std::{collections::HashMap, ops::ControlFlow};
|
use std::{collections::HashMap, ops::ControlFlow};
|
||||||
|
|
||||||
use anyhow::{anyhow, Context};
|
use anyhow::{anyhow, Context};
|
||||||
|
use rayon::iter::{IntoParallelRefIterator, ParallelIterator};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use tracing::{error, info_span, instrument};
|
use tracing::{error, info_span, instrument};
|
||||||
|
|
||||||
|
@ -10,7 +11,7 @@ use crate::{
|
||||||
Syntax,
|
Syntax,
|
||||||
},
|
},
|
||||||
import_map::ImportRoot,
|
import_map::ImportRoot,
|
||||||
vfs::{self, Dir, ImageSize, VPath, VPathBuf},
|
vfs::{self, Dir, DynDir, ImageSize, VPath, VPathBuf},
|
||||||
};
|
};
|
||||||
|
|
||||||
#[derive(Debug, Clone, Deserialize, Serialize)]
|
#[derive(Debug, Clone, Deserialize, Serialize)]
|
||||||
|
@ -159,9 +160,18 @@ impl Config {
|
||||||
|
|
||||||
/// Loads all syntax definition files.
|
/// Loads all syntax definition files.
|
||||||
#[instrument(name = "Config::load_syntaxes", skip(self))]
|
#[instrument(name = "Config::load_syntaxes", skip(self))]
|
||||||
pub fn load_syntaxes(&mut self, dir: &dyn Dir) -> anyhow::Result<()> {
|
pub fn load_syntaxes(&mut self, dir: DynDir) -> anyhow::Result<()> {
|
||||||
vfs::walk_dir_rec(dir, VPath::ROOT, &mut |path| {
|
let mut paths = vec![];
|
||||||
|
vfs::walk_dir_rec(&dir, VPath::ROOT, &mut |path| {
|
||||||
if path.extension() == Some("json") {
|
if path.extension() == Some("json") {
|
||||||
|
paths.push(path.to_owned());
|
||||||
|
}
|
||||||
|
ControlFlow::Continue(())
|
||||||
|
});
|
||||||
|
|
||||||
|
let syntaxes: Vec<_> = paths
|
||||||
|
.par_iter()
|
||||||
|
.flat_map(|path| {
|
||||||
let name = path
|
let name = path
|
||||||
.file_stem()
|
.file_stem()
|
||||||
.expect("syntax file name should have a stem due to the .json extension");
|
.expect("syntax file name should have a stem due to the .json extension");
|
||||||
|
@ -180,14 +190,19 @@ impl Config {
|
||||||
Ok(syntax) => {
|
Ok(syntax) => {
|
||||||
let _span = info_span!("Config::load_syntaxes::compile", ?name).entered();
|
let _span = info_span!("Config::load_syntaxes::compile", ?name).entered();
|
||||||
let compiled = compile_syntax(&syntax);
|
let compiled = compile_syntax(&syntax);
|
||||||
self.syntaxes.insert(name.to_owned(), compiled);
|
Some((name.to_owned(), compiled))
|
||||||
|
}
|
||||||
|
Err(err) => {
|
||||||
|
error!("error while loading syntax file `{path}`: {err}");
|
||||||
|
None
|
||||||
}
|
}
|
||||||
Err(err) => error!("error while loading syntax file `{path}`: {err}"),
|
|
||||||
}
|
}
|
||||||
}
|
})
|
||||||
|
.collect();
|
||||||
|
|
||||||
ControlFlow::Continue(())
|
for (name, compiled) in syntaxes {
|
||||||
});
|
self.syntaxes.insert(name, compiled);
|
||||||
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
|
@ -320,7 +320,7 @@ impl Sources {
|
||||||
config.site = std::env::var("TREEHOUSE_SITE").unwrap_or(config.site);
|
config.site = std::env::var("TREEHOUSE_SITE").unwrap_or(config.site);
|
||||||
config.autopopulate_emoji(&*dirs.emoji)?;
|
config.autopopulate_emoji(&*dirs.emoji)?;
|
||||||
config.autopopulate_pics(&*dirs.pic)?;
|
config.autopopulate_pics(&*dirs.pic)?;
|
||||||
config.load_syntaxes(&*dirs.syntax)?;
|
config.load_syntaxes(dirs.syntax.clone())?;
|
||||||
config
|
config
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue