]> git.eshelyaron.com Git - emacs.git/commitdiff
Make treesit-query-compile compile compiled-query eagerly
authorYuan Fu <casouri@gmail.com>
Tue, 3 Dec 2024 04:14:55 +0000 (20:14 -0800)
committerEshel Yaron <me@eshelyaron.com>
Fri, 6 Dec 2024 15:42:44 +0000 (16:42 +0100)
* src/treesit.c (treesit_ensure_query_compiled_signal): Extrat
out into a function.
(Ftreesit_query_compile): If EAGER is non-nil and QUERY is a
lazily compiled query, compile it eagerily.

(cherry picked from commit 4ecd1639b19345786020c0f7a5f3672129dae466)

src/treesit.c

index 2372944e16694be9f2277c4209977b0168ed4cc3..28c94f307c071c7d4c4235bcfc86c3651ee08c9d 100644 (file)
@@ -1516,6 +1516,20 @@ treesit_ensure_query_compiled (Lisp_Object query, Lisp_Object *signal_symbol,
   return treesit_query;
 }
 
+/* Bsically treesit_ensure_query_compiled but can signal.  */
+static
+void treesit_ensure_query_compiled_signal (Lisp_Object lisp_query)
+{
+  Lisp_Object signal_symbol = Qnil;
+  Lisp_Object signal_data = Qnil;
+  TSQuery *treesit_query = treesit_ensure_query_compiled (lisp_query,
+                                                         &signal_symbol,
+                                                         &signal_data);
+
+  if (treesit_query == NULL)
+    xsignal (signal_symbol, signal_data);
+}
+
 /* Resolve language symbol LANG according to
    treesit-language-remap-alist.  */
 static
@@ -3051,6 +3065,8 @@ DEFUN ("treesit-query-compile",
        doc: /* Compile QUERY to a compiled query.
 
 Querying with a compiled query is much faster than an uncompiled one.
+So it's a good idea to use compiled query in tight loops, etc.
+
 LANGUAGE is the language this query is for.
 
 If EAGER is non-nil, immediately load LANGUAGE and compile the query.
@@ -3064,11 +3080,17 @@ You can use `treesit-query-validate' to validate and debug a query.  */)
   if (NILP (Ftreesit_query_p (query)))
     wrong_type_argument (Qtreesit_query_p, query);
   CHECK_SYMBOL (language);
-  if (TS_COMPILED_QUERY_P (query))
-    return query;
 
   treesit_initialize ();
 
+  if (TS_COMPILED_QUERY_P (query))
+    {
+      if (NILP (eager))
+       return query;
+      treesit_ensure_query_compiled_signal (query);
+      return query;
+    }
+
   Lisp_Object lisp_query = make_treesit_query (query, language);
 
   /* Maybe actually compile.  */
@@ -3076,15 +3098,7 @@ You can use `treesit-query-validate' to validate and debug a query.  */)
     return lisp_query;
   else
     {
-      Lisp_Object signal_symbol = Qnil;
-      Lisp_Object signal_data = Qnil;
-      TSQuery *treesit_query = treesit_ensure_query_compiled (lisp_query,
-                                                             &signal_symbol,
-                                                             &signal_data);
-
-      if (treesit_query == NULL)
-       xsignal (signal_symbol, signal_data);
-
+      treesit_ensure_query_compiled_signal (lisp_query);
       return lisp_query;
     }
 }