Skip to content

Commit 353e6d4

Browse files
szedergitster
authored andcommitted
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 <[email protected]> Reviewed-by: Elijah Newren <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent aa0275a commit 353e6d4

File tree

1 file changed

+245
-68
lines changed

1 file changed

+245
-68
lines changed

parse-options.h

Lines changed: 245 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -158,71 +158,202 @@ struct option {
158158
parse_opt_subcommand_fn *subcommand_fn;
159159
};
160160

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+
}
167188
#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+
}
172217

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+
}
175225
#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+
}
181245
#define OPT_COUNTUP(s, l, v, h) OPT_COUNTUP_F(s, l, v, h, 0)
182246
#define OPT_SET_INT(s, l, v, h, i) OPT_SET_INT_F(s, l, v, h, i, 0)
183247
#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+
}
188266
#define OPT_CMDMODE(s, l, v, h, i) OPT_CMDMODE_F(s, l, v, h, i, 0)
189267

190268
#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+
}
193278
#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+
}
202306
#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+
}
219349

220350
#define OPT_SUBCOMMAND_F(l, v, fn, f) { \
221351
.type = OPTION_SUBCOMMAND, \
222352
.long_name = (l), \
223353
.value = (v), \
224354
.flags = (f), \
225-
.subcommand_fn = (fn) }
355+
.subcommand_fn = (fn), \
356+
}
226357
#define OPT_SUBCOMMAND(l, v, fn) OPT_SUBCOMMAND_F((l), (v), (fn), 0)
227358

228359
/*
@@ -358,34 +489,80 @@ int parse_opt_tracking_mode(const struct option *, const char *, int);
358489

359490
#define OPT__VERBOSE(var, h) OPT_COUNTUP('v', "verbose", (var), (h))
360491
#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+
}
366509
#define OPT__DRY_RUN(var, h) OPT_BOOL('n', "dry-run", (var), (h))
367510
#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+
}
372520
#define OPT__SUPER_PREFIX(var) \
373521
OPT_STRING_F(0, "super-prefix", (var), N_("prefix"), \
374522
N_("prefixed path to initial superproject"), PARSE_OPT_HIDDEN)
375523

376524
#define OPT__COLOR(var, h) \
377525
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+
}
389566
#define OPT_CONTAINS(v, h) _OPT_CONTAINS_OR_WITH("contains", v, h, PARSE_OPT_NONEG)
390567
#define OPT_NO_CONTAINS(v, h) _OPT_CONTAINS_OR_WITH("no-contains", v, h, PARSE_OPT_NONEG)
391568
#define OPT_WITH(v, h) _OPT_CONTAINS_OR_WITH("with", v, h, PARSE_OPT_HIDDEN | PARSE_OPT_NONEG)

0 commit comments

Comments
 (0)