From 8c6034f5fed66333529cecae05749ef3f351bc06 Mon Sep 17 00:00:00 2001 From: Tad Hardesty Date: Sun, 10 May 2020 12:43:28 -0700 Subject: [PATCH] Add more detail to langserver parse timings Also tweak when/where other debug messages appear. --- src/dreammaker/parser.rs | 2 +- src/langserver/main.rs | 42 +++++++++++++++++++++++++++------------- 2 files changed, 30 insertions(+), 14 deletions(-) diff --git a/src/dreammaker/parser.rs b/src/dreammaker/parser.rs index 914e8615..d0183553 100644 --- a/src/dreammaker/parser.rs +++ b/src/dreammaker/parser.rs @@ -378,7 +378,7 @@ impl<'ctx, 'an, 'inp> Parser<'ctx, 'an, 'inp> { fn finalize_object_tree(mut self) -> ObjectTree { let procs_total = self.procs_good + self.procs_bad; - if procs_total > 0 { + if self.procs_bad > 0 { eprintln!( "parsed {}/{} proc bodies ({}%)", self.procs_good, diff --git a/src/langserver/main.rs b/src/langserver/main.rs index 0c09e7a5..377cb11e 100644 --- a/src/langserver/main.rs +++ b/src/langserver/main.rs @@ -317,7 +317,8 @@ impl<'a> Engine<'a> { fn parse_environment(&mut self, environment: PathBuf) -> Result<(), jsonrpc::Error> { // handle the parsing - let start = std::time::Instant::now(); + let original_start = std::time::Instant::now(); + let mut start = original_start; eprintln!("environment: {}", environment.display()); if let Some(stem) = environment.file_stem() { self.issue_notification::(extras::WindowStatusParams { @@ -348,24 +349,34 @@ impl<'a> Engine<'a> { } }; + let elapsed = start.elapsed(); start += elapsed; + eprint!("setup {}.{:03}s", elapsed.as_secs(), elapsed.subsec_millis()); + { let mut parser = dm::parser::Parser::new(ctx, dm::indents::IndentProcessor::new(ctx, &mut pp)); parser.enable_procs(); self.objtree = Arc::new(parser.parse_object_tree()); } - self.update_objtree(); + let elapsed = start.elapsed(); start += elapsed; + eprint!(" - parse {}.{:03}s", elapsed.as_secs(), elapsed.subsec_millis()); + + if self.client_caps.object_tree { + self.update_objtree(); + let elapsed = start.elapsed(); start += elapsed; + eprint!(" - object tree {}.{:03}s", elapsed.as_secs(), elapsed.subsec_millis()); + } + self.references_table = Some(find_references::ReferencesTable::new(&self.objtree)); + let elapsed = start.elapsed(); start += elapsed; + eprint!(" - references {}.{:03}s", elapsed.as_secs(), elapsed.subsec_millis()); + if ctx.config().langserver.dreamchecker { dreamchecker::run(&self.context, &self.objtree); + let elapsed = start.elapsed(); start += elapsed; + eprint!(" - dreamchecker {}.{:03}s", elapsed.as_secs(), elapsed.subsec_millis()); } self.defines = Some(pp.finalize()); self.issue_notification::(Default::default()); - let elapsed = start.elapsed(); - eprintln!( - "parsed in {}.{:03}s", - elapsed.as_secs(), - elapsed.subsec_millis() - ); // initial diagnostics pump let mut map: HashMap<_, Vec<_>> = HashMap::new(); @@ -440,10 +451,16 @@ impl<'a> Engine<'a> { ); } + let elapsed = start.elapsed(); start += elapsed; + eprint!(" - diagnostics {}.{:03}s", elapsed.as_secs(), elapsed.subsec_millis()); + /*if let Some(objtree) = Arc::get_mut(&mut self.objtree) { objtree.drop_code(); }*/ + let elapsed = original_start.elapsed(); + eprintln!(" - total {}.{:03}s", elapsed.as_secs(), elapsed.subsec_millis()); + Ok(()) } @@ -929,9 +946,10 @@ handle_method_call! { let path = format!("{}/", url.path()); url.set_path(&path); } + eprintln!("workspace root: {}", url); self.root = Some(url); } else { - eprintln!("preparing single file mode"); + eprintln!("single file mode"); } // Extract relevant client capabilities. @@ -942,6 +960,7 @@ handle_method_call! { } else { eprintln!("client capabilities: {}", debug); } + eprintln!(); InitializeResult { capabilities: ServerCapabilities { @@ -1751,10 +1770,6 @@ handle_notification! { // ------------------------------------------------------------------------ // basic setup on Initialized(&mut self, _) { - if let Some(ref root) = self.root { - eprintln!("workspace root: {}", root); - } - let mut environment = None; if let Some(ref root) = self.root { // TODO: support non-files here @@ -1773,6 +1788,7 @@ handle_notification! { } on Reparse(&mut self, _p) { + eprintln!(); eprintln!("reparsing by request..."); self.context.errors_mut().clear(); return self.Initialized(_p);