Code Monkey home page Code Monkey logo

Comments (2)

kennytm avatar kennytm commented on May 25, 2024

pub(restricted) is now stable. But I think it is still blocked by :vis matcher (rust-lang/rust#41022) to allow a proper fix.


Currently the straightforward fix using :vis causes an error in example_generated.rs

error: local ambiguity: multiple parsing options: built-in NTs vis ('vis') or 1 other option.
  --> src/example_generated.rs:5:5
   |
4  | / bitflags! {
5  | |     /// This is the same `Flags` struct defined in the [crate level example](../index.html#example).
   | |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6  | |     /// Note that this struct is just for documentation purposes only, it must not be used outside
7  | |     /// this crate.
...  |
15 | |     }
16 | | }
   | |_- in this macro invocation

error: Could not compile `bitflags`.
(diff)
diff --git a/src/lib.rs b/src/lib.rs
index 1694837..356fba1 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -8,6 +8,8 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+#![feature(macro_vis_matcher)]
+
 //! A typesafe bitmask flag generator useful for sets of C-style bitmask flags.
 //! It can be used for creating typesafe wrappers around C APIs.
 //!
@@ -305,16 +307,16 @@ pub extern crate core as _core;
 /// ```
 #[macro_export]
 macro_rules! bitflags {
-    ($(#[$attr:meta])* pub struct $BitFlags:ident: $T:ty {
+    ($(#[$attr:meta])* $vis:vis struct $BitFlags:ident: $T:ty {
         $($(#[$Flag_attr:meta])* const $Flag:ident = $value:expr;)+
     }) => {
         #[derive(Copy, PartialEq, Eq, Clone, PartialOrd, Ord, Hash)]
         $(#[$attr])*
-        pub struct $BitFlags {
+        $vis struct $BitFlags {
             bits: $T,
         }
 
-        $($(#[$Flag_attr])* pub const $Flag: $BitFlags = $BitFlags { bits: $value };)+
+        $($(#[$Flag_attr])* $vis const $Flag: $BitFlags = $BitFlags { bits: $value };)+
 
         __impl_bitflags! {
             struct $BitFlags: $T {
@@ -322,24 +324,6 @@ macro_rules! bitflags {
             }
         }
     };
-    ($(#[$attr:meta])* struct $BitFlags:ident: $T:ty {
-        $($(#[$Flag_attr:meta])* const $Flag:ident = $value:expr;)+
-    }) => {
-        #[derive(Copy, PartialEq, Eq, Clone, PartialOrd, Ord, Hash)]
-        $(#[$attr])*
-        struct $BitFlags {
-            bits: $T,
-        }
-
-        $($(#[$Flag_attr])* const $Flag: $BitFlags = $BitFlags { bits: $value };)+
-
-        __impl_bitflags! {
-            struct $BitFlags: $T {
-                $($(#[$Flag_attr])* const $Flag = $value;)+
-            }
-        }
-
-    };
 }

from bitflags.

KodrAus avatar KodrAus commented on May 25, 2024

It looks like using :vis here is unblocked now, right?

from bitflags.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.