MINOR: cfgparse/bind: suggest correct spelling for unknown bind keywords
Just like with the server keywords, now's the turn of "bind" keywords.
The difference is that 100% of the bind keywords are registered, thus
we do not need the list of extra keywords.
There are multiple bind line parsers today, all were updated:
- peers
- log
- dgram-bind
- cli
$ printf "listen f\nbind :8000 tcut\n" | ./haproxy -c -f /dev/stdin
[NOTICE] 070/101358 (25146) : haproxy version is 2.4-dev11-7b8787-26
[NOTICE] 070/101358 (25146) : path to executable is ./haproxy
[ALERT] 070/101358 (25146) : parsing [/dev/stdin:2] : 'bind :8000' unknown keyword 'tcut'; did you mean 'tcp-ut' maybe ?
[ALERT] 070/101358 (25146) : Error(s) found in configuration file : /dev/stdin
[ALERT] 070/101358 (25146) : Fatal errors found in configuration.
diff --git a/src/cli.c b/src/cli.c
index 72919ce..04c4e7a 100644
--- a/src/cli.c
+++ b/src/cli.c
@@ -290,8 +290,8 @@
cur_arg = 3;
while (*args[cur_arg]) {
- static int bind_dumped;
struct bind_kw *kw;
+ const char *best;
kw = bind_find_kw(args[cur_arg]);
if (kw) {
@@ -314,15 +314,13 @@
continue;
}
- if (!bind_dumped) {
- bind_dump_kws(err);
- indent_msg(err, 4);
- bind_dumped = 1;
- }
-
- memprintf(err, "'%s %s' : unknown keyword '%s'.%s%s",
- args[0], args[1], args[cur_arg],
- err && *err ? " Registered keywords :" : "", err && *err ? *err : "");
+ best = bind_find_best_kw(args[cur_arg]);
+ if (best)
+ memprintf(err, "'%s %s' : unknown keyword '%s'. Did you mean '%s' maybe ?",
+ args[0], args[1], args[cur_arg], best);
+ else
+ memprintf(err, "'%s %s' : unknown keyword '%s'.",
+ args[0], args[1], args[cur_arg]);
return -1;
}
@@ -2656,8 +2654,8 @@
cur_arg = 1;
while (*args[cur_arg]) {
- static int bind_dumped;
struct bind_kw *kw;
+ const char *best;
kw = bind_find_kw(args[cur_arg]);
if (kw) {
@@ -2680,15 +2678,13 @@
continue;
}
- if (!bind_dumped) {
- bind_dump_kws(&err);
- indent_msg(&err, 4);
- bind_dumped = 1;
- }
-
- memprintf(&err, "'%s %s' : unknown keyword '%s'.%s%s",
- args[0], args[1], args[cur_arg],
- err ? " Registered keywords :" : "", err ? err : "");
+ best = bind_find_best_kw(args[cur_arg]);
+ if (best)
+ memprintf(&err, "'%s %s' : unknown keyword '%s'. Did you mean '%s' maybe ?",
+ args[0], args[1], args[cur_arg], best);
+ else
+ memprintf(&err, "'%s %s' : unknown keyword '%s'.",
+ args[0], args[1], args[cur_arg]);
goto err;
}