aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorYuan Fu2022-06-16 01:11:09 -0700
committerYuan Fu2022-06-16 11:52:04 -0700
commitdd65d1c396da2e024468196c4d5bcb72198f524a (patch)
tree706ab962f0cc5154797e3b3595b545048533b27d /src
parent7cee82a91d287e42e6596960cbee17157cde4b29 (diff)
downloademacs-dd65d1c396da2e024468196c4d5bcb72198f524a.tar.gz
emacs-dd65d1c396da2e024468196c4d5bcb72198f524a.zip
Consolidate treesit parser create functions
Merge treesit-parser-create, treesit-get-parser, treesit-get-parser-create into one: treesit-parser-create. * src/treesit.c (Ftreesit_parser_language): make BUFFER parameter optional, add new parameter NO-REUSE. Optionally reuse parser. * test/src/treesit-tests.el: Change all parser creation to use treesit-parser-create. Remove tests for the removed functions. * lisp/treesit.el (treesit-get-parser, treesit-get-parser-create): Remove. * lisp/treesit.el (treesit-set-ranges, treesit-get-ranges) (treesit-buffer-root-node, treesit-query-string) (treesit-font-lock-fontify-region, treesit-search-forward) (treesit-query-validate): Change to use treesit-parser-create.
Diffstat (limited to 'src')
-rw-r--r--src/treesit.c37
1 files changed, 26 insertions, 11 deletions
diff --git a/src/treesit.c b/src/treesit.c
index 5a53b09675c..fcb333b8ec4 100644
--- a/src/treesit.c
+++ b/src/treesit.c
@@ -692,23 +692,38 @@ DEFUN ("treesit-node-parser",
692 692
693DEFUN ("treesit-parser-create", 693DEFUN ("treesit-parser-create",
694 Ftreesit_parser_create, Streesit_parser_create, 694 Ftreesit_parser_create, Streesit_parser_create,
695 2, 2, 0, 695 1, 3, 0,
696 doc: /* Create and return a parser in BUFFER for LANGUAGE. 696 doc: /* Create and return a parser in BUFFER for LANGUAGE.
697 697
698The parser is automatically added to BUFFER's 698The parser is automatically added to BUFFER's `treesit-parser-list'.
699`treesit-parser-list'. LANGUAGE should be the symbol of a 699LANGUAGE is a language symbol. If BUFFER is nil, use the current
700function provided by a tree-sitter language dynamic module, e.g., 700buffer. If BUFFER already has a parser for LANGUAGE, return that
701'treesit-json. If BUFFER is nil, use the current buffer. */) 701parser. If NO-REUSE is non-nil, always create a new parser. */)
702 (Lisp_Object buffer, Lisp_Object language) 702 (Lisp_Object language, Lisp_Object buffer, Lisp_Object no_reuse)
703{ 703{
704 if (NILP (buffer)) 704 ts_initialize ();
705 buffer = Fcurrent_buffer ();
706 705
707 CHECK_BUFFER (buffer);
708 CHECK_SYMBOL (language); 706 CHECK_SYMBOL (language);
709 ts_check_buffer_size (XBUFFER (buffer)); 707 struct buffer *old_buffer = current_buffer;
708 if (!NILP (buffer))
709 {
710 CHECK_BUFFER (buffer);
711 set_buffer_internal (XBUFFER (buffer));
712 }
713 ts_check_buffer_size (current_buffer);
710 714
711 ts_initialize (); 715 /* See if we can reuse a parser. */
716 for (Lisp_Object tail = Fsymbol_value (Qtreesit_parser_list);
717 NILP (no_reuse) && !NILP (tail);
718 tail = XCDR (tail))
719 {
720 struct Lisp_TS_Parser *parser = XTS_PARSER (XCAR (tail));
721 if (EQ (parser->language_symbol, language))
722 {
723 set_buffer_internal (old_buffer);
724 return XCAR (tail);
725 }
726 }
712 727
713 TSParser *parser = ts_parser_new (); 728 TSParser *parser = ts_parser_new ();
714 TSLanguage *lang = ts_load_language (language, true); 729 TSLanguage *lang = ts_load_language (language, true);