From: Petr Vorel <petr.vorel@gmail.com>
To: linux-kbuild@vger.kernel.org
Cc: Petr Vorel <petr.vorel@gmail.com>,
Paul Bolle <pebolle@tiscali.nl>,
Masahiro Yamada <yamada.masahiro@socionext.com>
Subject: [PATCH v4 1/1] kconfig: menuconfig make "Selected by:" and "Depends on:" readable
Date: Tue, 16 Jan 2018 00:09:30 +0100 [thread overview]
Message-ID: <20180115230930.8723-1-petr.vorel@gmail.com> (raw)
rev_dep expressions can get rather unwieldy, especially if a symbol is
selected by more than a handful of other symbols. I.e. it's possible to
have near endless expressions like:
A && B && !C || D || F && (G || H) || [...]
Chop these expressions into actually readable chunks:
- A && B && !C
- D
- F && (G || H)
- [...]
I.e. transform the top level OR tokens into newlines and prepend each
line with a minus. This makes the "Selected by:" blurb much easier to
read. For consistency the same is done for "Depends on:" although the
problem isn't that bad for it. This is done only if there is more than
one top level OR.
This also prevents trimming too long lines.
Based on idea from Paul Bolle.
Reported-by: Paul Bolle <pebolle@tiscali.nl>
Signed-off-by: Petr Vorel <petr.vorel@gmail.com>
---
Tested on search USB and General setup -> Kernel compression mode (Gzip) -> Help.
Changes v3->v4:
* Add split also for "Depends on:". This is done for consistency (reported
by Masahiro Yamada). I didn't consider other symbols which call expr_gstr_print()
as reasonable candidates (i.e. "Implies:" and "Range : ").
* Add new line and hyphen only when there are more top level OR than one.
---
scripts/kconfig/expr.c | 16 +++++++++++++---
| 4 ++++
2 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/scripts/kconfig/expr.c b/scripts/kconfig/expr.c
index cbf4996dd9c1..4b4309b59349 100644
--- a/scripts/kconfig/expr.c
+++ b/scripts/kconfig/expr.c
@@ -1070,6 +1070,8 @@ struct expr *expr_simplify_unmet_dep(struct expr *e1, struct expr *e2)
return expr_get_leftmost_symbol(ret);
}
+static int print_level = 0;
+
void expr_print(struct expr *e, void (*fn)(void *, struct symbol *, const char *), void *data, int prevtoken)
{
if (!e) {
@@ -1077,8 +1079,11 @@ void expr_print(struct expr *e, void (*fn)(void *, struct symbol *, const char *
return;
}
- if (expr_compare_type(prevtoken, e->type) > 0)
+ if (expr_compare_type(prevtoken, e->type) > 0) {
+ print_level++;
fn(data, NULL, "(");
+ }
+
switch (e->type) {
case E_SYMBOL:
if (e->left.sym->name)
@@ -1126,7 +1131,10 @@ void expr_print(struct expr *e, void (*fn)(void *, struct symbol *, const char *
break;
case E_OR:
expr_print(e->left.expr, fn, data, E_OR);
- fn(data, NULL, " || ");
+ if (print_level == 0)
+ fn(data, NULL, "\n - ");
+ else
+ fn(data, NULL, " || ");
expr_print(e->right.expr, fn, data, E_OR);
break;
case E_AND:
@@ -1156,8 +1164,10 @@ void expr_print(struct expr *e, void (*fn)(void *, struct symbol *, const char *
break;
}
}
- if (expr_compare_type(prevtoken, e->type) > 0)
+ if (expr_compare_type(prevtoken, e->type) > 0) {
+ print_level--;
fn(data, NULL, ")");
+ }
}
static void expr_print_file_helper(void *data, struct symbol *sym, const char *str)
--git a/scripts/kconfig/menu.c b/scripts/kconfig/menu.c
index e9357931b47d..579ed9df1409 100644
--- a/scripts/kconfig/menu.c
+++ b/scripts/kconfig/menu.c
@@ -668,6 +668,8 @@ static void get_symbol_str(struct gstr *r, struct symbol *sym,
prop->menu->lineno);
if (!expr_is_yes(prop->visible.expr)) {
str_append(r, _(" Depends on: "));
+ if (prop->visible.expr->type == E_OR)
+ str_append(r, "\n - ");
expr_gstr_print(prop->visible.expr, r);
str_append(r, "\n");
}
@@ -676,6 +678,8 @@ static void get_symbol_str(struct gstr *r, struct symbol *sym,
get_symbol_props_str(r, sym, P_SELECT, _(" Selects: "));
if (sym->rev_dep.expr) {
str_append(r, _(" Selected by: "));
+ if (sym->rev_dep.expr->type == E_OR)
+ str_append(r, "\n - ");
expr_gstr_print(sym->rev_dep.expr, r);
str_append(r, "\n");
}
--
2.15.1
next reply other threads:[~2018-01-15 23:09 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-01-15 23:09 Petr Vorel [this message]
2018-01-17 21:37 ` [PATCH v4 1/1] kconfig: menuconfig make "Selected by:" and "Depends on:" readable Randy Dunlap
2018-01-22 15:04 ` Masahiro Yamada
2018-01-22 15:21 ` Masahiro Yamada
2018-01-23 19:02 ` Petr Vorel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180115230930.8723-1-petr.vorel@gmail.com \
--to=petr.vorel@gmail.com \
--cc=linux-kbuild@vger.kernel.org \
--cc=pebolle@tiscali.nl \
--cc=yamada.masahiro@socionext.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox