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>
diff --git a/scripts/west_commands/completion.py b/scripts/west_commands/completion.py
new file mode 100644
index 0000000..46dfa4f
--- /dev/null
+++ b/scripts/west_commands/completion.py
@@ -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))
+