mirror of
https://github.com/openbsd/ports.git
synced 2026-06-17 23:13:55 +02:00
fix tree-sitter modes on emacs by applying this patch:
https://github.com/emacs-mirror/emacs/commit/b01435306a36e4e75671fbe7bacea351f89947d5 ok jca@
This commit is contained in:
@@ -2,7 +2,7 @@ COMMENT= GNU editor: extensible, customizable, self-documenting
|
||||
|
||||
VERSION= 30.2
|
||||
DISTNAME= emacs-${VERSION}
|
||||
REVISION= 1
|
||||
REVISION= 2
|
||||
|
||||
CATEGORIES= editors
|
||||
|
||||
|
||||
@@ -2,6 +2,12 @@ Fix linkage with treesitter-0.26.
|
||||
|
||||
https://github.com/msys2/MINGW-packages/blob/master/mingw-w64-emacs/006-tree-sitter-0.26.patch
|
||||
|
||||
Also:
|
||||
The tree-sitter library throws a syntax error if the
|
||||
predicate names in a query don't end with question mark
|
||||
|
||||
https://github.com/emacs-mirror/emacs/commit/b01435306a36e4e75671fbe7bacea351f89947d5
|
||||
|
||||
Index: src/treesit.c
|
||||
--- src/treesit.c.orig
|
||||
+++ src/treesit.c
|
||||
@@ -53,6 +59,30 @@ Index: src/treesit.c
|
||||
#define ts_node_child fn_ts_node_child
|
||||
#define ts_node_child_by_field_name fn_ts_node_child_by_field_name
|
||||
#define ts_node_child_count fn_ts_node_child_count
|
||||
@@ -415,17 +431,17 @@ static Lisp_Object Vtreesit_str_dot;
|
||||
static Lisp_Object Vtreesit_str_question_mark;
|
||||
static Lisp_Object Vtreesit_str_star;
|
||||
static Lisp_Object Vtreesit_str_plus;
|
||||
-static Lisp_Object Vtreesit_str_pound_equal;
|
||||
-static Lisp_Object Vtreesit_str_pound_match;
|
||||
-static Lisp_Object Vtreesit_str_pound_pred;
|
||||
+static Lisp_Object Vtreesit_str_pound_eq_question_mark;
|
||||
+static Lisp_Object Vtreesit_str_pound_match_question_mark;
|
||||
+static Lisp_Object Vtreesit_str_pound_pred_question_mark;
|
||||
static Lisp_Object Vtreesit_str_open_bracket;
|
||||
static Lisp_Object Vtreesit_str_close_bracket;
|
||||
static Lisp_Object Vtreesit_str_open_paren;
|
||||
static Lisp_Object Vtreesit_str_close_paren;
|
||||
static Lisp_Object Vtreesit_str_space;
|
||||
-static Lisp_Object Vtreesit_str_equal;
|
||||
-static Lisp_Object Vtreesit_str_match;
|
||||
-static Lisp_Object Vtreesit_str_pred;
|
||||
+static Lisp_Object Vtreesit_str_eq_question_mark;
|
||||
+static Lisp_Object Vtreesit_str_match_question_mark;
|
||||
+static Lisp_Object Vtreesit_str_pred_question_mark;
|
||||
static Lisp_Object Vtreesit_str_empty;
|
||||
|
||||
/* This is the limit on recursion levels for some tree-sitter
|
||||
@@ -632,6 +648,22 @@ treesit_load_language_push_for_each_suffix (Lisp_Objec
|
||||
}
|
||||
}
|
||||
@@ -94,3 +124,146 @@ Index: src/treesit.c
|
||||
return make_fixnum((ptrdiff_t) version);
|
||||
}
|
||||
}
|
||||
@@ -2604,12 +2636,12 @@ See Info node `(elisp)Pattern Matching' for detailed e
|
||||
return Vtreesit_str_star;
|
||||
if (BASE_EQ (pattern, QCplus))
|
||||
return Vtreesit_str_plus;
|
||||
- if (BASE_EQ (pattern, QCequal))
|
||||
- return Vtreesit_str_pound_equal;
|
||||
- if (BASE_EQ (pattern, QCmatch))
|
||||
- return Vtreesit_str_pound_match;
|
||||
- if (BASE_EQ (pattern, QCpred))
|
||||
- return Vtreesit_str_pound_pred;
|
||||
+ if (BASE_EQ (pattern, QCequal) || BASE_EQ (pattern, QCeq_q))
|
||||
+ return Vtreesit_str_pound_eq_question_mark;
|
||||
+ if (BASE_EQ (pattern, QCmatch) || BASE_EQ (pattern, QCmatch_q))
|
||||
+ return Vtreesit_str_pound_match_question_mark;
|
||||
+ if (BASE_EQ (pattern, QCpred) || BASE_EQ (pattern, QCpred_q))
|
||||
+ return Vtreesit_str_pound_pred_question_mark;
|
||||
Lisp_Object opening_delimeter
|
||||
= VECTORP (pattern)
|
||||
? Vtreesit_str_open_bracket : Vtreesit_str_open_paren;
|
||||
@@ -2640,7 +2672,9 @@ A PATTERN in QUERY can be
|
||||
:*
|
||||
:+
|
||||
:equal
|
||||
+ :eq?
|
||||
:match
|
||||
+ :match?
|
||||
(TYPE PATTERN...)
|
||||
[PATTERN...]
|
||||
FIELD-NAME:
|
||||
@@ -2803,7 +2837,7 @@ treesit_predicate_equal (Lisp_Object args, struct capt
|
||||
return !NILP (Fstring_equal (text1, text2));
|
||||
}
|
||||
|
||||
-/* Handles predicate (#match "regexp" @node). Return true if "regexp"
|
||||
+/* Handles predicate (#match? "regexp" @node). Return true if "regexp"
|
||||
matches the text spanned by @node; return false otherwise.
|
||||
Matching is case-sensitive. If everything goes fine, don't touch
|
||||
SIGNAL_DATA; if error occurs, set it to a suitable signal data. */
|
||||
@@ -2813,26 +2847,24 @@ treesit_predicate_match (Lisp_Object args, struct capt
|
||||
{
|
||||
if (list_length (args) != 2)
|
||||
{
|
||||
- *signal_data = list2 (build_string ("Predicate `match' requires two "
|
||||
+ *signal_data = list2 (build_string ("Predicate `match?' requires two "
|
||||
"arguments but got"),
|
||||
Flength (args));
|
||||
return false;
|
||||
}
|
||||
- Lisp_Object regexp = XCAR (args);
|
||||
- Lisp_Object capture_name = XCAR (XCDR (args));
|
||||
+ Lisp_Object arg1 = XCAR (args);
|
||||
+ Lisp_Object arg2 = XCAR (XCDR (args));
|
||||
+ Lisp_Object regexp = SYMBOLP (arg2) ? arg1 : arg2;
|
||||
+ Lisp_Object capture_name = SYMBOLP (arg2) ? arg2 : arg1;
|
||||
|
||||
- /* It's probably common to get the argument order backwards. Catch
|
||||
- this mistake early and show helpful explanation, because Emacs
|
||||
- loves you. (We put the regexp first because that's what
|
||||
- string-match does.) */
|
||||
- if (!STRINGP (regexp))
|
||||
- xsignal1 (Qtreesit_query_error,
|
||||
- build_string ("The first argument to `match' should "
|
||||
- "be a regexp string, not a capture name"));
|
||||
- if (!SYMBOLP (capture_name))
|
||||
- xsignal1 (Qtreesit_query_error,
|
||||
- build_string ("The second argument to `match' should "
|
||||
- "be a capture name, not a string"));
|
||||
+ if (!STRINGP (regexp) || !SYMBOLP (capture_name))
|
||||
+ {
|
||||
+ *signal_data = list2 (build_string ("Predicate `match?' takes a regexp "
|
||||
+ "and a node capture (order doesn't "
|
||||
+ "matter), but got"),
|
||||
+ Flength (args));
|
||||
+ return false;
|
||||
+ }
|
||||
|
||||
Lisp_Object node = Qnil;
|
||||
if (!treesit_predicate_capture_name_to_node (capture_name, captures, &node,
|
||||
@@ -2916,11 +2948,11 @@ treesit_eval_predicates (struct capture_range captures
|
||||
Lisp_Object predicate = XCAR (tail);
|
||||
Lisp_Object fn = XCAR (predicate);
|
||||
Lisp_Object args = XCDR (predicate);
|
||||
- if (!NILP (Fstring_equal (fn, Vtreesit_str_equal)))
|
||||
+ if (!NILP (Fstring_equal (fn, Vtreesit_str_eq_question_mark)))
|
||||
pass &= treesit_predicate_equal (args, captures, signal_data);
|
||||
- else if (!NILP (Fstring_equal (fn, Vtreesit_str_match)))
|
||||
+ else if (!NILP (Fstring_equal (fn, Vtreesit_str_match_question_mark)))
|
||||
pass &= treesit_predicate_match (args, captures, signal_data);
|
||||
- else if (!NILP (Fstring_equal (fn, Vtreesit_str_pred)))
|
||||
+ else if (!NILP (Fstring_equal (fn, Vtreesit_str_pred_question_mark)))
|
||||
pass &= treesit_predicate_pred (args, captures, signal_data);
|
||||
else
|
||||
{
|
||||
@@ -4192,8 +4224,11 @@ syms_of_treesit (void)
|
||||
DEFSYM (QCstar, ":*");
|
||||
DEFSYM (QCplus, ":+");
|
||||
DEFSYM (QCequal, ":equal");
|
||||
+ DEFSYM (QCeq_q, ":eq?");
|
||||
DEFSYM (QCmatch, ":match");
|
||||
+ DEFSYM (QCmatch_q, ":match?");
|
||||
DEFSYM (QCpred, ":pred");
|
||||
+ DEFSYM (QCpred_q, ":pred?");
|
||||
|
||||
DEFSYM (Qnot_found, "not-found");
|
||||
DEFSYM (Qsymbol_error, "symbol-error");
|
||||
@@ -4324,12 +4359,12 @@ the symbol of that THING. For example, (or sexp sente
|
||||
Vtreesit_str_star = build_pure_c_string ("*");
|
||||
staticpro (&Vtreesit_str_plus);
|
||||
Vtreesit_str_plus = build_pure_c_string ("+");
|
||||
- staticpro (&Vtreesit_str_pound_equal);
|
||||
- Vtreesit_str_pound_equal = build_pure_c_string ("#equal");
|
||||
- staticpro (&Vtreesit_str_pound_match);
|
||||
- Vtreesit_str_pound_match = build_pure_c_string ("#match");
|
||||
- staticpro (&Vtreesit_str_pound_pred);
|
||||
- Vtreesit_str_pound_pred = build_pure_c_string ("#pred");
|
||||
+ staticpro (&Vtreesit_str_pound_eq_question_mark);
|
||||
+ Vtreesit_str_pound_eq_question_mark = build_string ("#eq?");
|
||||
+ staticpro (&Vtreesit_str_pound_match_question_mark);
|
||||
+ Vtreesit_str_pound_match_question_mark = build_string ("#match?");
|
||||
+ staticpro (&Vtreesit_str_pound_pred_question_mark);
|
||||
+ Vtreesit_str_pound_pred_question_mark = build_string ("#pred?");
|
||||
staticpro (&Vtreesit_str_open_bracket);
|
||||
Vtreesit_str_open_bracket = build_pure_c_string ("[");
|
||||
staticpro (&Vtreesit_str_close_bracket);
|
||||
@@ -4340,12 +4375,12 @@ the symbol of that THING. For example, (or sexp sente
|
||||
Vtreesit_str_close_paren = build_pure_c_string (")");
|
||||
staticpro (&Vtreesit_str_space);
|
||||
Vtreesit_str_space = build_pure_c_string (" ");
|
||||
- staticpro (&Vtreesit_str_equal);
|
||||
- Vtreesit_str_equal = build_pure_c_string ("equal");
|
||||
- staticpro (&Vtreesit_str_match);
|
||||
- Vtreesit_str_match = build_pure_c_string ("match");
|
||||
- staticpro (&Vtreesit_str_pred);
|
||||
- Vtreesit_str_pred = build_pure_c_string ("pred");
|
||||
+ staticpro (&Vtreesit_str_eq_question_mark);
|
||||
+ Vtreesit_str_eq_question_mark = build_string ("eq?");
|
||||
+ staticpro (&Vtreesit_str_match_question_mark);
|
||||
+ Vtreesit_str_match_question_mark = build_string ("match?");
|
||||
+ staticpro (&Vtreesit_str_pred_question_mark);
|
||||
+ Vtreesit_str_pred_question_mark = build_string ("pred?");
|
||||
staticpro (&Vtreesit_str_empty);
|
||||
Vtreesit_str_empty = build_pure_c_string ("");
|
||||
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
The tree-sitter library throws a syntax error if the
|
||||
predicate names in a query don't end with question mark.
|
||||
|
||||
https://github.com/emacs-mirror/emacs/commit/b01435306a36e4e75671fbe7bacea351f89947d5
|
||||
|
||||
Index: test/src/treesit-tests.el
|
||||
--- test/src/treesit-tests.el.orig
|
||||
+++ test/src/treesit-tests.el
|
||||
@@ -434,10 +434,10 @@ BODY is the test body."
|
||||
;; String query.
|
||||
'("(string) @string
|
||||
(pair key: (_) @keyword)
|
||||
-((_) @bob (#match \"\\\\`B.b\\\\'\" @bob))
|
||||
+((_) @bob (#match? \"\\\\`B.b\\\\'\" @bob))
|
||||
(number) @number
|
||||
-((number) @n3 (#equal \"3\" @n3))
|
||||
-((number) @n3p (#pred treesit--ert-pred-last-sibling @n3p))"
|
||||
+((number) @n3 (#eq? \"3\" @n3))
|
||||
+((number) @n3p (#pred? treesit--ert-pred-last-sibling @n3p))"
|
||||
;; Sexp query.
|
||||
((string) @string
|
||||
(pair key: (_) @keyword)
|
||||
Reference in New Issue
Block a user