From a07cad16ab6271809d30ecf723420b3e41ec42ef Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Wed, 24 Jun 2020 14:57:37 +0200 Subject: Rename json_project -> project_json --- crates/ra_project_model/src/json_project.rs | 95 ----------------------------- crates/ra_project_model/src/lib.rs | 16 ++--- crates/ra_project_model/src/project_json.rs | 95 +++++++++++++++++++++++++++++ 3 files changed, 103 insertions(+), 103 deletions(-) delete mode 100644 crates/ra_project_model/src/json_project.rs create mode 100644 crates/ra_project_model/src/project_json.rs (limited to 'crates/ra_project_model') diff --git a/crates/ra_project_model/src/json_project.rs b/crates/ra_project_model/src/json_project.rs deleted file mode 100644 index ee2de4c25..000000000 --- a/crates/ra_project_model/src/json_project.rs +++ /dev/null @@ -1,95 +0,0 @@ -//! FIXME: write short doc here - -use std::path::PathBuf; - -use rustc_hash::FxHashSet; -use serde::Deserialize; - -/// Roots and crates that compose this Rust project. -#[derive(Clone, Debug, Deserialize)] -pub struct JsonProject { - pub(crate) roots: Vec, - pub(crate) crates: Vec, -} - -/// A root points to the directory which contains Rust crates. rust-analyzer watches all files in -/// all roots. Roots might be nested. -#[derive(Clone, Debug, Deserialize)] -#[serde(transparent)] -pub struct Root { - pub(crate) path: PathBuf, -} - -/// A crate points to the root module of a crate and lists the dependencies of the crate. This is -/// useful in creating the crate graph. -#[derive(Clone, Debug, Deserialize)] -pub struct Crate { - pub(crate) root_module: PathBuf, - pub(crate) edition: Edition, - pub(crate) deps: Vec, - - #[serde(default)] - pub(crate) cfg: FxHashSet, - - pub(crate) out_dir: Option, - pub(crate) proc_macro_dylib_path: Option, -} - -#[derive(Clone, Copy, Debug, Deserialize)] -#[serde(rename = "edition")] -pub enum Edition { - #[serde(rename = "2015")] - Edition2015, - #[serde(rename = "2018")] - Edition2018, -} - -/// Identifies a crate by position in the crates array. -#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd)] -#[serde(transparent)] -pub struct CrateId(pub usize); - -/// A dependency of a crate, identified by its id in the crates array and name. -#[derive(Clone, Debug, Deserialize)] -pub struct Dep { - #[serde(rename = "crate")] - pub(crate) krate: CrateId, - pub(crate) name: String, -} - -#[cfg(test)] -mod tests { - use super::*; - use serde_json::json; - - #[test] - fn test_crate_deserialization() { - let raw_json = json!( { - "crate_id": 2, - "root_module": "this/is/a/file/path.rs", - "deps": [ - { - "crate": 1, - "name": "some_dep_crate" - }, - ], - "edition": "2015", - "cfg": [ - "atom_1", - "atom_2", - "feature=feature_1", - "feature=feature_2", - "other=value", - ], - - }); - - let krate: Crate = serde_json::from_value(raw_json).unwrap(); - - assert!(krate.cfg.contains(&"atom_1".to_string())); - assert!(krate.cfg.contains(&"atom_2".to_string())); - assert!(krate.cfg.contains(&"feature=feature_1".to_string())); - assert!(krate.cfg.contains(&"feature=feature_2".to_string())); - assert!(krate.cfg.contains(&"other=value".to_string())); - } -} diff --git a/crates/ra_project_model/src/lib.rs b/crates/ra_project_model/src/lib.rs index ac88532f0..7e8e00df8 100644 --- a/crates/ra_project_model/src/lib.rs +++ b/crates/ra_project_model/src/lib.rs @@ -1,7 +1,7 @@ //! FIXME: write short doc here mod cargo_workspace; -mod json_project; +mod project_json; mod sysroot; use std::{ @@ -20,7 +20,7 @@ use serde_json::from_reader; pub use crate::{ cargo_workspace::{CargoConfig, CargoWorkspace, Package, Target, TargetKind}, - json_project::JsonProject, + project_json::ProjectJson, sysroot::Sysroot, }; pub use ra_proc_macro::ProcMacroClient; @@ -30,7 +30,7 @@ pub enum ProjectWorkspace { /// Project workspace was discovered by running `cargo metadata` and `rustc --print sysroot`. Cargo { cargo: CargoWorkspace, sysroot: Sysroot }, /// Project workspace was manually specified using a `rust-project.json` file. - Json { project: JsonProject, project_location: AbsPathBuf }, + Json { project: ProjectJson, project_location: AbsPathBuf }, } /// `PackageRoot` describes a package root folder. @@ -259,8 +259,8 @@ impl ProjectWorkspace { let file_path = project_location.join(&krate.root_module); let file_id = load(&file_path)?; let edition = match krate.edition { - json_project::Edition::Edition2015 => Edition::Edition2015, - json_project::Edition::Edition2018 => Edition::Edition2018, + project_json::Edition::Edition2015 => Edition::Edition2015, + project_json::Edition::Edition2018 => Edition::Edition2018, }; let cfg_options = { let mut opts = CfgOptions::default(); @@ -290,7 +290,7 @@ impl ProjectWorkspace { .map(|it| proc_macro_client.by_dylib_path(&it)); // FIXME: No crate name in json definition such that we cannot add OUT_DIR to env Some(( - json_project::CrateId(seq_index), + project_json::CrateId(seq_index), crate_graph.add_crate_root( file_id, edition, @@ -306,7 +306,7 @@ impl ProjectWorkspace { for (id, krate) in project.crates.iter().enumerate() { for dep in &krate.deps { - let from_crate_id = json_project::CrateId(id); + let from_crate_id = project_json::CrateId(id); let to_crate_id = dep.krate; if let (Some(&from), Some(&to)) = (crates.get(&from_crate_id), crates.get(&to_crate_id)) @@ -528,7 +528,7 @@ impl ProjectWorkspace { ProjectWorkspace::Cargo { cargo, .. } => { Some(cargo.workspace_root()).filter(|root| path.starts_with(root)) } - ProjectWorkspace::Json { project: JsonProject { roots, .. }, .. } => roots + ProjectWorkspace::Json { project: ProjectJson { roots, .. }, .. } => roots .iter() .find(|root| path.starts_with(&root.path)) .map(|root| root.path.as_ref()), diff --git a/crates/ra_project_model/src/project_json.rs b/crates/ra_project_model/src/project_json.rs new file mode 100644 index 000000000..e663bb4d7 --- /dev/null +++ b/crates/ra_project_model/src/project_json.rs @@ -0,0 +1,95 @@ +//! FIXME: write short doc here + +use std::path::PathBuf; + +use rustc_hash::FxHashSet; +use serde::Deserialize; + +/// Roots and crates that compose this Rust project. +#[derive(Clone, Debug, Deserialize)] +pub struct ProjectJson { + pub(crate) roots: Vec, + pub(crate) crates: Vec, +} + +/// A root points to the directory which contains Rust crates. rust-analyzer watches all files in +/// all roots. Roots might be nested. +#[derive(Clone, Debug, Deserialize)] +#[serde(transparent)] +pub struct Root { + pub(crate) path: PathBuf, +} + +/// A crate points to the root module of a crate and lists the dependencies of the crate. This is +/// useful in creating the crate graph. +#[derive(Clone, Debug, Deserialize)] +pub struct Crate { + pub(crate) root_module: PathBuf, + pub(crate) edition: Edition, + pub(crate) deps: Vec, + + #[serde(default)] + pub(crate) cfg: FxHashSet, + + pub(crate) out_dir: Option, + pub(crate) proc_macro_dylib_path: Option, +} + +#[derive(Clone, Copy, Debug, Deserialize)] +#[serde(rename = "edition")] +pub enum Edition { + #[serde(rename = "2015")] + Edition2015, + #[serde(rename = "2018")] + Edition2018, +} + +/// Identifies a crate by position in the crates array. +#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd)] +#[serde(transparent)] +pub struct CrateId(pub usize); + +/// A dependency of a crate, identified by its id in the crates array and name. +#[derive(Clone, Debug, Deserialize)] +pub struct Dep { + #[serde(rename = "crate")] + pub(crate) krate: CrateId, + pub(crate) name: String, +} + +#[cfg(test)] +mod tests { + use super::*; + use serde_json::json; + + #[test] + fn test_crate_deserialization() { + let raw_json = json!( { + "crate_id": 2, + "root_module": "this/is/a/file/path.rs", + "deps": [ + { + "crate": 1, + "name": "some_dep_crate" + }, + ], + "edition": "2015", + "cfg": [ + "atom_1", + "atom_2", + "feature=feature_1", + "feature=feature_2", + "other=value", + ], + + }); + + let krate: Crate = serde_json::from_value(raw_json).unwrap(); + + assert!(krate.cfg.contains(&"atom_1".to_string())); + assert!(krate.cfg.contains(&"atom_2".to_string())); + assert!(krate.cfg.contains(&"feature=feature_1".to_string())); + assert!(krate.cfg.contains(&"feature=feature_2".to_string())); + assert!(krate.cfg.contains(&"other=value".to_string())); + } +} -- cgit v1.2.3