This PR introduces support for Next Edit Suggestions while doing away with calling legacy endpoints. In the process we've also removed support for cycling completions, as NES will give us a single prediction, for the most part. Closes #30124 Release Notes: - Zed now supports Copilot's [Next Edit Suggestions](https://code.visualstudio.com/blogs/2025/02/12/next-edit-suggestions).
194 lines
4.7 KiB
Rust
194 lines
4.7 KiB
Rust
use lsp::VersionedTextDocumentIdentifier;
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
pub enum CheckStatus {}
|
|
|
|
#[derive(Debug, Serialize, Deserialize)]
|
|
#[serde(rename_all = "camelCase")]
|
|
pub struct CheckStatusParams {
|
|
pub local_checks_only: bool,
|
|
}
|
|
|
|
impl lsp::request::Request for CheckStatus {
|
|
type Params = CheckStatusParams;
|
|
type Result = SignInStatus;
|
|
const METHOD: &'static str = "checkStatus";
|
|
}
|
|
|
|
pub enum SignInInitiate {}
|
|
|
|
#[derive(Debug, Serialize, Deserialize)]
|
|
pub struct SignInInitiateParams {}
|
|
|
|
#[derive(Debug, Serialize, Deserialize)]
|
|
#[serde(tag = "status")]
|
|
pub enum SignInInitiateResult {
|
|
AlreadySignedIn { user: String },
|
|
PromptUserDeviceFlow(PromptUserDeviceFlow),
|
|
}
|
|
|
|
#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)]
|
|
#[serde(rename_all = "camelCase")]
|
|
pub struct PromptUserDeviceFlow {
|
|
pub user_code: String,
|
|
pub verification_uri: String,
|
|
}
|
|
|
|
impl lsp::request::Request for SignInInitiate {
|
|
type Params = SignInInitiateParams;
|
|
type Result = SignInInitiateResult;
|
|
const METHOD: &'static str = "signInInitiate";
|
|
}
|
|
|
|
pub enum SignInConfirm {}
|
|
|
|
#[derive(Debug, Serialize, Deserialize)]
|
|
#[serde(rename_all = "camelCase")]
|
|
pub struct SignInConfirmParams {
|
|
pub user_code: String,
|
|
}
|
|
|
|
#[derive(Debug, Serialize, Deserialize)]
|
|
#[serde(tag = "status")]
|
|
pub enum SignInStatus {
|
|
#[serde(rename = "OK")]
|
|
Ok {
|
|
user: Option<String>,
|
|
},
|
|
MaybeOk {
|
|
user: String,
|
|
},
|
|
AlreadySignedIn {
|
|
user: String,
|
|
},
|
|
NotAuthorized {
|
|
user: String,
|
|
},
|
|
NotSignedIn,
|
|
}
|
|
|
|
impl lsp::request::Request for SignInConfirm {
|
|
type Params = SignInConfirmParams;
|
|
type Result = SignInStatus;
|
|
const METHOD: &'static str = "signInConfirm";
|
|
}
|
|
|
|
pub enum SignOut {}
|
|
|
|
#[derive(Debug, Serialize, Deserialize)]
|
|
#[serde(rename_all = "camelCase")]
|
|
pub struct SignOutParams {}
|
|
|
|
#[derive(Debug, Serialize, Deserialize)]
|
|
#[serde(rename_all = "camelCase")]
|
|
pub struct SignOutResult {}
|
|
|
|
impl lsp::request::Request for SignOut {
|
|
type Params = SignOutParams;
|
|
type Result = SignOutResult;
|
|
const METHOD: &'static str = "signOut";
|
|
}
|
|
|
|
pub enum StatusNotification {}
|
|
|
|
#[derive(Debug, Serialize, Deserialize)]
|
|
pub struct StatusNotificationParams {
|
|
pub message: String,
|
|
pub status: String, // One of Normal/InProgress
|
|
}
|
|
|
|
impl lsp::notification::Notification for StatusNotification {
|
|
type Params = StatusNotificationParams;
|
|
const METHOD: &'static str = "statusNotification";
|
|
}
|
|
|
|
pub enum SetEditorInfo {}
|
|
|
|
#[derive(Debug, Serialize, Deserialize)]
|
|
#[serde(rename_all = "camelCase")]
|
|
pub struct SetEditorInfoParams {
|
|
pub editor_info: EditorInfo,
|
|
pub editor_plugin_info: EditorPluginInfo,
|
|
}
|
|
|
|
impl lsp::request::Request for SetEditorInfo {
|
|
type Params = SetEditorInfoParams;
|
|
type Result = String;
|
|
const METHOD: &'static str = "setEditorInfo";
|
|
}
|
|
|
|
#[derive(Debug, Serialize, Deserialize)]
|
|
#[serde(rename_all = "camelCase")]
|
|
pub struct EditorInfo {
|
|
pub name: String,
|
|
pub version: String,
|
|
}
|
|
|
|
#[derive(Debug, Serialize, Deserialize)]
|
|
#[serde(rename_all = "camelCase")]
|
|
pub struct EditorPluginInfo {
|
|
pub name: String,
|
|
pub version: String,
|
|
}
|
|
|
|
pub enum NotifyAccepted {}
|
|
|
|
#[derive(Debug, Serialize, Deserialize)]
|
|
#[serde(rename_all = "camelCase")]
|
|
pub struct NotifyAcceptedParams {
|
|
pub uuid: String,
|
|
}
|
|
|
|
impl lsp::request::Request for NotifyAccepted {
|
|
type Params = NotifyAcceptedParams;
|
|
type Result = String;
|
|
const METHOD: &'static str = "notifyAccepted";
|
|
}
|
|
|
|
pub enum NotifyRejected {}
|
|
|
|
#[derive(Debug, Serialize, Deserialize)]
|
|
#[serde(rename_all = "camelCase")]
|
|
pub struct NotifyRejectedParams {
|
|
pub uuids: Vec<String>,
|
|
}
|
|
|
|
impl lsp::request::Request for NotifyRejected {
|
|
type Params = NotifyRejectedParams;
|
|
type Result = String;
|
|
const METHOD: &'static str = "notifyRejected";
|
|
}
|
|
|
|
#[derive(Debug, Serialize, Deserialize)]
|
|
#[serde(rename_all = "camelCase")]
|
|
pub struct NextEditSuggestions;
|
|
|
|
#[derive(Debug, Serialize, Deserialize)]
|
|
#[serde(rename_all = "camelCase")]
|
|
pub struct NextEditSuggestionsParams {
|
|
pub(crate) text_document: VersionedTextDocumentIdentifier,
|
|
pub(crate) position: lsp::Position,
|
|
}
|
|
|
|
#[derive(Clone, Debug, Serialize, Deserialize)]
|
|
#[serde(rename_all = "camelCase")]
|
|
pub struct NextEditSuggestion {
|
|
pub text: String,
|
|
pub text_document: VersionedTextDocumentIdentifier,
|
|
pub range: lsp::Range,
|
|
pub command: Option<lsp::Command>,
|
|
}
|
|
|
|
#[derive(Debug, Serialize, Deserialize)]
|
|
#[serde(rename_all = "camelCase")]
|
|
pub struct NextEditSuggestionsResult {
|
|
pub edits: Vec<NextEditSuggestion>,
|
|
}
|
|
|
|
impl lsp::request::Request for NextEditSuggestions {
|
|
type Params = NextEditSuggestionsParams;
|
|
type Result = NextEditSuggestionsResult;
|
|
|
|
const METHOD: &'static str = "textDocument/copilotInlineEdit";
|
|
}
|