-
Notifications
You must be signed in to change notification settings - Fork 618
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add context message before listing available tools when no arguments are provided #7641
base: main
Are you sure you want to change the base?
Add context message before listing available tools when no arguments are provided #7641
Conversation
I think you can be a bit more verbose here, like:
There's a bit of awkwardness in the formatting of the list following the
This deviates a bit from the initial scope of this change, but trying to construct a prompt that puts the list in context reveals a problem with the list itself.
You actually need For example, should we omit the executables:
Should we just suggest using |
@zanieb Thanks for the feedback. I will have another iteration. |
I also like your suggestion on omitting the details on the bare run and referring to the Let me see what I can do. |
Another solution would be to change the behavior itself, e.g., allow |
@zanieb I made the context message more descriptive. As a follow-up to this PR, I can create another to improve the error message when the user searches for an executable and fails. Let me know what you think. |
So, taking a deeper look at this... we're getting closer to just showing something like what Clap would show. For example, if we just make the command required Clap will show the help menu: diff --git a/crates/uv-cli/src/lib.rs b/crates/uv-cli/src/lib.rs
index 84614fab3..913df97b8 100644
--- a/crates/uv-cli/src/lib.rs
+++ b/crates/uv-cli/src/lib.rs
@@ -3205,7 +3205,7 @@ pub struct ToolRunArgs {
///
/// WARNING: The documentation for [`Self::command`] is not included in help output
#[command(subcommand)]
- pub command: Option<ExternalCommand>,
+ pub command: ExternalCommand,
/// Use the given package to provide the command.
///
diff --git a/crates/uv/src/commands/tool/run.rs b/crates/uv/src/commands/tool/run.rs
index 1a120f633..3ba74c656 100644
--- a/crates/uv/src/commands/tool/run.rs
+++ b/crates/uv/src/commands/tool/run.rs
@@ -63,7 +63,7 @@ impl Display for ToolRunCommand {
/// Run a command.
pub(crate) async fn run(
- command: Option<ExternalCommand>,
+ command: ExternalCommand,
from: Option<String>,
with: &[RequirementsSource],
show_resolution: bool,
@@ -80,9 +80,9 @@ pub(crate) async fn run(
printer: Printer,
) -> anyhow::Result<ExitStatus> {
// treat empty command as `uv tool list`
- let Some(command) = command else {
- return tool_list(false, false, &cache, printer).await;
- };
+ // let Some(command) = command else {
+ // return tool_list(false, false, &cache, printer).await;
+ // };
let (target, args) = command.split();
let Some(target) = target else {
diff --git a/crates/uv/src/settings.rs b/crates/uv/src/settings.rs
index 641e780a7..60fcd5600 100644
--- a/crates/uv/src/settings.rs
+++ b/crates/uv/src/settings.rs
@@ -287,7 +287,7 @@ impl RunSettings {
#[allow(clippy::struct_excessive_bools)]
#[derive(Debug, Clone)]
pub(crate) struct ToolRunSettings {
- pub(crate) command: Option<ExternalCommand>,
+ pub(crate) command: ExternalCommand,
pub(crate) from: Option<String>,
pub(crate) with: Vec<String>,
pub(crate) with_editable: Vec<String>,
I think we actually do lose something by not listing the installed tools there. So I do think there's something to be said about having a message here, but we need to balance the content — e.g., we can suggest the help menu for more details. I think I'd do something like:
I'd consider indenting or changing the formatting of the list output but that will require some sort of flag for the As another note, you'll need to customize the output based on the |
…are provided Adds a helpful context message when `uvx` is run without arguments to clarify that it is displaying the installed tools. This addresses confusion, such as the one highlighted in issue astral-sh#7348, by making the output more user-friendly and informative. Signed-off-by: Kemal Akkoyun <kakkoyun@gmail.com>
dcf1254
to
c445f6e
Compare
@zanieb I agree that we should use more than just the same functionality provided by Clap. The users could have already used the |
Signed-off-by: Kemal Akkoyun <kakkoyun@gmail.com>
c445f6e
to
a0cc8ad
Compare
b076501
to
68b116d
Compare
cc7c93b
to
158ccfe
Compare
crates/uv/tests/tool_list.rs
Outdated
No tools installed. | ||
|
||
See `uv tool install --help` for more information. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think these could be displayed on the same line. Should we be changing this in this pull request though? It seems like a separate change.
Similarly, we'll need to discuss if we should say "No tools installed" when there are malformed tools installed.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You could probably move all the changes to uv tool list
behavior out of this and into a separate pull request.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Similarly, we'll need to discuss if we should say "No tools installed" when there are malformed tools installed.
Shall we display a different message? Basically, I want to avoid the case where all the tools are malformed and say here are the installed tools, but they are empty.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ah I see. Now I understand why you're tweaking uv tool list
. We probably don't want to see information about malformed tools in the uv tool run
help at all. This sort of suggests we need to stop calling the uv tool list
implementation directly? I think generally that will make things easier, i.e. if there are no installed tools the uv tool run
implementation can handle that directly instead.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
(this probably requires some refactor to uv tool list
so we can avoid duplicating most of what it does?)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, this makes sense now. Let me try to refactor the code a little.
23a87ea
to
50b7917
Compare
50b7917
to
903c77a
Compare
Summary
Adds a helpful context message when
uvx
is run without argumentsTo clarify, it is displaying the installed tools.
This addresses confusion, such as the one highlighted in issue #7348,
by making the output more user-friendly and informative.
Test Plan
Updated the test snapshots to include the new output.
Running the tests locally with
cargo nextest run
confirms that the tests pass.The CI pipeline should also pass.
Manuel Testing
uvx
uv tool list
uv tool run
Signed-off-by: Kemal Akkoyun kakkoyun@gmail.com