Show tree-sitter query source when signaling query error

* src/treesit.c (treesit_compose_query_signal_data): Add QUERY_SOURCE
parameter.
(treesit_ensure_query_compiled)
(Ftreesit_query_capture): Add query source.
This commit is contained in:
Yuan Fu 2022-12-30 16:57:45 -08:00
parent 0b58ea0e60
commit ab1f245f1a
No known key found for this signature in database
GPG key ID: 56E19BC57664A442

View file

@ -1194,10 +1194,12 @@ treesit_query_error_to_string (TSQueryError error)
static Lisp_Object static Lisp_Object
treesit_compose_query_signal_data (uint32_t error_offset, treesit_compose_query_signal_data (uint32_t error_offset,
TSQueryError error_type) TSQueryError error_type,
Lisp_Object query_source)
{ {
return list3 (build_string (treesit_query_error_to_string (error_type)), return list4 (build_string (treesit_query_error_to_string (error_type)),
make_fixnum (error_offset + 1), make_fixnum (error_offset + 1),
query_source,
build_pure_c_string ("Debug the query with `treesit-query-validate'")); build_pure_c_string ("Debug the query with `treesit-query-validate'"));
} }
@ -1239,7 +1241,8 @@ treesit_ensure_query_compiled (Lisp_Object query, Lisp_Object *signal_symbol,
{ {
*signal_symbol = Qtreesit_query_error; *signal_symbol = Qtreesit_query_error;
*signal_data = treesit_compose_query_signal_data (error_offset, *signal_data = treesit_compose_query_signal_data (error_offset,
error_type); error_type,
source);
} }
XTS_COMPILED_QUERY (query)->query = treesit_query; XTS_COMPILED_QUERY (query)->query = treesit_query;
return treesit_query; return treesit_query;
@ -2627,7 +2630,7 @@ the query. */)
if (treesit_query == NULL) if (treesit_query == NULL)
xsignal (Qtreesit_query_error, xsignal (Qtreesit_query_error,
treesit_compose_query_signal_data (error_offset, treesit_compose_query_signal_data (error_offset,
error_type)); error_type, query));
cursor = ts_query_cursor_new (); cursor = ts_query_cursor_new ();
needs_to_free_query_and_cursor = true; needs_to_free_query_and_cursor = true;
} }