diff --git a/crates/rome_cli/src/commands/daemon.rs b/crates/rome_cli/src/commands/daemon.rs index 4c78f0cfe2a..f3f6cc44b85 100644 --- a/crates/rome_cli/src/commands/daemon.rs +++ b/crates/rome_cli/src/commands/daemon.rs @@ -63,10 +63,10 @@ pub(crate) fn stop(mut session: CliSession) -> Result<(), Termination> { pub(crate) fn run_server(mut session: CliSession) -> Result<(), Termination> { setup_tracing_subscriber(); - let is_oneshot = session.args.contains("--oneshot"); + let stop_on_disconnect = session.args.contains("--stop-on-disconnect"); let rt = Runtime::new()?; - let factory = ServerFactory::new(is_oneshot); + let factory = ServerFactory::new(stop_on_disconnect); let cancellation = factory.cancellation(); let span = debug_span!("Running Server", pid = std::process::id()); diff --git a/crates/rome_cli/src/service/unix.rs b/crates/rome_cli/src/service/unix.rs index aeeafde464c..c598192365f 100644 --- a/crates/rome_cli/src/service/unix.rs +++ b/crates/rome_cli/src/service/unix.rs @@ -51,14 +51,14 @@ async fn try_connect() -> io::Result { } /// Spawn the daemon server process in the background -fn spawn_daemon(is_oneshot: bool) -> io::Result { +fn spawn_daemon(stop_on_disconnect: bool) -> io::Result { let binary = env::current_exe()?; let mut cmd = Command::new(binary); cmd.arg("__run_server"); - if is_oneshot { - cmd.arg("--oneshot"); + if stop_on_disconnect { + cmd.arg("--stop-on-disconnect"); } // Create a new session for the process and make it the leader, this will @@ -106,7 +106,7 @@ pub(crate) async fn open_socket() -> io::Result io::Result { +pub(crate) async fn ensure_daemon(stop_on_disconnect: bool) -> io::Result { let mut current_child: Option = None; let mut last_error = None; @@ -144,7 +144,7 @@ pub(crate) async fn ensure_daemon(is_oneshot: bool) -> io::Result { } else { // Spawn the daemon process and wait a few milliseconds for // it to become ready then retry the connection - current_child = Some(spawn_daemon(is_oneshot)?); + current_child = Some(spawn_daemon(stop_on_disconnect)?); time::sleep(Duration::from_millis(50)).await; } } diff --git a/crates/rome_cli/src/service/windows.rs b/crates/rome_cli/src/service/windows.rs index 3ac4029b8c0..e407c60021a 100644 --- a/crates/rome_cli/src/service/windows.rs +++ b/crates/rome_cli/src/service/windows.rs @@ -67,14 +67,14 @@ async fn try_connect() -> io::Result { const CREATE_NEW_PROCESS_GROUP: u32 = 0x00000200; /// Spawn the daemon server process in the background -fn spawn_daemon(is_oneshot: bool) -> io::Result<()> { +fn spawn_daemon(stop_on_disconnect: bool) -> io::Result<()> { let binary = env::current_exe()?; let mut cmd = Command::new(binary); cmd.arg("__run_server"); - if is_oneshot { - cmd.arg("--oneshot"); + if stop_on_disconnect { + cmd.arg("--stop-on-disconnect"); } cmd.creation_flags(CREATE_NEW_PROCESS_GROUP); @@ -168,14 +168,14 @@ impl AsyncWrite for ClientWriteHalf { /// /// Returns false if the daemon process was already running or true if it had /// to be started -pub(crate) async fn ensure_daemon(is_oneshot: bool) -> io::Result { +pub(crate) async fn ensure_daemon(stop_on_disconnect: bool) -> io::Result { let mut did_spawn = false; loop { match open_socket().await { Ok(Some(_)) => break, Ok(None) => { - spawn_daemon(is_oneshot)?; + spawn_daemon(stop_on_disconnect)?; did_spawn = true; time::sleep(Duration::from_millis(50)).await; } diff --git a/crates/rome_lsp/src/server.rs b/crates/rome_lsp/src/server.rs index 7f369e1886e..6546e806187 100644 --- a/crates/rome_lsp/src/server.rs +++ b/crates/rome_lsp/src/server.rs @@ -26,7 +26,7 @@ pub struct LSPServer { sessions: Sessions, /// If this is true the server will broadcast a shutdown signal once the /// last client disconnected - is_oneshot: bool, + stop_on_disconnect: bool, /// This shared flag is set to true once at least one sessions has been /// initialized on this server instance is_initialized: Arc, @@ -36,13 +36,13 @@ impl LSPServer { fn new( session: SessionHandle, sessions: Sessions, - is_oneshot: bool, + stop_on_disconnect: bool, is_initialized: Arc, ) -> Self { Self { session, sessions, - is_oneshot, + stop_on_disconnect, is_initialized, } } @@ -348,7 +348,9 @@ impl Drop for LSPServer { let _removed = sessions.remove(&self.session.key); debug_assert!(_removed.is_some(), "Session did not exist."); - if self.is_oneshot && sessions.is_empty() && self.is_initialized.load(Ordering::Relaxed) + if self.stop_on_disconnect + && sessions.is_empty() + && self.is_initialized.load(Ordering::Relaxed) { self.session.cancellation.notify_one(); } @@ -380,7 +382,7 @@ pub struct ServerFactory { /// If this is true the server will broadcast a shutdown signal once the /// last client disconnected - is_oneshot: bool, + stop_on_disconnect: bool, /// This shared flag is set to true once at least one sessions has been /// initialized on this server instance is_initialized: Arc, @@ -421,13 +423,13 @@ macro_rules! workspace_method { } impl ServerFactory { - pub fn new(is_oneshot: bool) -> Self { + pub fn new(stop_on_disconnect: bool) -> Self { Self { cancellation: Arc::default(), workspace: None, sessions: Sessions::default(), next_session_key: AtomicU64::new(0), - is_oneshot, + stop_on_disconnect, is_initialized: Arc::default(), } } @@ -451,7 +453,7 @@ impl ServerFactory { LSPServer::new( handle, self.sessions.clone(), - self.is_oneshot, + self.stop_on_disconnect, self.is_initialized.clone(), ) }); diff --git a/editors/vscode/README.md b/editors/vscode/README.md index 0b834767fcc..95bea307c5d 100644 --- a/editors/vscode/README.md +++ b/editors/vscode/README.md @@ -84,20 +84,6 @@ Rome doesn’t yet support loading the `rome.json` file from a directory other t Rome isn't yet able to pick up the `rome.json` configuration in [multi-root workspaces](https://code.visualstudio.com/docs/editor/multi-root-workspaces) if the configuration isn't in the first root folder ([issue 3538](https://github.com/rome/tools/issues/3538)). You can work around this limitation by making the folder with the configuration the first root folder of the workspace (drag it to the top). -### The extension uses an outdated version of Rome - -Make sure to restart Rome’s LSP server after updating the extension. To stop Rome’s LSP, send the `stop` command (VS will start a new LSP instance for you): - -```bash -npx rome stop - -# or -pnpx exec rome stop - -# or -yarn run rome stop -``` - ### Disable Rome for workspaces without a `rome.json` configuration Rome's VS Code extension is active for every workspace regardless if the workspace contains a `rome.json` configuration ([issue 3506](https://github.com/rome/tools/issues/3506)). That may be surprising to you if you use other extensions like ESLint where the extension is disabled if the configuration is missing. This behavior is intentional because it's Rome's philosophy that the configuration should be optional.