Add extensions to the remote server (#20049)

TODO:

- [x] Double check strange PHP env detection
- [x] Clippy & etc.

Release Notes:

- Added support for extension languages on the remote server

---------

Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>
This commit is contained in:
Mikayla Maki 2024-11-20 18:21:09 -08:00 committed by GitHub
parent 0e62b6dddd
commit a03770837e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
11 changed files with 606 additions and 4 deletions

View file

@ -29,6 +29,7 @@ chrono.workspace = true
clap.workspace = true
client.workspace = true
env_logger.workspace = true
extension_host.workspace = true
fs.workspace = true
futures.workspace = true
git.workspace = true

View file

@ -1,4 +1,5 @@
use anyhow::{anyhow, Result};
use extension_host::headless_host::HeadlessExtensionStore;
use fs::Fs;
use gpui::{AppContext, AsyncAppContext, Context as _, Model, ModelContext, PromptLevel};
use http_client::HttpClient;
@ -37,6 +38,7 @@ pub struct HeadlessProject {
pub settings_observer: Model<SettingsObserver>,
pub next_entry_id: Arc<AtomicUsize>,
pub languages: Arc<LanguageRegistry>,
pub extensions: Model<HeadlessExtensionStore>,
}
pub struct HeadlessAppState {
@ -147,6 +149,15 @@ impl HeadlessProject {
)
.detach();
let extensions = HeadlessExtensionStore::new(
fs.clone(),
http_client.clone(),
languages.clone(),
paths::remote_extensions_dir().to_path_buf(),
node_runtime,
cx,
);
let client: AnyProtoClient = session.clone().into();
session.subscribe_to_entity(SSH_PROJECT_ID, &worktree_store);
@ -173,6 +184,15 @@ impl HeadlessProject {
client.add_model_request_handler(BufferStore::handle_update_buffer);
client.add_model_message_handler(BufferStore::handle_close_buffer);
client.add_request_handler(
extensions.clone().downgrade(),
HeadlessExtensionStore::handle_sync_extensions,
);
client.add_request_handler(
extensions.clone().downgrade(),
HeadlessExtensionStore::handle_install_extension,
);
BufferStore::init(&client);
WorktreeStore::init(&client);
SettingsObserver::init(&client);
@ -190,6 +210,7 @@ impl HeadlessProject {
task_store,
next_entry_id: Default::default(),
languages,
extensions,
}
}