mirror of
https://github.com/denoland/deno.git
synced 2024-11-21 15:04:11 -05:00
feat: better help output (#24958)
This commit is contained in:
parent
9bdab6fb6b
commit
e5f0058b74
6 changed files with 839 additions and 860 deletions
74
Cargo.lock
generated
74
Cargo.lock
generated
|
@ -14,9 +14,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "addr2line"
|
name = "addr2line"
|
||||||
version = "0.21.0"
|
version = "0.22.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
|
checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"gimli",
|
"gimli",
|
||||||
]
|
]
|
||||||
|
@ -361,9 +361,9 @@ checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "backtrace"
|
name = "backtrace"
|
||||||
version = "0.3.71"
|
version = "0.3.73"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d"
|
checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"addr2line",
|
"addr2line",
|
||||||
"cc",
|
"cc",
|
||||||
|
@ -620,9 +620,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cc"
|
name = "cc"
|
||||||
version = "1.0.92"
|
version = "1.1.7"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2678b2e3449475e95b0aa6f9b506a28e61b3dc8996592b983695e8ebb58a8b41"
|
checksum = "26a5c3fd7bfa1ce3897a3a3501d362b2d87b7f2583ebcb4a949ec25911025cbc"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"jobserver",
|
"jobserver",
|
||||||
"libc",
|
"libc",
|
||||||
|
@ -682,39 +682,40 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clap"
|
name = "clap"
|
||||||
version = "4.4.17"
|
version = "4.5.13"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "80932e03c33999b9235edb8655bc9df3204adc9887c2f95b50cb1deb9fd54253"
|
checksum = "0fbb260a053428790f3de475e304ff84cdbc4face759ea7a3e64c1edd938a7fc"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap_builder",
|
"clap_builder",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clap_builder"
|
name = "clap_builder"
|
||||||
version = "4.4.17"
|
version = "4.5.13"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d6c0db58c659eef1c73e444d298c27322a1b52f6927d2ad470c0c0f96fa7b8fa"
|
checksum = "64b17d7ea74e9f833c7dbf2cbe4fb12ff26783eda4782a8975b72f895c9b4d99"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anstream",
|
"anstream",
|
||||||
"anstyle",
|
"anstyle",
|
||||||
"clap_lex",
|
"clap_lex",
|
||||||
"strsim",
|
"strsim 0.11.1",
|
||||||
|
"terminal_size",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clap_complete"
|
name = "clap_complete"
|
||||||
version = "4.4.7"
|
version = "4.5.12"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "dfb0d4825b75ff281318c393e8e1b80c4da9fb75a6b1d98547d389d6fe1f48d2"
|
checksum = "a8670053e87c316345e384ca1f3eba3006fc6355ed8b8a1140d104e109e3df34"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap",
|
"clap",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clap_complete_fig"
|
name = "clap_complete_fig"
|
||||||
version = "4.4.2"
|
version = "4.5.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "87e571d70e22ec91d34e1c5317c8308035a2280d925167646bf094fc5de1737c"
|
checksum = "d494102c8ff3951810c72baf96910b980fb065ca5d3101243e6a8dc19747c86b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap",
|
"clap",
|
||||||
"clap_complete",
|
"clap_complete",
|
||||||
|
@ -722,9 +723,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clap_lex"
|
name = "clap_lex"
|
||||||
version = "0.6.0"
|
version = "0.7.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1"
|
checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cli_tests"
|
name = "cli_tests"
|
||||||
|
@ -1068,7 +1069,7 @@ dependencies = [
|
||||||
"ident_case",
|
"ident_case",
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"strsim",
|
"strsim 0.10.0",
|
||||||
"syn 1.0.109",
|
"syn 1.0.109",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -1214,6 +1215,7 @@ dependencies = [
|
||||||
"sha2",
|
"sha2",
|
||||||
"shell-escape",
|
"shell-escape",
|
||||||
"spki",
|
"spki",
|
||||||
|
"strsim 0.11.1",
|
||||||
"tar",
|
"tar",
|
||||||
"tempfile",
|
"tempfile",
|
||||||
"test_server",
|
"test_server",
|
||||||
|
@ -3184,9 +3186,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gimli"
|
name = "gimli"
|
||||||
version = "0.28.1"
|
version = "0.29.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253"
|
checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gl_generator"
|
name = "gl_generator"
|
||||||
|
@ -3878,9 +3880,9 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "jobserver"
|
name = "jobserver"
|
||||||
version = "0.1.29"
|
version = "0.1.32"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f08474e32172238f2827bd160c67871cdb2801430f65c3979184dc362e3ca118"
|
checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
]
|
]
|
||||||
|
@ -4666,9 +4668,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "object"
|
name = "object"
|
||||||
version = "0.32.2"
|
version = "0.36.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441"
|
checksum = "3f203fa8daa7bb185f760ae12bd8e097f63d17041dcdcaf675ac54cdf863170e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"memchr",
|
"memchr",
|
||||||
]
|
]
|
||||||
|
@ -5841,9 +5843,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rustc-demangle"
|
name = "rustc-demangle"
|
||||||
version = "0.1.23"
|
version = "0.1.24"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
|
checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rustc-hash"
|
name = "rustc-hash"
|
||||||
|
@ -6547,6 +6549,12 @@ version = "0.10.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
|
checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "strsim"
|
||||||
|
version = "0.11.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "strum"
|
name = "strum"
|
||||||
version = "0.25.0"
|
version = "0.25.0"
|
||||||
|
@ -7140,6 +7148,16 @@ dependencies = [
|
||||||
"winapi-util",
|
"winapi-util",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "terminal_size"
|
||||||
|
version = "0.3.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "21bebf2b7c9e0a515f6e0f8c51dc0f8e4696391e6f1ff30379559f8365fb0df7"
|
||||||
|
dependencies = [
|
||||||
|
"rustix",
|
||||||
|
"windows-sys 0.48.0",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "test_ffi"
|
name = "test_ffi"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
|
@ -7305,9 +7323,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tokio"
|
name = "tokio"
|
||||||
version = "1.37.0"
|
version = "1.36.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787"
|
checksum = "61285f6515fa018fb2d1e46eb21223fff441ee8db5d0f1435e8ab4f5cdb80931"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"backtrace",
|
"backtrace",
|
||||||
"bytes",
|
"bytes",
|
||||||
|
|
|
@ -177,7 +177,7 @@ tar = "=0.4.40"
|
||||||
tempfile = "3.4.0"
|
tempfile = "3.4.0"
|
||||||
termcolor = "1.1.3"
|
termcolor = "1.1.3"
|
||||||
thiserror = "1.0.61"
|
thiserror = "1.0.61"
|
||||||
tokio = { version = "1.36.0", features = ["full"] }
|
tokio = { version = "=1.36.0", features = ["full"] }
|
||||||
tokio-metrics = { version = "0.3.0", features = ["rt"] }
|
tokio-metrics = { version = "0.3.0", features = ["rt"] }
|
||||||
tokio-rustls = { version = "0.26.0", default-features = false, features = ["ring", "tls12"] }
|
tokio-rustls = { version = "0.26.0", default-features = false, features = ["ring", "tls12"] }
|
||||||
tokio-socks = "0.5.1"
|
tokio-socks = "0.5.1"
|
||||||
|
|
|
@ -90,9 +90,9 @@ bincode = "=1.3.3"
|
||||||
bytes.workspace = true
|
bytes.workspace = true
|
||||||
cache_control.workspace = true
|
cache_control.workspace = true
|
||||||
chrono = { workspace = true, features = ["now"] }
|
chrono = { workspace = true, features = ["now"] }
|
||||||
clap = { version = "=4.4.17", features = ["env", "string"] }
|
clap = { version = "=4.5.13", features = ["env", "string", "wrap_help"] }
|
||||||
clap_complete = "=4.4.7"
|
clap_complete = "=4.5.12"
|
||||||
clap_complete_fig = "=4.4.2"
|
clap_complete_fig = "=4.5.2"
|
||||||
color-print = "0.3.5"
|
color-print = "0.3.5"
|
||||||
console_static_text.workspace = true
|
console_static_text.workspace = true
|
||||||
dashmap = "5.5.3"
|
dashmap = "5.5.3"
|
||||||
|
@ -145,6 +145,7 @@ serde_repr.workspace = true
|
||||||
sha2.workspace = true
|
sha2.workspace = true
|
||||||
shell-escape = "=0.1.5"
|
shell-escape = "=0.1.5"
|
||||||
spki = { version = "0.7", features = ["pem"] }
|
spki = { version = "0.7", features = ["pem"] }
|
||||||
|
strsim = "0.11.1"
|
||||||
tar.workspace = true
|
tar.workspace = true
|
||||||
tempfile.workspace = true
|
tempfile.workspace = true
|
||||||
text-size = "=1.1.0"
|
text-size = "=1.1.0"
|
||||||
|
|
1529
cli/args/flags.rs
1529
cli/args/flags.rs
File diff suppressed because it is too large
Load diff
62
cli/main.rs
62
cli/main.rs
|
@ -166,6 +166,9 @@ async fn run_subcommand(flags: Arc<Flags>) -> Result<i32, AnyError> {
|
||||||
DenoSubcommand::Install(install_flags) => spawn_subcommand(async {
|
DenoSubcommand::Install(install_flags) => spawn_subcommand(async {
|
||||||
tools::installer::install_command(flags, install_flags).await
|
tools::installer::install_command(flags, install_flags).await
|
||||||
}),
|
}),
|
||||||
|
DenoSubcommand::JSONReference(json_reference) => spawn_subcommand(async move {
|
||||||
|
display::write_to_stdout_ignore_sigpipe(&deno_core::serde_json::to_vec_pretty(&json_reference.json).unwrap())
|
||||||
|
}),
|
||||||
DenoSubcommand::Jupyter(jupyter_flags) => spawn_subcommand(async {
|
DenoSubcommand::Jupyter(jupyter_flags) => spawn_subcommand(async {
|
||||||
tools::jupyter::kernel(flags, jupyter_flags).await
|
tools::jupyter::kernel(flags, jupyter_flags).await
|
||||||
}),
|
}),
|
||||||
|
@ -192,29 +195,47 @@ async fn run_subcommand(flags: Arc<Flags>) -> Result<i32, AnyError> {
|
||||||
tools::run::run_from_stdin(flags.clone()).await
|
tools::run::run_from_stdin(flags.clone()).await
|
||||||
} else {
|
} else {
|
||||||
let result = tools::run::run_script(WorkerExecutionMode::Run, flags.clone(), run_flags.watch).await;
|
let result = tools::run::run_script(WorkerExecutionMode::Run, flags.clone(), run_flags.watch).await;
|
||||||
match result {
|
match result {
|
||||||
Ok(v) => Ok(v),
|
Ok(v) => Ok(v),
|
||||||
Err(script_err) => {
|
Err(script_err) => {
|
||||||
if script_err.to_string().starts_with(MODULE_NOT_FOUND) {
|
if script_err.to_string().starts_with(MODULE_NOT_FOUND) {
|
||||||
let mut new_flags = flags.deref().clone();
|
if run_flags.bare {
|
||||||
let task_flags = TaskFlags {
|
let mut cmd = args::clap_root();
|
||||||
cwd: None,
|
cmd.build();
|
||||||
task: Some(run_flags.script.clone()),
|
let command_names = cmd.get_subcommands().map(|command| command.get_name()).collect::<Vec<_>>();
|
||||||
};
|
let suggestions = args::did_you_mean(&run_flags.script, command_names);
|
||||||
new_flags.subcommand = DenoSubcommand::Task(task_flags.clone());
|
if !suggestions.is_empty() {
|
||||||
let result = tools::task::execute_script(Arc::new(new_flags), task_flags.clone(), true).await;
|
let mut error = clap::error::Error::<clap::error::DefaultFormatter>::new(clap::error::ErrorKind::InvalidSubcommand).with_cmd(&cmd);
|
||||||
match result {
|
error.insert(
|
||||||
Ok(v) => Ok(v),
|
clap::error::ContextKind::SuggestedSubcommand,
|
||||||
Err(_) => {
|
clap::error::ContextValue::Strings(suggestions),
|
||||||
// Return script error for backwards compatibility.
|
);
|
||||||
|
|
||||||
|
Err(error.into())
|
||||||
|
} else {
|
||||||
Err(script_err)
|
Err(script_err)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
let mut new_flags = flags.deref().clone();
|
||||||
|
let task_flags = TaskFlags {
|
||||||
|
cwd: None,
|
||||||
|
task: Some(run_flags.script.clone()),
|
||||||
|
};
|
||||||
|
new_flags.subcommand = DenoSubcommand::Task(task_flags.clone());
|
||||||
|
let result = tools::task::execute_script(Arc::new(new_flags), task_flags.clone(), true).await;
|
||||||
|
match result {
|
||||||
|
Ok(v) => Ok(v),
|
||||||
|
Err(_) => {
|
||||||
|
// Return script error for backwards compatibility.
|
||||||
|
Err(script_err)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
Err(script_err)
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
Err(script_err)
|
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
DenoSubcommand::Serve(serve_flags) => spawn_subcommand(async move {
|
DenoSubcommand::Serve(serve_flags) => spawn_subcommand(async move {
|
||||||
|
@ -270,6 +291,9 @@ async fn run_subcommand(flags: Arc<Flags>) -> Result<i32, AnyError> {
|
||||||
DenoSubcommand::Publish(publish_flags) => spawn_subcommand(async {
|
DenoSubcommand::Publish(publish_flags) => spawn_subcommand(async {
|
||||||
tools::registry::publish(flags, publish_flags).await
|
tools::registry::publish(flags, publish_flags).await
|
||||||
}),
|
}),
|
||||||
|
DenoSubcommand::Help(help_flags) => spawn_subcommand(async move {
|
||||||
|
display::write_to_stdout_ignore_sigpipe(help_flags.help.ansi().to_string().as_bytes())
|
||||||
|
}),
|
||||||
};
|
};
|
||||||
|
|
||||||
handle.await?
|
handle.await?
|
||||||
|
|
|
@ -12,30 +12,29 @@ fn help_output() {
|
||||||
|
|
||||||
let stdout = output.combined_output();
|
let stdout = output.combined_output();
|
||||||
let subcommand_descriptions = vec![
|
let subcommand_descriptions = vec![
|
||||||
"Run a JavaScript or TypeScript program",
|
"Run a JavaScript or TypeScript program, or a task",
|
||||||
|
"Run a server",
|
||||||
|
"Run a task defined in the configuration file",
|
||||||
|
"Start an interactive Read-Eval-Print Loop (REPL) for Deno",
|
||||||
|
"Evaluate a script from the command line",
|
||||||
|
"Add dependencies",
|
||||||
|
"Install script as an executable",
|
||||||
|
"Uninstall a script previously installed with deno install",
|
||||||
"Run benchmarks",
|
"Run benchmarks",
|
||||||
"Bundle module and dependencies into single file",
|
|
||||||
"Cache the dependencies",
|
"Cache the dependencies",
|
||||||
"Type-check the dependencies",
|
"Type-check the dependencies",
|
||||||
"Compile the script into a self contained executable",
|
"Compile the script into a self contained executable",
|
||||||
"Generate shell completions",
|
|
||||||
"Print coverage reports",
|
"Print coverage reports",
|
||||||
"Show documentation for a module",
|
"Genereate and show documentation for a module or built-ins",
|
||||||
"Eval script",
|
|
||||||
"Format source files",
|
"Format source files",
|
||||||
"Initialize a new project",
|
|
||||||
"Show info about cache or info related to source file",
|
"Show info about cache or info related to source file",
|
||||||
"Install script as an executable",
|
"Deno kernel for Jupyter notebooks",
|
||||||
"Uninstall a script previously installed with deno install",
|
|
||||||
"Start the language server",
|
|
||||||
"Lint source files",
|
"Lint source files",
|
||||||
"Read Eval Print Loop",
|
"Initialize a new project",
|
||||||
"Run a task defined in the configuration file",
|
|
||||||
"Run tests",
|
"Run tests",
|
||||||
"Print runtime TypeScript declarations",
|
"Publish the current working directory's package or workspace",
|
||||||
#[cfg(feature = "upgrade")]
|
#[cfg(feature = "upgrade")]
|
||||||
"Upgrade deno executable to given version",
|
"Upgrade deno executable to given version",
|
||||||
"Print this message or the help of the given subcommand(s)",
|
|
||||||
];
|
];
|
||||||
|
|
||||||
for description in subcommand_descriptions {
|
for description in subcommand_descriptions {
|
||||||
|
|
Loading…
Reference in a new issue