Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ jobs:
rust-version: nightly
- name: Generate Docs (reference docs.rs)
run: |
cargo rustdoc -- --cfg docsrs -Z unstable-options $(cargo metadata --format-version 1 | jq --raw-output '.packages | map("--extern-html-root-url=\(.name)=https://docs.rs/\(.name)/\(.version)") | join(" ")')
cargo rustdoc --all-features -- --cfg docsrs -Z unstable-options $(cargo metadata --format-version 1 | jq --raw-output '.packages | map("--extern-html-root-url=\(.name)=https://docs.rs/\(.name)/\(.version)") | join(" ")')
- uses: actions/upload-pages-artifact@v5
with:
path: 'target/doc'
Expand Down
10 changes: 5 additions & 5 deletions .github/workflows/test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -34,14 +34,14 @@ jobs:
- uses: hecrj/setup-rust-action@v1
with:
rust-version: ${{ matrix.rust }}
- uses: bruxisma/setup-cargo-hack@v1
- uses: baptiste0928/cargo-install@v3
with:
cargo-hack-version: "0.5"
crate: cargo-hack
- name: Build
run: cargo hack build --feature-powerset ${{ matrix.cargo_flags }}
run: cargo hack build --feature-powerset --mutually-exclusive-features=syn2,syn3 ${{ matrix.cargo_flags }}
- name: Test
run: cargo hack test --feature-powerset --all-targets --no-fail-fast --workspace
run: cargo hack test --feature-powerset --mutually-exclusive-features=syn2,syn3 --all-targets --no-fail-fast --workspace
- name: Doc Test
run: cargo test --all-features --doc --no-fail-fast --workspace
run: cargo test --features=darling --doc --no-fail-fast --workspace
- name: Build Docs
run: cargo doc --all-features --workspace
5 changes: 3 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,17 +20,18 @@ proc-macro2 = "1.0.60"
quote = "1"
syn1 = { package = "syn", version = "1", default-features = false, optional = true, features = ["printing"] }
syn2 = { package = "syn", version = "2", default-features = false, optional = true, features = ["printing", "parsing"] }
syn3 = { package = "syn", version = "3", default-features = false, optional = true, features = ["printing", "parsing"] }
darling_core = { version = "0.23.0", optional = true }

[features]
default = ["syn", "macros"]
syn = ["syn2"]
syn = ["syn3"]
darling = ["darling_core"]

[dev-dependencies]
proc-macro-utils = "0.10.0"
proc-macro2 = { version = "1", features = ["span-locations"] }
syn2 = {package = "syn", version = "2", features = ["full"]}
syn3 = { package = "syn", version = "3", features = ["full"] }

[package.metadata.docs.rs]
all-features = true
Expand Down
2 changes: 1 addition & 1 deletion examples/macro/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ proc-macro = true
manyhow = {path = "../..", default-features = false, features = ["macros", "syn"]}
proc-macro2 = "1"
quote = "1"
syn = { version = "2", features = ["full"] }
syn = { version = "3", features = ["full"] }

[dev-dependencies]
trybuild = "1.0.111"
Expand Down
2 changes: 1 addition & 1 deletion examples/macro/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use manyhow::{bail, manyhow, Emitter, ErrorMessage, Result, SilentError};
use manyhow::{Emitter, ErrorMessage, Result, SilentError, bail, manyhow};
use proc_macro::TokenStream;
use proc_macro2::{Span, TokenStream as TokenStream2};
use quote::quote;
Expand Down
2 changes: 1 addition & 1 deletion examples/no_macro/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ proc-macro = true
manyhow = { path = "../..", default-features = false, features = ["syn"] }
proc-macro2 = "1"
quote = "1"
syn = { version = "2", features = ["full"] }
syn = { version = "3", features = ["full"] }

[dev-dependencies]
trybuild = "1.0.111"
Expand Down
2 changes: 1 addition & 1 deletion examples/no_macro/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use manyhow::{attribute, bail, derive, function, Emitter, ErrorMessage, Result, SilentError};
use manyhow::{Emitter, ErrorMessage, Result, SilentError, attribute, bail, derive, function};
use proc_macro::TokenStream;
use proc_macro2::{Span, TokenStream as TokenStream2};
use quote::quote;
Expand Down
4 changes: 2 additions & 2 deletions macros/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
use std::fmt::{Display, Write};
use std::mem;

use proc_macro2::{Group, Ident, Span, TokenStream, TokenTree};
use proc_macro_utils::{Delimited, TokenStream2Ext, TokenStreamExt, TokenTree2Ext, TokenTreePunct};
use quote::{format_ident, quote, quote_spanned, ToTokens};
use proc_macro2::{Group, Ident, Span, TokenStream, TokenTree};
use quote::{ToTokens, format_ident, quote, quote_spanned};

#[derive(PartialEq, Eq, Clone, Copy)]
enum ProcMacroType {
Expand Down
22 changes: 21 additions & 1 deletion src/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ use quote::{ToTokens, quote_spanned};
use syn1::Error as Syn1Error;
#[cfg(feature = "syn2")]
use syn2::Error as Syn2Error;
#[cfg(feature = "syn3")]
use syn3::Error as Syn3Error;

#[cfg(doc)]
use crate::MacroOutput;
Expand Down Expand Up @@ -41,6 +43,12 @@ impl From<Syn2Error> for Error {
Self::from(error)
}
}
#[cfg(feature = "syn3")]
impl From<Syn3Error> for Error {
fn from(error: Syn3Error) -> Self {
Self::from(error)
}
}
#[cfg(feature = "darling")]
impl From<DarlingError> for Error {
fn from(error: DarlingError) -> Self {
Expand Down Expand Up @@ -163,6 +171,12 @@ impl From<ErrorMessage> for Syn2Error {
Self::new_spanned(value.to_token_stream(), value)
}
}
#[cfg(feature = "syn3")]
impl From<ErrorMessage> for Syn3Error {
fn from(value: ErrorMessage) -> Self {
Self::new_spanned(value.to_token_stream(), value)
}
}

impl<T: ToTokensError + 'static> Add<T> for ErrorMessage {
type Output = Error;
Expand Down Expand Up @@ -391,12 +405,18 @@ impl ToTokensError for Syn1Error {
self.to_compile_error().to_tokens(tokens);
}
}
#[cfg(feature = "syn")]
#[cfg(feature = "syn2")]
impl ToTokensError for Syn2Error {
fn to_tokens(&self, tokens: &mut TokenStream) {
self.to_compile_error().to_tokens(tokens);
}
}
#[cfg(feature = "syn3")]
impl ToTokensError for Syn3Error {
fn to_tokens(&self, tokens: &mut TokenStream) {
self.to_compile_error().to_tokens(tokens);
}
}
#[cfg(feature = "darling")]
impl ToTokensError for DarlingError {
fn to_tokens(&self, tokens: &mut TokenStream) {
Expand Down
63 changes: 41 additions & 22 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
//! ```
//! # use proc_macro2::TokenStream;
//! # use quote::quote;
//! # use syn2 as syn;
//! # use syn3 as syn;
//! use proc_macro2::TokenStream as TokenStream2;
//!
//! # let _ = quote!{
Expand All @@ -41,7 +41,7 @@
//!
//! ```
//! # use quote::quote;
//! # use syn2 as syn;
//! # use syn3 as syn;
//! use manyhow::manyhow;
//! use proc_macro2::TokenStream as TokenStream2;
//!
Expand Down Expand Up @@ -79,7 +79,7 @@
//!
//! mod module {
//! # use quote::quote;
//! # use syn2 as syn;
//! # use syn3 as syn;
//! use proc_macro2::TokenStream as TokenStream2;
//!
//! pub fn my_macro(input: TokenStream2) -> syn::Result<TokenStream2> {
Expand Down Expand Up @@ -150,7 +150,7 @@
//! ```
//! # use proc_macro2::TokenStream;
//! # use quote::quote;
//! # use syn2 as syn;
//! # use syn3 as syn;
//! use proc_macro2::TokenStream as TokenStream2;
//!
//! # let _ = quote!{
Expand Down Expand Up @@ -195,8 +195,8 @@
//!
//! ```
//! # use quote::quote;
//! # use syn2 as syn;
//! use manyhow::{manyhow, Emitter, ErrorMessage};
//! # use syn3 as syn;
//! use manyhow::{Emitter, ErrorMessage, manyhow};
//! use proc_macro2::TokenStream as TokenStream2;
//!
//! # let _ = quote!{
Expand Down Expand Up @@ -224,21 +224,22 @@
//!
//! - `macros` **default** Enables [`#[manyhow]`](macros::manyhow) attribute
//! macro.
//! - `syn`/`syn2` **default** Enables errors for [`syn` 2.x](https://docs.rs/syn/latest/syn/).
//! - `syn`/`syn3` **default** Enables errors for [`syn` 3.x](https://docs.rs/syn/latest/syn/).
//! - `syn2` **default** Enables errors for [`syn` 2.x](https://docs.rs/syn/2.0.119/syn/).
//! - `syn1` Enables errors for [`syn` 1.x](https://docs.rs/syn/1.0.109/syn/index.html).
//! - `darling` Enables errors for [`darling`](https://docs.rs/darling/latest/index.html).

#[cfg(feature = "macros")]
pub use macros::manyhow;
use proc_macro2::TokenStream;
#[cfg(doc)]
use {quote::ToTokens, syn2::parse::Parse};
use {quote::ToTokens, syn3::parse::Parse};

extern crate proc_macro;

#[macro_use]
mod span_ranged;
pub use span_ranged::{to_tokens_span_range, SpanRanged};
pub use span_ranged::{SpanRanged, to_tokens_span_range};
#[macro_use]
mod macro_rules;
mod error;
Expand Down Expand Up @@ -318,7 +319,7 @@ macro_rules! __macro_handler {
/// ```
/// # use proc_macro_utils::assert_tokens;
/// # use quote::{quote, ToTokens};
/// use manyhow::{attribute, Emitter, Result};
/// use manyhow::{Emitter, Result, attribute};
/// use proc_macro2::TokenStream;
/// # let input = quote!();
/// # let item = quote!();
Expand All @@ -342,9 +343,9 @@ macro_rules! __macro_handler {
/// initialized with `item`. To override assign a new `TokenStream`:
/// ```
/// # use proc_macro_utils::assert_tokens;
/// use manyhow::{attribute, Result, SilentError};
/// use manyhow::{Result, SilentError, attribute};
/// use proc_macro2::TokenStream;
/// use quote::{quote, ToTokens};
/// use quote::{ToTokens, quote};
/// # let input = quote!(input);
/// let item = quote!(
/// struct Struct;
Expand Down Expand Up @@ -429,7 +430,7 @@ pub fn attribute<
/// ```
/// # use proc_macro_utils::assert_tokens;
/// # use quote::{quote, ToTokens};
/// use manyhow::{attribute, Emitter, Result};
/// use manyhow::{Emitter, Result, attribute};
/// use proc_macro2::TokenStream;
/// # let input = quote!();
/// # let item = quote!();
Expand All @@ -448,10 +449,10 @@ pub fn attribute<
/// be initialized with `item`. To override assign a new `TokenStream`:
/// ```
/// # use proc_macro_utils::assert_tokens;
/// # use syn2 as syn;
/// use manyhow::{attribute, Result, SilentError};
/// # use syn3 as syn;
/// use manyhow::{Result, SilentError, attribute};
/// use proc_macro2::TokenStream;
/// use quote::{quote, ToTokens};
/// use quote::{ToTokens, quote};
/// # let input = quote!(input);
/// let item = quote!(
/// struct Struct;
Expand Down Expand Up @@ -500,7 +501,7 @@ macro_rules! attribute {
/// ```
/// # use proc_macro_utils::assert_tokens;
/// # use quote::{quote, ToTokens};
/// use manyhow::{derive, Emitter, Result};
/// use manyhow::{Emitter, Result, derive};
/// use proc_macro2::TokenStream;
/// # let item = quote!();
/// # let output: TokenStream =
Expand Down Expand Up @@ -549,8 +550,8 @@ pub fn derive<
/// ```
/// # use proc_macro_utils::assert_tokens;
/// # use quote::{quote, ToTokens};
/// # use syn2 as syn;
/// use manyhow::{derive, Emitter, Result};
/// # use syn3 as syn;
/// use manyhow::{Emitter, Result, derive};
/// use proc_macro2::TokenStream;
/// # let item = quote!();
/// # let output: TokenStream =
Expand Down Expand Up @@ -583,7 +584,7 @@ macro_rules! derive {
/// ```
/// # use proc_macro_utils::assert_tokens;
/// # use quote::{quote, ToTokens};
/// use manyhow::{function, Emitter, Result};
/// use manyhow::{Emitter, Result, function};
/// use proc_macro2::TokenStream;
/// # let input = quote!();
/// # let output: TokenStream =
Expand Down Expand Up @@ -667,8 +668,8 @@ pub fn function<
/// ```
/// # use proc_macro_utils::assert_tokens;
/// # use quote::{quote, ToTokens};
/// # use syn2 as syn;
/// use manyhow::{function, Emitter, Result};
/// # use syn3 as syn;
/// use manyhow::{Emitter, Result, function};
/// use proc_macro2::TokenStream;
/// # let input = quote!();
/// # let output: TokenStream =
Expand Down Expand Up @@ -752,6 +753,24 @@ fn function_macro() {
});
assert_eq!(output.to_string(), "hello");
}

#[cfg(feature = "syn3")]
{
use quote::ToTokens;
let output: TokenStream = function!(
#[as_dummy]
quote!(hello;),
|input: syn3::LitInt| -> TokenStream { input.into_token_stream() }
);
assert_eq!(
output.to_string(),
quote!(hello; ::core::compile_error! { "expected integer literal" }).to_string()
);
let output: TokenStream = function!(quote!(20), |_input: syn3::LitInt| -> syn3::Ident {
syn3::parse_quote!(hello)
});
assert_eq!(output.to_string(), "hello");
}
}

macro_rules! macro_input {
Expand Down
15 changes: 10 additions & 5 deletions src/macro_rules.rs
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ macro_rules! error_message {
/// ```should_panic
/// # use manyhow::bail;
/// # use proc_macro2::Span;
/// # use syn2 as syn;
/// # use syn3 as syn;
/// bail!("an error message"; error = "with attachments");
/// let span = Span::call_site();
/// bail!(span, "error message");
Expand Down Expand Up @@ -156,7 +156,7 @@ macro_rules! bail {
/// ```should_panic
/// # use manyhow::ensure;
/// # use proc_macro2::Span;
/// # use syn2 as syn;
/// # use syn3 as syn;
/// let span = Span::call_site();
/// ensure!(false, span, "error message");
/// let error = syn::Error::new(Span::call_site(), "an error");
Expand Down Expand Up @@ -184,7 +184,7 @@ macro_rules! ensure {
/// ```
/// # use manyhow::{emit, Emitter};
/// # use proc_macro2::Span;
/// # use syn2 as syn;
/// # use syn3 as syn;
/// let mut emitter = Emitter::new();
/// emit!(emitter, "an error message");
/// emit!(emitter, "an error message"; error = "with attachments");
Expand All @@ -198,7 +198,7 @@ macro_rules! ensure {
/// ```
/// # use manyhow::{emit, error_message, Error};
/// # use proc_macro2::Span;
/// # use syn2 as syn;
/// # use syn3 as syn;
/// let mut error: Error = error_message!("initial error").into();
/// emit!(error, "an error message");
/// ```
Expand All @@ -207,7 +207,7 @@ macro_rules! ensure {
/// ```
/// # use manyhow::emit;
/// # use proc_macro2::Span;
/// # use syn2 as syn;
/// # use syn3 as syn;
/// let mut errors = Vec::new();
/// emit!(errors, "an error message");
/// ```
Expand Down Expand Up @@ -305,6 +305,11 @@ mod test {
let error = syn2::Error::new(proc_macro2::Span::call_site(), "an error");
emit!(emitter, error);
}
#[cfg(feature = "syn3")]
{
let error = syn3::Error::new(proc_macro2::Span::call_site(), "an error");
emit!(emitter, error);
}
}

// Only tests that it compiles
Expand Down
Loading
Loading