servo / webrender

A GPU-based renderer for the web
https://doc.servo.org/webrender/
Mozilla Public License 2.0
3.1k stars 276 forks source link

Future incompatibility with Rust RFC 3373: Avoid non-local definitions in functions #4837

Open Urgau opened 7 months ago

Urgau commented 7 months ago

Rust RFC 3373: Avoid non-local definitions in functions was accepted and it's implementation at https://github.com/rust-lang/rust/pull/120393 found that this crate would be affected by it.

To be more precise users of the peek-poke-derive crate would be affected by it, in the form of a warn-by-default lint: non_local_definitions. This is because the derive macros from this crate use impl in a local context, const _DERIVE_peek_poke_Peek_FOR_???:

https://github.com/servo/webrender/blob/8ce388eb12df8b3a33c7a792a85e66e52acc3ca8/peek-poke/peek-poke-derive/src/lib.rs#L244-L248

Fortunately a simple fix exist for this crate, by using a const-anon instead of named one:

-    let dummy_const: Ident = sanitize_ident(&format!("_DERIVE_peek_poke_Peek_FOR_{}", name));

     let peek_impl = quote! {
         #[allow(non_upper_case_globals)]
-        const #dummy_const: () = {
+        const _: () = {

It's also quite possible that you will need to set s.underscore_const(true); for the synstructure::Structure.

nical commented 7 months ago

Thanks for the heads up!