Inject venv environment via the toolchain (#36576)
Instead of manually constructing the venv we now ask the python toolchain for the relevant information, unifying the approach of vent inspection Fixes https://github.com/zed-industries/zed/issues/27350 Release Notes: - Improved the detection of python virtual environments for terminals and tasks in remote projects.
This commit is contained in:
@@ -11,13 +11,14 @@ use std::{
|
||||
|
||||
use async_trait::async_trait;
|
||||
use collections::HashMap;
|
||||
use fs::Fs;
|
||||
use gpui::{AsyncApp, SharedString};
|
||||
use settings::WorktreeId;
|
||||
|
||||
use crate::{LanguageName, ManifestName};
|
||||
|
||||
/// Represents a single toolchain.
|
||||
#[derive(Clone, Debug, Eq)]
|
||||
#[derive(Clone, Eq, Debug)]
|
||||
pub struct Toolchain {
|
||||
/// User-facing label
|
||||
pub name: SharedString,
|
||||
@@ -29,21 +30,29 @@ pub struct Toolchain {
|
||||
|
||||
impl std::hash::Hash for Toolchain {
|
||||
fn hash<H: std::hash::Hasher>(&self, state: &mut H) {
|
||||
self.name.hash(state);
|
||||
self.path.hash(state);
|
||||
self.language_name.hash(state);
|
||||
let Self {
|
||||
name,
|
||||
path,
|
||||
language_name,
|
||||
as_json: _,
|
||||
} = self;
|
||||
name.hash(state);
|
||||
path.hash(state);
|
||||
language_name.hash(state);
|
||||
}
|
||||
}
|
||||
|
||||
impl PartialEq for Toolchain {
|
||||
fn eq(&self, other: &Self) -> bool {
|
||||
let Self {
|
||||
name,
|
||||
path,
|
||||
language_name,
|
||||
as_json: _,
|
||||
} = self;
|
||||
// Do not use as_json for comparisons; it shouldn't impact equality, as it's not user-surfaced.
|
||||
// Thus, there could be multiple entries that look the same in the UI.
|
||||
(&self.name, &self.path, &self.language_name).eq(&(
|
||||
&other.name,
|
||||
&other.path,
|
||||
&other.language_name,
|
||||
))
|
||||
(name, path, language_name).eq(&(&other.name, &other.path, &other.language_name))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,6 +68,7 @@ pub trait ToolchainLister: Send + Sync {
|
||||
fn term(&self) -> SharedString;
|
||||
/// Returns the name of the manifest file for this toolchain.
|
||||
fn manifest_name(&self) -> ManifestName;
|
||||
async fn activation_script(&self, toolchain: &Toolchain, fs: &dyn Fs) -> Option<String>;
|
||||
}
|
||||
|
||||
#[async_trait(?Send)]
|
||||
@@ -82,7 +92,7 @@ pub trait LocalLanguageToolchainStore: Send + Sync + 'static {
|
||||
) -> Option<Toolchain>;
|
||||
}
|
||||
|
||||
#[async_trait(?Send )]
|
||||
#[async_trait(?Send)]
|
||||
impl<T: LocalLanguageToolchainStore> LanguageToolchainStore for T {
|
||||
async fn active_toolchain(
|
||||
self: Arc<Self>,
|
||||
|
||||
Reference in New Issue
Block a user