]> Nishi Git Mirror - gwion.git/commitdiff
:art: *Improve did you mean*
authorJérémie Astor <fennecdjay@gmail.com>
Mon, 15 Mar 2021 00:42:51 +0000 (01:42 +0100)
committerJérémie Astor <fennecdjay@gmail.com>
Mon, 15 Mar 2021 00:42:51 +0000 (01:42 +0100)
src/parse/check.c
src/parse/did_you_mean.c

index d2e479c96e96f6da36f1160b734c1a5733a0d2f8..213cba36de376c35a4c2ed833fc8b934b28e4089 100644 (file)
@@ -289,8 +289,8 @@ ANN static Type prim_id_non_res(const Env env, const Symbol *data) {
   const Symbol sym = *data;
   const Value v = check_non_res_value(env, data);
   if(!v || !vflag(v, vflag_valid) || (v->from->ctx && v->from->ctx->error)) {
-    env_err(env, prim_pos(data),
-          _("variable %s not legit at this point."), s_name(sym));
+    gwerr_basic(_("Invalid variable"), _("not legit at this point."), "did you mean:",
+         env->name, prim_pos(data), 0);
     did_you_mean_nspc(v ? value_owner(env, v) : env->curr, s_name(sym));
     return NULL;
   }
index 11e4f0d6bdfca76dc63968a7f200644c412d40b7..01665eb64a6c74d5d4c336a6f5e5b274cf7f0cbb 100644 (file)
@@ -45,6 +45,7 @@ ANN static void ressembles(const Vector v, const Nspc nspc, const char* name) {
 
 #define MAX_NAME_LEN 16
 #define CHECK_LEN(name) if(strlen(name) > MAX_NAME_LEN) return;
+#define DYM_FMT "`{/+}%s{0}`?\n"
 
 #undef did_you_mean_nspc
 ANN void did_you_mean_nspc(Nspc nspc, const char* name) {
@@ -54,7 +55,7 @@ ANN void did_you_mean_nspc(Nspc nspc, const char* name) {
   do ressembles(&v, nspc, name);
   while((nspc = nspc->parent));
   for(m_uint i = 0; i < vector_size(&v); ++i)
-    gw_err(_("  (did you mean '%s'?)\n"), (m_str)vector_at(&v, i));
+    gw_err(DYM_FMT, (m_str)vector_at(&v, i));
   vector_release(&v);
 }
 
@@ -67,6 +68,6 @@ ANN void did_you_mean_type(Type type, const char* name) {
   do ressembles(&v, t->nspc, name);
   while((t = t->info->parent) && t->nspc);
   for(m_uint i = 0; i < vector_size(&v); ++i)
-    gw_err(_("  (did you mean '%s'?)\n"), (m_str)vector_at(&v, i));
+    gw_err(DYM_FMT, (m_str)vector_at(&v, i));
   vector_release(&v);
 }