diff options
| author | Yuan Fu | 2022-10-28 16:38:37 -0700 |
|---|---|---|
| committer | Yuan Fu | 2022-10-28 16:46:10 -0700 |
| commit | 434fc2a22e4fd65fd63018e9373cbf56b51f8ab2 (patch) | |
| tree | 9479ad30c417a78ee7535cde7c14bec6a7b81a6a | |
| parent | 0480e9c445d59fd5ec9b38ebe3919fee2aabf8d2 (diff) | |
| download | emacs-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.el | 169 | ||||
| -rw-r--r-- | src/emacs.c | 9 |
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 | |||
| 459 | ignored. | 508 | ignored. |
| 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 |