Skip to content

Commit 6f377df

Browse files
committed
[hermes] Finish shadow crate creation
gherrit-pr-id: G2f234da34d5c9cd516c08526882baaee631fe7d2
1 parent ab89fe4 commit 6f377df

File tree

397 files changed

+104469
-50
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

397 files changed

+104469
-50
lines changed

tools/Cargo.lock

Lines changed: 111 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tools/hermes/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,11 @@ anyhow = "1.0.101"
1111
cargo_metadata = "0.23.1"
1212
clap = { version = "4.5.57", features = ["derive"] }
1313
clap-cargo = { version = "0.18.3", features = ["cargo_metadata"] }
14+
dashmap = "6.1.0"
1415
log = "0.4.29"
1516
miette = { version = "7.6.0", features = ["derive", "fancy"] }
1617
proc-macro2 = { version = "1.0.105", features = ["span-locations"] }
18+
rayon = "1.11.0"
1719
serde = { version = "1.0.228", features = ["derive"] }
1820
serde_json = "1.0.149"
1921
syn = { version = "2.0.114", features = ["full", "visit", "extra-traits", "parsing"] }

tools/hermes/src/main.rs

Lines changed: 4 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -17,46 +17,13 @@ struct Cli {
1717
resolve: resolve::Args,
1818
}
1919

20-
fn main() {
20+
fn main() -> anyhow::Result<()> {
2121
if env::var("HERMES_UI_TEST_MODE").is_ok() {
2222
ui_test_shim::run();
23-
return;
23+
return Ok(());
2424
}
2525

2626
let args = Cli::parse();
27-
28-
// TODO: Better error handling than `.unwrap()`.
29-
let roots = resolve::resolve_roots(&args.resolve).unwrap();
30-
31-
// TODO: What artifacts need to be updated (not just copied)? E.g., do we
32-
// need to update `Cargo.toml` to rewrite relative paths?
33-
34-
// TODO: From each root, parse and walk referenced modules.
35-
let mut has_errors = false;
36-
for (package, kind, path) in roots.roots {
37-
let mut edits = Vec::new();
38-
let res = parse::read_file_and_scan_compilation_unit(&path, |_src, res| {
39-
if let Err(e) = res {
40-
has_errors = true;
41-
eprint!("{:?}", miette::Report::new(e));
42-
} else if let Ok(item) = res {
43-
transform::append_edits(&item, &mut edits);
44-
}
45-
});
46-
47-
let (source, unloaded_modules) = res.unwrap_or_else(|e| {
48-
eprintln!("Error parsing file: {}", e);
49-
exit(1);
50-
});
51-
52-
if has_errors {
53-
exit(1);
54-
}
55-
56-
let mut source = source.into_bytes();
57-
transform::apply_edits(&mut source, &edits);
58-
}
59-
60-
// TODO: Create shadow skeleton.
61-
// shadow::create_shadow_skeleton(&roots.workspace, &roots.shadow_root, &roots.cargo_target_dir, todo!()).unwrap();
27+
let roots = resolve::resolve_roots(&args.resolve)?;
28+
shadow::build_shadow_crate(&roots)
6229
}

tools/hermes/src/resolve.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,11 @@ fn resolve_shadow_path(metadata: &Metadata) -> PathBuf {
157157
// NOTE: Automatically handles `CARGO_TARGET_DIR` env var.
158158
let target_dir = metadata.target_directory.as_std_path();
159159

160+
// Used by integration tests to ensure deterministic shadow dir names.
161+
if let Ok(name) = std::env::var("HERMES_TEST_SHADOW_NAME") {
162+
return target_dir.join(name);
163+
}
164+
160165
// Hash the path to the workspace root to avoid collisions between different
161166
// workspaces using the same target directory.
162167
let workspace_root_hash = {
@@ -195,7 +200,10 @@ fn resolve_packages<'a>(
195200
}
196201
} else {
197202
// Resolve default (Current Working Directory)
198-
let cwd = env::current_dir().context("Failed to get CWD")?;
203+
let cwd = env::current_dir()
204+
.context("Failed to get CWD")?
205+
.canonicalize()
206+
.context("Failed to canonicalize CWD")?;
199207

200208
// Find the package whose manifest directory is an ancestor of CWD
201209
let current_pkg = metadata.packages.iter().find(|p| {

0 commit comments

Comments
 (0)