* treesit: how to get it to parse multiple languages @ 2024-11-03 18:28 Andrew De Angelis 2024-11-04 12:02 ` Eli Zaretskii 0 siblings, 1 reply; 15+ messages in thread From: Andrew De Angelis @ 2024-11-03 18:28 UTC (permalink / raw) To: emacs-devel [-- Attachment #1: Type: text/plain, Size: 2131 bytes --] Hello everyone and thanks for all your work! I'm trying to get a better understanding of treesit.el, and I've stumbled on a couple of things that make me think the manual is either outdated/faulty, or just not entirely clear and I'm missing something. The latter is most likely, but I'd appreciate any help in figuring out what exactly is wrong in my approach/setup. I would be happy to contribute to the manual, if needed, to ensure it is clearer. This is the relevant section of the manual: https://www.gnu.org/software/emacs/manual/html_node/elisp/Multiple-Languages.html I've started out with simply trying to recreate the setup described in the manual, but I've run into some issues. Here's what I've done so far: - I've defined a very simple `html-ts-mode`, using the elisp functions from the manual: https://github.com/andrewdea/poc-html-ts-mode/blob/main/html-ts-mode.el - I activate this mode when visiting the example.html file (which is also copied from the manual): https://github.com/andrewdea/poc-html-ts-mode/blob/main/example.html - the queries seem to be working as expected: when I'm in a buffer visiting example.html, evaluating `(treesit-query-capture 'html css-query)` and `(treesit-query-capture 'html js-query)` return the expected nodes - ISSUE: `treesit-update-ranges` doesn't seem to be working as expected: even if I call it multiple times, the parser for the whole buffer seems to still be 'html. `(treesit-language-at (point))` always returns 'html, even when I'm inside the nodes captured by the css-query or js-query. Some additional context: the reason I'm looking into tree-sitter (and its functionalities to support multiple languages) is to potentially use it to fontify markdown code blocks and to improve emacs support for python notebooks. For markdown, I was trying a similar approach to the HTML one described in the manual, but ran into other similar issues: https://www.reddit.com/r/emacs/comments/1gcrv8k/syntaxhighlighting_codeblocks_in_markdown/ . I'm just including this as context. Let me know if any of this is not clear. Thanks in advance for all your help! Best, Andrew [-- Attachment #2: Type: text/html, Size: 2902 bytes --] ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: treesit: how to get it to parse multiple languages 2024-11-03 18:28 treesit: how to get it to parse multiple languages Andrew De Angelis @ 2024-11-04 12:02 ` Eli Zaretskii 2024-11-05 6:46 ` Yuan Fu 0 siblings, 1 reply; 15+ messages in thread From: Eli Zaretskii @ 2024-11-04 12:02 UTC (permalink / raw) To: Andrew De Angelis, Yuan Fu; +Cc: emacs-devel > From: Andrew De Angelis <bobodeangelis@gmail.com> > Date: Sun, 3 Nov 2024 13:28:57 -0500 > > I'm trying to get a better understanding of treesit.el, and I've stumbled on a couple of things that make me > think the manual is either outdated/faulty, or just not entirely clear and I'm missing something. > > The latter is most likely, but I'd appreciate any help in figuring out what exactly is wrong in my > approach/setup. I would be happy to contribute to the manual, if needed, to ensure it is clearer. > > This is the relevant section of the manual: > https://www.gnu.org/software/emacs/manual/html_node/elisp/Multiple-Languages.html > I've started out with simply trying to recreate the setup described in the manual, but I've run into some > issues. > Here's what I've done so far: > - I've defined a very simple `html-ts-mode`, using the elisp functions from the manual: > https://github.com/andrewdea/poc-html-ts-mode/blob/main/html-ts-mode.el > - I activate this mode when visiting the example.html file (which is also copied from the manual): > https://github.com/andrewdea/poc-html-ts-mode/blob/main/example.html > - the queries seem to be working as expected: when I'm in a buffer visiting example.html, evaluating > `(treesit-query-capture 'html css-query)` and `(treesit-query-capture 'html js-query)` return the expected > nodes > - ISSUE: `treesit-update-ranges` doesn't seem to be working as expected: even if I call it multiple times, the > parser for the whole buffer seems to still be 'html. `(treesit-language-at (point))` always returns 'html, even > when I'm inside the nodes captured by the css-query or js-query. > > Some additional context: the reason I'm looking into tree-sitter (and its functionalities to support multiple > languages) is to potentially use it to fontify markdown code blocks and to improve emacs support for python > notebooks. For markdown, I was trying a similar approach to the HTML one described in the manual, but ran > into other similar issues: > https://www.reddit.com/r/emacs/comments/1gcrv8k/syntaxhighlighting_codeblocks_in_markdown/. > I'm just including this as context. > > Let me know if any of this is not clear. > > Thanks in advance for all your help! Yuan, can you help Andrew? ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: treesit: how to get it to parse multiple languages 2024-11-04 12:02 ` Eli Zaretskii @ 2024-11-05 6:46 ` Yuan Fu 2024-11-10 14:35 ` Andrew De Angelis 0 siblings, 1 reply; 15+ messages in thread From: Yuan Fu @ 2024-11-05 6:46 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Andrew De Angelis, emacs-devel > On Nov 4, 2024, at 4:02 AM, Eli Zaretskii <eliz@gnu.org> wrote: > >> From: Andrew De Angelis <bobodeangelis@gmail.com> >> Date: Sun, 3 Nov 2024 13:28:57 -0500 >> >> I'm trying to get a better understanding of treesit.el, and I've stumbled on a couple of things that make me >> think the manual is either outdated/faulty, or just not entirely clear and I'm missing something. >> >> The latter is most likely, but I'd appreciate any help in figuring out what exactly is wrong in my >> approach/setup. I would be happy to contribute to the manual, if needed, to ensure it is clearer. >> >> This is the relevant section of the manual: >> https://www.gnu.org/software/emacs/manual/html_node/elisp/Multiple-Languages.html >> I've started out with simply trying to recreate the setup described in the manual, but I've run into some >> issues. >> Here's what I've done so far: >> - I've defined a very simple `html-ts-mode`, using the elisp functions from the manual: >> https://github.com/andrewdea/poc-html-ts-mode/blob/main/html-ts-mode.el >> - I activate this mode when visiting the example.html file (which is also copied from the manual): >> https://github.com/andrewdea/poc-html-ts-mode/blob/main/example.html >> - the queries seem to be working as expected: when I'm in a buffer visiting example.html, evaluating >> `(treesit-query-capture 'html css-query)` and `(treesit-query-capture 'html js-query)` return the expected >> nodes >> - ISSUE: `treesit-update-ranges` doesn't seem to be working as expected: even if I call it multiple times, the >> parser for the whole buffer seems to still be 'html. `(treesit-language-at (point))` always returns 'html, even >> when I'm inside the nodes captured by the css-query or js-query. >> >> Some additional context: the reason I'm looking into tree-sitter (and its functionalities to support multiple >> languages) is to potentially use it to fontify markdown code blocks and to improve emacs support for python >> notebooks. For markdown, I was trying a similar approach to the HTML one described in the manual, but ran >> into other similar issues: >> https://www.reddit.com/r/emacs/comments/1gcrv8k/syntaxhighlighting_codeblocks_in_markdown/. >> I'm just including this as context. >> >> Let me know if any of this is not clear. >> >> Thanks in advance for all your help! > > Yuan, can you help Andrew? Ah yes, thanks for the ping. Andrew, I take that your problem is with treesit-language-at, right? Specifically, it doesn’t return expected results. That’s because for treesit-language-at to work, major mode needs to define treesit-language-at-function. This confusion has came up a couple times now, evidently treesit-language-at is not very intuitive. Hopefully it’ll be fixed by our updated manual for Emacs 30. In Emacs 30, we define treesit-language-at-function in the example code: Emacs automates this process in ‘treesit-update-ranges’. A multi-language major mode should set ‘treesit-range-settings’ so that ‘treesit-update-ranges’ knows how to perform this process automatically. Major modes should use the helper function ‘treesit-range-rules’ to generate a value that can be assigned to ‘treesit-range-settings’. The settings in the following example directly translate into operations shown above. (setq treesit-range-settings (treesit-range-rules :embed 'javascript :host 'html '((script_element (raw_text) @capture)) :embed 'css :host 'html '((style_element (raw_text) @capture)))) ;; Major modes with multiple languages should always set ;; `treesit-language-at-point-function' (which see). (setq treesit-language-at-point-function (lambda (pos) (let* ((node (treesit-node-at pos 'html)) (parent (treesit-node-parent node))) (cond ((and node parent (equal (treesit-node-type node) "raw_text") (equal (treesit-node-type parent) "script_element")) 'javascript) ((and node parent (equal (treesit-node-type node) "raw_text") (equal (treesit-node-type parent) "style_element")) 'css) (t 'html))))) And FYI, in Emacs 30 we added local parsers, that might make implementing code/markdown blocks in a notebook easier. Yuan ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: treesit: how to get it to parse multiple languages 2024-11-05 6:46 ` Yuan Fu @ 2024-11-10 14:35 ` Andrew De Angelis 2024-11-10 22:47 ` Peter Oliver 2024-11-19 6:59 ` Yuan Fu 0 siblings, 2 replies; 15+ messages in thread From: Andrew De Angelis @ 2024-11-10 14:35 UTC (permalink / raw) To: Yuan Fu; +Cc: Eli Zaretskii, emacs-devel [-- Attachment #1: Type: text/plain, Size: 5574 bytes --] Thanks so much! I took a look at the Emacs 30 manual and it's a lot clearer, it's perfect! I think one thing that would truly be ideal is if there is a major mode out there that already implements multiple-language functionalities using treesitter. Seeing all the components in action would be quite helpful: the simple HTML examples are very clarifying but they can only do so much. Do you all know if such a mode exists? `(ripgrep-regexp "local-parser" source-directory)` on the master branch only shows me matches in `treesit.el` itself (and associated ChangeLog / manual). If it doesn't exist yet I'm happy to give it a knack when implementing the notebook mode. I might have run into some more questions then :) On Tue, Nov 5, 2024 at 1:47 AM Yuan Fu <casouri@gmail.com> wrote: > > > > On Nov 4, 2024, at 4:02 AM, Eli Zaretskii <eliz@gnu.org> wrote: > > > >> From: Andrew De Angelis <bobodeangelis@gmail.com> > >> Date: Sun, 3 Nov 2024 13:28:57 -0500 > >> > >> I'm trying to get a better understanding of treesit.el, and I've > stumbled on a couple of things that make me > >> think the manual is either outdated/faulty, or just not entirely clear > and I'm missing something. > >> > >> The latter is most likely, but I'd appreciate any help in figuring out > what exactly is wrong in my > >> approach/setup. I would be happy to contribute to the manual, if > needed, to ensure it is clearer. > >> > >> This is the relevant section of the manual: > >> > https://www.gnu.org/software/emacs/manual/html_node/elisp/Multiple-Languages.html > >> I've started out with simply trying to recreate the setup described in > the manual, but I've run into some > >> issues. > >> Here's what I've done so far: > >> - I've defined a very simple `html-ts-mode`, using the elisp functions > from the manual: > >> https://github.com/andrewdea/poc-html-ts-mode/blob/main/html-ts-mode.el > >> - I activate this mode when visiting the example.html file (which is > also copied from the manual): > >> https://github.com/andrewdea/poc-html-ts-mode/blob/main/example.html > >> - the queries seem to be working as expected: when I'm in a buffer > visiting example.html, evaluating > >> `(treesit-query-capture 'html css-query)` and `(treesit-query-capture > 'html js-query)` return the expected > >> nodes > >> - ISSUE: `treesit-update-ranges` doesn't seem to be working as > expected: even if I call it multiple times, the > >> parser for the whole buffer seems to still be 'html. > `(treesit-language-at (point))` always returns 'html, even > >> when I'm inside the nodes captured by the css-query or js-query. > >> > >> Some additional context: the reason I'm looking into tree-sitter (and > its functionalities to support multiple > >> languages) is to potentially use it to fontify markdown code blocks and > to improve emacs support for python > >> notebooks. For markdown, I was trying a similar approach to the HTML > one described in the manual, but ran > >> into other similar issues: > >> > https://www.reddit.com/r/emacs/comments/1gcrv8k/syntaxhighlighting_codeblocks_in_markdown/ > . > >> I'm just including this as context. > >> > >> Let me know if any of this is not clear. > >> > >> Thanks in advance for all your help! > > > > Yuan, can you help Andrew? > > Ah yes, thanks for the ping. Andrew, I take that your problem is with > treesit-language-at, right? Specifically, it doesn’t return expected > results. That’s because for treesit-language-at to work, major mode needs > to define treesit-language-at-function. > > This confusion has came up a couple times now, evidently > treesit-language-at is not very intuitive. Hopefully it’ll be fixed by our > updated manual for Emacs 30. In Emacs 30, we define > treesit-language-at-function in the example code: > > Emacs automates this process in ‘treesit-update-ranges’. A > multi-language major mode should set ‘treesit-range-settings’ so that > ‘treesit-update-ranges’ knows how to perform this process automatically. > Major modes should use the helper function ‘treesit-range-rules’ to > generate a value that can be assigned to ‘treesit-range-settings’. The > settings in the following example directly translate into operations > shown above. > > (setq treesit-range-settings > (treesit-range-rules > :embed 'javascript > :host 'html > '((script_element (raw_text) @capture)) > :embed 'css > :host 'html > '((style_element (raw_text) @capture)))) > > ;; Major modes with multiple languages should always set > ;; `treesit-language-at-point-function' (which see). > (setq treesit-language-at-point-function > (lambda (pos) > (let* ((node (treesit-node-at pos 'html)) > (parent (treesit-node-parent node))) > (cond > ((and node parent > (equal (treesit-node-type node) "raw_text") > (equal (treesit-node-type parent) "script_element")) > 'javascript) > ((and node parent > (equal (treesit-node-type node) "raw_text") > (equal (treesit-node-type parent) "style_element")) > 'css) > (t 'html))))) > > And FYI, in Emacs 30 we added local parsers, that might make implementing > code/markdown blocks in a notebook easier. > > Yuan [-- Attachment #2: Type: text/html, Size: 7221 bytes --] ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: treesit: how to get it to parse multiple languages 2024-11-10 14:35 ` Andrew De Angelis @ 2024-11-10 22:47 ` Peter Oliver 2024-11-11 19:28 ` Juri Linkov 2024-11-19 6:59 ` Yuan Fu 1 sibling, 1 reply; 15+ messages in thread From: Peter Oliver @ 2024-11-10 22:47 UTC (permalink / raw) To: Andrew De Angelis; +Cc: emacs-devel [-- Attachment #1: Type: text/plain, Size: 327 bytes --] On Sun, 10 Nov 2024, Andrew De Angelis wrote: > a major mode out > there that already implements multiple-language functionalities using > treesitter. > > … > > Do you all know if such a mode exists? In Emacs 30, php-ts-mode? https://git.savannah.gnu.org/cgit/emacs.git/tree/lisp/progmodes/php-ts-mode.el -- Peter Oliver ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: treesit: how to get it to parse multiple languages 2024-11-10 22:47 ` Peter Oliver @ 2024-11-11 19:28 ` Juri Linkov 2024-11-19 7:01 ` Yuan Fu 0 siblings, 1 reply; 15+ messages in thread From: Juri Linkov @ 2024-11-11 19:28 UTC (permalink / raw) To: Peter Oliver; +Cc: Andrew De Angelis, emacs-devel >> a major mode out >> there that already implements multiple-language functionalities using >> treesitter. >> >> … >> >> Do you all know if such a mode exists? > > In Emacs 30, php-ts-mode? > > https://git.savannah.gnu.org/cgit/emacs.git/tree/lisp/progmodes/php-ts-mode.el It would be nice if html-ts-mode supported embedded css-ts-mode and js-ts-mode the same way. ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: treesit: how to get it to parse multiple languages 2024-11-11 19:28 ` Juri Linkov @ 2024-11-19 7:01 ` Yuan Fu 2024-11-19 20:13 ` Vincenzo Pupillo 0 siblings, 1 reply; 15+ messages in thread From: Yuan Fu @ 2024-11-19 7:01 UTC (permalink / raw) To: Juri Linkov; +Cc: Peter Oliver, Andrew De Angelis, emacs-devel > On Nov 11, 2024, at 11:28 AM, Juri Linkov <juri@linkov.net> wrote: > >>> a major mode out >>> there that already implements multiple-language functionalities using >>> treesitter. >>> >>> … >>> >>> Do you all know if such a mode exists? >> >> In Emacs 30, php-ts-mode? >> >> https://git.savannah.gnu.org/cgit/emacs.git/tree/lisp/progmodes/php-ts-mode.el > > It would be nice if html-ts-mode supported embedded css-ts-mode and js-ts-mode > the same way. Yeah, it can be a good poster child for writing multi-lang modes. My time is very limited now, so anybody sees this, feel free to give it a try. And maybe document the code extensively too ;-) Yuan ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: treesit: how to get it to parse multiple languages 2024-11-19 7:01 ` Yuan Fu @ 2024-11-19 20:13 ` Vincenzo Pupillo 2024-11-24 5:09 ` Yuan Fu 0 siblings, 1 reply; 15+ messages in thread From: Vincenzo Pupillo @ 2024-11-19 20:13 UTC (permalink / raw) To: Juri Linkov, emacs-devel Cc: Peter Oliver, Andrew De Angelis, emacs-devel, Yuan Fu In data martedì 19 novembre 2024 08:01:28 Ora standard dell’Europa centrale, Yuan Fu ha scritto: > > On Nov 11, 2024, at 11:28 AM, Juri Linkov <juri@linkov.net> wrote: > >>> a major mode out > >>> there that already implements multiple-language functionalities using > >>> treesitter. > >>> > >>> … > >>> > >>> Do you all know if such a mode exists? > >> > >> In Emacs 30, php-ts-mode? > >> > >> https://git.savannah.gnu.org/cgit/emacs.git/tree/lisp/progmodes/php-ts-mo > >> de.el> > > It would be nice if html-ts-mode supported embedded css-ts-mode and > > js-ts-mode the same way. > > Yeah, it can be a good poster child for writing multi-lang modes. My time is > very limited now, so anybody sees this, feel free to give it a try. And > maybe document the code extensively too ;-) It's almost done (it's called mhtml-ts-mode), I hope to submit a patch within the next week. Vincenzo ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: treesit: how to get it to parse multiple languages 2024-11-19 20:13 ` Vincenzo Pupillo @ 2024-11-24 5:09 ` Yuan Fu 2024-11-24 12:11 ` Vincenzo Pupillo 0 siblings, 1 reply; 15+ messages in thread From: Yuan Fu @ 2024-11-24 5:09 UTC (permalink / raw) To: Vincenzo Pupillo Cc: Juri Linkov, emacs-devel, Peter Oliver, Andrew De Angelis > On Nov 19, 2024, at 12:13 PM, Vincenzo Pupillo <v.pupillo@gmail.com> wrote: > > In data martedì 19 novembre 2024 08:01:28 Ora standard dell’Europa centrale, > Yuan Fu ha scritto: >>> On Nov 11, 2024, at 11:28 AM, Juri Linkov <juri@linkov.net> wrote: >>>>> a major mode out >>>>> there that already implements multiple-language functionalities using >>>>> treesitter. >>>>> >>>>> … >>>>> >>>>> Do you all know if such a mode exists? >>>> >>>> In Emacs 30, php-ts-mode? >>>> >>>> https://git.savannah.gnu.org/cgit/emacs.git/tree/lisp/progmodes/php-ts-mo >>>> de.el> >>> It would be nice if html-ts-mode supported embedded css-ts-mode and >>> js-ts-mode the same way. >> >> Yeah, it can be a good poster child for writing multi-lang modes. My time is >> very limited now, so anybody sees this, feel free to give it a try. And >> maybe document the code extensively too ;-) > > It's almost done (it's called mhtml-ts-mode), I hope to submit a patch within > the next week. > > Vincenzo That’s awesome! Yuan ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: treesit: how to get it to parse multiple languages 2024-11-24 5:09 ` Yuan Fu @ 2024-11-24 12:11 ` Vincenzo Pupillo 2024-11-29 7:22 ` Juri Linkov 0 siblings, 1 reply; 15+ messages in thread From: Vincenzo Pupillo @ 2024-11-24 12:11 UTC (permalink / raw) To: Yuan Fu; +Cc: Juri Linkov, emacs-devel, Peter Oliver, Andrew De Angelis In data domenica 24 novembre 2024 06:09:39 Ora standard dell’Europa centrale, Yuan Fu ha scritto: > > That’s awesome! > > Yuan It's pretty much ready, the only thing I'm missing is the ability to create an Imenu with symbols from both HTML and the other embedded languages. I have tried a few approaches but it seems that it can only be done for the main language. Is there any way to do something like that? Thank you. Vincenzo ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: treesit: how to get it to parse multiple languages 2024-11-24 12:11 ` Vincenzo Pupillo @ 2024-11-29 7:22 ` Juri Linkov 2024-11-29 7:37 ` Yuan Fu 0 siblings, 1 reply; 15+ messages in thread From: Juri Linkov @ 2024-11-29 7:22 UTC (permalink / raw) To: Vincenzo Pupillo; +Cc: Yuan Fu, emacs-devel, Peter Oliver, Andrew De Angelis >> That’s awesome! > > It's pretty much ready, the only thing I'm missing is the ability to create an > Imenu with symbols from both HTML and the other embedded languages. I have > tried a few approaches but it seems that it can only be done for the main > language. Is there any way to do something like that? Imenu is a small detail that could be figured out after pushing your main work. ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: treesit: how to get it to parse multiple languages 2024-11-29 7:22 ` Juri Linkov @ 2024-11-29 7:37 ` Yuan Fu 2024-11-29 22:13 ` Vincenzo Pupillo 0 siblings, 1 reply; 15+ messages in thread From: Yuan Fu @ 2024-11-29 7:37 UTC (permalink / raw) To: Juri Linkov Cc: Vincenzo Pupillo, emacs-devel, Peter Oliver, Andrew De Angelis > On Nov 28, 2024, at 11:22 PM, Juri Linkov <juri@linkov.net> wrote: > >>> That’s awesome! >> >> It's pretty much ready, the only thing I'm missing is the ability to create an >> Imenu with symbols from both HTML and the other embedded languages. I have >> tried a few approaches but it seems that it can only be done for the main >> language. Is there any way to do something like that? > > Imenu is a small detail that could be figured out after pushing your main work. Oops, sorry for the late reply. Lets’ do this: I’ll extend treesit-simple-imenu to support multi-language. Once we have that you can add imenu support for your new mode. Yuan ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: treesit: how to get it to parse multiple languages 2024-11-29 7:37 ` Yuan Fu @ 2024-11-29 22:13 ` Vincenzo Pupillo 2024-12-05 4:23 ` Andrew De Angelis 0 siblings, 1 reply; 15+ messages in thread From: Vincenzo Pupillo @ 2024-11-29 22:13 UTC (permalink / raw) To: Juri Linkov, Yuan Fu; +Cc: emacs-devel, Peter Oliver, Andrew De Angelis In data venerdì 29 novembre 2024 08:37:28 Ora standard dell’Europa centrale, Yuan Fu ha scritto: > > On Nov 28, 2024, at 11:22 PM, Juri Linkov <juri@linkov.net> wrote: > >>> That’s awesome! > >> > >> It's pretty much ready, the only thing I'm missing is the ability to > >> create an Imenu with symbols from both HTML and the other embedded > >> languages. I have tried a few approaches but it seems that it can only > >> be done for the main language. Is there any way to do something like > >> that? > > > > Imenu is a small detail that could be figured out after pushing your main > > work. > Oops, sorry for the late reply. Lets’ do this: I’ll extend > treesit-simple-imenu to support multi-language. Once we have that you can > add imenu support for your new mode. Thank you Yuan. I just submitted mhtml-ts-mode for inclusion. Please take a look at bug #74610. @Andrew: I tried to explain as best as I can how to write a major-mode that handles multiple languages, check it out. Vincenzo ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: treesit: how to get it to parse multiple languages 2024-11-29 22:13 ` Vincenzo Pupillo @ 2024-12-05 4:23 ` Andrew De Angelis 0 siblings, 0 replies; 15+ messages in thread From: Andrew De Angelis @ 2024-12-05 4:23 UTC (permalink / raw) To: Vincenzo Pupillo; +Cc: Juri Linkov, Yuan Fu, emacs-devel, Peter Oliver [-- Attachment #1: Type: text/plain, Size: 1675 bytes --] Thanks a lot Vincenzo! Excited to take a deeper look at it. By the way, I did start working on a possible python-notebook mode, with planned multi-language (markdown and python) support: https://github.com/andrewdea/enb Progress has been a bit slow due to other commitments: so far I only have a rudimentary parser that 'renders' the JSON into a markdown/python buffer. But I'm hoping to add more functionalities over the coming months. Thank you all again for all the help on this. On Fri, Nov 29, 2024 at 5:13 PM Vincenzo Pupillo <v.pupillo@gmail.com> wrote: > In data venerdì 29 novembre 2024 08:37:28 Ora standard dell’Europa > centrale, > Yuan Fu ha scritto: > > > On Nov 28, 2024, at 11:22 PM, Juri Linkov <juri@linkov.net> wrote: > > >>> That’s awesome! > > >> > > >> It's pretty much ready, the only thing I'm missing is the ability to > > >> create an Imenu with symbols from both HTML and the other embedded > > >> languages. I have tried a few approaches but it seems that it can only > > >> be done for the main language. Is there any way to do something like > > >> that? > > > > > > Imenu is a small detail that could be figured out after pushing your > main > > > work. > > Oops, sorry for the late reply. Lets’ do this: I’ll extend > > treesit-simple-imenu to support multi-language. Once we have that you can > > add imenu support for your new mode. > Thank you Yuan. > I just submitted mhtml-ts-mode for inclusion. > Please take a look at bug #74610. > @Andrew: I tried to explain as best as I can how to write a major-mode > that > handles multiple languages, check it out. > > Vincenzo > > > > [-- Attachment #2: Type: text/html, Size: 2306 bytes --] ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: treesit: how to get it to parse multiple languages 2024-11-10 14:35 ` Andrew De Angelis 2024-11-10 22:47 ` Peter Oliver @ 2024-11-19 6:59 ` Yuan Fu 1 sibling, 0 replies; 15+ messages in thread From: Yuan Fu @ 2024-11-19 6:59 UTC (permalink / raw) To: Andrew De Angelis; +Cc: Eli Zaretskii, emacs-devel > On Nov 10, 2024, at 6:35 AM, Andrew De Angelis <bobodeangelis@gmail.com> wrote: > > Thanks so much! > > I took a look at the Emacs 30 manual and it's a lot clearer, it's perfect! > I think one thing that would truly be ideal is if there is a major mode out there that already implements multiple-language functionalities using treesitter. Seeing all the components in action would be quite helpful: the simple HTML examples are very clarifying but they can only do so much. > > Do you all know if such a mode exists? `(ripgrep-regexp "local-parser" source-directory)` on the master branch only shows me matches in `treesit.el` itself (and associated ChangeLog / manual). > If it doesn't exist yet I'm happy to give it a knack when implementing the notebook mode. I might have run into some more questions then :) As Peter has pointed out, php-ts-mode is a multi-language mode. And elixir-ts-mode too. You can grep for “:local”, or "treesit-range-rules”. Yuan ^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2024-12-05 4:23 UTC | newest] Thread overview: 15+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-11-03 18:28 treesit: how to get it to parse multiple languages Andrew De Angelis 2024-11-04 12:02 ` Eli Zaretskii 2024-11-05 6:46 ` Yuan Fu 2024-11-10 14:35 ` Andrew De Angelis 2024-11-10 22:47 ` Peter Oliver 2024-11-11 19:28 ` Juri Linkov 2024-11-19 7:01 ` Yuan Fu 2024-11-19 20:13 ` Vincenzo Pupillo 2024-11-24 5:09 ` Yuan Fu 2024-11-24 12:11 ` Vincenzo Pupillo 2024-11-29 7:22 ` Juri Linkov 2024-11-29 7:37 ` Yuan Fu 2024-11-29 22:13 ` Vincenzo Pupillo 2024-12-05 4:23 ` Andrew De Angelis 2024-11-19 6:59 ` Yuan Fu
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).