diff options
Diffstat (limited to 'crates')
-rw-r--r-- | crates/proc_macro_srv/Cargo.toml | 1 | ||||
-rw-r--r-- | crates/project_model/src/cargo_workspace.rs | 22 | ||||
-rw-r--r-- | crates/project_model/src/lib.rs | 7 | ||||
-rw-r--r-- | crates/test_utils/Cargo.toml | 2 | ||||
-rw-r--r-- | crates/test_utils/src/lib.rs | 19 |
5 files changed, 44 insertions, 7 deletions
diff --git a/crates/proc_macro_srv/Cargo.toml b/crates/proc_macro_srv/Cargo.toml index df9a55c10..f78c17194 100644 --- a/crates/proc_macro_srv/Cargo.toml +++ b/crates/proc_macro_srv/Cargo.toml | |||
@@ -21,7 +21,6 @@ test_utils = { path = "../test_utils", version = "0.0.0" } | |||
21 | 21 | ||
22 | [dev-dependencies] | 22 | [dev-dependencies] |
23 | cargo_metadata = "=0.12.0" | 23 | cargo_metadata = "=0.12.0" |
24 | difference = "2.0.0" | ||
25 | 24 | ||
26 | # used as proc macro test targets | 25 | # used as proc macro test targets |
27 | serde_derive = "1.0.106" | 26 | serde_derive = "1.0.106" |
diff --git a/crates/project_model/src/cargo_workspace.rs b/crates/project_model/src/cargo_workspace.rs index 1700cb8a7..0e6679542 100644 --- a/crates/project_model/src/cargo_workspace.rs +++ b/crates/project_model/src/cargo_workspace.rs | |||
@@ -80,19 +80,35 @@ pub type Package = Idx<PackageData>; | |||
80 | 80 | ||
81 | pub type Target = Idx<TargetData>; | 81 | pub type Target = Idx<TargetData>; |
82 | 82 | ||
83 | /// Information associated with a cargo crate | ||
83 | #[derive(Debug, Clone, Eq, PartialEq)] | 84 | #[derive(Debug, Clone, Eq, PartialEq)] |
84 | pub struct PackageData { | 85 | pub struct PackageData { |
86 | /// Version given in the `Cargo.toml` | ||
85 | pub version: String, | 87 | pub version: String, |
88 | /// Name as given in the `Cargo.toml` | ||
86 | pub name: String, | 89 | pub name: String, |
90 | /// Path containing the `Cargo.toml` | ||
87 | pub manifest: AbsPathBuf, | 91 | pub manifest: AbsPathBuf, |
92 | /// Targets provided by the crate (lib, bin, example, test, ...) | ||
88 | pub targets: Vec<Target>, | 93 | pub targets: Vec<Target>, |
94 | /// Is this package a member of the current workspace | ||
89 | pub is_member: bool, | 95 | pub is_member: bool, |
96 | /// List of packages this package depends on | ||
90 | pub dependencies: Vec<PackageDependency>, | 97 | pub dependencies: Vec<PackageDependency>, |
98 | /// Rust edition for this package | ||
91 | pub edition: Edition, | 99 | pub edition: Edition, |
100 | /// List of features to activate | ||
92 | pub features: Vec<String>, | 101 | pub features: Vec<String>, |
102 | /// List of config flags defined by this package's build script | ||
93 | pub cfgs: Vec<CfgFlag>, | 103 | pub cfgs: Vec<CfgFlag>, |
104 | /// List of cargo-related environment variables with their value | ||
105 | /// | ||
106 | /// If the package has a build script which defines environment variables, | ||
107 | /// they can also be found here. | ||
94 | pub envs: Vec<(String, String)>, | 108 | pub envs: Vec<(String, String)>, |
109 | /// Directory where a build script might place its output | ||
95 | pub out_dir: Option<AbsPathBuf>, | 110 | pub out_dir: Option<AbsPathBuf>, |
111 | /// Path to the proc-macro library file if this package exposes proc-macros | ||
96 | pub proc_macro_dylib_path: Option<AbsPathBuf>, | 112 | pub proc_macro_dylib_path: Option<AbsPathBuf>, |
97 | } | 113 | } |
98 | 114 | ||
@@ -102,12 +118,18 @@ pub struct PackageDependency { | |||
102 | pub name: String, | 118 | pub name: String, |
103 | } | 119 | } |
104 | 120 | ||
121 | /// Information associated with a package's target | ||
105 | #[derive(Debug, Clone, Eq, PartialEq)] | 122 | #[derive(Debug, Clone, Eq, PartialEq)] |
106 | pub struct TargetData { | 123 | pub struct TargetData { |
124 | /// Package that provided this target | ||
107 | pub package: Package, | 125 | pub package: Package, |
126 | /// Name as given in the `Cargo.toml` or generated from the file name | ||
108 | pub name: String, | 127 | pub name: String, |
128 | /// Path to the main source file of the target | ||
109 | pub root: AbsPathBuf, | 129 | pub root: AbsPathBuf, |
130 | /// Kind of target | ||
110 | pub kind: TargetKind, | 131 | pub kind: TargetKind, |
132 | /// Is this target a proc-macro | ||
111 | pub is_proc_macro: bool, | 133 | pub is_proc_macro: bool, |
112 | } | 134 | } |
113 | 135 | ||
diff --git a/crates/project_model/src/lib.rs b/crates/project_model/src/lib.rs index 24aa9b8fa..aabb7a47d 100644 --- a/crates/project_model/src/lib.rs +++ b/crates/project_model/src/lib.rs | |||
@@ -1,9 +1,9 @@ | |||
1 | //! FIXME: write short doc here | 1 | //! FIXME: write short doc here |
2 | 2 | ||
3 | mod cargo_workspace; | 3 | mod cargo_workspace; |
4 | mod cfg_flag; | ||
4 | mod project_json; | 5 | mod project_json; |
5 | mod sysroot; | 6 | mod sysroot; |
6 | mod cfg_flag; | ||
7 | mod workspace; | 7 | mod workspace; |
8 | 8 | ||
9 | use std::{ | 9 | use std::{ |
@@ -17,7 +17,10 @@ use paths::{AbsPath, AbsPathBuf}; | |||
17 | use rustc_hash::FxHashSet; | 17 | use rustc_hash::FxHashSet; |
18 | 18 | ||
19 | pub use crate::{ | 19 | pub use crate::{ |
20 | cargo_workspace::{CargoConfig, CargoWorkspace, Package, Target, TargetKind}, | 20 | cargo_workspace::{ |
21 | CargoConfig, CargoWorkspace, Package, PackageData, PackageDependency, Target, TargetData, | ||
22 | TargetKind, | ||
23 | }, | ||
21 | project_json::{ProjectJson, ProjectJsonData}, | 24 | project_json::{ProjectJson, ProjectJsonData}, |
22 | sysroot::Sysroot, | 25 | sysroot::Sysroot, |
23 | workspace::{PackageRoot, ProjectWorkspace}, | 26 | workspace::{PackageRoot, ProjectWorkspace}, |
diff --git a/crates/test_utils/Cargo.toml b/crates/test_utils/Cargo.toml index 93eecc678..06341f003 100644 --- a/crates/test_utils/Cargo.toml +++ b/crates/test_utils/Cargo.toml | |||
@@ -11,7 +11,7 @@ doctest = false | |||
11 | 11 | ||
12 | [dependencies] | 12 | [dependencies] |
13 | # Avoid adding deps here, this crate is widely used in tests it should compile fast! | 13 | # Avoid adding deps here, this crate is widely used in tests it should compile fast! |
14 | difference = "2.0.0" | 14 | dissimilar = "1.0.2" |
15 | text-size = "1.0.0" | 15 | text-size = "1.0.0" |
16 | serde_json = "1.0.48" | 16 | serde_json = "1.0.48" |
17 | rustc-hash = "1.1.0" | 17 | rustc-hash = "1.1.0" |
diff --git a/crates/test_utils/src/lib.rs b/crates/test_utils/src/lib.rs index 05940a546..656dd2072 100644 --- a/crates/test_utils/src/lib.rs +++ b/crates/test_utils/src/lib.rs | |||
@@ -20,7 +20,7 @@ use serde_json::Value; | |||
20 | use stdx::lines_with_ends; | 20 | use stdx::lines_with_ends; |
21 | use text_size::{TextRange, TextSize}; | 21 | use text_size::{TextRange, TextSize}; |
22 | 22 | ||
23 | pub use difference::Changeset as __Changeset; | 23 | pub use dissimilar::diff as __diff; |
24 | pub use rustc_hash::FxHashMap; | 24 | pub use rustc_hash::FxHashMap; |
25 | 25 | ||
26 | pub use crate::fixture::Fixture; | 26 | pub use crate::fixture::Fixture; |
@@ -45,8 +45,8 @@ macro_rules! assert_eq_text { | |||
45 | if left.trim() == right.trim() { | 45 | if left.trim() == right.trim() { |
46 | std::eprintln!("Left:\n{:?}\n\nRight:\n{:?}\n\nWhitespace difference\n", left, right); | 46 | std::eprintln!("Left:\n{:?}\n\nRight:\n{:?}\n\nWhitespace difference\n", left, right); |
47 | } else { | 47 | } else { |
48 | let changeset = $crate::__Changeset::new(left, right, "\n"); | 48 | let diff = $crate::__diff(left, right); |
49 | std::eprintln!("Left:\n{}\n\nRight:\n{}\n\nDiff:\n{}\n", left, right, changeset); | 49 | std::eprintln!("Left:\n{}\n\nRight:\n{}\n\nDiff:\n{}\n", left, right, $crate::format_diff(diff)); |
50 | } | 50 | } |
51 | std::eprintln!($($tt)*); | 51 | std::eprintln!($($tt)*); |
52 | panic!("text differs"); | 52 | panic!("text differs"); |
@@ -392,3 +392,16 @@ pub fn project_dir() -> PathBuf { | |||
392 | let dir = env!("CARGO_MANIFEST_DIR"); | 392 | let dir = env!("CARGO_MANIFEST_DIR"); |
393 | PathBuf::from(dir).parent().unwrap().parent().unwrap().to_owned() | 393 | PathBuf::from(dir).parent().unwrap().parent().unwrap().to_owned() |
394 | } | 394 | } |
395 | |||
396 | pub fn format_diff(chunks: Vec<dissimilar::Chunk>) -> String { | ||
397 | let mut buf = String::new(); | ||
398 | for chunk in chunks { | ||
399 | let formatted = match chunk { | ||
400 | dissimilar::Chunk::Equal(text) => text.into(), | ||
401 | dissimilar::Chunk::Delete(text) => format!("\x1b[41m{}\x1b[0m", text), | ||
402 | dissimilar::Chunk::Insert(text) => format!("\x1b[42m{}\x1b[0m", text), | ||
403 | }; | ||
404 | buf.push_str(&formatted); | ||
405 | } | ||
406 | buf | ||
407 | } | ||