Make Emacs compile without tree-sitter library
* lisp/treesit.el: Add function declaration forms. * src/emacs.c: Always include syms_of_treesit.
This commit is contained in:
parent
0480e9c445
commit
434fc2a22e
2 changed files with 116 additions and 62 deletions
169
lisp/treesit.el
169
lisp/treesit.el
|
@ -33,6 +33,57 @@
|
||||||
(require 'cl-seq)
|
(require 'cl-seq)
|
||||||
(require 'font-lock)
|
(require 'font-lock)
|
||||||
|
|
||||||
|
;;; Function declarations
|
||||||
|
|
||||||
|
(declare-function treesit-language-available-p "treesit.c")
|
||||||
|
(declare-function treesit-language-version "treesit.c")
|
||||||
|
|
||||||
|
(declare-function treesit-parser-p "treesit.c")
|
||||||
|
(declare-function treesit-node-p "treesit.c")
|
||||||
|
(declare-function treesit-compiled-query-p "treesit.c")
|
||||||
|
(declare-function treesit-query-p "treesit.c")
|
||||||
|
(declare-function treesit-query-language "treesit.c")
|
||||||
|
|
||||||
|
(declare-function treesit-node-parser "treesit.c")
|
||||||
|
|
||||||
|
(declare-function treesit-parser-create "treesit.c")
|
||||||
|
(declare-function treesit-parser-delete "treesit.c")
|
||||||
|
(declare-function treesit-parser-list "treesit.c")
|
||||||
|
(declare-function treesit-parser-buffer "treesit.c")
|
||||||
|
(declare-function treesit-parser-language "treesit.c")
|
||||||
|
|
||||||
|
(declare-function treesit-parser-root-node "treesit.c")
|
||||||
|
|
||||||
|
(declare-function treesit-parser-set-included-ranges "treesit.c")
|
||||||
|
(declare-function treesit-parser-included-ranges "treesit.c")
|
||||||
|
|
||||||
|
(declare-function treesit-node-type "treesit.c")
|
||||||
|
(declare-function treesit-node-start "treesit.c")
|
||||||
|
(declare-function treesit-node-end "treesit.c")
|
||||||
|
(declare-function treesit-node-string "treesit.c")
|
||||||
|
(declare-function treesit-node-parent "treesit.c")
|
||||||
|
(declare-function treesit-node-child "treesit.c")
|
||||||
|
(declare-function treesit-node-check "treesit.c")
|
||||||
|
(declare-function treesit-node-field-name-for-child "treesit.c")
|
||||||
|
(declare-function treesit-node-child-count "treesit.c")
|
||||||
|
(declare-function treesit-node-child-by-field-name "treesit.c")
|
||||||
|
(declare-function treesit-node-next-sibling "treesit.c")
|
||||||
|
(declare-function treesit-node-prev-sibling "treesit.c")
|
||||||
|
(declare-function treesit-node-first-child-for-pos "treesit.c")
|
||||||
|
(declare-function treesit-node-descendant-for-range "treesit.c")
|
||||||
|
(declare-function treesit-node-eq "treesit.c")
|
||||||
|
|
||||||
|
(declare-function treesit-pattern-expand "treesit.c")
|
||||||
|
(declare-function treesit-query-expand "treesit.c")
|
||||||
|
(declare-function treesit-query-compile "treesit.c")
|
||||||
|
(declare-function treesit-query-capture "treesit.c")
|
||||||
|
|
||||||
|
(declare-function treesit-search-subtree "treesit.c")
|
||||||
|
(declare-function treesit-search-forward "treesit.c")
|
||||||
|
(declare-function treesit-induce-sparse-tree "treesit.c")
|
||||||
|
|
||||||
|
(declare-function treesit-available-p "treesit.c")
|
||||||
|
|
||||||
;;; Custom options
|
;;; Custom options
|
||||||
|
|
||||||
;; Tree-sitter always appear as treesit in symbols.
|
;; Tree-sitter always appear as treesit in symbols.
|
||||||
|
@ -48,8 +99,6 @@ indent, imenu, etc."
|
||||||
:type 'integer
|
:type 'integer
|
||||||
:version "29.1")
|
:version "29.1")
|
||||||
|
|
||||||
(declare-function treesit-available-p "treesit.c")
|
|
||||||
|
|
||||||
(defcustom treesit-settings '((t nil t))
|
(defcustom treesit-settings '((t nil t))
|
||||||
"Tree-sitter toggle settings for major modes.
|
"Tree-sitter toggle settings for major modes.
|
||||||
|
|
||||||
|
@ -459,63 +508,69 @@ a capture name is not a face name nor a function name, it is
|
||||||
ignored.
|
ignored.
|
||||||
|
|
||||||
\(fn :KEYWORD VALUE QUERY...)"
|
\(fn :KEYWORD VALUE QUERY...)"
|
||||||
(let (;; Tracks the current :language/:override/:toggle/:level value
|
;; Other tree-sitter function don't tend to be called unless
|
||||||
;; that following queries will apply to.
|
;; tree-sitter is enabled, which means tree-sitter must be compiled.
|
||||||
current-language current-override
|
;; But this function is usually call in `defvar' which runs
|
||||||
current-feature
|
;; regardless whether tree-sitter is enabled. So we need this
|
||||||
;; The list this function returns.
|
;; guard.
|
||||||
(result nil))
|
(when (treesit-available-p)
|
||||||
(while args
|
(let (;; Tracks the current :language/:override/:toggle/:level value
|
||||||
(let ((token (pop args)))
|
;; that following queries will apply to.
|
||||||
(pcase token
|
current-language current-override
|
||||||
;; (1) Process keywords.
|
current-feature
|
||||||
(:language
|
;; The list this function returns.
|
||||||
(let ((lang (pop args)))
|
(result nil))
|
||||||
(when (or (not (symbolp lang)) (null lang))
|
(while args
|
||||||
|
(let ((token (pop args)))
|
||||||
|
(pcase token
|
||||||
|
;; (1) Process keywords.
|
||||||
|
(:language
|
||||||
|
(let ((lang (pop args)))
|
||||||
|
(when (or (not (symbolp lang)) (null lang))
|
||||||
|
(signal 'treesit-font-lock-error
|
||||||
|
`("Value of :language should be a symbol"
|
||||||
|
,lang)))
|
||||||
|
(setq current-language lang)))
|
||||||
|
(:override
|
||||||
|
(let ((flag (pop args)))
|
||||||
|
(when (not (memq flag '(t nil append prepend keep)))
|
||||||
|
(signal 'treesit-font-lock-error
|
||||||
|
`("Value of :override should be one of t, nil, append, prepend, keep"
|
||||||
|
,flag))
|
||||||
|
(signal 'wrong-type-argument
|
||||||
|
`((or t nil append prepend keep)
|
||||||
|
,flag)))
|
||||||
|
(setq current-override flag)))
|
||||||
|
(:feature
|
||||||
|
(let ((var (pop args)))
|
||||||
|
(when (or (not (symbolp var))
|
||||||
|
(memq var '(t nil)))
|
||||||
|
(signal 'treesit-font-lock-error
|
||||||
|
`("Value of :feature should be a symbol"
|
||||||
|
,var)))
|
||||||
|
(setq current-feature var)))
|
||||||
|
;; (2) Process query.
|
||||||
|
((pred treesit-query-p)
|
||||||
|
(when (null current-language)
|
||||||
(signal 'treesit-font-lock-error
|
(signal 'treesit-font-lock-error
|
||||||
`("Value of :language should be a symbol"
|
`("Language unspecified, use :language keyword to specify a language for this query" ,token)))
|
||||||
,lang)))
|
(when (null current-feature)
|
||||||
(setq current-language lang)))
|
|
||||||
(:override
|
|
||||||
(let ((flag (pop args)))
|
|
||||||
(when (not (memq flag '(t nil append prepend keep)))
|
|
||||||
(signal 'treesit-font-lock-error
|
(signal 'treesit-font-lock-error
|
||||||
`("Value of :override should be one of t, nil, append, prepend, keep"
|
`("Feature unspecified, use :feature keyword to specify the feature name for this query" ,token)))
|
||||||
,flag))
|
(if (treesit-compiled-query-p token)
|
||||||
(signal 'wrong-type-argument
|
(push `(,current-language token) result)
|
||||||
`((or t nil append prepend keep)
|
(push `(,(treesit-query-compile current-language token)
|
||||||
,flag)))
|
t
|
||||||
(setq current-override flag)))
|
,current-feature
|
||||||
(:feature
|
,current-override)
|
||||||
(let ((var (pop args)))
|
result))
|
||||||
(when (or (not (symbolp var))
|
;; Clears any configurations set for this query.
|
||||||
(memq var '(t nil)))
|
(setq current-language nil
|
||||||
(signal 'treesit-font-lock-error
|
current-override nil
|
||||||
`("Value of :feature should be a symbol"
|
current-feature nil))
|
||||||
,var)))
|
(_ (signal 'treesit-font-lock-error
|
||||||
(setq current-feature var)))
|
`("Unexpected value" ,token))))))
|
||||||
;; (2) Process query.
|
(nreverse result))))
|
||||||
((pred treesit-query-p)
|
|
||||||
(when (null current-language)
|
|
||||||
(signal 'treesit-font-lock-error
|
|
||||||
`("Language unspecified, use :language keyword to specify a language for this query" ,token)))
|
|
||||||
(when (null current-feature)
|
|
||||||
(signal 'treesit-font-lock-error
|
|
||||||
`("Feature unspecified, use :feature keyword to specify the feature name for this query" ,token)))
|
|
||||||
(if (treesit-compiled-query-p token)
|
|
||||||
(push `(,current-language token) result)
|
|
||||||
(push `(,(treesit-query-compile current-language token)
|
|
||||||
t
|
|
||||||
,current-feature
|
|
||||||
,current-override)
|
|
||||||
result))
|
|
||||||
;; Clears any configurations set for this query.
|
|
||||||
(setq current-language nil
|
|
||||||
current-override nil
|
|
||||||
current-feature nil))
|
|
||||||
(_ (signal 'treesit-font-lock-error
|
|
||||||
`("Unexpected value" ,token))))))
|
|
||||||
(nreverse result)))
|
|
||||||
|
|
||||||
(defun treesit-font-lock-recompute-features ()
|
(defun treesit-font-lock-recompute-features ()
|
||||||
"Enable/disable font-lock settings according to decoration level.
|
"Enable/disable font-lock settings according to decoration level.
|
||||||
|
|
|
@ -136,9 +136,9 @@ extern char etext;
|
||||||
#include <sys/resource.h>
|
#include <sys/resource.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_TREE_SITTER
|
/* We don't guard this with HAVE_TREE_SITTER because treesit.o is
|
||||||
|
always compiled (to provide treesit-available-p). */
|
||||||
#include "treesit.h"
|
#include "treesit.h"
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "pdumper.h"
|
#include "pdumper.h"
|
||||||
#include "fingerprint.h"
|
#include "fingerprint.h"
|
||||||
|
@ -2269,10 +2269,9 @@ Using an Emacs configured with --with-x-toolkit=lucid does not have this problem
|
||||||
#ifdef HAVE_MODULES
|
#ifdef HAVE_MODULES
|
||||||
syms_of_module ();
|
syms_of_module ();
|
||||||
#endif
|
#endif
|
||||||
|
/* We don't guard this with HAVE_TREE_SITTER because treesit.o
|
||||||
#ifdef HAVE_TREE_SITTER
|
is always compiled (to provide treesit-available-p). */
|
||||||
syms_of_treesit ();
|
syms_of_treesit ();
|
||||||
#endif
|
|
||||||
#ifdef HAVE_SOUND
|
#ifdef HAVE_SOUND
|
||||||
syms_of_sound ();
|
syms_of_sound ();
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Reference in a new issue