Skip to content

Commit d2ecbaa

Browse files
committed
Fix #531
1 parent 5e85bb6 commit d2ecbaa

File tree

5 files changed

+30
-14
lines changed

5 files changed

+30
-14
lines changed

crates/emmylua_code_analysis/src/vfs/mod.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,4 +159,14 @@ impl Vfs {
159159
})
160160
.collect()
161161
}
162+
163+
pub fn clear(&mut self) {
164+
self.file_id_map.clear();
165+
self.file_path_map.clear();
166+
self.file_data.clear();
167+
self.line_index_map.clear();
168+
self.tree_map.clear();
169+
self.emmyrc = None;
170+
self.node_cache = NodeCache::default();
171+
}
162172
}

crates/emmylua_ls/src/context/client_id.rs

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -35,17 +35,13 @@ impl ClientId {
3535

3636
pub fn get_client_id(client_info: &Option<ClientInfo>) -> ClientId {
3737
match client_info {
38-
Some(info) => {
39-
match info.name.as_str() {
40-
"Visual Studio Code" => ClientId::VSCode,
41-
"IntelliJ" => ClientId::Intellij,
42-
"Neovim" | "coc.nvim" => ClientId::Neovim,
43-
"Cursor" => ClientId::VSCode,
44-
"Windsurf" => ClientId::VSCode, // 不确定是不是这个名, 先加上吧
45-
"Trae" => ClientId::VSCode, // 字节的, 但不确定是不是这个名, 先加上吧
46-
_ => ClientId::Other,
47-
}
48-
}
38+
Some(info) => match info.name.as_str() {
39+
"Visual Studio Code" => ClientId::VSCode,
40+
"IntelliJ" => ClientId::Intellij,
41+
"Neovim" | "coc.nvim" => ClientId::Neovim,
42+
"Cursor" | "Windsurf" | "Trae" => ClientId::VSCode,
43+
_ => ClientId::Other,
44+
},
4945
None => ClientId::Other,
5046
}
5147
}

crates/emmylua_ls/src/handlers/initialized/mod.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ pub async fn init_analysis(
9292
file_diagnostic: Arc<FileDiagnostic>,
9393
) {
9494
let mut mut_analysis = analysis.write().await;
95+
9596
// update config
9697
mut_analysis.update_config(emmyrc.clone());
9798

@@ -160,7 +161,7 @@ pub async fn init_analysis(
160161
.await;
161162
}
162163

163-
fn get_workspace_folders(params: &InitializeParams) -> Vec<PathBuf> {
164+
pub fn get_workspace_folders(params: &InitializeParams) -> Vec<PathBuf> {
164165
let mut workspace_folders = Vec::new();
165166
if let Some(workspaces) = &params.workspace_folders {
166167
for workspace in workspaces {

crates/emmylua_ls/src/handlers/mod.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,7 @@ mod test_lib;
3131
mod text_document;
3232
mod workspace_symbol;
3333

34-
pub use initialized::initialized_handler;
35-
pub use initialized::{init_analysis, ClientConfig};
34+
pub use initialized::{initialized_handler, ClientConfig, init_analysis};
3635
use lsp_types::{ClientCapabilities, ServerCapabilities};
3736
pub use notification_handler::on_notification_handler;
3837
pub use request_handler::on_req_handler;

crates/emmylua_ls/src/handlers/text_document/text_document_handler.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,5 +106,15 @@ pub async fn on_did_close_document(
106106
.current_open_files
107107
.remove(&params.text_document.uri);
108108
drop(workspace);
109+
let analysis = context.analysis.read().await;
110+
let uri = &params.text_document.uri;
111+
let file_id = analysis.get_file_id(uri)?;
112+
let module_info = analysis.compilation.get_db().get_module_index().get_module(file_id);
113+
if module_info.is_none() {
114+
drop(analysis);
115+
let mut mut_analysis = context.analysis.write().await;
116+
mut_analysis.remove_file_by_uri(uri);
117+
}
118+
109119
Some(())
110120
}

0 commit comments

Comments
 (0)