cleanup syntax

This commit is contained in:
Aleksey Kladov 2019-04-14 23:04:08 +03:00
parent e6f32c6d3a
commit b228947b68
3 changed files with 34 additions and 8 deletions

View 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,
// 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(),
};
let profile_allowed = match std::env::var("RA_PROFILE") {
Ok(ref p) => p.split(";").map(String::from).collect(),
_ => Vec::new(),
};
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) => {

View 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 }
}

View 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
```