aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYuan Fu2022-10-28 16:38:37 -0700
committerYuan Fu2022-10-28 16:46:10 -0700
commit434fc2a22e4fd65fd63018e9373cbf56b51f8ab2 (patch)
tree9479ad30c417a78ee7535cde7c14bec6a7b81a6a
parent0480e9c445d59fd5ec9b38ebe3919fee2aabf8d2 (diff)
downloademacs-434fc2a22e4fd65fd63018e9373cbf56b51f8ab2.tar.gz
emacs-434fc2a22e4fd65fd63018e9373cbf56b51f8ab2.zip
Make Emacs compile without tree-sitter library
* lisp/treesit.el: Add function declaration forms. * src/emacs.c: Always include syms_of_treesit.
-rw-r--r--lisp/treesit.el169
-rw-r--r--src/emacs.c9
2 files changed, 116 insertions, 62 deletions
diff --git a/lisp/treesit.el b/lisp/treesit.el
index 8db47048231..f1440412028 100644
--- a/lisp/treesit.el
+++ b/lisp/treesit.el
@@ -33,6 +33,57 @@
33(require 'cl-seq) 33(require 'cl-seq)
34(require 'font-lock) 34(require 'font-lock)
35 35
36;;; Function declarations
37
38(declare-function treesit-language-available-p "treesit.c")
39(declare-function treesit-language-version "treesit.c")
40
41(declare-function treesit-parser-p "treesit.c")
42(declare-function treesit-node-p "treesit.c")
43(declare-function treesit-compiled-query-p "treesit.c")
44(declare-function treesit-query-p "treesit.c")
45(declare-function treesit-query-language "treesit.c")
46
47(declare-function treesit-node-parser "treesit.c")
48
49(declare-function treesit-parser-create "treesit.c")
50(declare-function treesit-parser-delete "treesit.c")
51(declare-function treesit-parser-list "treesit.c")
52(declare-function treesit-parser-buffer "treesit.c")
53(declare-function treesit-parser-language "treesit.c")
54
55(declare-function treesit-parser-root-node "treesit.c")
56
57(declare-function treesit-parser-set-included-ranges "treesit.c")
58(declare-function treesit-parser-included-ranges "treesit.c")
59
60(declare-function treesit-node-type "treesit.c")
61(declare-function treesit-node-start "treesit.c")
62(declare-function treesit-node-end "treesit.c")
63(declare-function treesit-node-string "treesit.c")
64(declare-function treesit-node-parent "treesit.c")
65(declare-function treesit-node-child "treesit.c")
66(declare-function treesit-node-check "treesit.c")
67(declare-function treesit-node-field-name-for-child "treesit.c")
68(declare-function treesit-node-child-count "treesit.c")
69(declare-function treesit-node-child-by-field-name "treesit.c")
70(declare-function treesit-node-next-sibling "treesit.c")
71(declare-function treesit-node-prev-sibling "treesit.c")
72(declare-function treesit-node-first-child-for-pos "treesit.c")
73(declare-function treesit-node-descendant-for-range "treesit.c")
74(declare-function treesit-node-eq "treesit.c")
75
76(declare-function treesit-pattern-expand "treesit.c")
77(declare-function treesit-query-expand "treesit.c")
78(declare-function treesit-query-compile "treesit.c")
79(declare-function treesit-query-capture "treesit.c")
80
81(declare-function treesit-search-subtree "treesit.c")
82(declare-function treesit-search-forward "treesit.c")
83(declare-function treesit-induce-sparse-tree "treesit.c")
84
85(declare-function treesit-available-p "treesit.c")
86
36;;; Custom options 87;;; Custom options
37 88
38;; Tree-sitter always appear as treesit in symbols. 89;; Tree-sitter always appear as treesit in symbols.
@@ -48,8 +99,6 @@ indent, imenu, etc."
48 :type 'integer 99 :type 'integer
49 :version "29.1") 100 :version "29.1")
50 101
51(declare-function treesit-available-p "treesit.c")
52
53(defcustom treesit-settings '((t nil t)) 102(defcustom treesit-settings '((t nil t))
54 "Tree-sitter toggle settings for major modes. 103 "Tree-sitter toggle settings for major modes.
55 104
@@ -459,63 +508,69 @@ a capture name is not a face name nor a function name, it is
459ignored. 508ignored.
460 509
461\(fn :KEYWORD VALUE QUERY...)" 510\(fn :KEYWORD VALUE QUERY...)"
462 (let (;; Tracks the current :language/:override/:toggle/:level value 511 ;; Other tree-sitter function don't tend to be called unless
463 ;; that following queries will apply to. 512 ;; tree-sitter is enabled, which means tree-sitter must be compiled.
464 current-language current-override 513 ;; But this function is usually call in `defvar' which runs
465 current-feature 514 ;; regardless whether tree-sitter is enabled. So we need this
466 ;; The list this function returns. 515 ;; guard.
467 (result nil)) 516 (when (treesit-available-p)
468 (while args 517 (let (;; Tracks the current :language/:override/:toggle/:level value
469 (let ((token (pop args))) 518 ;; that following queries will apply to.
470 (pcase token 519 current-language current-override
471 ;; (1) Process keywords. 520 current-feature
472 (:language 521 ;; The list this function returns.
473 (let ((lang (pop args))) 522 (result nil))
474 (when (or (not (symbolp lang)) (null lang)) 523 (while args
475 (signal 'treesit-font-lock-error 524 (let ((token (pop args)))
476 `("Value of :language should be a symbol" 525 (pcase token
477 ,lang))) 526 ;; (1) Process keywords.
478 (setq current-language lang))) 527 (:language
479 (:override 528 (let ((lang (pop args)))
480 (let ((flag (pop args))) 529 (when (or (not (symbolp lang)) (null lang))
481 (when (not (memq flag '(t nil append prepend keep))) 530 (signal 'treesit-font-lock-error
531 `("Value of :language should be a symbol"
532 ,lang)))
533 (setq current-language lang)))
534 (:override
535 (let ((flag (pop args)))
536 (when (not (memq flag '(t nil append prepend keep)))
537 (signal 'treesit-font-lock-error
538 `("Value of :override should be one of t, nil, append, prepend, keep"
539 ,flag))
540 (signal 'wrong-type-argument
541 `((or t nil append prepend keep)
542 ,flag)))
543 (setq current-override flag)))
544 (:feature
545 (let ((var (pop args)))
546 (when (or (not (symbolp var))
547 (memq var '(t nil)))
548 (signal 'treesit-font-lock-error
549 `("Value of :feature should be a symbol"
550 ,var)))
551 (setq current-feature var)))
552 ;; (2) Process query.
553 ((pred treesit-query-p)
554 (when (null current-language)
482 (signal 'treesit-font-lock-error 555 (signal 'treesit-font-lock-error
483 `("Value of :override should be one of t, nil, append, prepend, keep" 556 `("Language unspecified, use :language keyword to specify a language for this query" ,token)))
484 ,flag)) 557 (when (null current-feature)
485 (signal 'wrong-type-argument
486 `((or t nil append prepend keep)
487 ,flag)))
488 (setq current-override flag)))
489 (:feature
490 (let ((var (pop args)))
491 (when (or (not (symbolp var))
492 (memq var '(t nil)))
493 (signal 'treesit-font-lock-error 558 (signal 'treesit-font-lock-error
494 `("Value of :feature should be a symbol" 559 `("Feature unspecified, use :feature keyword to specify the feature name for this query" ,token)))
495 ,var))) 560 (if (treesit-compiled-query-p token)
496 (setq current-feature var))) 561 (push `(,current-language token) result)
497 ;; (2) Process query. 562 (push `(,(treesit-query-compile current-language token)
498 ((pred treesit-query-p) 563 t
499 (when (null current-language) 564 ,current-feature
500 (signal 'treesit-font-lock-error 565 ,current-override)
501 `("Language unspecified, use :language keyword to specify a language for this query" ,token))) 566 result))
502 (when (null current-feature) 567 ;; Clears any configurations set for this query.
503 (signal 'treesit-font-lock-error 568 (setq current-language nil
504 `("Feature unspecified, use :feature keyword to specify the feature name for this query" ,token))) 569 current-override nil
505 (if (treesit-compiled-query-p token) 570 current-feature nil))
506 (push `(,current-language token) result) 571 (_ (signal 'treesit-font-lock-error
507 (push `(,(treesit-query-compile current-language token) 572 `("Unexpected value" ,token))))))
508 t 573 (nreverse result))))
509 ,current-feature
510 ,current-override)
511 result))
512 ;; Clears any configurations set for this query.
513 (setq current-language nil
514 current-override nil
515 current-feature nil))
516 (_ (signal 'treesit-font-lock-error
517 `("Unexpected value" ,token))))))
518 (nreverse result)))
519 574
520(defun treesit-font-lock-recompute-features () 575(defun treesit-font-lock-recompute-features ()
521 "Enable/disable font-lock settings according to decoration level. 576 "Enable/disable font-lock settings according to decoration level.
diff --git a/src/emacs.c b/src/emacs.c
index ba8b9c651a7..ed21cce1e25 100644
--- a/src/emacs.c
+++ b/src/emacs.c
@@ -136,9 +136,9 @@ extern char etext;
136#include <sys/resource.h> 136#include <sys/resource.h>
137#endif 137#endif
138 138
139#ifdef HAVE_TREE_SITTER 139/* We don't guard this with HAVE_TREE_SITTER because treesit.o is
140 always compiled (to provide treesit-available-p). */
140#include "treesit.h" 141#include "treesit.h"
141#endif
142 142
143#include "pdumper.h" 143#include "pdumper.h"
144#include "fingerprint.h" 144#include "fingerprint.h"
@@ -2269,10 +2269,9 @@ Using an Emacs configured with --with-x-toolkit=lucid does not have this problem
2269#ifdef HAVE_MODULES 2269#ifdef HAVE_MODULES
2270 syms_of_module (); 2270 syms_of_module ();
2271#endif 2271#endif
2272 2272 /* We don't guard this with HAVE_TREE_SITTER because treesit.o
2273#ifdef HAVE_TREE_SITTER 2273 is always compiled (to provide treesit-available-p). */
2274 syms_of_treesit (); 2274 syms_of_treesit ();
2275#endif
2276#ifdef HAVE_SOUND 2275#ifdef HAVE_SOUND
2277 syms_of_sound (); 2276 syms_of_sound ();
2278#endif 2277#endif