parse-options.h: use designated initializers in OPT_* macros

Use designated initializers in the expansions of the OPT_* macros to make it more readable which one-letter macro parameter initializes which field in the resulting 'struct option'. Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com> Reviewed-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

SZEDER Gábor committed Mar 19, 2023 at 17:56 UTC 353e6d45545f704651a9e7d6498ae4f3523f9462
1 file changed +245 -68
parse-options.h
+245 -68
@@ -158,71 +158,202 @@ struct option {
158 parse_opt_subcommand_fn *subcommand_fn;
159 };
160
161 -#define OPT_BIT_F(s, l, v, h, b, f) { OPTION_BIT, (s), (l), (v), NULL, (h), \
162 - PARSE_OPT_NOARG|(f), NULL, (b) }
163 -#define OPT_COUNTUP_F(s, l, v, h, f) { OPTION_COUNTUP, (s), (l), (v), NULL, \
164 - (h), PARSE_OPT_NOARG|(f) }
165 -#define OPT_SET_INT_F(s, l, v, h, i, f) { OPTION_SET_INT, (s), (l), (v), NULL, \
166 - (h), PARSE_OPT_NOARG | (f), NULL, (i) }
161 +#define OPT_BIT_F(s, l, v, h, b, f) { \
162 + .type = OPTION_BIT, \
163 + .short_name = (s), \
164 + .long_name = (l), \
165 + .value = (v), \
166 + .help = (h), \
167 + .flags = PARSE_OPT_NOARG|(f), \
168 + .callback = NULL, \
169 + .defval = (b), \
170 +}
171 +#define OPT_COUNTUP_F(s, l, v, h, f) { \
172 + .type = OPTION_COUNTUP, \
173 + .short_name = (s), \
174 + .long_name = (l), \
175 + .value = (v), \
176 + .help = (h), \
177 + .flags = PARSE_OPT_NOARG|(f), \
178 +}
179 +#define OPT_SET_INT_F(s, l, v, h, i, f) { \
180 + .type = OPTION_SET_INT, \
181 + .short_name = (s), \
182 + .long_name = (l), \
183 + .value = (v), \
184 + .help = (h), \
185 + .flags = PARSE_OPT_NOARG | (f), \
186 + .defval = (i), \
187 +}
188 #define OPT_BOOL_F(s, l, v, h, f) OPT_SET_INT_F(s, l, v, h, 1, f)
168 -#define OPT_CALLBACK_F(s, l, v, a, h, f, cb) \
169 - { OPTION_CALLBACK, (s), (l), (v), (a), (h), (f), (cb) }
170 -#define OPT_STRING_F(s, l, v, a, h, f) { OPTION_STRING, (s), (l), (v), (a), (h), (f) }
171 -#define OPT_INTEGER_F(s, l, v, h, f) { OPTION_INTEGER, (s), (l), (v), N_("n"), (h), (f) }
189 +#define OPT_CALLBACK_F(s, l, v, a, h, f, cb) { \
190 + .type = OPTION_CALLBACK, \
191 + .short_name = (s), \
192 + .long_name = (l), \
193 + .value = (v), \
194 + .argh = (a), \
195 + .help = (h), \
196 + .flags = (f), \
197 + .callback = (cb), \
198 +}
199 +#define OPT_STRING_F(s, l, v, a, h, f) { \
200 + .type = OPTION_STRING, \
201 + .short_name = (s), \
202 + .long_name = (l), \
203 + .value = (v), \
204 + .argh = (a), \
205 + .help = (h), \
206 + .flags = (f), \
207 +}
208 +#define OPT_INTEGER_F(s, l, v, h, f) { \
209 + .type = OPTION_INTEGER, \
210 + .short_name = (s), \
211 + .long_name = (l), \
212 + .value = (v), \
213 + .argh = N_("n"), \
214 + .help = (h), \
215 + .flags = (f), \
216 +}
217
173 -#define OPT_END() { OPTION_END }
174 -#define OPT_GROUP(h) { OPTION_GROUP, 0, NULL, NULL, NULL, (h) }
218 +#define OPT_END() { \
219 + .type = OPTION_END, \
220 +}
221 +#define OPT_GROUP(h) { \
222 + .type = OPTION_GROUP, \
223 + .help = (h), \
224 +}
225 #define OPT_BIT(s, l, v, h, b) OPT_BIT_F(s, l, v, h, b, 0)
176 -#define OPT_BITOP(s, l, v, h, set, clear) { OPTION_BITOP, (s), (l), (v), NULL, (h), \
177 - PARSE_OPT_NOARG|PARSE_OPT_NONEG, NULL, \
178 - (set), NULL, (clear) }
179 -#define OPT_NEGBIT(s, l, v, h, b) { OPTION_NEGBIT, (s), (l), (v), NULL, \
180 - (h), PARSE_OPT_NOARG, NULL, (b) }
226 +#define OPT_BITOP(s, l, v, h, set, clear) { \
227 + .type = OPTION_BITOP, \
228 + .short_name = (s), \
229 + .long_name = (l), \
230 + .value = (v), \
231 + .help = (h), \
232 + .flags = PARSE_OPT_NOARG|PARSE_OPT_NONEG, \
233 + .defval = (set), \
234 + .extra = (clear), \
235 +}
236 +#define OPT_NEGBIT(s, l, v, h, b) { \
237 + .type = OPTION_NEGBIT, \
238 + .short_name = (s), \
239 + .long_name = (l), \
240 + .value = (v), \
241 + .help = (h), \
242 + .flags = PARSE_OPT_NOARG, \
243 + .defval = (b), \
244 +}
245 #define OPT_COUNTUP(s, l, v, h) OPT_COUNTUP_F(s, l, v, h, 0)
246 #define OPT_SET_INT(s, l, v, h, i) OPT_SET_INT_F(s, l, v, h, i, 0)
247 #define OPT_BOOL(s, l, v, h) OPT_BOOL_F(s, l, v, h, 0)
184 -#define OPT_HIDDEN_BOOL(s, l, v, h) { OPTION_SET_INT, (s), (l), (v), NULL, \
185 - (h), PARSE_OPT_NOARG | PARSE_OPT_HIDDEN, NULL, 1}
186 -#define OPT_CMDMODE_F(s, l, v, h, i, f) { OPTION_SET_INT, (s), (l), (v), NULL, \
187 - (h), PARSE_OPT_CMDMODE|PARSE_OPT_NOARG|PARSE_OPT_NONEG | (f), NULL, (i) }
248 +#define OPT_HIDDEN_BOOL(s, l, v, h) { \
249 + .type = OPTION_SET_INT, \
250 + .short_name = (s), \
251 + .long_name = (l), \
252 + .value = (v), \
253 + .help = (h), \
254 + .flags = PARSE_OPT_NOARG | PARSE_OPT_HIDDEN, \
255 + .defval = 1, \
256 +}
257 +#define OPT_CMDMODE_F(s, l, v, h, i, f) { \
258 + .type = OPTION_SET_INT, \
259 + .short_name = (s), \
260 + .long_name = (l), \
261 + .value = (v), \
262 + .help = (h), \
263 + .flags = PARSE_OPT_CMDMODE|PARSE_OPT_NOARG|PARSE_OPT_NONEG | (f), \
264 + .defval = (i), \
265 +}
266 #define OPT_CMDMODE(s, l, v, h, i) OPT_CMDMODE_F(s, l, v, h, i, 0)
267
268 #define OPT_INTEGER(s, l, v, h) OPT_INTEGER_F(s, l, v, h, 0)
191 -#define OPT_MAGNITUDE(s, l, v, h) { OPTION_MAGNITUDE, (s), (l), (v), \
192 - N_("n"), (h), PARSE_OPT_NONEG }
269 +#define OPT_MAGNITUDE(s, l, v, h) { \
270 + .type = OPTION_MAGNITUDE, \
271 + .short_name = (s), \
272 + .long_name = (l), \
273 + .value = (v), \
274 + .argh = N_("n"), \
275 + .help = (h), \
276 + .flags = PARSE_OPT_NONEG, \
277 +}
278 #define OPT_STRING(s, l, v, a, h) OPT_STRING_F(s, l, v, a, h, 0)
194 -#define OPT_STRING_LIST(s, l, v, a, h) \
195 - { OPTION_CALLBACK, (s), (l), (v), (a), \
196 - (h), 0, &parse_opt_string_list }
197 -#define OPT_UYN(s, l, v, h) { OPTION_CALLBACK, (s), (l), (v), NULL, \
198 - (h), PARSE_OPT_NOARG, &parse_opt_tertiary }
199 -#define OPT_EXPIRY_DATE(s, l, v, h) \
200 - { OPTION_CALLBACK, (s), (l), (v), N_("expiry-date"),(h), 0, \
201 - parse_opt_expiry_date_cb }
279 +#define OPT_STRING_LIST(s, l, v, a, h) { \
280 + .type = OPTION_CALLBACK, \
281 + .short_name = (s), \
282 + .long_name = (l), \
283 + .value = (v), \
284 + .argh = (a), \
285 + .help = (h), \
286 + .callback = &parse_opt_string_list, \
287 +}
288 +#define OPT_UYN(s, l, v, h) { \
289 + .type = OPTION_CALLBACK, \
290 + .short_name = (s), \
291 + .long_name = (l), \
292 + .value = (v), \
293 + .help = (h), \
294 + .flags = PARSE_OPT_NOARG, \
295 + .callback = &parse_opt_tertiary, \
296 +}
297 +#define OPT_EXPIRY_DATE(s, l, v, h) { \
298 + .type = OPTION_CALLBACK, \
299 + .short_name = (s), \
300 + .long_name = (l), \
301 + .value = (v), \
302 + .argh = N_("expiry-date"), \
303 + .help = (h), \
304 + .callback = parse_opt_expiry_date_cb, \
305 +}
306 #define OPT_CALLBACK(s, l, v, a, h, cb) OPT_CALLBACK_F(s, l, v, a, h, 0, cb)
203 -#define OPT_NUMBER_CALLBACK(v, h, cb) \
204 - { OPTION_NUMBER, 0, NULL, (v), NULL, (h), \
205 - PARSE_OPT_NOARG | PARSE_OPT_NONEG, (cb) }
206 -#define OPT_FILENAME(s, l, v, h) { OPTION_FILENAME, (s), (l), (v), \
207 - N_("file"), (h) }
208 -#define OPT_COLOR_FLAG(s, l, v, h) \
209 - { OPTION_CALLBACK, (s), (l), (v), N_("when"), (h), PARSE_OPT_OPTARG, \
210 - parse_opt_color_flag_cb, (intptr_t)"always" }
211 -
212 -#define OPT_NOOP_NOARG(s, l) \
213 - { OPTION_CALLBACK, (s), (l), NULL, NULL, \
214 - N_("no-op (backward compatibility)"), \
215 - PARSE_OPT_HIDDEN | PARSE_OPT_NOARG, parse_opt_noop_cb }
216 -
217 -#define OPT_ALIAS(s, l, source_long_name) \
218 - { OPTION_ALIAS, (s), (l), (source_long_name) }
307 +#define OPT_NUMBER_CALLBACK(v, h, cb) { \
308 + .type = OPTION_NUMBER, \
309 + .value = (v), \
310 + .help = (h), \
311 + .flags = PARSE_OPT_NOARG | PARSE_OPT_NONEG, \
312 + .callback = (cb), \
313 +}
314 +#define OPT_FILENAME(s, l, v, h) { \
315 + .type = OPTION_FILENAME, \
316 + .short_name = (s), \
317 + .long_name = (l), \
318 + .value = (v), \
319 + .argh = N_("file"), \
320 + .help = (h), \
321 +}
322 +#define OPT_COLOR_FLAG(s, l, v, h) { \
323 + .type = OPTION_CALLBACK, \
324 + .short_name = (s), \
325 + .long_name = (l), \
326 + .value = (v), \
327 + .argh = N_("when"), \
328 + .help = (h), \
329 + .flags = PARSE_OPT_OPTARG, \
330 + .callback = parse_opt_color_flag_cb, \
331 + .defval = (intptr_t)"always", \
332 +}
333 +
334 +#define OPT_NOOP_NOARG(s, l) { \
335 + .type = OPTION_CALLBACK, \
336 + .short_name = (s), \
337 + .long_name = (l), \
338 + .help = N_("no-op (backward compatibility)"), \
339 + .flags = PARSE_OPT_HIDDEN | PARSE_OPT_NOARG, \
340 + .callback = parse_opt_noop_cb, \
341 +}
342 +
343 +#define OPT_ALIAS(s, l, source_long_name) { \
344 + .type = OPTION_ALIAS, \
345 + .short_name = (s), \
346 + .long_name = (l), \
347 + .value = (source_long_name), \
348 +}
349
350 #define OPT_SUBCOMMAND_F(l, v, fn, f) { \
351 .type = OPTION_SUBCOMMAND, \
352 .long_name = (l), \
353 .value = (v), \
354 .flags = (f), \
225 - .subcommand_fn = (fn) }
355 + .subcommand_fn = (fn), \
356 +}
357 #define OPT_SUBCOMMAND(l, v, fn) OPT_SUBCOMMAND_F((l), (v), (fn), 0)
358
359 /*
@@ -358,34 +489,80 @@ int parse_opt_tracking_mode(const struct option *, const char *, int);
489
490 #define OPT__VERBOSE(var, h) OPT_COUNTUP('v', "verbose", (var), (h))
491 #define OPT__QUIET(var, h) OPT_COUNTUP('q', "quiet", (var), (h))
361 -#define OPT__VERBOSITY(var) \
362 - { OPTION_CALLBACK, 'v', "verbose", (var), NULL, N_("be more verbose"), \
363 - PARSE_OPT_NOARG, &parse_opt_verbosity_cb, 0 }, \
364 - { OPTION_CALLBACK, 'q', "quiet", (var), NULL, N_("be more quiet"), \
365 - PARSE_OPT_NOARG, &parse_opt_verbosity_cb, 0 }
492 +#define OPT__VERBOSITY(var) { \
493 + .type = OPTION_CALLBACK, \
494 + .short_name = 'v', \
495 + .long_name = "verbose", \
496 + .value = (var), \
497 + .help = N_("be more verbose"), \
498 + .flags = PARSE_OPT_NOARG, \
499 + .callback = &parse_opt_verbosity_cb, \
500 +}, { \
501 + .type = OPTION_CALLBACK, \
502 + .short_name = 'q', \
503 + .long_name = "quiet", \
504 + .value = (var), \
505 + .help = N_("be more quiet"), \
506 + .flags = PARSE_OPT_NOARG, \
507 + .callback = &parse_opt_verbosity_cb, \
508 +}
509 #define OPT__DRY_RUN(var, h) OPT_BOOL('n', "dry-run", (var), (h))
510 #define OPT__FORCE(var, h, f) OPT_COUNTUP_F('f', "force", (var), (h), (f))
368 -#define OPT__ABBREV(var) \
369 - { OPTION_CALLBACK, 0, "abbrev", (var), N_("n"), \
370 - N_("use <n> digits to display object names"), \
371 - PARSE_OPT_OPTARG, &parse_opt_abbrev_cb, 0 }
511 +#define OPT__ABBREV(var) { \
512 + .type = OPTION_CALLBACK, \
513 + .long_name = "abbrev", \
514 + .value = (var), \
515 + .argh = N_("n"), \
516 + .help = N_("use <n> digits to display object names"), \
517 + .flags = PARSE_OPT_OPTARG, \
518 + .callback = &parse_opt_abbrev_cb, \
519 +}
520 #define OPT__SUPER_PREFIX(var) \
521 OPT_STRING_F(0, "super-prefix", (var), N_("prefix"), \
522 N_("prefixed path to initial superproject"), PARSE_OPT_HIDDEN)
523
524 #define OPT__COLOR(var, h) \
525 OPT_COLOR_FLAG(0, "color", (var), (h))
378 -#define OPT_COLUMN(s, l, v, h) \
379 - { OPTION_CALLBACK, (s), (l), (v), N_("style"), (h), PARSE_OPT_OPTARG, parseopt_column_callback }
380 -#define OPT_PASSTHRU(s, l, v, a, h, f) \
381 - { OPTION_CALLBACK, (s), (l), (v), (a), (h), (f), parse_opt_passthru }
382 -#define OPT_PASSTHRU_ARGV(s, l, v, a, h, f) \
383 - { OPTION_CALLBACK, (s), (l), (v), (a), (h), (f), parse_opt_passthru_argv }
384 -#define _OPT_CONTAINS_OR_WITH(l, v, h, f) \
385 - { OPTION_CALLBACK, 0, (l), (v), N_("commit"), (h), \
386 - PARSE_OPT_LASTARG_DEFAULT | (f), \
387 - parse_opt_commits, (intptr_t) "HEAD" \
388 - }
526 +#define OPT_COLUMN(s, l, v, h) { \
527 + .type = OPTION_CALLBACK, \
528 + .short_name = (s), \
529 + .long_name = (l), \
530 + .value = (v), \
531 + .argh = N_("style"), \
532 + .help = (h), \
533 + .flags = PARSE_OPT_OPTARG, \
534 + .callback = parseopt_column_callback, \
535 +}
536 +#define OPT_PASSTHRU(s, l, v, a, h, f) { \
537 + .type = OPTION_CALLBACK, \
538 + .short_name = (s), \
539 + .long_name = (l), \
540 + .value = (v), \
541 + .argh = (a), \
542 + .help = (h), \
543 + .flags = (f), \
544 + .callback = parse_opt_passthru, \
545 +}
546 +#define OPT_PASSTHRU_ARGV(s, l, v, a, h, f) { \
547 + .type = OPTION_CALLBACK, \
548 + .short_name = (s), \
549 + .long_name = (l), \
550 + .value = (v), \
551 + .argh = (a), \
552 + .help = (h), \
553 + .flags = (f), \
554 + .callback = parse_opt_passthru_argv, \
555 +}
556 +#define _OPT_CONTAINS_OR_WITH(l, v, h, f) { \
557 + .type = OPTION_CALLBACK, \
558 + .long_name = (l), \
559 + .value = (v), \
560 + .argh = N_("commit"), \
561 + .help = (h), \
562 + .flags = PARSE_OPT_LASTARG_DEFAULT | (f), \
563 + .callback = parse_opt_commits, \
564 + .defval = (intptr_t) "HEAD", \
565 +}
566 #define OPT_CONTAINS(v, h) _OPT_CONTAINS_OR_WITH("contains", v, h, PARSE_OPT_NONEG)
567 #define OPT_NO_CONTAINS(v, h) _OPT_CONTAINS_OR_WITH("no-contains", v, h, PARSE_OPT_NONEG)
568 #define OPT_WITH(v, h) _OPT_CONTAINS_OR_WITH("with", v, h, PARSE_OPT_HIDDEN | PARSE_OPT_NONEG)