Skip to content

Commit 05fbcbc

Browse files
committed
Make completions an opt-in LSP feature
1 parent ad658f4 commit 05fbcbc

File tree

4 files changed

+50
-18
lines changed

4 files changed

+50
-18
lines changed

crates/ty_ide/src/completion.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ use ruff_text_size::TextSize;
66

77
use crate::Db;
88

9+
#[derive(Debug, Clone)]
910
pub struct Completion {
1011
pub label: String,
1112
}

crates/ty_server/src/server.rs

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use lsp_types::{
1515

1616
use self::connection::{Connection, ConnectionInitializer};
1717
use self::schedule::event_loop_thread;
18-
use crate::session::{AllSettings, ClientSettings, Session};
18+
use crate::session::{AllSettings, ClientSettings, Experimental, Session};
1919
use crate::PositionEncoding;
2020

2121
mod api;
@@ -41,19 +41,6 @@ impl Server {
4141

4242
let (id, init_params) = connection.initialize_start()?;
4343

44-
let client_capabilities = init_params.capabilities;
45-
let position_encoding = Self::find_best_position_encoding(&client_capabilities);
46-
let server_capabilities = Self::server_capabilities(position_encoding);
47-
48-
let connection = connection.initialize_finish(
49-
id,
50-
&server_capabilities,
51-
crate::SERVER_NAME,
52-
crate::version(),
53-
)?;
54-
55-
crate::message::init_messenger(connection.make_sender());
56-
5744
let AllSettings {
5845
global_settings,
5946
mut workspace_settings,
@@ -68,6 +55,20 @@ impl Server {
6855
global_settings.tracing.log_file.as_deref(),
6956
);
7057

58+
let client_capabilities = init_params.capabilities;
59+
let position_encoding = Self::find_best_position_encoding(&client_capabilities);
60+
let server_capabilities =
61+
Self::server_capabilities(position_encoding, global_settings.experimental.as_ref());
62+
63+
let connection = connection.initialize_finish(
64+
id,
65+
&server_capabilities,
66+
crate::SERVER_NAME,
67+
crate::version(),
68+
)?;
69+
70+
crate::message::init_messenger(connection.make_sender());
71+
7172
let mut workspace_for_url = |url: Url| {
7273
let Some(workspace_settings) = workspace_settings.as_mut() else {
7374
return (url, ClientSettings::default());
@@ -206,7 +207,10 @@ impl Server {
206207
.unwrap_or_default()
207208
}
208209

209-
fn server_capabilities(position_encoding: PositionEncoding) -> ServerCapabilities {
210+
fn server_capabilities(
211+
position_encoding: PositionEncoding,
212+
experimental: Option<&Experimental>,
213+
) -> ServerCapabilities {
210214
ServerCapabilities {
211215
position_encoding: Some(position_encoding.into()),
212216
diagnostic_provider: Some(DiagnosticServerCapabilities::Options(DiagnosticOptions {
@@ -226,9 +230,11 @@ impl Server {
226230
inlay_hint_provider: Some(lsp_types::OneOf::Right(
227231
InlayHintServerCapabilities::Options(InlayHintOptions::default()),
228232
)),
229-
completion_provider: Some(lsp_types::CompletionOptions {
230-
..Default::default()
231-
}),
233+
completion_provider: experimental
234+
.is_some_and(Experimental::enable_completions)
235+
.then_some(lsp_types::CompletionOptions {
236+
..Default::default()
237+
}),
232238
..Default::default()
233239
}
234240
}

crates/ty_server/src/session.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ pub(crate) use self::capabilities::ResolvedClientCapabilities;
2121
pub use self::index::DocumentQuery;
2222
pub(crate) use self::settings::AllSettings;
2323
pub use self::settings::ClientSettings;
24+
pub(crate) use self::settings::Experimental;
2425

2526
mod capabilities;
2627
pub(crate) mod index;

crates/ty_server/src/session/settings.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,35 @@ use serde::Deserialize;
77
/// Maps a workspace URI to its associated client settings. Used during server initialization.
88
pub(crate) type WorkspaceSettingsMap = FxHashMap<Url, ClientSettings>;
99

10+
#[derive(Debug, Deserialize, Default)]
11+
#[cfg_attr(test, derive(PartialEq, Eq))]
12+
#[serde(rename_all = "camelCase")]
13+
struct Completions {
14+
enable: Option<bool>,
15+
}
16+
17+
#[derive(Debug, Deserialize, Default)]
18+
#[cfg_attr(test, derive(PartialEq, Eq))]
19+
#[serde(rename_all = "camelCase")]
20+
pub(crate) struct Experimental {
21+
completions: Option<Completions>,
22+
}
23+
24+
impl Experimental {
25+
/// Returns `true` if completions are enabled in the settings.
26+
pub(crate) fn enable_completions(&self) -> bool {
27+
self.completions
28+
.as_ref()
29+
.is_some_and(|completions| completions.enable.unwrap_or_default())
30+
}
31+
}
32+
1033
/// This is a direct representation of the settings schema sent by the client.
1134
#[derive(Debug, Deserialize, Default)]
1235
#[cfg_attr(test, derive(PartialEq, Eq))]
1336
#[serde(rename_all = "camelCase")]
1437
pub struct ClientSettings {
38+
pub(crate) experimental: Option<Experimental>,
1539
// These settings are only needed for tracing, and are only read from the global configuration.
1640
// These will not be in the resolved settings.
1741
#[serde(flatten)]

0 commit comments

Comments
 (0)