dtolnay / dtolnay/syn

`Error::from_iter`: a convenient method for combining multiple errors

Open
#1,875 0 comments 1 reaction 0 assignees View on GitHub
Dominant language
Rust
Stars
3.4k
Forks
374
Avg merge
1d 5h
Merged PRs (30d)
2

Description

In many projects I define the following method to combine multiple errors into a single one, and I think it may be useful to many devlopers to have sometihng similar directly in `syn`. Something like `syn::Error::from_iter(errors)`.

```rs
fn combine_errors(errors: impl IntoIterator) -> syn::Result<()> {
let mut errors = errors.into_iter();
if let Some(mut error) = errors.next() {
error.extend(errors);
Err(error)
} else {
Ok(())
}
}
```

With the following usage:

```rs
fn check_fn(fn_item: &ItemFn) -> syn::Result<()> {
let mut errors = Vec::new();

if let Some(abi) = &fn_item.sig.abi {
errors.push(syn::Error::new_spanned(
abi,
"use the default ABI",
));
}

if let Some(asyncness) = &fn_item.sig.asyncness {
errors.push(syn::Error::new_spanned(
asyncness,
"async functions are not supported",
));
}

if let Some(unsafety) = &fn_item.sig.unsafety {
errors.push(syn::Error::new_spanned(
unsafety,
"unsafe functions are not supported",
));
}

combine_errors(errors)
}
```

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.