xref: /llvm-project/cross-project-tests/debuginfo-tests/dexter/dex/tools/no_tool_/Tool.py (revision f98ee40f4b5d7474fc67e82824bf6abbaedb7b1c)
11364750dSJames Henderson# DExTer : Debugging Experience Tester
21364750dSJames Henderson# ~~~~~~   ~         ~~         ~   ~~
31364750dSJames Henderson#
41364750dSJames Henderson# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
51364750dSJames Henderson# See https://llvm.org/LICENSE.txt for license information.
61364750dSJames Henderson# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
71364750dSJames Henderson"""This is a special subtool that is run when no subtool is specified.
81364750dSJames HendersonIt just provides a welcome message and simple usage instructions.
91364750dSJames Henderson"""
101364750dSJames Henderson
111364750dSJames Hendersonfrom dex.tools import ToolBase, get_tool_names
121364750dSJames Hendersonfrom dex.utils.Exceptions import Error
131364750dSJames Hendersonfrom dex.utils.ReturnCode import ReturnCode
141364750dSJames Henderson
151364750dSJames Henderson
161364750dSJames Henderson# This is a special "tool" that is run when no subtool has been specified on
171364750dSJames Henderson# the command line. Its only job is to provide useful usage info.
181364750dSJames Hendersonclass Tool(ToolBase):
191364750dSJames Henderson    """Welcome to DExTer (Debugging Experience Tester).
201364750dSJames Henderson    Please choose a subtool from the list below.  Use 'dexter.py help' for more
211364750dSJames Henderson    information.
221364750dSJames Henderson    """
231364750dSJames Henderson
241364750dSJames Henderson    @property
251364750dSJames Henderson    def name(self):
26*f98ee40fSTobias Hieta        return "DExTer"
271364750dSJames Henderson
281364750dSJames Henderson    def add_tool_arguments(self, parser, defaults):
291364750dSJames Henderson        parser.description = Tool.__doc__
301364750dSJames Henderson        parser.add_argument(
31*f98ee40fSTobias Hieta            "subtool",
32*f98ee40fSTobias Hieta            choices=[t for t in get_tool_names() if not t.endswith("-")],
33*f98ee40fSTobias Hieta            nargs="?",
34*f98ee40fSTobias Hieta            help="name of subtool",
35*f98ee40fSTobias Hieta        )
361364750dSJames Henderson        parser.add_argument(
37*f98ee40fSTobias Hieta            "subtool_options",
38*f98ee40fSTobias Hieta            metavar="subtool-options",
39*f98ee40fSTobias Hieta            nargs="*",
40*f98ee40fSTobias Hieta            help="subtool specific options",
41*f98ee40fSTobias Hieta        )
421364750dSJames Henderson
431364750dSJames Henderson    def handle_options(self, defaults):
441364750dSJames Henderson        if not self.context.options.subtool:
45*f98ee40fSTobias Hieta            raise Error(
46*f98ee40fSTobias Hieta                "<d>no subtool specified</>\n\n{}\n".format(self.parser.format_help())
47*f98ee40fSTobias Hieta            )
481364750dSJames Henderson
491364750dSJames Henderson    def go(self) -> ReturnCode:
501364750dSJames Henderson        # This fn is never called because not specifying a subtool raises an
511364750dSJames Henderson        # exception.
521364750dSJames Henderson        return ReturnCode._ERROR
53