diff options
author | Kitson Kelly <me@kitsonkelly.com> | 2021-06-02 20:29:58 +1000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-02 20:29:58 +1000 |
commit | 473713c6210ee11f11b7ae4c83165c4f87ff2d77 (patch) | |
tree | 34d361841ded4b8f0e089615b4afa7a40e37731b /cli/lsp/language_server.rs | |
parent | 9ae8dbf17334f1cf7ae09abf585d8797f374bdc4 (diff) |
fix(#10815): lsp only responds to formatting for md, json, jsonc (#10816)
Fixes #10815
Diffstat (limited to 'cli/lsp/language_server.rs')
-rw-r--r-- | cli/lsp/language_server.rs | 148 |
1 files changed, 103 insertions, 45 deletions
diff --git a/cli/lsp/language_server.rs b/cli/lsp/language_server.rs index 3a751e319..20d5c1ee7 100644 --- a/cli/lsp/language_server.rs +++ b/cli/lsp/language_server.rs @@ -42,6 +42,7 @@ use super::config::SETTINGS_SECTION; use super::diagnostics; use super::diagnostics::DiagnosticSource; use super::documents::DocumentCache; +use super::documents::LanguageId; use super::lsp_custom; use super::performance::Performance; use super::registries; @@ -59,7 +60,6 @@ use crate::config_file::TsConfig; use crate::deno_dir; use crate::import_map::ImportMap; use crate::logger; -use crate::lsp::diagnostics::is_diagnosable; use crate::media_type::MediaType; use crate::tools::fmt::format_file; use crate::tools::fmt::get_typescript_config; @@ -611,17 +611,27 @@ impl Inner { // already managed by the language service return; } + let language_id = match params.text_document.language_id.parse() { + Ok(language_id) => language_id, + Err(err) => { + error!("{}", err); + LanguageId::TypeScript + } + }; self.documents.open( specifier.clone(), params.text_document.version, + language_id, ¶ms.text_document.text, ); - self.analyze_dependencies(&specifier, ¶ms.text_document.text); - self.performance.measure(mark); - if let Err(err) = self.diagnostics_server.update() { - error!("{}", err); + if self.documents.is_diagnosable(&specifier) { + self.analyze_dependencies(&specifier, ¶ms.text_document.text); + if let Err(err) = self.diagnostics_server.update() { + error!("{}", err); + } } + self.performance.measure(mark); } async fn did_change(&mut self, params: DidChangeTextDocumentParams) { @@ -632,15 +642,18 @@ impl Inner { params.text_document.version, params.content_changes, ) { - Ok(Some(source)) => self.analyze_dependencies(&specifier, &source), + Ok(Some(source)) => { + if self.documents.is_diagnosable(&specifier) { + self.analyze_dependencies(&specifier, &source); + if let Err(err) = self.diagnostics_server.update() { + error!("{}", err); + } + } + } Ok(_) => error!("No content returned from change."), Err(err) => error!("{}", err), } self.performance.measure(mark); - - if let Err(err) = self.diagnostics_server.update() { - error!("{}", err); - } } async fn did_close(&mut self, params: DidCloseTextDocumentParams) { @@ -655,10 +668,12 @@ impl Inner { self.documents.close(&specifier); self.navigation_trees.remove(&specifier); - self.performance.measure(mark); - if let Err(err) = self.diagnostics_server.update() { - error!("{}", err); + if self.documents.is_diagnosable(&specifier) { + if let Err(err) = self.diagnostics_server.update() { + error!("{}", err); + } } + self.performance.measure(mark); } async fn did_change_configuration( @@ -751,11 +766,9 @@ impl Inner { params: DocumentSymbolParams, ) -> LspResult<Option<DocumentSymbolResponse>> { let specifier = self.url_map.normalize_url(¶ms.text_document.uri); - if !self.config.specifier_enabled(&specifier) { - return Ok(None); - } - let media_type = MediaType::from(&specifier); - if !is_diagnosable(media_type) { + if !self.documents.is_diagnosable(&specifier) + || !self.config.specifier_enabled(&specifier) + { return Ok(None); } @@ -798,8 +811,11 @@ impl Inner { &self, params: DocumentFormattingParams, ) -> LspResult<Option<Vec<TextEdit>>> { - let mark = self.performance.mark("formatting", Some(¶ms)); let specifier = self.url_map.normalize_url(¶ms.text_document.uri); + if !self.documents.is_formattable(&specifier) { + return Ok(None); + } + let mark = self.performance.mark("formatting", Some(¶ms)); let file_text = self .documents .content(&specifier) @@ -850,7 +866,9 @@ impl Inner { let specifier = self .url_map .normalize_url(¶ms.text_document_position_params.text_document.uri); - if !self.config.specifier_enabled(&specifier) { + if !self.documents.is_diagnosable(&specifier) + || !self.config.specifier_enabled(&specifier) + { return Ok(None); } let mark = self.performance.mark("hover", Some(¶ms)); @@ -891,7 +909,9 @@ impl Inner { params: CodeActionParams, ) -> LspResult<Option<CodeActionResponse>> { let specifier = self.url_map.normalize_url(¶ms.text_document.uri); - if !self.config.specifier_enabled(&specifier) { + if !self.documents.is_diagnosable(&specifier) + || !self.config.specifier_enabled(&specifier) + { return Ok(None); } @@ -1054,7 +1074,8 @@ impl Inner { params: CodeLensParams, ) -> LspResult<Option<Vec<CodeLens>>> { let specifier = self.url_map.normalize_url(¶ms.text_document.uri); - if !self.config.specifier_enabled(&specifier) + if !self.documents.is_diagnosable(&specifier) + || !self.config.specifier_enabled(&specifier) || !self.config.get_workspace_settings().enabled_code_lens() { return Ok(None); @@ -1366,7 +1387,9 @@ impl Inner { let specifier = self .url_map .normalize_url(¶ms.text_document_position_params.text_document.uri); - if !self.config.specifier_enabled(&specifier) { + if !self.documents.is_diagnosable(&specifier) + || !self.config.specifier_enabled(&specifier) + { return Ok(None); } @@ -1416,9 +1439,12 @@ impl Inner { let specifier = self .url_map .normalize_url(¶ms.text_document_position.text_document.uri); - if !self.config.specifier_enabled(&specifier) { + if !self.documents.is_diagnosable(&specifier) + || !self.config.specifier_enabled(&specifier) + { return Ok(None); } + let mark = self.performance.mark("references", Some(¶ms)); let line_index = if let Some(line_index) = self.get_line_index_sync(&specifier) { @@ -1471,9 +1497,12 @@ impl Inner { let specifier = self .url_map .normalize_url(¶ms.text_document_position_params.text_document.uri); - if !self.config.specifier_enabled(&specifier) { + if !self.documents.is_diagnosable(&specifier) + || !self.config.specifier_enabled(&specifier) + { return Ok(None); } + let mark = self.performance.mark("goto_definition", Some(¶ms)); let line_index = if let Some(line_index) = self.get_line_index_sync(&specifier) { @@ -1514,9 +1543,12 @@ impl Inner { let specifier = self .url_map .normalize_url(¶ms.text_document_position.text_document.uri); - if !self.config.specifier_enabled(&specifier) { + if !self.documents.is_diagnosable(&specifier) + || !self.config.specifier_enabled(&specifier) + { return Ok(None); } + let mark = self.performance.mark("completion", Some(¶ms)); // Import specifiers are something wholly internal to Deno, so for // completions, we will use internal logic and if there are completions @@ -1632,9 +1664,12 @@ impl Inner { let specifier = self .url_map .normalize_url(¶ms.text_document_position_params.text_document.uri); - if !self.config.specifier_enabled(&specifier) { + if !self.documents.is_diagnosable(&specifier) + || !self.config.specifier_enabled(&specifier) + { return Ok(None); } + let mark = self.performance.mark("goto_implementation", Some(¶ms)); let line_index = if let Some(line_index) = self.get_line_index_sync(&specifier) { @@ -1680,11 +1715,13 @@ impl Inner { params: FoldingRangeParams, ) -> LspResult<Option<Vec<FoldingRange>>> { let specifier = self.url_map.normalize_url(¶ms.text_document.uri); - if !self.config.specifier_enabled(&specifier) { + if !self.documents.is_diagnosable(&specifier) + || !self.config.specifier_enabled(&specifier) + { return Ok(None); } - let mark = self.performance.mark("folding_range", Some(¶ms)); + let mark = self.performance.mark("folding_range", Some(¶ms)); let line_index = if let Some(line_index) = self.get_line_index_sync(&specifier) { line_index @@ -1737,11 +1774,13 @@ impl Inner { params: CallHierarchyIncomingCallsParams, ) -> LspResult<Option<Vec<CallHierarchyIncomingCall>>> { let specifier = self.url_map.normalize_url(¶ms.item.uri); - if !self.config.specifier_enabled(&specifier) { + if !self.documents.is_diagnosable(&specifier) + || !self.config.specifier_enabled(&specifier) + { return Ok(None); } - let mark = self.performance.mark("incoming_calls", Some(¶ms)); + let mark = self.performance.mark("incoming_calls", Some(¶ms)); let line_index = if let Some(line_index) = self.get_line_index_sync(&specifier) { line_index @@ -1791,11 +1830,13 @@ impl Inner { params: CallHierarchyOutgoingCallsParams, ) -> LspResult<Option<Vec<CallHierarchyOutgoingCall>>> { let specifier = self.url_map.normalize_url(¶ms.item.uri); - if !self.config.specifier_enabled(&specifier) { + if !self.documents.is_diagnosable(&specifier) + || !self.config.specifier_enabled(&specifier) + { return Ok(None); } - let mark = self.performance.mark("outgoing_calls", Some(¶ms)); + let mark = self.performance.mark("outgoing_calls", Some(¶ms)); let line_index = if let Some(line_index) = self.get_line_index_sync(&specifier) { line_index @@ -1848,13 +1889,15 @@ impl Inner { let specifier = self .url_map .normalize_url(¶ms.text_document_position_params.text_document.uri); - if !self.config.specifier_enabled(&specifier) { + if !self.documents.is_diagnosable(&specifier) + || !self.config.specifier_enabled(&specifier) + { return Ok(None); } + let mark = self .performance .mark("prepare_call_hierarchy", Some(¶ms)); - let line_index = if let Some(line_index) = self.get_line_index_sync(&specifier) { line_index @@ -1927,11 +1970,13 @@ impl Inner { let specifier = self .url_map .normalize_url(¶ms.text_document_position.text_document.uri); - if !self.config.specifier_enabled(&specifier) { + if !self.documents.is_diagnosable(&specifier) + || !self.config.specifier_enabled(&specifier) + { return Ok(None); } - let mark = self.performance.mark("rename", Some(¶ms)); + let mark = self.performance.mark("rename", Some(¶ms)); let line_index = if let Some(line_index) = self.get_line_index_sync(&specifier) { line_index @@ -2019,11 +2064,13 @@ impl Inner { params: SelectionRangeParams, ) -> LspResult<Option<Vec<SelectionRange>>> { let specifier = self.url_map.normalize_url(¶ms.text_document.uri); - if !self.config.specifier_enabled(&specifier) { + if !self.documents.is_diagnosable(&specifier) + || !self.config.specifier_enabled(&specifier) + { return Ok(None); } - let mark = self.performance.mark("selection_range", Some(¶ms)); + let mark = self.performance.mark("selection_range", Some(¶ms)); let line_index = if let Some(line_index) = self.get_line_index_sync(&specifier) { line_index @@ -2061,11 +2108,13 @@ impl Inner { params: SemanticTokensParams, ) -> LspResult<Option<SemanticTokensResult>> { let specifier = self.url_map.normalize_url(¶ms.text_document.uri); - if !self.config.specifier_enabled(&specifier) { + if !self.documents.is_diagnosable(&specifier) + || !self.config.specifier_enabled(&specifier) + { return Ok(None); } - let mark = self.performance.mark("semantic_tokens_full", Some(¶ms)); + let mark = self.performance.mark("semantic_tokens_full", Some(¶ms)); let line_index = if let Some(line_index) = self.get_line_index_sync(&specifier) { line_index @@ -2108,13 +2157,15 @@ impl Inner { params: SemanticTokensRangeParams, ) -> LspResult<Option<SemanticTokensRangeResult>> { let specifier = self.url_map.normalize_url(¶ms.text_document.uri); - if !self.config.specifier_enabled(&specifier) { + if !self.documents.is_diagnosable(&specifier) + || !self.config.specifier_enabled(&specifier) + { return Ok(None); } + let mark = self .performance .mark("semantic_tokens_range", Some(¶ms)); - let line_index = if let Some(line_index) = self.get_line_index_sync(&specifier) { line_index @@ -2158,9 +2209,12 @@ impl Inner { let specifier = self .url_map .normalize_url(¶ms.text_document_position_params.text_document.uri); - if !self.config.specifier_enabled(&specifier) { + if !self.documents.is_diagnosable(&specifier) + || !self.config.specifier_enabled(&specifier) + { return Ok(None); } + let mark = self.performance.mark("signature_help", Some(¶ms)); let line_index = if let Some(line_index) = self.get_line_index_sync(&specifier) { @@ -2427,8 +2481,12 @@ impl Inner { &mut self, params: lsp_custom::CacheParams, ) -> LspResult<Option<Value>> { - let mark = self.performance.mark("cache", Some(¶ms)); let referrer = self.url_map.normalize_url(¶ms.referrer.uri); + if !self.documents.is_diagnosable(&referrer) { + return Ok(None); + } + + let mark = self.performance.mark("cache", Some(¶ms)); if !params.uris.is_empty() { for identifier in ¶ms.uris { let specifier = self.url_map.normalize_url(&identifier.uri); |