about summary refs log tree commit diff
path: root/crates/stdx
diff options
context:
space:
mode:
authorAleksey Kladov <aleksey.kladov@gmail.com>2021-04-20 22:54:05 +0300
committerAleksey Kladov <aleksey.kladov@gmail.com>2021-04-20 22:54:05 +0300
commitcdfe5a8be01dd7427db734f17c5ec0de7bbe6c80 (patch)
treeecc5755941360a672c5ef1f6a040fb9f03c4b7d7 /crates/stdx
parentad131049c4cd1302af1a5616ff83d0e1f0cadea2 (diff)
downloadrust-cdfe5a8be01dd7427db734f17c5ec0de7bbe6c80.tar.gz
rust-cdfe5a8be01dd7427db734f17c5ec0de7bbe6c80.zip
fix: no more Registering progress handler for token rustAnalyzer/Indexing failed.
Diffstat (limited to 'crates/stdx')
-rw-r--r--crates/stdx/src/lib.rs12
1 files changed, 12 insertions, 0 deletions
diff --git a/crates/stdx/src/lib.rs b/crates/stdx/src/lib.rs
index e3eb109156c..857567a853a 100644
--- a/crates/stdx/src/lib.rs
+++ b/crates/stdx/src/lib.rs
@@ -179,6 +179,18 @@ where
     start..start + len
 }
 
+pub fn defer<F: FnOnce()>(f: F) -> impl Drop {
+    struct D<F: FnOnce()>(Option<F>);
+    impl<F: FnOnce()> Drop for D<F> {
+        fn drop(&mut self) {
+            if let Some(f) = self.0.take() {
+                f()
+            }
+        }
+    }
+    D(Some(f))
+}
+
 #[repr(transparent)]
 pub struct JodChild(pub std::process::Child);