mirror of
https://github.com/denoland/deno.git
synced 2024-11-21 15:04:11 -05:00
feat: deno completions command (#2577)
This commit is contained in:
parent
d089f97978
commit
6906a2f75e
3 changed files with 83 additions and 16 deletions
52
cli/flags.rs
52
cli/flags.rs
|
@ -1,7 +1,14 @@
|
|||
// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license.
|
||||
use clap::{App, AppSettings, Arg, ArgMatches, SubCommand};
|
||||
use clap::App;
|
||||
use clap::AppSettings;
|
||||
use clap::Arg;
|
||||
use clap::ArgMatches;
|
||||
use clap::Shell;
|
||||
use clap::SubCommand;
|
||||
use crate::deno_dir;
|
||||
use log::Level;
|
||||
use std;
|
||||
use std::str::FromStr;
|
||||
|
||||
// Creates vector of strings, Vec<String>
|
||||
macro_rules! svec {
|
||||
|
@ -300,7 +307,7 @@ ability to spawn subprocesses.
|
|||
// this is a fake subcommand - it's used in conjunction with
|
||||
// AppSettings:AllowExternalSubcommand to treat it as an
|
||||
// entry point script
|
||||
SubCommand::with_name("<script>").about("Script to run"),
|
||||
SubCommand::with_name("[SCRIPT]").about("Script to run"),
|
||||
),
|
||||
).subcommand(
|
||||
SubCommand::with_name("xeval")
|
||||
|
@ -376,13 +383,31 @@ To change installation directory use -d/--dir flag
|
|||
// this is a fake subcommand - it's used in conjunction with
|
||||
// AppSettings:AllowExternalSubcommand to treat it as an
|
||||
// entry point script
|
||||
SubCommand::with_name("<script>").about("Script URL"),
|
||||
SubCommand::with_name("[SCRIPT]").about("Script URL"),
|
||||
),
|
||||
).subcommand(
|
||||
SubCommand::with_name("completions")
|
||||
.settings(&[
|
||||
AppSettings::DisableHelpSubcommand,
|
||||
AppSettings::DisableVersion,
|
||||
]).about("Generate shell completions")
|
||||
.long_about(
|
||||
"Output shell completion script to standard output.
|
||||
|
||||
Example:
|
||||
|
||||
deno completions bash > /usr/local/etc/bash_completion.d/deno.bash
|
||||
source /usr/local/etc/bash_completion.d/deno.bash")
|
||||
.arg(
|
||||
Arg::with_name("shell")
|
||||
.possible_values(&Shell::variants())
|
||||
.required(true),
|
||||
),
|
||||
).subcommand(
|
||||
// this is a fake subcommand - it's used in conjunction with
|
||||
// AppSettings:AllowExternalSubcommand to treat it as an
|
||||
// entry point script
|
||||
SubCommand::with_name("<script>").about("Script to run"),
|
||||
SubCommand::with_name("[SCRIPT]").about("Script to run"),
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -537,6 +562,7 @@ const INSTALLER_URL: &str = "https://deno.land/std@b13441f/installer/mod.ts";
|
|||
#[derive(Debug, PartialEq)]
|
||||
pub enum DenoSubcommand {
|
||||
Bundle,
|
||||
Completions,
|
||||
Eval,
|
||||
Fetch,
|
||||
Info,
|
||||
|
@ -590,6 +616,15 @@ pub fn flags_from_vec(
|
|||
argv.extend(vec![source_file.to_string(), out_file.to_string()]);
|
||||
DenoSubcommand::Bundle
|
||||
}
|
||||
("completions", Some(completions_match)) => {
|
||||
let shell: &str = completions_match.value_of("shell").unwrap();
|
||||
create_cli_app().gen_completions_to(
|
||||
"deno",
|
||||
Shell::from_str(shell).unwrap(),
|
||||
&mut std::io::stdout(),
|
||||
);
|
||||
DenoSubcommand::Completions
|
||||
}
|
||||
("eval", Some(eval_match)) => {
|
||||
flags.allow_net = true;
|
||||
flags.allow_env = true;
|
||||
|
@ -1392,4 +1427,13 @@ mod tests {
|
|||
assert_eq!(subcommand, DenoSubcommand::Run);
|
||||
assert_eq!(argv, svec!["deno", "script.ts"])
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_flags_from_vec_32() {
|
||||
let (flags, subcommand, argv) =
|
||||
flags_from_vec(svec!["deno", "completions", "bash"]);
|
||||
assert_eq!(flags, DenoFlags::default());
|
||||
assert_eq!(subcommand, DenoSubcommand::Completions);
|
||||
assert_eq!(argv, svec!["deno"])
|
||||
}
|
||||
}
|
||||
|
|
|
@ -346,6 +346,7 @@ fn main() {
|
|||
|
||||
match subcommand {
|
||||
DenoSubcommand::Bundle => bundle_command(flags, argv),
|
||||
DenoSubcommand::Completions => {}
|
||||
DenoSubcommand::Eval => eval_command(flags, argv),
|
||||
DenoSubcommand::Fetch => fetch_or_info_command(flags, argv, false),
|
||||
DenoSubcommand::Info => fetch_or_info_command(flags, argv, true),
|
||||
|
|
|
@ -618,8 +618,9 @@ OPTIONS:
|
|||
--v8-flags=<v8-flags> Set V8 command line options
|
||||
|
||||
SUBCOMMANDS:
|
||||
<script> Script to run
|
||||
[SCRIPT] Script to run
|
||||
bundle Bundle module and dependencies into single file
|
||||
completions Generate shell completions
|
||||
eval Eval script
|
||||
fetch Fetch the dependencies
|
||||
fmt Format files
|
||||
|
@ -647,6 +648,27 @@ generated and cached source code is written and read to.
|
|||
code can test if `NO_COLOR` was set without having `--allow-env` by using the
|
||||
boolean constant `Deno.noColor`.
|
||||
|
||||
### Shell completion
|
||||
|
||||
You can generate completion script for your shell using the
|
||||
`deno completions <shell>` command. The command outputs to stdout so you should
|
||||
redirect it to an appropriate file.
|
||||
|
||||
The supported shells are:
|
||||
|
||||
- zsh
|
||||
- bash
|
||||
- fish
|
||||
- powershell
|
||||
- elvish
|
||||
|
||||
Example:
|
||||
|
||||
```shellsession
|
||||
deno completions bash > /usr/local/etc/bash_completion.d/deno.bash
|
||||
source /usr/local/etc/bash_completion.d/deno.bash
|
||||
```
|
||||
|
||||
### V8 flags
|
||||
|
||||
V8 has many many internal command-line flags, that you can see with
|
||||
|
|
Loading…
Reference in a new issue