Hi ports@, I noticed an issue on Emacs where all *-ts-mode modes were not displaying syntax highlighting properly. There was a syntax error during the tree-sitter query. It seems this happens with newer versions of tree-sitter as the one we have now in ports and has been fixed on emacs here: https://github.com/emacs-mirror/emacs/commit/b01435306a36e4e75671fbe7bacea351f89947d5 This patch tries to backport this into our port. You'll notice that I did not include the patch for the texi file. Those changes make the build crash because of our base makeinfo is old and does not understand those sources. Asked jca@ about this and he prefers not to add texinfo from ports as a dependency, so I left that part out. Also, I'm not entirely sure about the changes 'make update-plist' made. It removes some folders, but there are entries for regular files inside those folders, so I guess it's fine (?). Lightly tested on amd64. ts modes for python and go work fine. ok to commit after unlock ? diff --git editors/emacs/Makefile editors/emacs/Makefile index 69d2eee9ebb..73ea617544a 100644 --- editors/emacs/Makefile +++ editors/emacs/Makefile @@ -2,7 +2,7 @@ COMMENT= GNU editor: extensible, customizable, self-documenting VERSION= 30.2 DISTNAME= emacs-${VERSION} -REVISION= 1 +REVISION= 2 CATEGORIES= editors diff --git editors/emacs/patches/patch-src_treesit_c editors/emacs/patches/patch-src_treesit_c index f9f4a62e640..80a04de9ea6 100644 --- editors/emacs/patches/patch-src_treesit_c +++ editors/emacs/patches/patch-src_treesit_c @@ -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 (""); + diff --git editors/emacs/patches/patch-test_src_treesit-tests_el editors/emacs/patches/patch-test_src_treesit-tests_el new file mode 100644 index 00000000000..17561ae9d98 --- /dev/null +++ editors/emacs/patches/patch-test_src_treesit-tests_el @@ -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) diff --git editors/emacs/pkg/PLIST editors/emacs/pkg/PLIST index dd57428eb86..e9393942cd2 100644 --- editors/emacs/pkg/PLIST +++ editors/emacs/pkg/PLIST @@ -10,7 +10,6 @@ %%gtk2%% %%gtk3%% !%%no_x11%% -%%pgtk%% @bin bin/ctags @bin bin/ebrowse bin/emacs @@ -84,8 +83,6 @@ include/emacs-module.h @info info/widget.info @info info/wisent.info @info info/woman.info -lib/systemd/ -lib/systemd/user/ lib/systemd/user/emacs.service libexec/emacs/ libexec/emacs/${VERSION}/ @@ -100,7 +97,6 @@ libexec/emacs/${VERSION}/${GCCARCH}/rcs2log @man man/man1/emacsclient.1 @man man/man1/etags.1 share/doc/pkg-readmes/${PKGSTEM} -share/emacs/ share/emacs/${VERSION}/ share/emacs/${VERSION}/etc/ share/emacs/${VERSION}/etc/AUTHORS @@ -4457,8 +4453,8 @@ share/emacs/${VERSION}/lisp/yank-media.el.gz share/emacs/${VERSION}/lisp/yank-media.elc share/emacs/${VERSION}/site-lisp/ share/emacs/${VERSION}/site-lisp/subdirs.el -share/emacs/site-lisp/ share/emacs/site-lisp/subdirs.el +%%pgtk%% share/metainfo/ share/metainfo/emacs.metainfo.xml @sample ${SYSCONFDIR}/emacs/ -- Paco Esteban 0x5818130B8A6DBC03
No comments:
Post a Comment