From 1d04a5f1cf3192d7243a29b5b3085d182fa5250b Mon Sep 17 00:00:00 2001 From: LSTM-Kirigaya <1193466151@qq.com> Date: Mon, 6 Jan 2025 18:35:34 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20linter=20mode=20=E6=9C=AA?= =?UTF-8?q?=E6=AD=A3=E7=A1=AE=E4=BD=BF=E7=94=A8=E7=9A=84=20bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server.rs | 1 + src/sources.rs | 54 +++++++++++++++++++++++++++++--------------------- sv-parser | 2 +- 3 files changed, 33 insertions(+), 24 deletions(-) diff --git a/src/server.rs b/src/server.rs index 7a7f295..bcfb8ca 100644 --- a/src/server.rs +++ b/src/server.rs @@ -255,6 +255,7 @@ impl LanguageServer for Backend { async fn did_close(&self, params: DidCloseTextDocumentParams) { // 获取诊断相关的配置信息,如果 mode 为 common,则需要清空关闭文件的诊断信息 + // 如果同一个文件短时间内多次调用该方法,则读写锁会失效 if let Some(linter_mode) = self.server.db.get_lsp_configuration_string_value("digital-ide.function.lsp.linter.mode") { if linter_mode == "common" { self.client.publish_diagnostics(params.text_document.uri, vec![], None).await; diff --git a/src/sources.rs b/src/sources.rs index c573cf3..a11805e 100644 --- a/src/sources.rs +++ b/src/sources.rs @@ -59,20 +59,24 @@ impl LspServer { // 生成诊断信息 if let Some(source) = self.db.get_source(&path_string) { - let source = source.read().unwrap(); - let diagnostics = provide_diagnostics( - uri, - &source.text, - &self - ); - diagnostics - } else { - PublishDiagnosticsParams { - uri, - diagnostics: Vec::new(), - version: None, + if let Some(linter_mode) = self.db.get_lsp_configuration_string_value("digital-ide.function.lsp.linter.mode") { + if linter_mode != "shutdown" { + let source = source.read().unwrap(); + let diagnostics = provide_diagnostics( + uri, + &source.text, + &self + ); + return diagnostics + } } } + + PublishDiagnosticsParams { + uri, + diagnostics: Vec::new(), + version: None, + } } pub fn did_change(&self, params: DidChangeTextDocumentParams) { @@ -109,19 +113,23 @@ impl LspServer { let path_string = from_uri_to_escape_path_string(&uri).unwrap(); if let Some(source) = self.db.get_source(&path_string) { - let source = source.read().unwrap(); - provide_diagnostics( - uri, - &source.text, - &self - ) - } else { - PublishDiagnosticsParams { - uri, - diagnostics: Vec::new(), - version: None, + if let Some(linter_mode) = self.db.get_lsp_configuration_string_value("digital-ide.function.lsp.linter.mode") { + if linter_mode != "shutdown" { + let source = source.read().unwrap(); + return provide_diagnostics( + uri, + &source.text, + &self + ); + } } } + + PublishDiagnosticsParams { + uri, + diagnostics: Vec::new(), + version: None, + } } pub fn did_delete_files(&self, params: DeleteFilesParams) { diff --git a/sv-parser b/sv-parser index 5be43b5..2588d1d 160000 --- a/sv-parser +++ b/sv-parser @@ -1 +1 @@ -Subproject commit 5be43b5881551523880594828df3b711ed234ccd +Subproject commit 2588d1dac8b7015632a453b293794744a75c240b