//===-- Args.h --------------------------------------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #ifndef LLDB_UTILITY_ARGS_H #define LLDB_UTILITY_ARGS_H #include "lldb/Utility/Environment.h" #include "lldb/lldb-private-types.h" #include "lldb/lldb-types.h" #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/StringExtras.h" #include "llvm/ADT/StringRef.h" #include <string> #include <utility> #include <vector> namespace lldb_private { /// \class Args Args.h "lldb/Utility/Args.h" /// A command line argument class. /// /// The Args class is designed to be fed a command line. The command line is /// copied into an internal buffer and then split up into arguments. Arguments /// are space delimited if there are no quotes (single, double, or backtick /// quotes) surrounding the argument. Spaces can be escaped using a \ /// character to avoid having to surround an argument that contains a space /// with quotes. class Args { … }; /// \class OptionsWithRaw Args.h "lldb/Utility/Args.h" /// A pair of an option list with a 'raw' string as a suffix. /// /// This class works similar to Args, but handles the case where we have a /// trailing string that shouldn't be interpreted as a list of arguments but /// preserved as is. It is also only useful for handling command line options /// (e.g. '-foo bar -i0') that start with a dash. /// /// The leading option list is optional. If the first non-space character /// in the string starts with a dash, and the string contains an argument /// that is an unquoted double dash (' -- '), then everything up to the double /// dash is parsed as a list of arguments. Everything after the double dash /// is interpreted as the raw suffix string. Note that the space behind the /// double dash is not part of the raw suffix. /// /// All strings not matching the above format as considered to be just a raw /// string without any options. /// /// \see Args class OptionsWithRaw { … }; } // namespace lldb_private #endif // LLDB_UTILITY_ARGS_H