Improve reporting of language-grammar library ABI version mismatch

* lisp/treesit.el (treesit-ready-p): More accurate wording of
message when grammar library fails to load.

* src/treesit.c (treesit_load_language): Improve message when
reporting library ABI version mismatch.  Suggested by Soham
Gumaste <sohamg2@gmail.com>.
This commit is contained in:
Eli Zaretskii 2025-05-18 09:05:07 +03:00
parent 28a8bd6061
commit 38789e9a28
2 changed files with 15 additions and 5 deletions

View file

@ -4297,7 +4297,7 @@ instead of emitting a warning."
(pcase-let ((`(,available . ,err)
(treesit-language-available-p lang t)))
(when (not available)
(setq msg (format "language grammar for %s is unavailable (%s): %s"
(setq msg (format "language grammar for %s failed to load (%s): %s"
lang (nth 0 err)
(string-join
(mapcar (lambda (x) (format "%s" x))

View file

@ -757,6 +757,7 @@ treesit_load_language (Lisp_Object language_symbol,
error = NULL;
handle = NULL;
Lisp_Object loaded_lib = Qnil;
FOR_EACH_TAIL (tail)
{
char *library_name = SSDATA (XCAR (tail));
@ -764,7 +765,10 @@ treesit_load_language (Lisp_Object language_symbol,
handle = dynlib_open (library_name);
error = dynlib_error ();
if (error == NULL)
break;
{
loaded_lib = XCAR (tail);
break;
}
else
error_list = Fcons (build_string (error), error_list);
}
@ -808,9 +812,15 @@ treesit_load_language (Lisp_Object language_symbol,
ts_parser_delete (parser);
if (!success)
{
Lisp_Object fmt =
build_string ("%s's ABI version is %d, but supported versions are %d-%d");
Lisp_Object formatted_msg =
CALLN (Fformat_message, fmt, loaded_lib,
make_fixnum (ts_language_version (lang)),
make_fixnum (TREE_SITTER_MIN_COMPATIBLE_LANGUAGE_VERSION),
make_fixnum (TREE_SITTER_LANGUAGE_VERSION));
*signal_symbol = Qtreesit_load_language_error;
*signal_data = list2 (Qversion_mismatch,
make_fixnum (ts_language_version (lang)));
*signal_data = list2 (Qlang_version_mismatch, formatted_msg);
return loaded_lang;
}
@ -5091,7 +5101,7 @@ syms_of_treesit (void)
DEFSYM (Qnot_found, "not-found");
DEFSYM (Qsymbol_error, "symbol-error");
DEFSYM (Qversion_mismatch, "version-mismatch");
DEFSYM (Qlang_version_mismatch, "language-grammar-version-mismatch");
DEFSYM (Qtreesit_error, "treesit-error");
DEFSYM (Qtreesit_query_error, "treesit-query-error");