
- **WIP: reorganize dispositions** - **Introduce a LocalToolchainStore trait and use it for LspAdapter methods** Closes #35782 Closes #27331 Release Notes: - Python: Improved propagation of a selected virtual environment into the LSP configuration. This should the make all language-related features such as Go to definition or Find all references more reliable. --------- Co-authored-by: Cole Miller <cole@zed.dev> Co-authored-by: Lukas Wirth <lukas@zed.dev>
58 lines
1.6 KiB
Rust
58 lines
1.6 KiB
Rust
use std::{borrow::Borrow, path::Path, sync::Arc};
|
|
|
|
use gpui::SharedString;
|
|
use settings::WorktreeId;
|
|
|
|
#[derive(Clone, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
|
|
pub struct ManifestName(SharedString);
|
|
|
|
impl Borrow<SharedString> for ManifestName {
|
|
fn borrow(&self) -> &SharedString {
|
|
&self.0
|
|
}
|
|
}
|
|
|
|
impl Borrow<str> for ManifestName {
|
|
fn borrow(&self) -> &str {
|
|
&self.0
|
|
}
|
|
}
|
|
|
|
impl From<SharedString> for ManifestName {
|
|
fn from(value: SharedString) -> Self {
|
|
Self(value)
|
|
}
|
|
}
|
|
|
|
impl From<ManifestName> for SharedString {
|
|
fn from(value: ManifestName) -> Self {
|
|
value.0
|
|
}
|
|
}
|
|
|
|
impl AsRef<SharedString> for ManifestName {
|
|
fn as_ref(&self) -> &SharedString {
|
|
&self.0
|
|
}
|
|
}
|
|
|
|
/// Represents a manifest query; given a path to a file, [ManifestSearcher] is tasked with finding a path to the directory containing the manifest for that file.
|
|
///
|
|
/// Since parts of the path might have already been explored, there's an additional `depth` parameter that indicates to what ancestry level a given path should be explored.
|
|
/// For example, given a path like `foo/bar/baz`, a depth of 2 would explore `foo/bar/baz` and `foo/bar`, but not `foo`.
|
|
pub struct ManifestQuery {
|
|
/// Path to the file, relative to worktree root.
|
|
pub path: Arc<Path>,
|
|
pub depth: usize,
|
|
pub delegate: Arc<dyn ManifestDelegate>,
|
|
}
|
|
|
|
pub trait ManifestProvider {
|
|
fn name(&self) -> ManifestName;
|
|
fn search(&self, query: ManifestQuery) -> Option<Arc<Path>>;
|
|
}
|
|
|
|
pub trait ManifestDelegate: Send + Sync {
|
|
fn worktree_id(&self) -> WorktreeId;
|
|
fn exists(&self, path: &Path, is_dir: Option<bool>) -> bool;
|
|
}
|