修复 linter mode 未正确使用的 bug

This commit is contained in:
锦恢 2025-01-06 18:35:34 +08:00
parent 8d45345c54
commit 1d04a5f1cf
3 changed files with 33 additions and 24 deletions

View File

@ -255,6 +255,7 @@ impl LanguageServer for Backend {
async fn did_close(&self, params: DidCloseTextDocumentParams) { async fn did_close(&self, params: DidCloseTextDocumentParams) {
// 获取诊断相关的配置信息,如果 mode 为 common则需要清空关闭文件的诊断信息 // 获取诊断相关的配置信息,如果 mode 为 common则需要清空关闭文件的诊断信息
// 如果同一个文件短时间内多次调用该方法,则读写锁会失效
if let Some(linter_mode) = self.server.db.get_lsp_configuration_string_value("digital-ide.function.lsp.linter.mode") { if let Some(linter_mode) = self.server.db.get_lsp_configuration_string_value("digital-ide.function.lsp.linter.mode") {
if linter_mode == "common" { if linter_mode == "common" {
self.client.publish_diagnostics(params.text_document.uri, vec![], None).await; self.client.publish_diagnostics(params.text_document.uri, vec![], None).await;

View File

@ -59,21 +59,25 @@ impl LspServer {
// 生成诊断信息 // 生成诊断信息
if let Some(source) = self.db.get_source(&path_string) { if let Some(source) = self.db.get_source(&path_string) {
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 source = source.read().unwrap();
let diagnostics = provide_diagnostics( let diagnostics = provide_diagnostics(
uri, uri,
&source.text, &source.text,
&self &self
); );
diagnostics return diagnostics
} else { }
}
}
PublishDiagnosticsParams { PublishDiagnosticsParams {
uri, uri,
diagnostics: Vec::new(), diagnostics: Vec::new(),
version: None, version: None,
} }
} }
}
pub fn did_change(&self, params: DidChangeTextDocumentParams) { pub fn did_change(&self, params: DidChangeTextDocumentParams) {
let path_string = from_uri_to_escape_path_string(&params.text_document.uri).unwrap(); let path_string = from_uri_to_escape_path_string(&params.text_document.uri).unwrap();
@ -109,20 +113,24 @@ impl LspServer {
let path_string = from_uri_to_escape_path_string(&uri).unwrap(); let path_string = from_uri_to_escape_path_string(&uri).unwrap();
if let Some(source) = self.db.get_source(&path_string) { if let Some(source) = self.db.get_source(&path_string) {
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 source = source.read().unwrap();
provide_diagnostics( return provide_diagnostics(
uri, uri,
&source.text, &source.text,
&self &self
) );
} else { }
}
}
PublishDiagnosticsParams { PublishDiagnosticsParams {
uri, uri,
diagnostics: Vec::new(), diagnostics: Vec::new(),
version: None, version: None,
} }
} }
}
pub fn did_delete_files(&self, params: DeleteFilesParams) { pub fn did_delete_files(&self, params: DeleteFilesParams) {
// 删除 sources 内对应的文件 // 删除 sources 内对应的文件

@ -1 +1 @@
Subproject commit 5be43b5881551523880594828df3b711ed234ccd Subproject commit 2588d1dac8b7015632a453b293794744a75c240b