diff options
author | Yuan Fu <casouri@gmail.com> | 2022-03-12 22:10:06 -0800 |
---|---|---|
committer | Yuan Fu <casouri@gmail.com> | 2022-05-07 01:11:39 -0700 |
commit | 84847cad82e3b667c82f411627cd58d236f55e84 (patch) | |
tree | d0cb76d6977d88ae0b263a55dd0b8f0a705fa52f /src/print.c | |
parent | 22dde4e621fb49b9f05d560aee22332ad60bf485 (diff) | |
download | emacs-84847cad82e3b667c82f411627cd58d236f55e84.tar.gz emacs-84847cad82e3b667c82f411627cd58d236f55e84.tar.bz2 emacs-84847cad82e3b667c82f411627cd58d236f55e84.zip |
Add tree-sitter intergration
* configure.ac (HAVE_TREE_SITTER, TREE_SITTER_OBJ): New variables.
(DYNAMIC_LIB_SUFFIX): new variable, I copied code from MODULES_SUFFIX
so the diff looks this way.
* doc/lispref/elisp.texi (Top): Add tree-sitter manual.
* doc/lispref/modes.texi (Font Lock Mode): mention tree-sitter.
(Parser-based Font Lock): New section.
(Auto-Indentation): Mention tree-sitter.
(Parser-based Indentation): New section.
* doc/lispref/parsing.texi (Parsing Program Source): New chapter.
* lisp/emacs-lisp/cl-preloaded.el (cl--typeof-types): Add
treesit-parser and treesit-node type.
* lisp/treesit.el: New file.
* src/Makefile.in (TREE_SITTER_LIBS, TREE_SITTER_FLAGS,
TREE_SITTER_OBJ): New variables.
* src/alloc.c:
(cleanup_vector): Add cleanup code for treesit-parser and
treesit-node.
* src/casefiddle.c (casify_region): Notify tree-sitter parser of
buffer change.
* src/data.c (Ftype_of): Add treesit-parser and treesit-node type
(Qtreesit_parser, Qtreesit_node): New symbol.
* src/emacs.c (main): Add symbols in treesit.c.
* src/eval.c (define_error): Move the function to here.
* src/insdel.c (insert_1_both, insert_from_string_1, insert_from_gap,
insert_from_buffer_1, replace_range, del_range_2): Notify tree-sitter
parser of buffer change.
* src/json.c (define_error): Move this function out.
* src/lisp.h (DEFINE_GDB_SYMBOL_BEGIN): Add treesit-parser and
treesit-node.
* src/lread.c (Vdynamic_library_suffixes): New variable.
* src/print.c (print_vectorlike): Add code for printing
treesit-parser and treesit-node.
* src/treesit.c: New file.
* src/treesit.h: New file.
* test/src/treesit-tests.el: New file.
Diffstat (limited to 'src/print.c')
-rw-r--r-- | src/print.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/print.c b/src/print.c index 8cce8a1ad83..ab3047dee52 100644 --- a/src/print.c +++ b/src/print.c @@ -48,6 +48,10 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */ # include <sys/socket.h> /* for F_DUPFD_CLOEXEC */ #endif +#ifdef HAVE_TREE_SITTER +#include "treesit.h" +#endif + struct terminal; /* Avoid actual stack overflow in print. */ @@ -1936,6 +1940,30 @@ print_vectorlike (Lisp_Object obj, Lisp_Object printcharfun, bool escapeflag, } break; #endif + +#ifdef HAVE_TREE_SITTER + case PVEC_TS_PARSER: + print_c_string ("#<treesit-parser for ", printcharfun); + Lisp_Object language = XTS_PARSER (obj)->language_symbol; + print_string (Fsymbol_name (language), printcharfun); + print_c_string (" in ", printcharfun); + print_object (XTS_PARSER (obj)->buffer, printcharfun, escapeflag); + printchar ('>', printcharfun); + break; + case PVEC_TS_NODE: + print_c_string ("#<treesit-node from ", printcharfun); + print_object (Ftreesit_node_start (obj), + printcharfun, escapeflag); + print_c_string (" to ", printcharfun); + print_object (Ftreesit_node_end (obj), + printcharfun, escapeflag); + print_c_string (" in ", printcharfun); + print_object (XTS_PARSER (XTS_NODE (obj)->parser)->buffer, + printcharfun, escapeflag); + printchar ('>', printcharfun); + break; +#endif + case PVEC_SQLITE: { print_c_string ("#<sqlite ", printcharfun); |