aboutsummaryrefslogtreecommitdiffstats
path: root/ruby.c
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2023-10-04 22:55:24 +0900
committerTakashi Kokubun <takashikkbn@gmail.com>2023-10-04 10:25:46 -0700
commit582369bb4b33f48a72f64ae12e6d00e30196adef (patch)
tree451455c84430f64b93725cecfb10f9a01fcb8452 /ruby.c
parent488c0ed051902623ecae4b5358401b0c73dcb8e0 (diff)
downloadruby-582369bb4b33f48a72f64ae12e6d00e30196adef.tar.gz
Remove magic numbers from `show_usage_line`
Diffstat (limited to 'ruby.c')
-rw-r--r--ruby.c41
1 files changed, 23 insertions, 18 deletions
diff --git a/ruby.c b/ruby.c
index 44b1e06031..2242f45cfa 100644
--- a/ruby.c
+++ b/ruby.c
@@ -241,41 +241,46 @@ static const char esc_standout[] = "\n\033[1;7m";
static const char esc_bold[] = "\033[1m";
static const char esc_reset[] = "\033[0m";
static const char esc_none[] = "";
+#define USAGE_INDENT " " /* macro for concatenation */
static void
show_usage_line(const struct ruby_opt_message *m,
int help, int highlight, unsigned int w, int columns)
{
+ static const int indent_width = (int)rb_strlen_lit(USAGE_INDENT);
const char *str = m->str;
- const unsigned int namelen = m->namelen, secondlen = m->secondlen;
+ const char *str2 = str + m->namelen;
+ const char *desc = str + m->namelen + m->secondlen;
+ const unsigned int namelen = m->namelen - 1, secondlen = m->secondlen - 1;
const char *sb = highlight ? esc_bold : esc_none;
const char *se = highlight ? esc_reset : esc_none;
- const char *desc = str + namelen + secondlen;
unsigned int desclen = (unsigned int)strcspn(desc, "\n");
- if (help && (namelen > w) && (int)(namelen + secondlen) >= columns) {
- printf(" %s" "%.*s" "%s\n", sb, namelen-1, str, se);
- if (secondlen > 1) {
- const int second_end = namelen+secondlen-1;
- int n = namelen;
- if (str[n] == ',') n++;
- if (str[n] == ' ') n++;
- printf(" %s" "%.*s" "%s\n", sb, second_end-n, str+n, se);
+ if (help && (namelen + 1 > w) && /* a padding space */
+ (int)(namelen + secondlen + indent_width) >= columns) {
+ printf(USAGE_INDENT "%s" "%.*s" "%s\n", sb, namelen, str, se);
+ if (secondlen > 0) {
+ const int second_end = secondlen;
+ int n = 0;
+ if (str2[n] == ',') n++;
+ if (str2[n] == ' ') n++;
+ printf(USAGE_INDENT "%s" "%.*s" "%s\n", sb, second_end-n, str2+n, se);
}
- printf("%-*s%.*s\n", w + 2, "", desclen, desc);
+ printf("%-*s%.*s\n", w + indent_width, USAGE_INDENT, desclen, desc);
}
else {
- const int wrap = help && namelen + secondlen - 1 > w;
- printf(" %s%.*s%-*.*s%s%-*s%.*s\n", sb, namelen-1, str,
- (wrap ? 0 : w - namelen + 1),
- (help ? secondlen-1 : 0), str + namelen, se,
- (wrap ? w + 3 : 0), (wrap ? "\n" : ""),
+ const int wrap = help && namelen + secondlen >= w;
+ printf(USAGE_INDENT "%s%.*s%-*.*s%s%-*s%.*s\n", sb, namelen, str,
+ (wrap ? 0 : w - namelen),
+ (help ? secondlen : 0), str2, se,
+ (wrap ? (int)(w + rb_strlen_lit("\n" USAGE_INDENT)) : 0),
+ (wrap ? "\n" USAGE_INDENT : ""),
desclen, desc);
}
if (help) {
while (desc[desclen]) {
- desc += desclen + 1;
+ desc += desclen + rb_strlen_lit("\n");
desclen = (unsigned int)strcspn(desc, "\n");
- printf("%-*s%.*s\n", w + 2, "", desclen, desc);
+ printf("%-*s%.*s\n", w + indent_width, USAGE_INDENT, desclen, desc);
}
}
}