Commit 66fdd48f authored by Carles Cufi's avatar Carles Cufi
Browse files

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: default avatarCarles Cufi <carles.cufi@nordicsemi.no>
parent f43d3065
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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
+5 −0
Original line number Diff line number Diff line
# 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 −0
Original line number Diff line number Diff line
# 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))
+13 −0
Original line number Diff line number Diff line
@@ -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