Skip to content

Commit 869d7bf

Browse files
authored
[ty] Stabilize completions (#18650)
Specifically, this PR reverts "Make completions an opt-in LSP feature (#17921)", corresponding to commit 51e2eff. In practice, this means you don't need to opt into completions working by enabling experimental features. i.e., I was able to remove this from my LSP configuration: ``` "experimental": { "completions": { "enable": true } }, ``` There's still a lot of work left to do to make completions awesome, but I think it's in a state where it would be useful to get real user feedback. It's also meaningfully using ty to provide completions that use type information. Ref astral-sh/ty#86
1 parent 2f3bd24 commit 869d7bf

4 files changed

Lines changed: 7 additions & 39 deletions

File tree

crates/ty_ide/src/completion.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ use ruff_text_size::{Ranged, TextRange, TextSize};
99
use crate::Db;
1010
use crate::find_node::covering_node;
1111

12-
#[derive(Debug, Clone)]
1312
pub struct Completion {
1413
pub label: String,
1514
}

crates/ty_server/src/server.rs

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
33
use self::schedule::spawn_main_loop;
44
use crate::PositionEncoding;
5-
use crate::session::{AllSettings, ClientSettings, Experimental, Session};
5+
use crate::session::{AllSettings, ClientSettings, Session};
66
use lsp_server::Connection;
77
use lsp_types::{
88
ClientCapabilities, DiagnosticOptions, DiagnosticServerCapabilities, HoverProviderCapability,
@@ -53,8 +53,7 @@ impl Server {
5353

5454
let client_capabilities = init_params.capabilities;
5555
let position_encoding = Self::find_best_position_encoding(&client_capabilities);
56-
let server_capabilities =
57-
Self::server_capabilities(position_encoding, global_settings.experimental.as_ref());
56+
let server_capabilities = Self::server_capabilities(position_encoding);
5857

5958
let connection = connection.initialize_finish(
6059
id,
@@ -154,10 +153,7 @@ impl Server {
154153
.unwrap_or_default()
155154
}
156155

157-
fn server_capabilities(
158-
position_encoding: PositionEncoding,
159-
experimental: Option<&Experimental>,
160-
) -> ServerCapabilities {
156+
fn server_capabilities(position_encoding: PositionEncoding) -> ServerCapabilities {
161157
ServerCapabilities {
162158
position_encoding: Some(position_encoding.into()),
163159
diagnostic_provider: Some(DiagnosticServerCapabilities::Options(DiagnosticOptions {
@@ -177,12 +173,10 @@ impl Server {
177173
inlay_hint_provider: Some(lsp_types::OneOf::Right(
178174
InlayHintServerCapabilities::Options(InlayHintOptions::default()),
179175
)),
180-
completion_provider: experimental
181-
.is_some_and(Experimental::is_completions_enabled)
182-
.then_some(lsp_types::CompletionOptions {
183-
trigger_characters: Some(vec!['.'.to_string()]),
184-
..Default::default()
185-
}),
176+
completion_provider: Some(lsp_types::CompletionOptions {
177+
trigger_characters: Some(vec!['.'.to_string()]),
178+
..Default::default()
179+
}),
186180
..Default::default()
187181
}
188182
}

crates/ty_server/src/session.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ pub(crate) use self::capabilities::ResolvedClientCapabilities;
1616
pub use self::index::DocumentQuery;
1717
pub(crate) use self::settings::AllSettings;
1818
pub use self::settings::ClientSettings;
19-
pub(crate) use self::settings::Experimental;
2019
use crate::document::{DocumentKey, DocumentVersion, NotebookDocument};
2120
use crate::session::request_queue::RequestQueue;
2221
use crate::system::{AnySystemPath, LSPSystem};

crates/ty_server/src/session/settings.rs

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -7,35 +7,11 @@ 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 is_completions_enabled(&self) -> bool {
27-
self.completions
28-
.as_ref()
29-
.is_some_and(|completions| completions.enable.unwrap_or_default())
30-
}
31-
}
32-
3310
/// This is a direct representation of the settings schema sent by the client.
3411
#[derive(Debug, Deserialize, Default)]
3512
#[cfg_attr(test, derive(PartialEq, Eq))]
3613
#[serde(rename_all = "camelCase")]
3714
pub struct ClientSettings {
38-
pub(crate) experimental: Option<Experimental>,
3915
// These settings are only needed for tracing, and are only read from the global configuration.
4016
// These will not be in the resolved settings.
4117
#[serde(flatten)]

0 commit comments

Comments
 (0)