From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-il1-x12a.google.com (mail-il1-x12a.google.com [IPv6:2607:f8b0:4864:20::12a]) by sourceware.org (Postfix) with ESMTPS id 82834392AC34 for ; Mon, 3 Jun 2024 17:57:38 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 82834392AC34 Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=adacore.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=adacore.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 82834392AC34 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::12a ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1717437461; cv=none; b=jSjSEW/U5LH+jr32XaOqTeyp9CTE6b+Z0Zc7/O6ibOAexxHzCuLA2tGbq5KWXqimRD58htOjmDH13DbA3N2S19GwiJS4MYiH1rhtCD7jCWu6KBKHB7KexST7LumutrpTuIQWO37BYR51IYu6BDaCAsMYa7940hXvUeaDZDdP1NY= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1717437461; c=relaxed/simple; bh=DHQQQQBDHo2YnP8SRmcQ8NYpcnoKwVWOiE6bXWGM5N0=; h=DKIM-Signature:From:Date:Subject:MIME-Version:Message-Id:To; b=FyDm7nQ5Cc6cBqBkC+x+sjhCUgudH5recSPfevEJ2kHi4KSA/GuJ31P7INgwFEpVAr7iei5g9AoYmXw7a1HxgQ3Hd1Vb+EZ85KDkCkrLxYv0MfPND/V4UwbsZL+En3DwMMFQN8Dq4DUDrhoYvyEsgqLu0JTkp8hC/qb/Lgz9Q6g= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-il1-x12a.google.com with SMTP id e9e14a558f8ab-36dd56cf5f5so19124005ab.3 for ; Mon, 03 Jun 2024 10:57:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; t=1717437457; x=1718042257; darn=sourceware.org; h=to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=eUFjFSXMGwkVYWIxoleE0Orymo4JgjEMvaFxyqbPrBA=; b=Qa67UYjQ1U4NCeLp4t8C3chPs8G9HZnnJRLyLW4CEz+l0PPao3D5ax6awj/J1alfVd NfuYx/0seXIONxdDEaOBnWJSFDDgVvSUTTHXkYdDHUHIgIOGUBorP7YcrT0dZRMsa6je tnnXSB7vCYg2pVjcb9BXjkQPz1UTNLqFBQC+nLWtKBgwqTVPP1wz/v8E5oeWZdHcuxM2 2BsNFuDXAioMSLcBlaA15on4ULBIk983fBxXeAR0vJX9tb5AJBjlb7TrGdTCsy3Bh80W tdjRbRzjBw3x4Y3Z0f/gsGyjiEzh2dEbp9IexE9RvMF0JmYO/x9+x51kjDAu5etvGayU PMyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1717437457; x=1718042257; h=to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=eUFjFSXMGwkVYWIxoleE0Orymo4JgjEMvaFxyqbPrBA=; b=v3VOFKmymXsicbA9bPYtF7FmFS26xDkCeJ6W32kcn2WFGk4dQ2y6BjZivClgQck9rb ET/YKxvpy7PcMkgHExYI2FMc5GBvG6L9qzx2YEmGkO2B0XLNm8cOUUB8wy5zheUv4rEB bN1h/9Q7OgKSsclaPPWr2kvRKRMNxZ7KlY5vB3zcYcMDrOxDuR6dNImmAgKbAJYNDRhq YJ8gYBwS0npLp7ChKbnI0X4XnZEFbWnoci8UK+AKp92RptlNQgP7zErDw9+gpvsWbOTO r6y9WqSMmzOZKgB9rFJgLfXA58KOO6thsucvbSUixNMPwX//i9NqVI/J6+l1MgShjSir KePg== X-Gm-Message-State: AOJu0YwBP3Fmj3nYgC8nRT3EyQSS2GfWkgX55K3emyKvSgSHmIJN5pbz ++0m4qQVNpG5y/8F+upYnwsd6j4IIyWeXEojcgYiyOCwFScNevuM4gwPBWFBqOb9ydiE4guuTbw = X-Google-Smtp-Source: AGHT+IGJFY2UAZ+gen7JR+vxMHHPNRRs9sMXnCROT33O0lPoFZvKHCdCVfelrGShmmSC7IvcRoId3A== X-Received: by 2002:a05:6e02:1e0a:b0:374:8214:4ba7 with SMTP id e9e14a558f8ab-3748b96c6damr115959835ab.6.1717437457423; Mon, 03 Jun 2024 10:57:37 -0700 (PDT) Received: from localhost.localdomain (75-166-134-4.hlrn.qwest.net. [75.166.134.4]) by smtp.gmail.com with ESMTPSA id 8926c6da1cb9f-4b4881d5d4dsm2084903173.64.2024.06.03.10.57.37 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Jun 2024 10:57:37 -0700 (PDT) From: Tom Tromey Date: Mon, 03 Jun 2024 11:57:30 -0600 Subject: [PATCH 3/4] Wrap help options when building help string MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20240603-doc-string-cols-v1-3-ad67124ba872@adacore.com> References: <20240603-doc-string-cols-v1-0-ad67124ba872@adacore.com> In-Reply-To: <20240603-doc-string-cols-v1-0-ad67124ba872@adacore.com> To: gdb-patches@sourceware.org X-Mailer: b4 0.13.0 X-Spam-Status: No, score=-11.4 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: When building a help string, it's possible that the resulting options will go over 80 columns. This patch changes this code to add line wrapping where needed. This can most be seen by looking "help bt" and in particular the "-frame-info" help text. --- gdb/cli/cli-decode.h | 3 +++ gdb/cli/cli-option.c | 60 ++++++++++++++++++++++++++++++++-------------------- 2 files changed, 40 insertions(+), 23 deletions(-) diff --git a/gdb/cli/cli-decode.h b/gdb/cli/cli-decode.h index 7365c3f0157..7e25374fc80 100644 --- a/gdb/cli/cli-decode.h +++ b/gdb/cli/cli-decode.h @@ -29,6 +29,9 @@ #include "gdbsupport/intrusive_list.h" #include "gdbsupport/buildargv.h" +/* The allowed length of a line in a documentation string. */ +constexpr int cli_help_line_length = 80; + /* Not a set/show command. Note that some commands which begin with "set" or "show" might be in this category, if their syntax does not fall into one of the following categories. */ diff --git a/gdb/cli/cli-option.c b/gdb/cli/cli-option.c index 05539285c80..520810276a4 100644 --- a/gdb/cli/cli-option.c +++ b/gdb/cli/cli-option.c @@ -659,50 +659,68 @@ process_options (const char **args, } } -/* Helper for build_help. Return a fragment of a help string showing - OPT's possible values. Returns NULL if OPT doesn't take an - argument. */ +/* Helper for build_help. Append a fragment of a help string showing + OPT's possible values. LEN_AT_START is the length of HELP at the + start of the current line. This is used when wrapping is + needed. */ -static const char * -get_val_type_str (const option_def &opt, std::string &buffer) +static void +append_val_type_str (std::string &help, const option_def &opt, + size_t len_at_start) { if (!opt.have_argument) - return nullptr; + return; switch (opt.type) { case var_boolean: - return "[on|off]"; + help += " [on|off]"; + break; case var_uinteger: case var_integer: case var_pinteger: { - buffer = "NUMBER"; + help += " NUMBER"; if (opt.extra_literals != nullptr) for (const literal_def *l = opt.extra_literals; l->literal != nullptr; l++) { - buffer += '|'; - buffer += l->literal; + help += '|'; + help += l->literal; } - return buffer.c_str (); } + break; case var_enum: { - buffer = ""; + help += ' '; + /* If wrapping is needed, subsequent lines will be indented + this amount. */ + size_t indent = help.length () - len_at_start; for (size_t i = 0; opt.enums[i] != nullptr; i++) { if (i != 0) - buffer += "|"; - buffer += opt.enums[i]; + { + size_t new_len = help.length () + 1 + strlen (opt.enums[i]); + + if (new_len - len_at_start >= cli_help_line_length) + { + help += "\n"; + len_at_start = help.length (); + + help.append (indent, ' '); + } + help += "|"; + } + help += opt.enums[i]; } - return buffer.c_str (); } + break; case var_string: - return "STRING"; + help += " STRING"; + break; default: - return nullptr; + break; } } @@ -740,15 +758,11 @@ build_help_option (gdb::array_view options, if (o.set_doc == nullptr) continue; + size_t initial_len = help.length (); help += " -"; help += o.name; - const char *val_type_str = get_val_type_str (o, buffer); - if (val_type_str != nullptr) - { - help += ' '; - help += val_type_str; - } + append_val_type_str (help, o, initial_len); help += "\n"; append_indented_doc (o.set_doc, help); if (o.help_doc != nullptr) -- 2.44.0