forked from mirrors/linux
		
	kconfig: make "Selected by:" and "Implied by:" readable
Reverse dependency 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:" and "Implied by:" blurb much easier to read. This is done only if there is more than one top level OR. "Depends on:" and "Range :" were deliberately left as they are. Based on idea from Paul Bolle. Suggested-by: Paul Bolle <pebolle@tiscali.nl> Signed-off-by: Petr Vorel <petr.vorel@gmail.com> Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
This commit is contained in:
		
							parent
							
								
									312ee68752
								
							
						
					
					
						commit
						1ccb271433
					
				
					 3 changed files with 27 additions and 6 deletions
				
			
		|  | @ -1176,7 +1176,7 @@ struct expr *expr_simplify_unmet_dep(struct expr *e1, struct expr *e2) | |||
| 	return expr_get_leftmost_symbol(ret); | ||||
| } | ||||
| 
 | ||||
| void expr_print(struct expr *e, void (*fn)(void *, struct symbol *, const char *), void *data, int prevtoken) | ||||
| static void __expr_print(struct expr *e, void (*fn)(void *, struct symbol *, const char *), void *data, int prevtoken, bool revdep) | ||||
| { | ||||
| 	if (!e) { | ||||
| 		fn(data, NULL, "y"); | ||||
|  | @ -1231,9 +1231,14 @@ void expr_print(struct expr *e, void (*fn)(void *, struct symbol *, const char * | |||
| 		fn(data, e->right.sym, e->right.sym->name); | ||||
| 		break; | ||||
| 	case E_OR: | ||||
| 		expr_print(e->left.expr, fn, data, E_OR); | ||||
| 		fn(data, NULL, " || "); | ||||
| 		expr_print(e->right.expr, fn, data, E_OR); | ||||
| 		if (revdep && e->left.expr->type != E_OR) | ||||
| 			fn(data, NULL, "\n  - "); | ||||
| 		__expr_print(e->left.expr, fn, data, E_OR, revdep); | ||||
| 		if (revdep) | ||||
| 			fn(data, NULL, "\n  - "); | ||||
| 		else | ||||
| 			fn(data, NULL, " || "); | ||||
| 		__expr_print(e->right.expr, fn, data, E_OR, revdep); | ||||
| 		break; | ||||
| 	case E_AND: | ||||
| 		expr_print(e->left.expr, fn, data, E_AND); | ||||
|  | @ -1266,6 +1271,11 @@ void expr_print(struct expr *e, void (*fn)(void *, struct symbol *, const char * | |||
| 		fn(data, NULL, ")"); | ||||
| } | ||||
| 
 | ||||
| void expr_print(struct expr *e, void (*fn)(void *, struct symbol *, const char *), void *data, int prevtoken) | ||||
| { | ||||
| 	__expr_print(e, fn, data, prevtoken, false); | ||||
| } | ||||
| 
 | ||||
| static void expr_print_file_helper(void *data, struct symbol *sym, const char *str) | ||||
| { | ||||
| 	xfwrite(str, strlen(str), 1, data); | ||||
|  | @ -1310,3 +1320,13 @@ void expr_gstr_print(struct expr *e, struct gstr *gs) | |||
| { | ||||
| 	expr_print(e, expr_print_gstr_helper, gs, E_NONE); | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Transform the top level "||" tokens into newlines and prepend each | ||||
|  * line with a minus. This makes expressions much easier to read. | ||||
|  * Suitable for reverse dependency expressions. | ||||
|  */ | ||||
| void expr_gstr_print_revdep(struct expr *e, struct gstr *gs) | ||||
| { | ||||
| 	__expr_print(e, expr_print_gstr_helper, gs, E_NONE, true); | ||||
| } | ||||
|  |  | |||
|  | @ -310,6 +310,7 @@ struct expr *expr_simplify_unmet_dep(struct expr *e1, struct expr *e2); | |||
| void expr_fprint(struct expr *e, FILE *out); | ||||
| struct gstr; /* forward */ | ||||
| void expr_gstr_print(struct expr *e, struct gstr *gs); | ||||
| void expr_gstr_print_revdep(struct expr *e, struct gstr *gs); | ||||
| 
 | ||||
| static inline int expr_is_yes(struct expr *e) | ||||
| { | ||||
|  |  | |||
|  | @ -828,14 +828,14 @@ 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: ")); | ||||
| 		expr_gstr_print(sym->rev_dep.expr, r); | ||||
| 		expr_gstr_print_revdep(sym->rev_dep.expr, r); | ||||
| 		str_append(r, "\n"); | ||||
| 	} | ||||
| 
 | ||||
| 	get_symbol_props_str(r, sym, P_IMPLY, _("  Implies: ")); | ||||
| 	if (sym->implied.expr) { | ||||
| 		str_append(r, _("  Implied by: ")); | ||||
| 		expr_gstr_print(sym->implied.expr, r); | ||||
| 		expr_gstr_print_revdep(sym->implied.expr, r); | ||||
| 		str_append(r, "\n"); | ||||
| 	} | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Petr Vorel
						Petr Vorel