leptos
leptos copied to clipboard
Use `rustversion` crate instead of `stable` flag
We can enable use on either stable or nightly Rust by detecting version with the rustversion crate instead of using the stable flag. This should be fairly simple... only leptos_reactive and leptos_dom need to change at all, and then have the feature removed in the main leptos package.
It actually seems like rustversion can't accommodate conditionally enabling features?
I can't get this to work
#![rustversion::attr(nightly, feature(unboxed_closures))]
as opposed to
#![cfg_attr(not(feature = "stable"), feature(unboxed_closures))]
@akesson I think you suggested this possibility — any thoughts? I may be doing it wrong.
But rustversion can enable/disable an arbitrary amount of code, right? So, what about this?
#[rustversion::nightly]
#![feature(unboxed_closures)]
The problem is that that's an outer attribute wrapping an inner attribute, which is not possible. See this issue.
I'm not sure what you want to achieve with:
#![rustversion::attr(nightly, feature(unboxed_closures))]
Use nightly, but only if feature unboxed_closures is not available on stable?
Wouldn't simply #[rustversion::nightly] suffice? When the feature is available on stable, the condition would have to be removed manually.
Actually, shouldn't it be: #[rustversion::attr(nightly, feature(unboxed_closures))], without the exclamation mark?
If you do #[rustversion::attr(nightly, feature(unboxed_closures))] then the compiler interprets it as an annotation of mod context rather than of the crate.
Here's an idea: add the required #![feature] using a build script. For all other things, use rustversion. That's hacky but at least you don't have to use a stable feature flag
Actually, in this case.. it's much better to enable the stable feature flag in the build script, with this, and people that depend on leptos won't have to set this flag. (or maybe it can enable feature = unboxed_closures directly?)
@dlight This seems like a good idea but I'll admit I don't quite know how to do this. If you could give a pointer (or even better a PR) I'd be really grateful.
How about using rustc_version for automatically setting the stable feature?
I did a test and it seems to work well.
I can do a PR, but probably best to wait for #44 to be merged because there will be Cargo.toml merge conflicts.
I think this should finally be fixed by #148. stable feature still exists but is now automatically enabled if you're on stable Rust.