summaryrefslogtreecommitdiff
path: root/cli/lsp/language_server.rs
diff options
context:
space:
mode:
authorKitson Kelly <me@kitsonkelly.com>2021-06-02 20:29:58 +1000
committerGitHub <noreply@github.com>2021-06-02 20:29:58 +1000
commit473713c6210ee11f11b7ae4c83165c4f87ff2d77 (patch)
tree34d361841ded4b8f0e089615b4afa7a40e37731b /cli/lsp/language_server.rs
parent9ae8dbf17334f1cf7ae09abf585d8797f374bdc4 (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.rs148
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,
&params.text_document.text,
);
- self.analyze_dependencies(&specifier, &params.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, &params.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(&params.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(&params));
let specifier = self.url_map.normalize_url(&params.text_document.uri);
+ if !self.documents.is_formattable(&specifier) {
+ return Ok(None);
+ }
+ let mark = self.performance.mark("formatting", Some(&params));
let file_text = self
.documents
.content(&specifier)
@@ -850,7 +866,9 @@ impl Inner {
let specifier = self
.url_map
.normalize_url(&params.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(&params));
@@ -891,7 +909,9 @@ impl Inner {
params: CodeActionParams,
) -> LspResult<Option<CodeActionResponse>> {
let specifier = self.url_map.normalize_url(&params.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(&params.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(&params.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(&params.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(&params));
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(&params.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(&params));
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(&params.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(&params));
// 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(&params.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(&params));
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(&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("folding_range", Some(&params));
+ let mark = self.performance.mark("folding_range", Some(&params));
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(&params.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(&params));
+ let mark = self.performance.mark("incoming_calls", Some(&params));
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(&params.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(&params));
+ let mark = self.performance.mark("outgoing_calls", Some(&params));
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(&params.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(&params));
-
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(&params.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(&params));
+ let mark = self.performance.mark("rename", Some(&params));
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(&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("selection_range", Some(&params));
+ let mark = self.performance.mark("selection_range", Some(&params));
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(&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("semantic_tokens_full", Some(&params));
+ let mark = self.performance.mark("semantic_tokens_full", Some(&params));
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(&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("semantic_tokens_range", Some(&params));
-
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(&params.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(&params));
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(&params));
let referrer = self.url_map.normalize_url(&params.referrer.uri);
+ if !self.documents.is_diagnosable(&referrer) {
+ return Ok(None);
+ }
+
+ let mark = self.performance.mark("cache", Some(&params));
if !params.uris.is_empty() {
for identifier in &params.uris {
let specifier = self.url_map.normalize_url(&identifier.uri);