]> git.lizzy.rs Git - rust.git/commitdiff
cleanup syntax
authorAleksey Kladov <aleksey.kladov@gmail.com>
Sun, 14 Apr 2019 20:04:08 +0000 (23:04 +0300)
committerAleksey Kladov <aleksey.kladov@gmail.com>
Sun, 14 Apr 2019 22:10:07 +0000 (01:10 +0300)
crates/ra_lsp_server/src/main.rs
crates/ra_prof/src/lib.rs
docs/dev/README.md

index 4646742ca3f5ca118ddad8e7b68b80ea33438ec7..28f9985b6befa012a8372ac638d0f23b146942f1 100644 (file)
@@ -12,15 +12,27 @@ fn main() -> Result<()> {
         Ok(ref v) if v == "1" => logger.log_to_file().directory("log").start()?,
         _ => logger.start()?,
     };
-    let prof_depth = match std::env::var("RA_PROFILE_DEPTH") {
-        Ok(ref d) => d.parse()?,
-        _ => 0,
-    };
-    let profile_allowed = match std::env::var("RA_PROFILE") {
-        Ok(ref p) => p.split(";").map(String::from).collect(),
-        _ => Vec::new(),
+    // Filtering syntax
+    // env RA_PROFILE=*             // dump everything
+    // env RA_PROFILE=foo|bar|baz   // enabled only selected entries
+    // env RA_PROFILE=*@3           // dump everything, up to depth 3
+    let filter = match std::env::var("RA_PROFILE") {
+        Ok(p) => {
+            let mut p = p.as_str();
+            let depth = if let Some(idx) = p.rfind("@") {
+                let depth: usize = p[idx + 1..].parse().expect("invalid profile depth");
+                p = &p[..idx];
+                depth
+            } else {
+                999
+            };
+            let allowed =
+                if p == "*" { Vec::new() } else { p.split(";").map(String::from).collect() };
+            ra_prof::Filter::new(depth, allowed)
+        }
+        Err(_) => ra_prof::Filter::disabled(),
     };
-    ra_prof::set_filter(ra_prof::Filter::new(prof_depth, profile_allowed));
+    ra_prof::set_filter(filter);
     log::info!("lifecycle: server started");
     match ::std::panic::catch_unwind(main_inner) {
         Ok(res) => {
index 121a62813d6b20f7819e9d431b9a345eb324d3af..c7c21b6d2a2851cfe13581fe53a61beec93d8464 100644 (file)
@@ -104,6 +104,10 @@ pub struct Filter {
 }
 
 impl Filter {
+    pub fn disabled() -> Filter {
+        Filter::new(0, Vec::new())
+    }
+
     pub fn new(depth: usize, allowed: Vec<String>) -> Filter {
         Filter { depth, allowed }
     }
index 7bb323f3f14ea5e114c22d01a4bc87bc09b779e3..7fb5886c9713a4d38d2ef85940c25b086ba6b27b 100644 (file)
@@ -135,3 +135,13 @@ There's also two VS Code commands which might be of interest:
   There's an alias for this: `cargo jinstall-lsp`.
 
 * `Rust Analyzer: Syntax Tree` shows syntax tree of the current file/selection.
+
+# Profiling
+
+We have a built-in hierarchical profiler, you can enable it by using `RA_PROF` env-var:
+
+```
+RA_PROFILE=*             // dump everything
+RA_PROFILE=foo|bar|baz   // enabled only selected entries
+RA_PROFILE=*@3           // dump everything, up to depth 3
+```