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))
+