From 474d384f3b2f12b8deec46e62bdb88c11335b1be Mon Sep 17 00:00:00 2001 From: JoshuaBatty Date: Mon, 8 Jul 2024 09:51:55 +1000 Subject: [PATCH 1/5] add tracing_info! macro to functions we want to track in the server --- sway-lsp/src/capabilities/code_lens.rs | 1 + sway-lsp/src/capabilities/formatting.rs | 1 + sway-lsp/src/capabilities/highlight.rs | 1 + sway-lsp/src/capabilities/inlay_hints.rs | 1 + sway-lsp/src/capabilities/rename.rs | 1 + sway-lsp/src/capabilities/semantic_tokens.rs | 1 + sway-lsp/src/core/session.rs | 10 ++++++++++ sway-lsp/src/server_state.rs | 1 + 8 files changed, 17 insertions(+) diff --git a/sway-lsp/src/capabilities/code_lens.rs b/sway-lsp/src/capabilities/code_lens.rs index d4c92c52648..f8a81e3476c 100644 --- a/sway-lsp/src/capabilities/code_lens.rs +++ b/sway-lsp/src/capabilities/code_lens.rs @@ -5,6 +5,7 @@ use lsp_types::{CodeLens, Url}; use crate::core::session::Session; pub fn code_lens(session: &Arc, url: &Url) -> Vec { + let _p = tracing::trace_span!("code_lens").entered(); let url_path = PathBuf::from(url.path()); // Construct code lenses for runnable functions diff --git a/sway-lsp/src/capabilities/formatting.rs b/sway-lsp/src/capabilities/formatting.rs index 9214da23ae3..e4b1596991b 100644 --- a/sway-lsp/src/capabilities/formatting.rs +++ b/sway-lsp/src/capabilities/formatting.rs @@ -7,6 +7,7 @@ use std::sync::Arc; use swayfmt::Formatter; pub fn format_text(documents: &Documents, url: &Url) -> Result, LanguageServerError> { + let _p = tracing::trace_span!("format_text").entered(); let document = documents.try_get(url.path()).try_unwrap().ok_or_else(|| { DocumentError::DocumentNotFound { path: url.path().to_string(), diff --git a/sway-lsp/src/capabilities/highlight.rs b/sway-lsp/src/capabilities/highlight.rs index f6eef7f4fb3..7236bb8a7e7 100644 --- a/sway-lsp/src/capabilities/highlight.rs +++ b/sway-lsp/src/capabilities/highlight.rs @@ -7,6 +7,7 @@ pub fn get_highlights( url: &Url, position: Position, ) -> Option> { + let _p = tracing::trace_span!("get_highlights").entered(); session.token_ranges(url, position).map(|ranges| { ranges .into_iter() diff --git a/sway-lsp/src/capabilities/inlay_hints.rs b/sway-lsp/src/capabilities/inlay_hints.rs index b95f3455312..f6bdb95a128 100644 --- a/sway-lsp/src/capabilities/inlay_hints.rs +++ b/sway-lsp/src/capabilities/inlay_hints.rs @@ -29,6 +29,7 @@ pub fn inlay_hints( range: &Range, config: &InlayHintsConfig, ) -> Option> { + let _p = tracing::trace_span!("inlay_hints").entered(); // 1. Loop through all our tokens and filter out all tokens that aren't TypedVariableDeclaration tokens // 2. Also filter out all tokens that have a span that fall outside of the provided range // 3. Filter out all variable tokens that have a type_ascription diff --git a/sway-lsp/src/capabilities/rename.rs b/sway-lsp/src/capabilities/rename.rs index a0eb011c948..e9bba4d8eac 100644 --- a/sway-lsp/src/capabilities/rename.rs +++ b/sway-lsp/src/capabilities/rename.rs @@ -20,6 +20,7 @@ pub fn rename( url: &Url, position: Position, ) -> Result { + let _p = tracing::trace_span!("rename").entered(); // Make sure the new name is not a keyword or a literal int type if sway_parse::RESERVED_KEYWORDS.contains(&new_name) || sway_parse::parse_int_suffix(&new_name).is_some() diff --git a/sway-lsp/src/capabilities/semantic_tokens.rs b/sway-lsp/src/capabilities/semantic_tokens.rs index 05cd9e41474..30b2fc16564 100644 --- a/sway-lsp/src/capabilities/semantic_tokens.rs +++ b/sway-lsp/src/capabilities/semantic_tokens.rs @@ -27,6 +27,7 @@ pub fn semantic_tokens_range( url: &Url, range: &Range, ) -> Option { + let _p = tracing::trace_span!("semantic_tokens_range").entered(); let tokens: Vec<_> = session .token_map() .tokens_for_file(url) diff --git a/sway-lsp/src/core/session.rs b/sway-lsp/src/core/session.rs index 749168d1538..e0fe109c43a 100644 --- a/sway-lsp/src/core/session.rs +++ b/sway-lsp/src/core/session.rs @@ -122,6 +122,7 @@ impl Session { /// Clean up memory in the [TypeEngine] and [DeclEngine] for the user's workspace. pub fn garbage_collect(&self, engines: &mut Engines) -> Result<(), LanguageServerError> { + let _p = tracing::trace_span!("garbage_collect").entered(); let path = self.sync.temp_dir()?; let program_id = { engines.se().get_program_id(&path) }; if let Some(program_id) = program_id { @@ -131,6 +132,7 @@ impl Session { } pub fn token_ranges(&self, url: &Url, position: Position) -> Option> { + let _p = tracing::trace_span!("token_ranges").entered(); let mut token_ranges: Vec<_> = self .token_map .tokens_for_file(url) @@ -150,6 +152,7 @@ impl Session { uri: &Url, position: Position, ) -> Option { + let _p = tracing::trace_span!("token_definition_response").entered(); self.token_map .token_at_position(uri, position) .and_then(|item| item.value().declared_token_ident(&self.engines.read())) @@ -171,6 +174,7 @@ impl Session { position: Position, trigger_char: &str, ) -> Option> { + let _p = tracing::trace_span!("completion_items").entered(); let shifted_position = Position { line: position.line, character: position.character - trigger_char.len() as u32 - 1, @@ -205,6 +209,7 @@ impl Session { } pub fn symbol_information(&self, url: &Url) -> Option> { + let _p = tracing::trace_span!("symbol_information").entered(); let tokens = self.token_map.tokens_for_file(url); self.sync .to_workspace_url(url.clone()) @@ -224,6 +229,7 @@ impl Session { /// Create a [BuildPlan] from the given [Url] appropriate for the language server. pub(crate) fn build_plan(uri: &Url) -> Result { + let _p = tracing::trace_span!("build_plan").entered(); let manifest_dir = PathBuf::from(uri.path()); let manifest = ManifestFile::from_dir(manifest_dir).map_err(|_| DocumentError::ManifestFileNotFound { @@ -254,6 +260,7 @@ pub fn compile( lsp_mode: Option, experimental: sway_core::ExperimentalFlags, ) -> Result, Handler)>, LanguageServerError> { + let _p = tracing::trace_span!("compile").entered(); let build_plan = build_plan(uri)?; let tests_enabled = true; pkg::check( @@ -276,6 +283,7 @@ pub fn traverse( engines_clone: &Engines, session: Arc, ) -> Result, LanguageServerError> { + let _p = tracing::trace_span!("traverse").entered(); session.token_map.clear(); session.metrics.clear(); let mut diagnostics: CompileResults = (Vec::default(), Vec::default()); @@ -373,6 +381,7 @@ pub fn parse_project( session: Arc, experimental: sway_core::ExperimentalFlags, ) -> Result<(), LanguageServerError> { + let _p = tracing::trace_span!("parse_project").entered(); let results = compile( uri, engines, @@ -448,6 +457,7 @@ fn create_runnables( decl_engine: &DeclEngine, source_engine: &SourceEngine, ) { + let _p = tracing::trace_span!("create_runnables").entered(); // Insert runnable test functions. for (decl, _) in typed_program.test_fns(decl_engine) { // Get the span of the first attribute if it exists, otherwise use the span of the function name. diff --git a/sway-lsp/src/server_state.rs b/sway-lsp/src/server_state.rs index 4415f0b2d91..29c80efdac4 100644 --- a/sway-lsp/src/server_state.rs +++ b/sway-lsp/src/server_state.rs @@ -257,6 +257,7 @@ impl ServerState { } pub fn shutdown_server(&self) -> jsonrpc::Result<()> { + let _p = tracing::trace_span!("shutdown_server").entered(); tracing::info!("Shutting Down the Sway Language Server"); // Drain pending compilation requests From f63388aaf20cd1aee1c963517cca895c9bb58de7 Mon Sep 17 00:00:00 2001 From: JoshuaBatty Date: Mon, 8 Jul 2024 15:01:06 +1000 Subject: [PATCH 2/5] tracing wip --- forc-tracing/src/lib.rs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/forc-tracing/src/lib.rs b/forc-tracing/src/lib.rs index 0141aa7bf64..af8896a9082 100644 --- a/forc-tracing/src/lib.rs +++ b/forc-tracing/src/lib.rs @@ -4,9 +4,9 @@ use ansi_term::Colour; use std::str; use std::{env, io}; use tracing::{Level, Metadata}; -use tracing_subscriber::{ +pub use tracing_subscriber::{ filter::{EnvFilter, LevelFilter}, - fmt::MakeWriter, + fmt::{MakeWriter, format::FmtSpan}, }; const ACTION_COLUMN_WIDTH: usize = 12; @@ -132,6 +132,7 @@ pub struct TracingSubscriberOptions { pub silent: Option, pub log_level: Option, pub writer_mode: Option, + pub format_span: Option, } /// A subscriber built from default `tracing_subscriber::fmt::SubscriberBuilder` such that it would match directly using `println!` throughout the repo. @@ -142,7 +143,7 @@ pub fn init_tracing_subscriber(options: TracingSubscriberOptions) { Some(_) => EnvFilter::try_from_default_env().expect("Invalid `RUST_LOG` provided"), None => EnvFilter::new("info"), }; - + let fmt_span_kind = options.format_span.unwrap_or(FmtSpan::NONE); let level_filter = options .log_level .or_else(|| { @@ -162,11 +163,13 @@ pub fn init_tracing_subscriber(options: TracingSubscriberOptions) { let builder = tracing_subscriber::fmt::Subscriber::builder() .with_env_filter(env_filter) - .with_ansi(true) + // .with_ansi(true) + .with_ansi(false) .with_level(false) + .with_span_events(fmt_span_kind) .with_file(false) .with_line_number(false) - .without_time() + // .without_time() .with_target(false) .with_writer(StdioTracingWriter { writer_mode: options.writer_mode.unwrap_or(TracingWriterMode::Stdio), From 9e7c84efde42c3bfd8af64dc3a34c98d5988371a Mon Sep 17 00:00:00 2001 From: JoshuaBatty Date: Mon, 8 Jul 2024 15:01:32 +1000 Subject: [PATCH 3/5] change to tracing::debug_span --- sway-lsp/src/capabilities/code_lens.rs | 2 +- sway-lsp/src/capabilities/formatting.rs | 2 +- sway-lsp/src/capabilities/highlight.rs | 2 +- sway-lsp/src/capabilities/inlay_hints.rs | 2 +- sway-lsp/src/capabilities/rename.rs | 2 +- sway-lsp/src/capabilities/semantic_tokens.rs | 2 +- sway-lsp/src/core/session.rs | 20 ++++++++++---------- sway-lsp/src/handlers/request.rs | 3 ++- sway-lsp/src/server.rs | 1 + sway-lsp/src/server_state.rs | 2 +- 10 files changed, 20 insertions(+), 18 deletions(-) diff --git a/sway-lsp/src/capabilities/code_lens.rs b/sway-lsp/src/capabilities/code_lens.rs index f8a81e3476c..0ea12be9d9e 100644 --- a/sway-lsp/src/capabilities/code_lens.rs +++ b/sway-lsp/src/capabilities/code_lens.rs @@ -5,7 +5,7 @@ use lsp_types::{CodeLens, Url}; use crate::core::session::Session; pub fn code_lens(session: &Arc, url: &Url) -> Vec { - let _p = tracing::trace_span!("code_lens").entered(); + let _p = tracing::debug_span!("code_lens").entered(); let url_path = PathBuf::from(url.path()); // Construct code lenses for runnable functions diff --git a/sway-lsp/src/capabilities/formatting.rs b/sway-lsp/src/capabilities/formatting.rs index e4b1596991b..ad77257ff00 100644 --- a/sway-lsp/src/capabilities/formatting.rs +++ b/sway-lsp/src/capabilities/formatting.rs @@ -7,7 +7,7 @@ use std::sync::Arc; use swayfmt::Formatter; pub fn format_text(documents: &Documents, url: &Url) -> Result, LanguageServerError> { - let _p = tracing::trace_span!("format_text").entered(); + let _p = tracing::debug_span!("format_text").entered(); let document = documents.try_get(url.path()).try_unwrap().ok_or_else(|| { DocumentError::DocumentNotFound { path: url.path().to_string(), diff --git a/sway-lsp/src/capabilities/highlight.rs b/sway-lsp/src/capabilities/highlight.rs index 7236bb8a7e7..48845233eba 100644 --- a/sway-lsp/src/capabilities/highlight.rs +++ b/sway-lsp/src/capabilities/highlight.rs @@ -7,7 +7,7 @@ pub fn get_highlights( url: &Url, position: Position, ) -> Option> { - let _p = tracing::trace_span!("get_highlights").entered(); + let _p = tracing::debug_span!("get_highlights").entered(); session.token_ranges(url, position).map(|ranges| { ranges .into_iter() diff --git a/sway-lsp/src/capabilities/inlay_hints.rs b/sway-lsp/src/capabilities/inlay_hints.rs index f6bdb95a128..284b840e12d 100644 --- a/sway-lsp/src/capabilities/inlay_hints.rs +++ b/sway-lsp/src/capabilities/inlay_hints.rs @@ -29,7 +29,7 @@ pub fn inlay_hints( range: &Range, config: &InlayHintsConfig, ) -> Option> { - let _p = tracing::trace_span!("inlay_hints").entered(); + let _p = tracing::debug_span!("inlay_hints").entered(); // 1. Loop through all our tokens and filter out all tokens that aren't TypedVariableDeclaration tokens // 2. Also filter out all tokens that have a span that fall outside of the provided range // 3. Filter out all variable tokens that have a type_ascription diff --git a/sway-lsp/src/capabilities/rename.rs b/sway-lsp/src/capabilities/rename.rs index e9bba4d8eac..83130dc2fec 100644 --- a/sway-lsp/src/capabilities/rename.rs +++ b/sway-lsp/src/capabilities/rename.rs @@ -20,7 +20,7 @@ pub fn rename( url: &Url, position: Position, ) -> Result { - let _p = tracing::trace_span!("rename").entered(); + let _p = tracing::debug_span!("rename").entered(); // Make sure the new name is not a keyword or a literal int type if sway_parse::RESERVED_KEYWORDS.contains(&new_name) || sway_parse::parse_int_suffix(&new_name).is_some() diff --git a/sway-lsp/src/capabilities/semantic_tokens.rs b/sway-lsp/src/capabilities/semantic_tokens.rs index 30b2fc16564..e71af77bb84 100644 --- a/sway-lsp/src/capabilities/semantic_tokens.rs +++ b/sway-lsp/src/capabilities/semantic_tokens.rs @@ -27,7 +27,7 @@ pub fn semantic_tokens_range( url: &Url, range: &Range, ) -> Option { - let _p = tracing::trace_span!("semantic_tokens_range").entered(); + let _p = tracing::debug_span!("semantic_tokens_range").entered(); let tokens: Vec<_> = session .token_map() .tokens_for_file(url) diff --git a/sway-lsp/src/core/session.rs b/sway-lsp/src/core/session.rs index e0fe109c43a..2f57d57c3b5 100644 --- a/sway-lsp/src/core/session.rs +++ b/sway-lsp/src/core/session.rs @@ -122,7 +122,7 @@ impl Session { /// Clean up memory in the [TypeEngine] and [DeclEngine] for the user's workspace. pub fn garbage_collect(&self, engines: &mut Engines) -> Result<(), LanguageServerError> { - let _p = tracing::trace_span!("garbage_collect").entered(); + let _p = tracing::debug_span!("garbage_collect").entered(); let path = self.sync.temp_dir()?; let program_id = { engines.se().get_program_id(&path) }; if let Some(program_id) = program_id { @@ -132,7 +132,7 @@ impl Session { } pub fn token_ranges(&self, url: &Url, position: Position) -> Option> { - let _p = tracing::trace_span!("token_ranges").entered(); + let _p = tracing::debug_span!("token_ranges").entered(); let mut token_ranges: Vec<_> = self .token_map .tokens_for_file(url) @@ -152,7 +152,7 @@ impl Session { uri: &Url, position: Position, ) -> Option { - let _p = tracing::trace_span!("token_definition_response").entered(); + let _p = tracing::debug_span!("token_definition_response").entered(); self.token_map .token_at_position(uri, position) .and_then(|item| item.value().declared_token_ident(&self.engines.read())) @@ -174,7 +174,7 @@ impl Session { position: Position, trigger_char: &str, ) -> Option> { - let _p = tracing::trace_span!("completion_items").entered(); + let _p = tracing::debug_span!("completion_items").entered(); let shifted_position = Position { line: position.line, character: position.character - trigger_char.len() as u32 - 1, @@ -209,7 +209,7 @@ impl Session { } pub fn symbol_information(&self, url: &Url) -> Option> { - let _p = tracing::trace_span!("symbol_information").entered(); + let _p = tracing::debug_span!("symbol_information").entered(); let tokens = self.token_map.tokens_for_file(url); self.sync .to_workspace_url(url.clone()) @@ -229,7 +229,7 @@ impl Session { /// Create a [BuildPlan] from the given [Url] appropriate for the language server. pub(crate) fn build_plan(uri: &Url) -> Result { - let _p = tracing::trace_span!("build_plan").entered(); + let _p = tracing::debug_span!("build_plan").entered(); let manifest_dir = PathBuf::from(uri.path()); let manifest = ManifestFile::from_dir(manifest_dir).map_err(|_| DocumentError::ManifestFileNotFound { @@ -260,7 +260,7 @@ pub fn compile( lsp_mode: Option, experimental: sway_core::ExperimentalFlags, ) -> Result, Handler)>, LanguageServerError> { - let _p = tracing::trace_span!("compile").entered(); + let _p = tracing::debug_span!("compile").entered(); let build_plan = build_plan(uri)?; let tests_enabled = true; pkg::check( @@ -283,7 +283,7 @@ pub fn traverse( engines_clone: &Engines, session: Arc, ) -> Result, LanguageServerError> { - let _p = tracing::trace_span!("traverse").entered(); + let _p = tracing::debug_span!("traverse").entered(); session.token_map.clear(); session.metrics.clear(); let mut diagnostics: CompileResults = (Vec::default(), Vec::default()); @@ -381,7 +381,7 @@ pub fn parse_project( session: Arc, experimental: sway_core::ExperimentalFlags, ) -> Result<(), LanguageServerError> { - let _p = tracing::trace_span!("parse_project").entered(); + let _p = tracing::debug_span!("parse_project").entered(); let results = compile( uri, engines, @@ -457,7 +457,7 @@ fn create_runnables( decl_engine: &DeclEngine, source_engine: &SourceEngine, ) { - let _p = tracing::trace_span!("create_runnables").entered(); + let _p = tracing::debug_span!("create_runnables").entered(); // Insert runnable test functions. for (decl, _) in typed_program.test_fns(decl_engine) { // Get the span of the first attribute if it exists, otherwise use the span of the function name. diff --git a/sway-lsp/src/handlers/request.rs b/sway-lsp/src/handlers/request.rs index dd94d823959..9043db18d68 100644 --- a/sway-lsp/src/handlers/request.rs +++ b/sway-lsp/src/handlers/request.rs @@ -4,7 +4,7 @@ use crate::{ capabilities, core::session::build_plan, lsp_ext, server_state::ServerState, utils::debug, }; -use forc_tracing::{init_tracing_subscriber, TracingSubscriberOptions, TracingWriterMode}; +use forc_tracing::{init_tracing_subscriber, TracingSubscriberOptions, TracingWriterMode, FmtSpan}; use lsp_types::{ CodeLens, CompletionResponse, DocumentFormattingParams, DocumentSymbolResponse, InitializeResult, InlayHint, InlayHintParams, PrepareRenameResponse, RenameParams, @@ -43,6 +43,7 @@ pub fn handle_initialize( let tracing_options = TracingSubscriberOptions { log_level: Some(config.logging.level), writer_mode: Some(TracingWriterMode::Stderr), + format_span: Some(FmtSpan::CLOSE), ..Default::default() }; init_tracing_subscriber(tracing_options); diff --git a/sway-lsp/src/server.rs b/sway-lsp/src/server.rs index 9f044e64b89..2357b2e9daa 100644 --- a/sway-lsp/src/server.rs +++ b/sway-lsp/src/server.rs @@ -28,6 +28,7 @@ impl LanguageServer for ServerState { } async fn initialized(&self, _: InitializedParams) { + let _p = tracing::debug_span!("parse_text").entered(); tracing::info!("Sway Language Server Initialized"); } diff --git a/sway-lsp/src/server_state.rs b/sway-lsp/src/server_state.rs index 29c80efdac4..c5adb4dc432 100644 --- a/sway-lsp/src/server_state.rs +++ b/sway-lsp/src/server_state.rs @@ -257,7 +257,7 @@ impl ServerState { } pub fn shutdown_server(&self) -> jsonrpc::Result<()> { - let _p = tracing::trace_span!("shutdown_server").entered(); + let _p = tracing::debug_span!("shutdown_server").entered(); tracing::info!("Shutting Down the Sway Language Server"); // Drain pending compilation requests From 9215b585ecbc53a6ce5abb2ee5e117b1ae744488 Mon Sep 17 00:00:00 2001 From: JoshuaBatty Date: Tue, 9 Jul 2024 11:18:20 +1000 Subject: [PATCH 4/5] rebase From 4461ad39e777cf7891678e31088dc34f98216dbb Mon Sep 17 00:00:00 2001 From: JoshuaBatty Date: Tue, 9 Jul 2024 12:18:58 +1000 Subject: [PATCH 5/5] using trace level --- forc-tracing/src/lib.rs | 15 ++++++--------- sway-lsp/src/capabilities/code_lens.rs | 2 +- sway-lsp/src/capabilities/formatting.rs | 2 +- sway-lsp/src/capabilities/highlight.rs | 2 +- sway-lsp/src/capabilities/inlay_hints.rs | 2 +- sway-lsp/src/capabilities/rename.rs | 2 +- sway-lsp/src/capabilities/semantic_tokens.rs | 2 +- sway-lsp/src/core/session.rs | 20 ++++++++++---------- sway-lsp/src/handlers/request.rs | 17 +++++++++-------- sway-lsp/src/server.rs | 2 +- sway-lsp/src/server_state.rs | 2 +- 11 files changed, 33 insertions(+), 35 deletions(-) diff --git a/forc-tracing/src/lib.rs b/forc-tracing/src/lib.rs index af8896a9082..656cb14ca14 100644 --- a/forc-tracing/src/lib.rs +++ b/forc-tracing/src/lib.rs @@ -5,8 +5,9 @@ use std::str; use std::{env, io}; use tracing::{Level, Metadata}; pub use tracing_subscriber::{ + self, filter::{EnvFilter, LevelFilter}, - fmt::{MakeWriter, format::FmtSpan}, + fmt::{format::FmtSpan, MakeWriter}, }; const ACTION_COLUMN_WIDTH: usize = 12; @@ -83,8 +84,8 @@ const LOG_FILTER: &str = "RUST_LOG"; // This allows us to write ERROR and WARN level logs to stderr and everything else to stdout. // https://docs.rs/tracing-subscriber/latest/tracing_subscriber/fmt/trait.MakeWriter.html -struct StdioTracingWriter { - writer_mode: TracingWriterMode, +pub struct StdioTracingWriter { + pub writer_mode: TracingWriterMode, } impl<'a> MakeWriter<'a> for StdioTracingWriter { @@ -132,7 +133,6 @@ pub struct TracingSubscriberOptions { pub silent: Option, pub log_level: Option, pub writer_mode: Option, - pub format_span: Option, } /// A subscriber built from default `tracing_subscriber::fmt::SubscriberBuilder` such that it would match directly using `println!` throughout the repo. @@ -143,7 +143,6 @@ pub fn init_tracing_subscriber(options: TracingSubscriberOptions) { Some(_) => EnvFilter::try_from_default_env().expect("Invalid `RUST_LOG` provided"), None => EnvFilter::new("info"), }; - let fmt_span_kind = options.format_span.unwrap_or(FmtSpan::NONE); let level_filter = options .log_level .or_else(|| { @@ -163,13 +162,11 @@ pub fn init_tracing_subscriber(options: TracingSubscriberOptions) { let builder = tracing_subscriber::fmt::Subscriber::builder() .with_env_filter(env_filter) - // .with_ansi(true) - .with_ansi(false) + .with_ansi(true) .with_level(false) - .with_span_events(fmt_span_kind) .with_file(false) .with_line_number(false) - // .without_time() + .without_time() .with_target(false) .with_writer(StdioTracingWriter { writer_mode: options.writer_mode.unwrap_or(TracingWriterMode::Stdio), diff --git a/sway-lsp/src/capabilities/code_lens.rs b/sway-lsp/src/capabilities/code_lens.rs index 0ea12be9d9e..f8a81e3476c 100644 --- a/sway-lsp/src/capabilities/code_lens.rs +++ b/sway-lsp/src/capabilities/code_lens.rs @@ -5,7 +5,7 @@ use lsp_types::{CodeLens, Url}; use crate::core::session::Session; pub fn code_lens(session: &Arc, url: &Url) -> Vec { - let _p = tracing::debug_span!("code_lens").entered(); + let _p = tracing::trace_span!("code_lens").entered(); let url_path = PathBuf::from(url.path()); // Construct code lenses for runnable functions diff --git a/sway-lsp/src/capabilities/formatting.rs b/sway-lsp/src/capabilities/formatting.rs index ad77257ff00..e4b1596991b 100644 --- a/sway-lsp/src/capabilities/formatting.rs +++ b/sway-lsp/src/capabilities/formatting.rs @@ -7,7 +7,7 @@ use std::sync::Arc; use swayfmt::Formatter; pub fn format_text(documents: &Documents, url: &Url) -> Result, LanguageServerError> { - let _p = tracing::debug_span!("format_text").entered(); + let _p = tracing::trace_span!("format_text").entered(); let document = documents.try_get(url.path()).try_unwrap().ok_or_else(|| { DocumentError::DocumentNotFound { path: url.path().to_string(), diff --git a/sway-lsp/src/capabilities/highlight.rs b/sway-lsp/src/capabilities/highlight.rs index 48845233eba..7236bb8a7e7 100644 --- a/sway-lsp/src/capabilities/highlight.rs +++ b/sway-lsp/src/capabilities/highlight.rs @@ -7,7 +7,7 @@ pub fn get_highlights( url: &Url, position: Position, ) -> Option> { - let _p = tracing::debug_span!("get_highlights").entered(); + let _p = tracing::trace_span!("get_highlights").entered(); session.token_ranges(url, position).map(|ranges| { ranges .into_iter() diff --git a/sway-lsp/src/capabilities/inlay_hints.rs b/sway-lsp/src/capabilities/inlay_hints.rs index 284b840e12d..f6bdb95a128 100644 --- a/sway-lsp/src/capabilities/inlay_hints.rs +++ b/sway-lsp/src/capabilities/inlay_hints.rs @@ -29,7 +29,7 @@ pub fn inlay_hints( range: &Range, config: &InlayHintsConfig, ) -> Option> { - let _p = tracing::debug_span!("inlay_hints").entered(); + let _p = tracing::trace_span!("inlay_hints").entered(); // 1. Loop through all our tokens and filter out all tokens that aren't TypedVariableDeclaration tokens // 2. Also filter out all tokens that have a span that fall outside of the provided range // 3. Filter out all variable tokens that have a type_ascription diff --git a/sway-lsp/src/capabilities/rename.rs b/sway-lsp/src/capabilities/rename.rs index 83130dc2fec..e9bba4d8eac 100644 --- a/sway-lsp/src/capabilities/rename.rs +++ b/sway-lsp/src/capabilities/rename.rs @@ -20,7 +20,7 @@ pub fn rename( url: &Url, position: Position, ) -> Result { - let _p = tracing::debug_span!("rename").entered(); + let _p = tracing::trace_span!("rename").entered(); // Make sure the new name is not a keyword or a literal int type if sway_parse::RESERVED_KEYWORDS.contains(&new_name) || sway_parse::parse_int_suffix(&new_name).is_some() diff --git a/sway-lsp/src/capabilities/semantic_tokens.rs b/sway-lsp/src/capabilities/semantic_tokens.rs index e71af77bb84..30b2fc16564 100644 --- a/sway-lsp/src/capabilities/semantic_tokens.rs +++ b/sway-lsp/src/capabilities/semantic_tokens.rs @@ -27,7 +27,7 @@ pub fn semantic_tokens_range( url: &Url, range: &Range, ) -> Option { - let _p = tracing::debug_span!("semantic_tokens_range").entered(); + let _p = tracing::trace_span!("semantic_tokens_range").entered(); let tokens: Vec<_> = session .token_map() .tokens_for_file(url) diff --git a/sway-lsp/src/core/session.rs b/sway-lsp/src/core/session.rs index 2f57d57c3b5..e0fe109c43a 100644 --- a/sway-lsp/src/core/session.rs +++ b/sway-lsp/src/core/session.rs @@ -122,7 +122,7 @@ impl Session { /// Clean up memory in the [TypeEngine] and [DeclEngine] for the user's workspace. pub fn garbage_collect(&self, engines: &mut Engines) -> Result<(), LanguageServerError> { - let _p = tracing::debug_span!("garbage_collect").entered(); + let _p = tracing::trace_span!("garbage_collect").entered(); let path = self.sync.temp_dir()?; let program_id = { engines.se().get_program_id(&path) }; if let Some(program_id) = program_id { @@ -132,7 +132,7 @@ impl Session { } pub fn token_ranges(&self, url: &Url, position: Position) -> Option> { - let _p = tracing::debug_span!("token_ranges").entered(); + let _p = tracing::trace_span!("token_ranges").entered(); let mut token_ranges: Vec<_> = self .token_map .tokens_for_file(url) @@ -152,7 +152,7 @@ impl Session { uri: &Url, position: Position, ) -> Option { - let _p = tracing::debug_span!("token_definition_response").entered(); + let _p = tracing::trace_span!("token_definition_response").entered(); self.token_map .token_at_position(uri, position) .and_then(|item| item.value().declared_token_ident(&self.engines.read())) @@ -174,7 +174,7 @@ impl Session { position: Position, trigger_char: &str, ) -> Option> { - let _p = tracing::debug_span!("completion_items").entered(); + let _p = tracing::trace_span!("completion_items").entered(); let shifted_position = Position { line: position.line, character: position.character - trigger_char.len() as u32 - 1, @@ -209,7 +209,7 @@ impl Session { } pub fn symbol_information(&self, url: &Url) -> Option> { - let _p = tracing::debug_span!("symbol_information").entered(); + let _p = tracing::trace_span!("symbol_information").entered(); let tokens = self.token_map.tokens_for_file(url); self.sync .to_workspace_url(url.clone()) @@ -229,7 +229,7 @@ impl Session { /// Create a [BuildPlan] from the given [Url] appropriate for the language server. pub(crate) fn build_plan(uri: &Url) -> Result { - let _p = tracing::debug_span!("build_plan").entered(); + let _p = tracing::trace_span!("build_plan").entered(); let manifest_dir = PathBuf::from(uri.path()); let manifest = ManifestFile::from_dir(manifest_dir).map_err(|_| DocumentError::ManifestFileNotFound { @@ -260,7 +260,7 @@ pub fn compile( lsp_mode: Option, experimental: sway_core::ExperimentalFlags, ) -> Result, Handler)>, LanguageServerError> { - let _p = tracing::debug_span!("compile").entered(); + let _p = tracing::trace_span!("compile").entered(); let build_plan = build_plan(uri)?; let tests_enabled = true; pkg::check( @@ -283,7 +283,7 @@ pub fn traverse( engines_clone: &Engines, session: Arc, ) -> Result, LanguageServerError> { - let _p = tracing::debug_span!("traverse").entered(); + let _p = tracing::trace_span!("traverse").entered(); session.token_map.clear(); session.metrics.clear(); let mut diagnostics: CompileResults = (Vec::default(), Vec::default()); @@ -381,7 +381,7 @@ pub fn parse_project( session: Arc, experimental: sway_core::ExperimentalFlags, ) -> Result<(), LanguageServerError> { - let _p = tracing::debug_span!("parse_project").entered(); + let _p = tracing::trace_span!("parse_project").entered(); let results = compile( uri, engines, @@ -457,7 +457,7 @@ fn create_runnables( decl_engine: &DeclEngine, source_engine: &SourceEngine, ) { - let _p = tracing::debug_span!("create_runnables").entered(); + let _p = tracing::trace_span!("create_runnables").entered(); // Insert runnable test functions. for (decl, _) in typed_program.test_fns(decl_engine) { // Get the span of the first attribute if it exists, otherwise use the span of the function name. diff --git a/sway-lsp/src/handlers/request.rs b/sway-lsp/src/handlers/request.rs index 9043db18d68..f4b821fb599 100644 --- a/sway-lsp/src/handlers/request.rs +++ b/sway-lsp/src/handlers/request.rs @@ -4,7 +4,7 @@ use crate::{ capabilities, core::session::build_plan, lsp_ext, server_state::ServerState, utils::debug, }; -use forc_tracing::{init_tracing_subscriber, TracingSubscriberOptions, TracingWriterMode, FmtSpan}; +use forc_tracing::{tracing_subscriber, FmtSpan, StdioTracingWriter, TracingWriterMode}; use lsp_types::{ CodeLens, CompletionResponse, DocumentFormattingParams, DocumentSymbolResponse, InitializeResult, InlayHint, InlayHintParams, PrepareRenameResponse, RenameParams, @@ -40,13 +40,14 @@ pub fn handle_initialize( // Initializing tracing library based on the user's config let config = state.config.read(); if config.logging.level != LevelFilter::OFF { - let tracing_options = TracingSubscriberOptions { - log_level: Some(config.logging.level), - writer_mode: Some(TracingWriterMode::Stderr), - format_span: Some(FmtSpan::CLOSE), - ..Default::default() - }; - init_tracing_subscriber(tracing_options); + tracing_subscriber::fmt::Subscriber::builder() + .with_ansi(false) + .with_max_level(config.logging.level) + .with_span_events(FmtSpan::CLOSE) + .with_writer(StdioTracingWriter { + writer_mode: TracingWriterMode::Stderr, + }) + .init(); } tracing::info!("Initializing the Sway Language Server"); Ok(InitializeResult { diff --git a/sway-lsp/src/server.rs b/sway-lsp/src/server.rs index 2357b2e9daa..34314c89381 100644 --- a/sway-lsp/src/server.rs +++ b/sway-lsp/src/server.rs @@ -28,7 +28,7 @@ impl LanguageServer for ServerState { } async fn initialized(&self, _: InitializedParams) { - let _p = tracing::debug_span!("parse_text").entered(); + let _p = tracing::trace_span!("parse_text").entered(); tracing::info!("Sway Language Server Initialized"); } diff --git a/sway-lsp/src/server_state.rs b/sway-lsp/src/server_state.rs index c5adb4dc432..29c80efdac4 100644 --- a/sway-lsp/src/server_state.rs +++ b/sway-lsp/src/server_state.rs @@ -257,7 +257,7 @@ impl ServerState { } pub fn shutdown_server(&self) -> jsonrpc::Result<()> { - let _p = tracing::debug_span!("shutdown_server").entered(); + let _p = tracing::trace_span!("shutdown_server").entered(); tracing::info!("Shutting Down the Sway Language Server"); // Drain pending compilation requests