Comment blocks are now generated in .config only for menus. Provide
them for choices and menuconfigs too to greatly improve dotconfig
readability.

Choices before:

CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y
CONFIG_HAVE_LD_DEAD_CODE_DATA_ELIMINATION=y

Choices after:

CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y

CONFIG_HAVE_LD_DEAD_CODE_DATA_ELIMINATION=y

Menuconfigs before:

CONFIG_RESET_CONTROLLER=y

Menuconfigs after:

CONFIG_RESET_CONTROLLER=y

Signed-off-by: Alexander Lobakin <aloba...@pm.me>
---
 scripts/kconfig/confdata.c | 25 ++++++++++++++-----------
 1 file changed, 14 insertions(+), 11 deletions(-)

diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c
index 2568dbe16ed6..e4f0a21fd469 100644
--- a/scripts/kconfig/confdata.c
+++ b/scripts/kconfig/confdata.c
@@ -869,17 +869,20 @@ int conf_write(const char *name)
        menu = rootmenu.list;
        while (menu) {
                sym = menu->sym;
-               if (!sym) {
-                       if (!menu_is_visible(menu))
-                               goto next;
+
+               if ((!sym || (sym->flags & SYMBOL_CHOICE) ||
+                    (menu->prompt && menu->prompt->type == P_MENU)) &&
+                   menu_is_visible(menu)) {
                        str = menu_get_prompt(menu);
                        fprintf(out, "\n"
                                     "#\n"
                                     "# %s\n"
                                     "#\n", str);
                        need_newline = false;
-               } else if (!(sym->flags & SYMBOL_CHOICE) &&
-                          !(sym->flags & SYMBOL_WRITTEN)) {
+               }
+
+               if (sym && !(sym->flags & SYMBOL_CHOICE) &&
+                   !(sym->flags & SYMBOL_WRITTEN)) {
                        sym_calc_value(sym);
                        if (!(sym->flags & SYMBOL_WRITE))
                                goto next;
@@ -896,11 +899,11 @@ int conf_write(const char *name)
                        menu = menu->list;
                        continue;
                }
-               if (menu->next)
-                       menu = menu->next;
-               else while ((menu = menu->parent)) {
-                       if (!menu->sym && menu_is_visible(menu) &&
-                           menu != &rootmenu) {
+
+               do {
+                       if (((menu->sym && menu->sym->flags & SYMBOL_CHOICE) ||
+                            (menu->prompt && menu->prompt->type == P_MENU)) &&
+                           menu_is_visible(menu) && menu != &rootmenu) {
                                str = menu_get_prompt(menu);
                                fprintf(out, "# end of %s\n", str);
                                need_newline = true;
@@ -909,7 +912,7 @@ int conf_write(const char *name)
                                menu = menu->next;
                                break;
                        }
-               }
+               } while ((menu = menu->parent));
        }
        fclose(out);

--
2.31.0


Reply via email to