Skip to content
This repository has been archived by the owner on Nov 15, 2023. It is now read-only.

Commit

Permalink
Add build script to generate completion scripts
Browse files Browse the repository at this point in the history
  • Loading branch information
chevdor committed Jul 16, 2018
1 parent 38ea7bd commit 8388347
Show file tree
Hide file tree
Showing 4 changed files with 66 additions and 2 deletions.
16 changes: 16 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -101,3 +101,19 @@ You can start a development chain with:
```
cargo run -- --chain=dev --validator --key Alice
```

## Shell completion

The Polkadot cli command supports shell auto-completion. For this to work, you will need to run the completion script matching you build and system.

Assuming you built a release version using `cargo build --release` and use `bash` run the followig:
```
source target/release/completion-scripts/polkadot.bash
```

You can find completion scripts for:
- bash
- fish
- zsh
- elvish
- powershell
6 changes: 5 additions & 1 deletion polkadot/cli/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,10 @@ name = "polkadot-cli"
version = "0.2.0"
authors = ["Parity Technologies <[email protected]>"]
description = "Polkadot node implementation in Rust."
build = "build.rs"

[dependencies]
clap = { version = "2.27", features = ["yaml"] }
clap = { version = "~2.32", features = ["yaml"] }
env_logger = "0.4"
error-chain = "0.12"
log = "0.3"
Expand Down Expand Up @@ -40,3 +41,6 @@ polkadot-primitives = { path = "../primitives" }
polkadot-runtime = { path = "../runtime" }
polkadot-service = { path = "../service" }
polkadot-transaction-pool = { path = "../transaction-pool" }

[build-dependencies]
clap = "~2.32"
44 changes: 44 additions & 0 deletions polkadot/cli/build.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
#[macro_use]
extern crate clap;

use std::fs;
use std::env;
use clap::Shell;
use std::path::Path;

fn main() {
build_shell_completion();
}

/// Build shell completion scripts for all known shells
/// Full list in https://github.com/kbknapp/clap-rs/blob/e9d0562a1dc5dfe731ed7c767e6cee0af08f0cf9/src/app/parser.rs#L123
fn build_shell_completion() {
let shells = [Shell::Bash, Shell::Fish, Shell::Zsh, Shell::Elvish, Shell::PowerShell];
for shell in shells.iter() {
build_completion(shell);
}
}

/// Build the shell auto-completion for a given Shell
fn build_completion(shell: &Shell) {
let yml = load_yaml!("src/cli.yml");

let outdir = match env::var_os("OUT_DIR") {
None => return,
Some(dir) => dir,
};
let path = Path::new(&outdir)
.parent().unwrap()
.parent().unwrap()
.parent().unwrap()
.join("completion-scripts");

fs::create_dir(&path).ok();

// println!("{:?}", path);
let mut app = clap::App::from_yaml(&yml);
app.gen_completions(
"polkadot",
*shell,
&path);
}
2 changes: 1 addition & 1 deletion polkadot/cli/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,7 @@ pub fn run<I, T, W>(args: I, worker: W) -> error::Result<()> where
info!("Starting collator");
// TODO [rob]: collation node implementation
// This isn't a thing. Different parachains will have their own collator executables and
// maybe link to libpolkadot to get a light-client.
// maybe link to libpolkadot to get a light-client.
service::Roles::LIGHT
} else if matches.is_present("light") {
info!("Starting (light)");
Expand Down

0 comments on commit 8388347

Please sign in to comment.