leptos icon indicating copy to clipboard operation
leptos copied to clipboard

Use `rustversion` crate instead of `stable` flag

Open gbj opened this issue 3 years ago • 10 comments

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.

gbj avatar Oct 19 '22 02:10 gbj

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.

gbj avatar Oct 19 '22 15:10 gbj

But rustversion can enable/disable an arbitrary amount of code, right? So, what about this?

#[rustversion::nightly]
#![feature(unboxed_closures)]

dlight avatar Oct 19 '22 15:10 dlight

The problem is that that's an outer attribute wrapping an inner attribute, which is not possible. See this issue.

gbj avatar Oct 19 '22 20:10 gbj

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.

akesson avatar Oct 20 '22 10:10 akesson

Actually, shouldn't it be: #[rustversion::attr(nightly, feature(unboxed_closures))], without the exclamation mark?

akesson avatar Oct 20 '22 10:10 akesson

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.

gbj avatar Oct 20 '22 13:10 gbj

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

dlight avatar Oct 20 '22 14:10 dlight

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 avatar Oct 20 '22 15:10 dlight

@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.

gbj avatar Oct 21 '22 17:10 gbj

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.

akesson avatar Nov 01 '22 11:11 akesson

I think this should finally be fixed by #148. stable feature still exists but is now automatically enabled if you're on stable Rust.

gbj avatar Dec 02 '22 19:12 gbj