aboutsummaryrefslogtreecommitdiff
path: root/contrib/llvm-project/lldb/source/Commands/OptionsBase.td
blob: a81563ed28c2b12b15b4de9707d86de132d365ad (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160

// The fields below describe how the fields of `OptionDefinition` struct are
// initialized by different definitions in the Options.td and this file.
////////////////////////////////////////////////////////////////////////////////
// Field: usage_mask
// Default value: LLDB_OPT_SET_ALL (Option allowed in all groups)
// Set by:
//  - `Group`: Sets a single group to this option.
//             Example: def foo : Option<"foo", "f">, Group<1>;
//  - `Groups`: Sets a given list of group numbers.
//              Example: def foo : Option<"foo", "f">, Groups<[1,4,6]>;
//  - `GroupRange`: Sets an interval of groups. Start and end are inclusive.
//                  Example: def foo : Option<"foo", "f">, GroupRange<1, 4>;
//                           Sets group 1, 2, 3, 4 for the option.
////////////////////////////////////////////////////////////////////////////////
// Field: required
// Default value: false (Not required)
// Set by:
//   - `Required`: Marks the option as required.
//              Example: def foo : Option<"foo", "f">, Required;
////////////////////////////////////////////////////////////////////////////////
// Field: long_option
// Default value: not available (has to be defined in Option)
// Set by:
//   - `Option` constructor: Already set by constructor.
//                           Example: def foo : Option<"long-option", "l">
//                                                           ^
//                                                    long option value
////////////////////////////////////////////////////////////////////////////////
// Field: short_option
// Default value: not available (has to be defined in Option)
// Set by:
//   - `Option` constructor: Already set by constructor.
//                           Example: def foo : Option<"long-option", "l">
//                                                                     ^
//                                                                short option
////////////////////////////////////////////////////////////////////////////////
// Field: option_has_arg
// Default value: OptionParser::eNoArgument (No argument allowed)
// Set by:
//  - `OptionalArg`: Sets the argument type and marks it as optional.
//  - `Arg`: Sets the argument type and marks it as required.
//  - `EnumArg`: Sets the argument type to an enum and marks it as required.
// See argument_type field for more info.
////////////////////////////////////////////////////////////////////////////////
// Field: validator
// Default value: 0 (No validator for option)
// Set by: Nothing. This is currently only set after initialization in LLDB.
////////////////////////////////////////////////////////////////////////////////
// Field: enum_values
// Default value: {} (No enum associated with this option)
// Set by:
//  - `EnumArg`: Sets the argument type and assigns it a enum holding the valid
//               values. The enum needs to be a variable in the including code.
//               Marks the option as required (see option_has_arg).
//               Example: def foo : Option<"foo", "f">,
//                          EnumArg<"SortOrder",
//                          "OptionEnumValues(g_sort_option_enumeration)">;
////////////////////////////////////////////////////////////////////////////////
// Field: completion_type
// Default value: CommandCompletions::eNoCompletion (no tab completion)
// Set by:
//  - `Completion`: Gives the option a single completion kind.
//                  Example: def foo : Option<"foo", "f">,
//                             Completion<"DiskFile">;
//                           Sets the completion to eDiskFileCompletion
//
//  - `Completions`: Sets a given kinds of completions.
//                   Example: def foo : Option<"foo", "f">,
//                              Completions<["DiskFile", "DiskDirectory"]>;
//                            Sets the completion to
//                            `eDiskFileCompletion | eDiskDirectoryCompletion`.
////////////////////////////////////////////////////////////////////////////////
// Field: argument_type
// Default value: eArgTypeNone
// Set by:
//  - `OptionalArg`: Sets the argument type and marks it as optional.
//                   Example: def foo : Option<"foo", "f">, OptionalArg<"Pid">;
//                   Sets the argument type to eArgTypePid and marks option as
//                   optional (see option_has_arg).
//  - `Arg`: Sets the argument type and marks it as required.
//           Example: def foo : Option<"foo", "f">, Arg<"Pid">;
//                    Sets the argument type to eArgTypePid and marks option as
//                    required (see option_has_arg).
//  - `EnumArg`: Sets the argument type and assigns it a enum holding the valid
//               values. The enum needs to be a variable in the including code.
//               Marks the option as required (see option_has_arg).
//               Example: def foo : Option<"foo", "f">,
//                          EnumArg<"SortOrder",
//                          "OptionEnumValues(g_sort_option_enumeration)">;
////////////////////////////////////////////////////////////////////////////////
// Field: usage_text
// Default value: ""
// Set by:
//  - `Desc`: Sets the description for the given option.
//            Example: def foo : Option<"foo", "f">, Desc<"does nothing.">;
//                     Sets the description to "does nothing.".

// Base class for all options.
class Option<string fullname, string shortname> {
  string FullName = fullname;
  string ShortName = shortname;
  // The full associated command/subcommand such as "settings set".
  string Command;
}

// Moves the option into a list of option groups.
class Groups<list<int> groups> {
  list<int> Groups = groups;
}

// Moves the option in all option groups in a range.
// Start and end values are inclusive.
class GroupRange<int start, int end> {
  int GroupStart = start;
  int GroupEnd = end;
}
// Moves the option in a single option group.
class Group<int group> {
  int GroupStart = group;
  int GroupEnd = group;
}

// Sets the description for the option that should be
// displayed to the user.
class Desc<string description> {
  string Description = description;
}

// Marks the option as required when calling the
// associated command.
class Required {
  bit Required = 1;
}

// Gives the option an optional argument.
class OptionalArg<string type> {
  string ArgType = type;
  bit OptionalArg = 1;
}

// Gives the option an required argument.
class Arg<string type> {
  string ArgType = type;
}

// Gives the option an required argument.
class EnumArg<string type, string enum> {
  string ArgType = type;
  string ArgEnum = enum;
}

// Sets the available completions for the given option.
class Completions<list<string> completions> {
  list<string> Completions = completions;
}
// Sets a single completion for the given option.
class Completion<string completion> {
  list<string> Completions = [completion];
}