From c24b90ea96c73cc10195c446b72eceb8a52c007a Mon Sep 17 00:00:00 2001 From: LSTM-Kirigaya <1193466151@qq.com> Date: Tue, 17 Dec 2024 23:32:31 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E4=B8=89=E7=A7=8D=E8=AF=8A?= =?UTF-8?q?=E6=96=AD=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/core/primitive_parser.rs | 1 - src/execute_command/diagnostics.rs | 15 +++++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/core/primitive_parser.rs b/src/core/primitive_parser.rs index 968602c..f692e78 100644 --- a/src/core/primitive_parser.rs +++ b/src/core/primitive_parser.rs @@ -271,7 +271,6 @@ mod tests { const TESTDIR: &str = "primitive_files"; #[test] - fn gen_primitive_bin() { if let Ok(primitive_info) = init_parse_primitive_files("primitive_files") { let serialized_data = bincode::serialize(&primitive_info).unwrap(); diff --git a/src/execute_command/diagnostics.rs b/src/execute_command/diagnostics.rs index f2c9e92..173272a 100644 --- a/src/execute_command/diagnostics.rs +++ b/src/execute_command/diagnostics.rs @@ -21,8 +21,19 @@ pub async fn publish_diagnostics( // 考虑到性能,如果后端文本缓冲器内存在当前路径的 文本备份,则使用它作为 rope // 否则,进行 IO 后再转换 - let rope = open_doc_as_rope(&pathbuf).unwrap(); - let diagnostics_params = provide_diagnostics(uri, &rope, &backend.server); + info!("open {:?} as rope", pathbuf); + let diagnostics_params = if let Some(source) = backend.server.db.get_source(&path_string) { + let source_handle = source.read().unwrap(); + provide_diagnostics(uri, &source_handle.text, &backend.server) + } else { + // 读取文件,vscode 前端是有可能存在不存在的文件的,如果文件不存在,直接返回 + let rope = open_doc_as_rope(&pathbuf); + if rope.is_none() { + return Ok(None); + } + provide_diagnostics(uri, &rope.unwrap(), &backend.server) + }; + backend.client.publish_diagnostics( diagnostics_params.uri, diagnostics_params.diagnostics,