Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/project-model/src/project_json.rs')
-rw-r--r--crates/project-model/src/project_json.rs20
1 files changed, 15 insertions, 5 deletions
diff --git a/crates/project-model/src/project_json.rs b/crates/project-model/src/project_json.rs
index 4b55f9d2b9..421ef25a45 100644
--- a/crates/project-model/src/project_json.rs
+++ b/crates/project-model/src/project_json.rs
@@ -276,6 +276,16 @@ impl ProjectJson {
self.manifest.as_ref()
}
+ pub fn crate_by_buildfile(&self, path: &AbsPath) -> Option<Build> {
+ // this is fast enough for now, but it's unfortunate that this is O(crates).
+ let path: &std::path::Path = path.as_ref();
+ self.crates
+ .iter()
+ .filter(|krate| krate.is_workspace_member)
+ .filter_map(|krate| krate.build.clone())
+ .find(|build| build.build_file.as_std_path() == path)
+ }
+
/// Returns the path to the project's manifest or root folder, if no manifest exists.
pub fn manifest_or_root(&self) -> &AbsPath {
self.manifest.as_ref().map_or(&self.project_root, |manifest| manifest.as_ref())
@@ -286,7 +296,7 @@ impl ProjectJson {
}
}
-#[derive(Serialize, Deserialize, Debug, Clone)]
+#[derive(Serialize, Deserialize, Debug, Clone, Eq, PartialEq)]
pub struct ProjectJsonData {
sysroot: Option<Utf8PathBuf>,
sysroot_src: Option<Utf8PathBuf>,
@@ -295,7 +305,7 @@ pub struct ProjectJsonData {
runnables: Vec<RunnableData>,
}
-#[derive(Serialize, Deserialize, Debug, Clone)]
+#[derive(Serialize, Deserialize, Debug, Clone, Eq, PartialEq)]
struct CrateData {
display_name: Option<String>,
root_module: Utf8PathBuf,
@@ -319,7 +329,7 @@ struct CrateData {
build: Option<BuildData>,
}
-#[derive(Serialize, Deserialize, Debug, Clone)]
+#[derive(Serialize, Deserialize, Debug, Clone, Eq, PartialEq)]
#[serde(rename = "edition")]
enum EditionData {
#[serde(rename = "2015")]
@@ -332,7 +342,7 @@ enum EditionData {
Edition2024,
}
-#[derive(Debug, Clone, Serialize, Deserialize)]
+#[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq)]
pub struct BuildData {
label: String,
build_file: Utf8PathBuf,
@@ -419,7 +429,7 @@ pub(crate) struct Dep {
pub(crate) name: CrateName,
}
-#[derive(Serialize, Deserialize, Debug, Clone)]
+#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
struct CrateSource {
include_dirs: Vec<Utf8PathBuf>,
exclude_dirs: Vec<Utf8PathBuf>,