You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
If a cargo workspace has a member project whose Cargo.toml is a symlink to a valid Cargo.toml, then running cargo fmt from the member directory fails with:
Failed to find targets
This utility formats all bin and lib files of the current crate using rustfmt.
Usage: cargo fmt [OPTIONS] [-- <rustfmt_options>...]
Arguments:
[rustfmt_options]... Options passed to rustfmt
Options:
-q, --quiet
No output printed to stdout
-v, --verbose
Use verbose output
--version
Print rustfmt version and exit
-p, --package <package>...
Specify package to format
--manifest-path <manifest-path>
Specify path to Cargo.toml
--message-format <message-format>
Specify message-format: short|json|human
--all
Format all packages, and also their local path-based dependencies
--check
Run rustfmt in check mode
-h, --help
Print help
Here's a diff with a simple workspace that reproduces the issue.
You can git apply in an empty Git repo:
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..96ef6c0
--- /dev/null+++ b/.gitignore@@ -0,0 +1,2 @@+/target+Cargo.lockdiff --git a/Cargo.toml b/Cargo.toml
new file mode 100644
index 0000000..b7695d7
--- /dev/null+++ b/Cargo.toml@@ -0,0 +1,8 @@+[workspace]+resolver = "2"++# lists member "concrete" crates that are in the virtual workspace+members = [+ "lib_a",+ "main",+]diff --git a/lib_a/Cargo.toml b/lib_a/Cargo.toml
new file mode 120000
index 0000000..01b4380
--- /dev/null+++ b/lib_a/Cargo.toml@@ -0,0 +1 @@+../lib_a_Cargo.toml
\ No newline at end of file
diff --git a/lib_a/src/lib.rs b/lib_a/src/lib.rs
new file mode 100644
index 0000000..211bfff
--- /dev/null+++ b/lib_a/src/lib.rs@@ -0,0 +1,3 @@+pub fn add(left: usize, right: usize) -> usize {+ left + right+}diff --git a/lib_a_Cargo.toml b/lib_a_Cargo.toml
new file mode 100644
index 0000000..bab3991
--- /dev/null+++ b/lib_a_Cargo.toml@@ -0,0 +1,6 @@+[package]+name = "lib_a"+version = "0.1.0"+edition = "2021"++[dependencies]diff --git a/main/Cargo.toml b/main/Cargo.toml
new file mode 100644
index 0000000..bd9e3fa
--- /dev/null+++ b/main/Cargo.toml@@ -0,0 +1,7 @@+[package]+name = "main"+version = "0.1.0"+edition = "2021"++[dependencies]+lib_a = { path = "../lib_a" }diff --git a/main/src/main.rs b/main/src/main.rs
new file mode 100644
index 0000000..e7a11a9
--- /dev/null+++ b/main/src/main.rs@@ -0,0 +1,3 @@+fn main() {+ println!("Hello, world!");+}diff --git a/src/main.rs b/src/main.rs
new file mode 100644
index 0000000..e7a11a9
--- /dev/null+++ b/src/main.rs@@ -0,0 +1,3 @@+fn main() {+ println!("Hello, world!");+}
Steps
Create cargo workspace project
Convert one member project's Cargo.toml to a symlink
cd into member project directory from previous step
run cargo fmt
Possible Solution(s)
No response
Notes
Interestingly, even if all of the Cargo.toml files are symlinks, the issue does not occur when running cargo fmt from the root of the workspace.
This occurs on the latest stable cargo 1.78.0 (54d8815d0 2024-03-26) and nightly cargo 1.80.0-nightly (7a6fad098 2024-05-31) as of submitting.
Problem
If a cargo workspace has a member project whose
Cargo.toml
is a symlink to a validCargo.toml
, then runningcargo fmt
from the member directory fails with:Here's a diff with a simple workspace that reproduces the issue.
You can
git apply
in an empty Git repo:Steps
Cargo.toml
to a symlinkcd
into member project directory from previous stepcargo fmt
Possible Solution(s)
No response
Notes
Interestingly, even if all of the
Cargo.toml
files are symlinks, the issue does not occur when runningcargo fmt
from the root of the workspace.This occurs on the latest stable
cargo 1.78.0 (54d8815d0 2024-03-26)
and nightlycargo 1.80.0-nightly (7a6fad098 2024-05-31)
as of submitting.Version
The text was updated successfully, but these errors were encountered: