feat(render): improve error log when variable is missing in forms

This commit is contained in:
Federico Terzi 2021-11-12 21:10:04 +01:00
parent c7d6d69b72
commit 38edd67bd0
2 changed files with 26 additions and 15 deletions

View File

@ -126,21 +126,7 @@ impl<'a> Renderer for DefaultRenderer<'a> {
if let Some(RendererError::MissingVariable(_)) = if let Some(RendererError::MissingVariable(_)) =
err.downcast_ref::<RendererError>() err.downcast_ref::<RendererError>()
{ {
error!(""); log_new_form_syntax_tip();
error!("TIP: This error might be happening because since version 2.1.0-alpha, Espanso changed");
error!("the syntax to define form controls. Instead of `{{{{control}}}}` you need to use");
error!("[[control]] (using square brackets instead of curly brackets).");
error!("");
error!("For example, you have a form defined like the following:");
error!(" - trigger: test");
error!(" form: |");
error!(" Hi {{{{name}}}}!");
error!("");
error!("You'll need to replace it with:");
error!(" - trigger: test");
error!(" form: |");
error!(" Hi [[name]]!");
error!("");
} }
} }
@ -236,6 +222,24 @@ fn get_matching_template<'a>(
} }
} }
fn log_new_form_syntax_tip() {
error!("");
error!("TIP: This error might be happening because since version 2.1.0-alpha, Espanso changed");
error!("the syntax to define form controls. Instead of `{{{{control}}}}` you need to use");
error!("[[control]] (using square brackets instead of curly brackets).");
error!("");
error!("For example, if you have a form defined like the following:");
error!(" - trigger: test");
error!(" form: |");
error!(" Hi {{{{name}}}}!");
error!("");
error!("You'll need to replace it with:");
error!(" - trigger: test");
error!(" form: |");
error!(" Hi [[name]]!");
error!("");
}
#[derive(Error, Debug)] #[derive(Error, Debug)]
pub enum RendererError { pub enum RendererError {
#[error("missing variable: `{0}`")] #[error("missing variable: `{0}`")]

View File

@ -23,6 +23,7 @@ use std::{
}; };
use anyhow::{anyhow, Result}; use anyhow::{anyhow, Result};
use log::error;
use crate::Variable; use crate::Variable;
@ -179,6 +180,12 @@ fn resolve_dependencies<'a>(
resolve_dependencies(dependency_node, node_map, eval_order, resolved, seen)? resolve_dependencies(dependency_node, node_map, eval_order, resolved, seen)?
} }
None => { None => {
error!("could not resolve variable {:?}", dependency);
if let Some(variable) = &node.variable {
if variable.var_type == "form" {
super::log_new_form_syntax_tip();
}
}
return Err(RendererError::MissingVariable(dependency.to_string()).into()); return Err(RendererError::MissingVariable(dependency.to_string()).into());
} }
} }