diff options
| author | Yuan Fu | 2022-06-16 01:11:09 -0700 |
|---|---|---|
| committer | Yuan Fu | 2022-06-16 11:52:04 -0700 |
| commit | dd65d1c396da2e024468196c4d5bcb72198f524a (patch) | |
| tree | 706ab962f0cc5154797e3b3595b545048533b27d /src | |
| parent | 7cee82a91d287e42e6596960cbee17157cde4b29 (diff) | |
| download | emacs-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.c | 37 |
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 | ||
| 693 | DEFUN ("treesit-parser-create", | 693 | DEFUN ("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 | ||
| 698 | The parser is automatically added to BUFFER's | 698 | The parser is automatically added to BUFFER's `treesit-parser-list'. |
| 699 | `treesit-parser-list'. LANGUAGE should be the symbol of a | 699 | LANGUAGE is a language symbol. If BUFFER is nil, use the current |
| 700 | function provided by a tree-sitter language dynamic module, e.g., | 700 | buffer. If BUFFER already has a parser for LANGUAGE, return that |
| 701 | 'treesit-json. If BUFFER is nil, use the current buffer. */) | 701 | parser. 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); |