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,