Improve error messages for multiple chidren in a widget and config loading errors
This commit is contained in:
parent
279785f420
commit
c0581e7769
4 changed files with 22 additions and 4 deletions
|
@ -67,7 +67,13 @@ impl EwwConfig {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_window(&self, name: &String) -> Result<&EwwWindowDefinition> {
|
pub fn get_window(&self, name: &String) -> Result<&EwwWindowDefinition> {
|
||||||
self.windows.get(name).with_context(|| format!("No window named '{}' exists in config", name))
|
self.windows.get(name).with_context(|| {
|
||||||
|
format!(
|
||||||
|
"No window named '{}' exists in config.\nThis may also be caused by your config failing to load properly, \
|
||||||
|
please check for any other errors in that case.",
|
||||||
|
name
|
||||||
|
)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_script_var(&self, name: &VarName) -> Result<&ScriptVarDefinition> {
|
pub fn get_script_var(&self, name: &VarName) -> Result<&ScriptVarDefinition> {
|
||||||
|
|
|
@ -10,7 +10,7 @@ use crate::{
|
||||||
from_ast::{FromAst, FromAstElementContent},
|
from_ast::{FromAst, FromAstElementContent},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
use eww_shared_util::{AttrName, Span, VarName};
|
use eww_shared_util::{AttrName, Span, Spanned, VarName};
|
||||||
|
|
||||||
use super::widget_use::WidgetUse;
|
use super::widget_use::WidgetUse;
|
||||||
#[derive(Debug, PartialEq, Eq, Clone, serde::Serialize)]
|
#[derive(Debug, PartialEq, Eq, Clone, serde::Serialize)]
|
||||||
|
@ -33,7 +33,7 @@ impl FromAstElementContent for WidgetDefinition {
|
||||||
.note(EXPECTED_WIDGET_DEF_FORMAT)?;
|
.note(EXPECTED_WIDGET_DEF_FORMAT)?;
|
||||||
let expected_args = expected_args.into_iter().map(|x| x.as_symbol().map(AttrName)).collect::<AstResult<_>>()?;
|
let expected_args = expected_args.into_iter().map(|x| x.as_symbol().map(AttrName)).collect::<AstResult<_>>()?;
|
||||||
let widget = iter.expect_any().note(EXPECTED_WIDGET_DEF_FORMAT).and_then(WidgetUse::from_ast)?;
|
let widget = iter.expect_any().note(EXPECTED_WIDGET_DEF_FORMAT).and_then(WidgetUse::from_ast)?;
|
||||||
iter.expect_done()?;
|
iter.expect_done().map_err(|e| FormFormatError::WidgetDefMultipleChildren(e.span()))?;
|
||||||
Ok(Self { name, expected_args, widget, span, args_span })
|
Ok(Self { name, expected_args, widget, span, args_span })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -160,12 +160,16 @@ impl<T> AstResultExt<T> for AstResult<T> {
|
||||||
pub enum FormFormatError {
|
pub enum FormFormatError {
|
||||||
#[error("Widget definition missing argument list")]
|
#[error("Widget definition missing argument list")]
|
||||||
WidgetDefArglistMissing(Span),
|
WidgetDefArglistMissing(Span),
|
||||||
|
|
||||||
|
#[error("Widget definition has more than one child widget")]
|
||||||
|
WidgetDefMultipleChildren(Span),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Spanned for FormFormatError {
|
impl Spanned for FormFormatError {
|
||||||
fn span(&self) -> Span {
|
fn span(&self) -> Span {
|
||||||
match self {
|
match self {
|
||||||
FormFormatError::WidgetDefArglistMissing(span) => *span,
|
FormFormatError::WidgetDefArglistMissing(span) => *span,
|
||||||
|
FormFormatError::WidgetDefMultipleChildren(span) => *span,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -254,7 +254,15 @@ impl ToDiagnostic for FormFormatError {
|
||||||
FormFormatError::WidgetDefArglistMissing(span) => gen_diagnostic! {
|
FormFormatError::WidgetDefArglistMissing(span) => gen_diagnostic! {
|
||||||
msg = self,
|
msg = self,
|
||||||
label = span => "Insert the argument list (e.g.: `[]`) here",
|
label = span => "Insert the argument list (e.g.: `[]`) here",
|
||||||
note = "This list will in the future need to declare all the non-global variables / attributes used in this widget.\nThis is not yet neccessary, but is still considered good style.",
|
note = "This list will in the future need to declare all the non-global variables / attributes used in this widget.\n\
|
||||||
|
This is not yet neccessary, but is still considered good style.",
|
||||||
|
},
|
||||||
|
FormFormatError::WidgetDefMultipleChildren(span) => gen_diagnostic! {
|
||||||
|
msg = self,
|
||||||
|
label = span => "Found more than one child element here.",
|
||||||
|
note = "A widget-definition may only contain one child element.\n\
|
||||||
|
To include multiple elements, wrap these elements in a single container widget such as `box`.\n\
|
||||||
|
This is necessary as eww can't know how you want these elements to be layed out otherwise."
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue