use middle::analysis::ast::*;
pub fn decorate_with_attributes(mut grammar: AGrammar,
attributes: Vec<syn::Attribute>) -> Partial<AGrammar>
{
merge_grammar_attributes(&mut grammar, attributes);
Partial::Value(grammar)
}
fn warn_ignore_attr(span: Span) {
span.unstable().warning(format!(
"unknown attribute: it will be ignored."))
.emit();
}
fn merge_grammar_attributes(grammar: &mut AGrammar, attrs: Vec<syn::Attribute>) {
for attr in attrs {
if let Some(ident) = attr.path.get_ident() {
merge_grammar_attr(grammar, ident);
}
else {
warn_ignore_attr(attr.span());
}
}
}
fn merge_grammar_attr(grammar: &mut AGrammar, ident: &Ident) {
match &*ident.to_string() {
"debug_typing" => {
grammar.merge_print_typing(PrintLevel::Debug);
},
"show_typing" => {
grammar.merge_print_typing(PrintLevel::Show);
},
_ => {
warn_ignore_attr(ident.span());
}
}
}