west: Add completion command
Add a completion command that dumps the contents of a shell completion file present in the zephyr repository. Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
This commit is contained in:
parent
f43d306527
commit
66fdd48fdd
|
@ -18,6 +18,7 @@ help for them shows up like this in ``west --help``:
|
|||
.. code-block:: none
|
||||
|
||||
commands from project at "zephyr":
|
||||
completion: display shell completion scripts
|
||||
boards: display information about supported boards
|
||||
build: compile a Zephyr application
|
||||
sign: sign a Zephyr binary for bootloader chain-loading
|
||||
|
|
|
@ -1,5 +1,10 @@
|
|||
# Keep the help strings in sync with the values in the .py files!
|
||||
west-commands:
|
||||
- file: scripts/west_commands/completion.py
|
||||
commands:
|
||||
- name: completion
|
||||
class: Completion
|
||||
help: display shell completion scripts
|
||||
- file: scripts/west_commands/boards.py
|
||||
commands:
|
||||
- name: boards
|
||||
|
|
50
scripts/west_commands/completion.py
Normal file
50
scripts/west_commands/completion.py
Normal file
|
@ -0,0 +1,50 @@
|
|||
# Copyright (c) 2019 Nordic Semiconductor ASA
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import argparse
|
||||
import os
|
||||
|
||||
from west import log
|
||||
from west.commands import WestCommand
|
||||
|
||||
# Relative to the folder where this script lives
|
||||
COMPLETION_REL_PATH = 'completion/west-completion'
|
||||
|
||||
class Completion(WestCommand):
|
||||
|
||||
def __init__(self):
|
||||
super().__init__(
|
||||
'completion',
|
||||
# Keep this in sync with the string in west-commands.yml.
|
||||
'display shell completion scripts',
|
||||
'Display shell completion scripts.',
|
||||
accepts_unknown_args=False)
|
||||
|
||||
def do_add_parser(self, parser_adder):
|
||||
parser = parser_adder.add_parser(
|
||||
self.name,
|
||||
help=self.help,
|
||||
formatter_class=argparse.RawDescriptionHelpFormatter,
|
||||
description=self.description)
|
||||
|
||||
# Remember to update completion/west-completion.bash if you add or
|
||||
# remove flags
|
||||
parser.add_argument('shell', nargs=1, choices=['bash'],
|
||||
help='''Select the shell that which the completion
|
||||
script is intended for.
|
||||
Currently only bash is supported.''')
|
||||
return parser
|
||||
|
||||
def do_run(self, args, unknown_args):
|
||||
cf = os.path.join(os.path.dirname(os.path.realpath(__file__)),
|
||||
*COMPLETION_REL_PATH.split('/'))
|
||||
|
||||
cf += '.' + args.shell[0]
|
||||
|
||||
try:
|
||||
with open(cf, 'r') as f:
|
||||
print(f.read())
|
||||
except FileNotFoundError as e:
|
||||
log.die('Unable to find completion file: {}'.format(e))
|
||||
|
|
@ -575,6 +575,18 @@ __comp_west_help()
|
|||
}
|
||||
|
||||
# Zephyr extension commands
|
||||
__comp_west_completion()
|
||||
{
|
||||
case "$cur" in
|
||||
*)
|
||||
local counter=$( __west_pos_first_nonflag "$(__west_to_extglob "$global_args_opts")" )
|
||||
if [ "$cword" -eq "$counter" ]; then
|
||||
__set_comp "bash"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
__comp_west_boards()
|
||||
{
|
||||
local boards_args_opts="
|
||||
|
@ -750,6 +762,7 @@ __comp_west()
|
|||
)
|
||||
|
||||
local zephyr_ext_cmds=(
|
||||
completion
|
||||
boards
|
||||
build
|
||||
sign
|
||||
|
|
Loading…
Reference in a new issue