diff --git a/crates/turborepo-lib/src/commands/ls.rs b/crates/turborepo-lib/src/commands/ls.rs index 7a9500e9a31ee..6a7ded2c6086c 100644 --- a/crates/turborepo-lib/src/commands/ls.rs +++ b/crates/turborepo-lib/src/commands/ls.rs @@ -79,6 +79,7 @@ struct PackageTask<'a> { struct PackageDetails<'a> { #[serde(skip)] color_config: ColorConfig, + path: &'a AnchoredSystemPath, name: &'a str, tasks: Vec>, dependencies: Vec<&'a str>, @@ -92,6 +93,7 @@ struct PackageDetailsList<'a> { #[derive(Serialize)] struct PackageDetailsDisplay<'a> { name: &'a str, + path: &'a AnchoredSystemPath, tasks: ItemsWithCount>, dependencies: Vec<&'a str>, } @@ -100,6 +102,7 @@ impl<'a> From> for PackageDetailsDisplay<'a> { fn from(val: PackageDetails<'a>) -> Self { PackageDetailsDisplay { name: val.name, + path: val.path, dependencies: val.dependencies, tasks: ItemsWithCount { count: val.tasks.len(), @@ -232,6 +235,12 @@ impl<'a> PackageDetails<'a> { })?; let transitive_dependencies = package_graph.transitive_closure(Some(&package_node)); + let package_path = package_graph + .package_info(package_node.as_package_name()) + .ok_or_else(|| Error::PackageNotFound { + package: package.to_string(), + })? + .package_path(); let mut package_dep_names: Vec<&str> = transitive_dependencies .into_iter() @@ -245,6 +254,7 @@ impl<'a> PackageDetails<'a> { Ok(Self { color_config, + path: package_path, name: package, dependencies: package_dep_names, tasks: package_json @@ -263,6 +273,8 @@ impl<'a> PackageDetails<'a> { } else { self.dependencies.join(", ") }; + + cprintln!(self.color_config, GREY, "{} ", self.path); println!( "{} {}: {}", name, diff --git a/crates/turborepo/tests/snapshots/ls__basic_monorepo_get_info_for_package_`my-app`_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/ls__basic_monorepo_get_info_for_package_`my-app`_(npm@10.5.0).snap index 7f0f8b3e60be2..e3e587dac8759 100644 --- a/crates/turborepo/tests/snapshots/ls__basic_monorepo_get_info_for_package_`my-app`_(npm@10.5.0).snap +++ b/crates/turborepo/tests/snapshots/ls__basic_monorepo_get_info_for_package_`my-app`_(npm@10.5.0).snap @@ -6,6 +6,7 @@ expression: query_output "packages": [ { "name": "my-app", + "path": "apps/my-app", "tasks": { "count": 2, "items": [ diff --git a/turborepo-tests/integration/tests/command-ls.t b/turborepo-tests/integration/tests/command-ls.t index 5f2c951d3ed79..9e6d12edf85db 100644 --- a/turborepo-tests/integration/tests/command-ls.t +++ b/turborepo-tests/integration/tests/command-ls.t @@ -21,6 +21,7 @@ Run ls with filter Run ls on package `another` $ ${TURBO} ls another WARNING ls command is experimental and may change in the future + packages[/\\]another (re) another depends on: tasks: @@ -30,6 +31,7 @@ Run ls on package `another` Run ls on package `my-app` $ ${TURBO} ls my-app WARNING ls command is experimental and may change in the future + apps[\/\\]my-app (re) my-app depends on: util tasks: