diff --git a/src/cli/main.rs b/src/cli/main.rs index 4025ea48..814813ba 100644 --- a/src/cli/main.rs +++ b/src/cli/main.rs @@ -238,7 +238,7 @@ fn run(opt: &Opt, command: &Command, context: &mut Context) { .. } = *context; - let render_passes = &dmm_tools::render_passes::configure(enable, disable); + let render_passes = &dmm_tools::render_passes::configure(&context.dm_context.config().map_renderer, enable, disable); let paths: Vec<&Path> = files.iter().map(|p| p.as_ref()).collect(); let errors: RwLock> = Default::default(); diff --git a/src/dreammaker/config.rs b/src/dreammaker/config.rs index b0bc054e..55591d12 100644 --- a/src/dreammaker/config.rs +++ b/src/dreammaker/config.rs @@ -25,6 +25,7 @@ pub struct Config { pub langserver: Langserver, pub dmdoc: DMDoc, pub debugger: Debugger, + pub map_renderer: MapRenderer, } /// General error display options @@ -81,6 +82,7 @@ pub enum WarningLevel { Unset = 6, } +/// Available debug engines. #[derive(Debug, Deserialize, Clone, Copy, PartialEq)] pub enum DebugEngine { #[serde(alias = "extools")] @@ -89,6 +91,16 @@ pub enum DebugEngine { Auxtools, } +/// Config for the map renderer. +#[derive(Debug, Default, Deserialize, Clone)] +#[serde(default)] +pub struct MapRenderer { + /// Map from render pass name to whether it should be enabled/disabled. + /// + /// Priority is: CLI arguments > config > defaults. + pub render_passes: HashMap, +} + impl Config { /// Read a config TOML and generate a [`Config`] struct /// diff --git a/src/tools/render_passes/mod.rs b/src/tools/render_passes/mod.rs index 9ce1ba23..68b8fa16 100644 --- a/src/tools/render_passes/mod.rs +++ b/src/tools/render_passes/mod.rs @@ -114,7 +114,7 @@ pub const RENDER_PASSES: &[RenderPassInfo] = &[ pass!(SmartCables, "smart-cables", "Handle smart cable layout.", true), ]; -pub fn configure(include: &str, exclude: &str) -> Vec> { +pub fn configure(options: &dm::config::MapRenderer, include: &str, exclude: &str) -> Vec> { let include: Vec<&str> = include.split(",").collect(); let exclude: Vec<&str> = exclude.split(",").collect(); let include_all = include.iter().any(|&name| name == "all"); @@ -130,6 +130,8 @@ pub fn configure(include: &str, exclude: &str) -> Vec> { true } else if exclude_all { false + } else if let Some(&value) = options.render_passes.get(pass.name) { + value } else { pass.default };