Skip to content

Commit

Permalink
Report errors from parsing group options, if any
Browse files Browse the repository at this point in the history
  • Loading branch information
arqunis committed May 18, 2019
1 parent 03057f3 commit 8e01ff6
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 14 deletions.
1 change: 1 addition & 0 deletions Cargo.toml
Expand Up @@ -22,6 +22,7 @@ optional = true
version = "0.1"

[dependencies.command_attr]
path = "./command_attr"
version = "0.1.0-rc"
optional = true

Expand Down
24 changes: 10 additions & 14 deletions command_attr/src/structures.rs
@@ -1,6 +1,6 @@
use crate::consts::{COMMAND, GROUP, GROUP_OPTIONS, CHECK};
use crate::util::{
Argument, Array, AsOption, Expr, Field, IdentAccess, IdentExt2, LitExt, Object, ParseStreamExt,
Argument, Array, AsOption, Expr, Field, IdentAccess, IdentExt2, LitExt, Object,
RefOrInstance,
};
use proc_macro2::TokenStream as TokenStream2;
Expand Down Expand Up @@ -731,20 +731,16 @@ impl Parse for Group {

input.parse::<Token![,]>()?;

let options = if let Ok(f) = input.try_parse::<Field<RefOrInstance<GroupOptions>>>() {
if f.name != "options" {
return Err(Error::new(
f.name.span(),
"the options of a group must be labeled as `options`",
));
}
let Field { name: oname, value: options } = input.parse::<Field<RefOrInstance<GroupOptions>>>()?;

input.parse::<Token![,]>()?;
if oname != "options" {
return Err(Error::new(
oname.span(),
"every group must have some `options`",
));
}

Some(f.value)
} else {
None
};
input.parse::<Token![,]>()?;

let commands = input.parse::<Ident>()?;
if commands != "commands" {
Expand Down Expand Up @@ -789,7 +785,7 @@ impl Parse for Group {

Ok(Group {
name,
options: options.unwrap_or_default(),
options,
commands: content.parse_terminated(Ident::parse_any)?,
sub_groups,
})
Expand Down

0 comments on commit 8e01ff6

Please sign in to comment.