Skip to content

Commit 4d6f7da

Browse files
authored
Merge pull request #856 from Davidyz/fix/analyze_after_initialized
fix: don't drop inbound `workspace/didChangeConfiguration` notifications
2 parents 978b683 + f0f22fa commit 4d6f7da

File tree

4 files changed

+14
-33
lines changed

4 files changed

+14
-33
lines changed

crates/emmylua_ls/src/context/workspace_manager.rs

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use std::collections::HashSet;
22
use std::path::Path;
3-
use std::sync::atomic::{AtomicBool, AtomicI64, AtomicU8, Ordering};
3+
use std::sync::atomic::{AtomicI64, AtomicU8, Ordering};
44
use std::{path::PathBuf, sync::Arc, time::Duration};
55

66
use super::{ClientProxy, FileDiagnostic, StatusBar};
@@ -26,7 +26,6 @@ pub struct WorkspaceManager {
2626
pub watcher: Option<notify::RecommendedWatcher>,
2727
pub current_open_files: HashSet<Uri>,
2828
pub match_file_pattern: WorkspaceFileMatcher,
29-
pub workspace_initialized: Arc<AtomicBool>,
3029
workspace_diagnostic_level: Arc<AtomicU8>,
3130
workspace_version: Arc<AtomicI64>,
3231
}
@@ -51,24 +50,13 @@ impl WorkspaceManager {
5150
watcher: None,
5251
current_open_files: HashSet::new(),
5352
match_file_pattern: WorkspaceFileMatcher::default(),
54-
workspace_initialized: Arc::new(AtomicBool::new(false)),
5553
workspace_diagnostic_level: Arc::new(AtomicU8::new(
5654
WorkspaceDiagnosticLevel::Fast.to_u8(),
5755
)),
5856
workspace_version: Arc::new(AtomicI64::new(0)),
5957
}
6058
}
6159

62-
pub fn is_workspace_initialized(&self) -> bool {
63-
self.workspace_initialized
64-
.load(std::sync::atomic::Ordering::SeqCst)
65-
}
66-
67-
pub fn set_workspace_initialized(&self) {
68-
self.workspace_initialized
69-
.store(true, std::sync::atomic::Ordering::SeqCst);
70-
}
71-
7260
pub fn get_workspace_diagnostic_level(&self) -> WorkspaceDiagnosticLevel {
7361
let value = self.workspace_diagnostic_level.load(Ordering::Acquire);
7462
WorkspaceDiagnosticLevel::from_u8(value)

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

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,13 @@ pub async fn on_did_change_configuration(
1212
log::info!("on_did_change_configuration: {}", pretty_json);
1313

1414
// Check initialization status and get client config
15-
let (is_initialized, client_id, supports_config_request) = {
15+
let (client_id, supports_config_request) = {
1616
let workspace_manager = context.workspace_manager().read().await;
17-
let is_initialized = workspace_manager.is_workspace_initialized();
1817
let client_id = workspace_manager.client_config.client_id;
1918
let supports_config_request = context.lsp_features().supports_config_request();
20-
(is_initialized, client_id, supports_config_request)
19+
(client_id, supports_config_request)
2120
};
2221

23-
if !is_initialized {
24-
return Some(());
25-
}
26-
2722
if client_id.is_vscode() {
2823
return Some(());
2924
}

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

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,15 @@ pub async fn initialized_handler(
7777
// init std lib
7878
init_std_lib(context.analysis(), &cmd_args, emmyrc.clone()).await;
7979

80+
{
81+
let mut workspace_manager = context.workspace_manager().write().await;
82+
workspace_manager.client_config = client_config.clone();
83+
let (include, exclude, exclude_dir) = calculate_include_and_exclude(&emmyrc);
84+
workspace_manager.match_file_pattern =
85+
WorkspaceFileMatcher::new(include, exclude, exclude_dir);
86+
log::info!("workspace manager updated with client config and watch file patterns")
87+
}
88+
8089
init_analysis(
8190
context.analysis(),
8291
context.status_bar(),
@@ -86,15 +95,7 @@ pub async fn initialized_handler(
8695
emmyrc.clone(),
8796
)
8897
.await;
89-
{
90-
let mut workspace_manager = context.workspace_manager().write().await;
91-
workspace_manager.client_config = client_config.clone();
92-
let (include, exclude, exclude_dir) = calculate_include_and_exclude(&emmyrc);
93-
workspace_manager.match_file_pattern =
94-
WorkspaceFileMatcher::new(include, exclude, exclude_dir);
95-
workspace_manager.set_workspace_initialized();
96-
log::info!("workspace manager initialized");
97-
}
98+
9899
register_files_watch(context.clone(), &params.capabilities).await;
99100
Some(())
100101
}

crates/emmylua_ls/src/server/message_processor.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,7 @@ impl ServerMessageProcessor {
3030
Message::Response(_) => true,
3131
// Allow specific notifications
3232
Message::Notification(notify) => {
33-
matches!(
34-
notify.method.as_str(),
35-
"workspace/didChangeConfiguration" | "$/cancelRequest" | "initialized"
36-
)
33+
matches!(notify.method.as_str(), "$/cancelRequest" | "initialized")
3734
}
3835
// Don't process other requests during initialization
3936
Message::Request(_) => false,

0 commit comments

Comments
 (0)