]> git.lizzy.rs Git - rust.git/commitdiff
Check if bitflags deps pulls its weight
authorAleksey Kladov <aleksey.kladov@gmail.com>
Sun, 4 Apr 2021 09:06:01 +0000 (12:06 +0300)
committerAleksey Kladov <aleksey.kladov@gmail.com>
Sun, 4 Apr 2021 09:06:01 +0000 (12:06 +0300)
Bitflags is generally a good dependency -- it's lightweight, well
maintained and embraced by the ecosystem.

I wonder, however, do we really need it? Doesn't feel like it adds much
to be honest.

Cargo.lock
crates/hir_def/Cargo.toml
crates/hir_def/src/data.rs
crates/hir_def/src/item_tree.rs
crates/hir_def/src/item_tree/lower.rs

index 4531d8fb1cbabb1c5a2060958eb9e7655dff24f6..05383d8b7e465621feebc2fa27bdbb2082625f1d 100644 (file)
@@ -498,7 +498,6 @@ version = "0.0.0"
 dependencies = [
  "anymap",
  "base_db",
- "bitflags",
  "cfg",
  "cov-mark",
  "dashmap",
index 60adb655c75b80d1cad8982b07ac851f6457c410..43324d8d9b160319a3c6c725383c429db3e12e5d 100644 (file)
@@ -10,7 +10,6 @@ edition = "2018"
 doctest = false
 
 [dependencies]
-bitflags = "1.2.1"
 cov-mark = { version = "1.1", features = ["thread-local"] }
 dashmap = { version = "4.0.2", features = ["raw-api"] }
 log = "0.4.8"
index b409fb45cdb656d87bfb9ae44da02b9c588abf8d..135a6698e15273411ad785be078c6bc50c2eb67f 100644 (file)
@@ -50,7 +50,7 @@ pub(crate) fn fn_data_query(db: &dyn DefDatabase, func: FunctionId) -> Arc<Funct
 
         let mut flags = func.flags;
         if is_varargs {
-            flags |= FnFlags::IS_VARARGS;
+            flags.bits |= FnFlags::IS_VARARGS;
         }
 
         Arc::new(FunctionData {
@@ -71,37 +71,37 @@ pub(crate) fn fn_data_query(db: &dyn DefDatabase, func: FunctionId) -> Arc<Funct
     }
 
     pub fn has_body(&self) -> bool {
-        self.flags.contains(FnFlags::HAS_BODY)
+        self.flags.bits & FnFlags::HAS_BODY != 0
     }
 
     /// True if the first param is `self`. This is relevant to decide whether this
     /// can be called as a method.
     pub fn has_self_param(&self) -> bool {
-        self.flags.contains(FnFlags::HAS_SELF_PARAM)
+        self.flags.bits & FnFlags::HAS_SELF_PARAM != 0
     }
 
     pub fn is_default(&self) -> bool {
-        self.flags.contains(FnFlags::IS_DEFAULT)
+        self.flags.bits & FnFlags::IS_DEFAULT != 0
     }
 
     pub fn is_const(&self) -> bool {
-        self.flags.contains(FnFlags::IS_CONST)
+        self.flags.bits & FnFlags::IS_CONST != 0
     }
 
     pub fn is_async(&self) -> bool {
-        self.flags.contains(FnFlags::IS_ASYNC)
+        self.flags.bits & FnFlags::IS_ASYNC != 0
     }
 
     pub fn is_unsafe(&self) -> bool {
-        self.flags.contains(FnFlags::IS_UNSAFE)
+        self.flags.bits & FnFlags::IS_UNSAFE != 0
     }
 
     pub fn is_in_extern_block(&self) -> bool {
-        self.flags.contains(FnFlags::IS_IN_EXTERN_BLOCK)
+        self.flags.bits & FnFlags::IS_IN_EXTERN_BLOCK != 0
     }
 
     pub fn is_varargs(&self) -> bool {
-        self.flags.contains(FnFlags::IS_VARARGS)
+        self.flags.bits & FnFlags::IS_VARARGS != 0
     }
 }
 
index c6d700977e365484d1b7916568cc228278c69666..739906778f97ecc8f49f5a29b6cf117d00e21463 100644 (file)
@@ -569,20 +569,21 @@ pub enum Param {
     Varargs,
 }
 
-bitflags::bitflags! {
-    /// NOTE: Shared with `FunctionData`
-    pub(crate) struct FnFlags: u8 {
-        const HAS_SELF_PARAM = 1 << 0;
-        const HAS_BODY = 1 << 1;
-        const IS_DEFAULT = 1 << 2;
-        const IS_CONST = 1 << 3;
-        const IS_ASYNC = 1 << 4;
-        const IS_UNSAFE = 1 << 5;
-        /// Whether the function is located in an `extern` block (*not* whether it is an
-        /// `extern "abi" fn`).
-        const IS_IN_EXTERN_BLOCK = 1 << 6;
-        const IS_VARARGS = 1 << 7;
-    }
+#[derive(Debug, Clone, Copy, Eq, PartialEq, Default)]
+pub(crate) struct FnFlags {
+    pub(crate) bits: u8,
+}
+impl FnFlags {
+    pub(crate) const HAS_SELF_PARAM: u8 = 1 << 0;
+    pub(crate) const HAS_BODY: u8 = 1 << 1;
+    pub(crate) const IS_DEFAULT: u8 = 1 << 2;
+    pub(crate) const IS_CONST: u8 = 1 << 3;
+    pub(crate) const IS_ASYNC: u8 = 1 << 4;
+    pub(crate) const IS_UNSAFE: u8 = 1 << 5;
+    /// Whether the function is located in an `extern` block (*not* whether it is an
+    /// `extern "abi" fn`).
+    pub(crate) const IS_IN_EXTERN_BLOCK: u8 = 1 << 6;
+    pub(crate) const IS_VARARGS: u8 = 1 << 7;
 }
 
 #[derive(Debug, Clone, Eq, PartialEq)]
index 39e8403b0999d8b854c541f012a84394cb38be4b..ab7ad8310203d3e1d7543677662d0c5e78a3a27d 100644 (file)
@@ -411,24 +411,24 @@ fn lower_function(&mut self, func: &ast::Fn) -> Option<FileItemTreeId<Function>>
 
         let ast_id = self.source_ast_id_map.ast_id(func);
 
-        let mut flags = FnFlags::empty();
+        let mut flags = FnFlags::default();
         if func.body().is_some() {
-            flags |= FnFlags::HAS_BODY;
+            flags.bits |= FnFlags::HAS_BODY;
         }
         if has_self_param {
-            flags |= FnFlags::HAS_SELF_PARAM;
+            flags.bits |= FnFlags::HAS_SELF_PARAM;
         }
         if func.default_token().is_some() {
-            flags |= FnFlags::IS_DEFAULT;
+            flags.bits |= FnFlags::IS_DEFAULT;
         }
         if func.const_token().is_some() {
-            flags |= FnFlags::IS_CONST;
+            flags.bits |= FnFlags::IS_CONST;
         }
         if func.async_token().is_some() {
-            flags |= FnFlags::IS_ASYNC;
+            flags.bits |= FnFlags::IS_ASYNC;
         }
         if func.unsafe_token().is_some() {
-            flags |= FnFlags::IS_UNSAFE;
+            flags.bits |= FnFlags::IS_UNSAFE;
         }
 
         let mut res = Function {
@@ -653,9 +653,9 @@ fn lower_extern_block(&mut self, block: &ast::ExternBlock) -> Vec<ModItem> {
                             let func_id = self.lower_function(&ast)?;
                             let func = &mut self.data().functions[func_id.index];
                             if is_intrinsic_fn_unsafe(&func.name) {
-                                func.flags |= FnFlags::IS_UNSAFE;
+                                func.flags.bits |= FnFlags::IS_UNSAFE;
                             }
-                            func.flags |= FnFlags::IS_IN_EXTERN_BLOCK;
+                            func.flags.bits |= FnFlags::IS_IN_EXTERN_BLOCK;
                             func_id.into()
                         }
                         ast::ExternItem::Static(ast) => {