From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: =?UTF-8?Q?Augustin_Ch=C3=A9neau_=28BTuin=29?= Newsgroups: gmane.emacs.devel Subject: Re: Questions about tree-sitter Date: Mon, 18 Sep 2023 19:04:02 +0200 Message-ID: <23661f5b-51bf-4e23-a134-51a52764fe26@mailo.com> References: <12fe5895-7d34-4f3e-b1cf-aa133b718c24@mailo.com> <52f09345-85c8-4049-b12d-bf8b84b08f75@mailo.com> <2B46C452-DC8B-4BD0-A64B-8773235C1FA8@gmail.com> <3b3f90e8-a318-4b63-915e-6477701de897@mailo.com> <1F227B69-6195-4115-A7B6-BD2F7EA08E1F@gmail.com> <2E2323FB-1A32-48B6-992E-66F474427199@gmail.com> <9fef551c-3a8d-4df8-ac1d-a9884b73da5d@mailo.com> <8ECA1B2A-CAB9-4500-A193-3A898A382C4C@gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------JI50TSa5SjRRH1N8tyr0V3CJ" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="18039"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Mozilla Thunderbird Cc: emacs-devel To: Yuan Fu Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Mon Sep 18 19:04:49 2023 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1qiHg0-0004Kv-UI for ged-emacs-devel@m.gmane-mx.org; Mon, 18 Sep 2023 19:04:49 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qiHfW-0001Om-LY; Mon, 18 Sep 2023 13:04:18 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qiHfS-0001Hd-Tz for emacs-devel@gnu.org; Mon, 18 Sep 2023 13:04:15 -0400 Original-Received: from msg-4.mailo.com ([213.182.54.15]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qiHfO-00084W-8U for emacs-devel@gnu.org; Mon, 18 Sep 2023 13:04:12 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=mailo.com; s=mailo; t=1695056643; bh=t7+bCpGgO2gMyHoFLe+vUeJU1ROxxCZOGkApds4WsBk=; h=X-EA-Auth:Content-Type:Message-ID:Date:MIME-Version:Subject:To:Cc: References:From:In-Reply-To; b=TEat4QuGPCVC/PqjiXRbNSMrx4bnbanQYSq9DD1to00TGbO9jwcNDJ7RZKnmnAzl3 Zc/sfDdNmOcr7eG5Gv2s9saB1Dx4nTTc1riC8y700ScWvytsTpcAWI/OqVOCtONOdm m9205c6BdQdAC3zrU1uSRvwBwwyaNRhkno5dFfCI= Original-Received: by b221-2.in.mailobj.net [192.168.90.22] with ESMTP via ip-20.mailobj.net [213.182.54.20] Mon, 18 Sep 2023 19:04:03 +0200 (CEST) X-EA-Auth: mUyFDNSy1b0ZwC5IjaQ3hGmdaaVg+anrLgSylArxYX097cD6hsbKsQ/2mnoVhnUgwaUn58DBY8iCCW77t4JdrHRpKgm5tQnB Content-Language: fr, en-US In-Reply-To: <8ECA1B2A-CAB9-4500-A193-3A898A382C4C@gmail.com> Received-SPF: pass client-ip=213.182.54.15; envelope-from=btuin@mailo.com; helo=msg-4.mailo.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.devel:310711 Archived-At: This is a multi-part message in MIME format. --------------JI50TSa5SjRRH1N8tyr0V3CJ Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Le 14/09/2023 à 06:11, Yuan Fu a écrit : > > >> On Sep 13, 2023, at 5:43 AM, Augustin Chéneau (BTuin) wrote: >> >> Le 12/09/2023 à 02:22, Yuan Fu a écrit : >>>> On Sep 9, 2023, at 9:39 AM, Augustin Chéneau (BTuin) wrote: >>>> >>>> Le 08/09/2023 à 18:43, Yuan Fu a écrit : >>>>>> On Sep 8, 2023, at 4:53 AM, Augustin Chéneau (BTuin) wrote: >>>>>> >>>>>> Le 06/09/2023 à 06:07, Yuan Fu a écrit : >>>>>>> I added local parser support to master. If everything goes right, you just need to add a :local t flag in treesit-range-rules. Check out the modified bision-ts-mode.el that I hacked up for an example. BTW, it’s vital that you define treesit-language-at-point-function for a multi-language mode. >>>>>>> Yuan >>>>>> >>>>>> Thanks a lot! >>>>>> >>>>>> I did some tests and it's working pretty well. >>>>> Awesome! >>>> >>>> >>>> It seems I spoke a bit too soon :( >>>> When I edit the buffer, sometimes there is an offset between the text and the nodes after modifying the buffer, or the syntax highlighting breaks in C code. >>>> >>>> I attached an example Bison file if needed. >>> Thanks. I was able to reproduce this, but then can’t. I’ll keep looking into this, if you found out something new please let me know. >> >> It may be unrelated, but I have this popping in *Messages* sometimes: >> >> Error during redisplay: (jit-lock-function 1410) signaled (treesit-load-language-error not-found ("libtree-sitter-nil" "libtree-sitter-nil.0" "libtree-sitter-nil.0.0" "libtree-sitter-nil.so" "libtree-sitter-nil.so.0" "libtree-sitter-nil.so.0.0") "No such file or directory”) > > Thanks. I’ve fixed that and some other problems. Please pull master and try it out. Now bison-ts-mode works pretty well for me. I can’t reproduce the offset problem anymore, maybe it’s fixed in some of the fixes I made. Anyway, let me know if you observe it again. > > Yuan > It indeed works much better, thanks! I found a bug and a way to replicate it (you'll need to update your Bison grammar): - Open the file "treesit-bug-highlighting-demo"; - Enable bison-ts-mode; - At the beginning of the second line (the part managed by the embedded C parser, with "static void ..."), add a space; => The whole line loses its highlighting. If you add a space again, the highlighting works correctly again. Not a big issue, but pretty weird. Also, I have one (last?) question: Since the C code uses its own indentation, it's entirely independent of Bison's nodes positions. Is it possible to add an offset to the indentation of the embedded parts, relative to its container node? For instance, rather than: %% grammar_declaration: grammar_rule { int myvar; } ; %% I would like to get %% grammar_declaration: grammar_rule { int myvar; } ; %% ("int myvar;" is managed by a C parser). --------------JI50TSa5SjRRH1N8tyr0V3CJ Content-Type: text/x-emacs-lisp; charset=UTF-8; name="bison-ts-mode.el" Content-Disposition: attachment; filename="bison-ts-mode.el" Content-Transfer-Encoding: base64 Ozs7IGJpc29uLXRzLW1vZGUgLS0tIFRyZWUtc2l0dGVyIG1vZGUgZm9yIEJpc29uIC0qLSBs ZXhpY2FsLWJpbmRpbmc6IHQ7IC0qLQoKOzs7IENvbW1lbnRhcnk6Cgo7OzsgQ29kZToKCihy ZXF1aXJlICd0cmVlc2l0KQoocmVxdWlyZSAnYy10cy1tb2RlKQoKKGRlY2xhcmUtZnVuY3Rp b24gdHJlZXNpdC1wYXJzZXItY3JlYXRlICJ0cmVlc2l0LmMiKQooZGVjbGFyZS1mdW5jdGlv biB0cmVlc2l0LWluZHVjZS1zcGFyc2UtdHJlZSAidHJlZXNpdC5jIikKKGRlY2xhcmUtZnVu Y3Rpb24gdHJlZXNpdC1ub2RlLWNoaWxkLWJ5LWZpZWxkLW5hbWUgInRyZWVzaXQuYyIpCihk ZWNsYXJlLWZ1bmN0aW9uIHRyZWVzaXQtc2VhcmNoLXN1YnRyZWUgInRyZWVzaXQuYyIpCihk ZWNsYXJlLWZ1bmN0aW9uIHRyZWVzaXQtbm9kZS1wYXJlbnQgInRyZWVzaXQuYyIpCihkZWNs YXJlLWZ1bmN0aW9uIHRyZWVzaXQtbm9kZS1uZXh0LXNpYmxpbmcgInRyZWVzaXQuYyIpCihk ZWNsYXJlLWZ1bmN0aW9uIHRyZWVzaXQtbm9kZS10eXBlICJ0cmVlc2l0LmMiKQooZGVjbGFy ZS1mdW5jdGlvbiB0cmVlc2l0LW5vZGUtY2hpbGQgInRyZWVzaXQuYyIpCihkZWNsYXJlLWZ1 bmN0aW9uIHRyZWVzaXQtbm9kZS1lbmQgInRyZWVzaXQuYyIpCihkZWNsYXJlLWZ1bmN0aW9u IHRyZWVzaXQtbm9kZS1zdGFydCAidHJlZXNpdC5jIikKKGRlY2xhcmUtZnVuY3Rpb24gdHJl ZXNpdC1ub2RlLXN0cmluZyAidHJlZXNpdC5jIikKKGRlY2xhcmUtZnVuY3Rpb24gdHJlZXNp dC1xdWVyeS1jb21waWxlICJ0cmVlc2l0LmMiKQooZGVjbGFyZS1mdW5jdGlvbiB0cmVlc2l0 LXF1ZXJ5LWNhcHR1cmUgInRyZWVzaXQuYyIpCihkZWNsYXJlLWZ1bmN0aW9uIHRyZWVzaXQt cGFyc2VyLWFkZC1ub3RpZmllciAidHJlZXNpdC5jIikKKGRlY2xhcmUtZnVuY3Rpb24gdHJl ZXNpdC1wYXJzZXItYnVmZmVyICJ0cmVlc2l0LmMiKQooZGVjbGFyZS1mdW5jdGlvbiB0cmVl c2l0LXBhcnNlci1saXN0ICJ0cmVlc2l0LmMiKQoKCihkZWZncm91cCBiaXNvbiBuaWwKICAi U3VwcG9ydCBmb3IgdGhlIEJpc29uIGFuZCBGbGV4LiIKICA6Z3JvdXAgJ2xhbmd1YWdlcykK CihkZWZjdXN0b20gYmlzb24tdHMtbW9kZS1pbmRlbnQtb2Zmc2V0IDQKICAiTnVtYmVyIG9m IHNwYWNlcyBmb3IgZWFjaCBpbmRlbnRhdGlvbiBzdGVwIGluIGBiaXNvbi10cy1tb2RlJy4i CiAgOnZlcnNpb24gIjMwLjEiCiAgOnR5cGUgJ2ludGVnZXIKICA6c2FmZSAnaW50ZWdlcnAK ICA6Z3JvdXAgJ2Jpc29uKQoKCihkZWZ1biB0cmVlc2l0LS1tZXJnZS1mZWF0dXJlLWxpc3Rz IChsMSBsMikKICAiTWVyZ2UgdGhlIGxpc3RzIG9mIGxpc3RzIEwxIGFuZCBMMi4KVGhlIGZp cnN0IHN1Ymxpc3Qgb2YgTDEgaXMgbWVyZ2VkIHdpdGggdGhlIGZpcnN0IHN1Ymxpc3Qgb2Yg TDIgYW5kIHNvIG9uLgpMMSBhbmQgTDIgZG9uJ3QgbmVlZCB0byBoYXZlIHRoZSBzYW1lIHNp emUuIgogIChsZXQgKChyZXMgKCkpKQogICAgKHdoaWxlIChvciBsMSBsMikKICAgICAgKHNl dHEgcmVzIChwdXNoIChhcHBlbmQgKGNhciBsMSkgKGNhciBsMikpIHJlcykpCiAgICAgIChz ZXRxIGwxIChjZHIgbDEpIGwyIChjZHIgbDIpKSkKICAgIChucmV2ZXJzZSByZXMpKSkKCgoo ZGVmdW4gYmlzb24tdHMtLWxhbmd1YWdlLWF0LXBvaW50LWZ1bmN0aW9uIChwb3NpdGlvbikK ICAiUmV0dXJuIHRoZSBsYW5ndWFnZSBhdCBQT1NJVElPTi4iCiAgKGxldCogKChub2RlICh0 cmVlc2l0LW5vZGUtYXQgcG9zaXRpb24gJ2Jpc29uKSkpCiAgICAoaWYgKGVxdWFsICh0cmVl c2l0LW5vZGUtdHlwZSBub2RlKQoJICAgICAgICJlbWJlZGRlZF9jb2RlIikKCSdjCiAgICAg ICdiaXNvbikpKQoKKGRlZnVuIGJpc29uLXRzLS1mb250LWxvY2stc2V0dGluZ3MgKGxhbmd1 YWdlKQogICh0cmVlc2l0LWZvbnQtbG9jay1ydWxlcwogICA6bGFuZ3VhZ2UgbGFuZ3VhZ2UK ICAgOmZlYXR1cmUgJ2Jpc29uLWNvbW1lbnQKICAgJygoY29tbWVudCkgQGZvbnQtbG9jay1j b21tZW50LWZhY2UpCgogICA6bGFuZ3VhZ2UgbGFuZ3VhZ2UKICAgOmZlYXR1cmUgJ2Jpc29u LWRlY2xhcmF0aW9uCiAgICcoKGRlY2xhcmF0aW9uIChkZWNsYXJhdGlvbl9uYW1lKSBAZm9u dC1sb2NrLWtleXdvcmQtZmFjZSkpCgogICA6bGFuZ3VhZ2UgbGFuZ3VhZ2UKICAgOmZlYXR1 cmUgJ2Jpc29uLXR5cGUKICAgJygodHlwZSkgQGZvbnQtbG9jay10eXBlLWZhY2UpCgogICA6 bGFuZ3VhZ2UgbGFuZ3VhZ2UKICAgOmZlYXR1cmUgJ2Jpc29uLWdyYW1tYXItcnVsZS11c2Fn ZQogICAnKChncmFtbWFyX3J1bGVfaWRlbnRpZmllcikgQGZvbnQtbG9jay12YXJpYWJsZS11 c2UtZmFjZSkKCiAgIDpsYW5ndWFnZSBsYW5ndWFnZQogICA6ZmVhdHVyZSAnYmlzb24tZ3Jh bW1hci1ydWxlLWRlY2xhcmF0aW9uCiAgICcoKGdyYW1tYXJfcnVsZSAoZ3JhbW1hcl9ydWxl X2RlY2xhcmF0aW9uKQoJCSAgIEBmb250LWxvY2stdmFyaWFibGUtdXNlLWZhY2UpKQoKICAg Omxhbmd1YWdlIGxhbmd1YWdlCiAgIDpmZWF0dXJlICdiaXNvbi1zdHJpbmcKICAgOm92ZXJy aWRlIHQKICAgJygoc3RyaW5nKSBAZm9udC1sb2NrLXN0cmluZy1mYWNlKQoKICAgOmxhbmd1 YWdlIGxhbmd1YWdlCiAgIDpmZWF0dXJlICdiaXNvbi1saXRlcmFsCiAgIDpvdmVycmlkZSB0 CiAgICcoKGNoYXJfbGl0ZXJhbCkgQGZvbnQtbG9jay1rZXl3b3JkLWZhY2UKICAgICAobnVt YmVyX2xpdGVyYWwpIEBmb250LWxvY2stbnVtYmVyLWZhY2UpCgogICA6bGFuZ3VhZ2UgbGFu Z3VhZ2UKICAgOmZlYXR1cmUgJ2Jpc29uLWRpcmVjdGl2ZS1ncmFtbWFyLXJ1bGUKICAgOm92 ZXJyaWRlIHQKICAgJygoZ3JhbW1hcl9ydWxlIChkaXJlY3RpdmUpIEBmb250LWxvY2sta2V5 d29yZC1mYWNlKSkKCiAgIDpsYW5ndWFnZSBsYW5ndWFnZQogICA6ZmVhdHVyZSAnYmlzb24t b3BlcmF0b3IKICAgOm92ZXJyaWRlIHQKICAgJyhbInwiXSBAZm9udC1sb2NrLW9wZXJhdG9y LWZhY2UpCgogICA6bGFuZ3VhZ2UgbGFuZ3VhZ2UKICAgOmZlYXR1cmUgJ2Jpc29uLWRlbGlt aXRlcgogICA6b3ZlcnJpZGUgdAogICAnKFsiOyJdIEBmb250LWxvY2stZGVsaW1pdGVyLWZh Y2UpKSkKCgoodHJlZXNpdC1xdWVyeS12YWxpZGF0ZSAnYmlzb24gJygoZ3JhbW1hcl9ydWxl IChncmFtbWFyX3J1bGVfZGVjbGFyYXRpb24pICBAZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUt ZmFjZSkpKQoKKGRlZnZhciBiaXNvbi10cy1tb2RlLS1mb250LWxvY2stZmVhdHVyZS1saXN0 CiAgJygoIGJpc29uLWNvbW1lbnQgYmlzb24tZGVjbGFyYXRpb24gYmlzb24tdHlwZQogICAg ICBiaXNvbi1ncmFtbWFyLXJ1bGUtdXNhZ2UgYmlzb24tZ3JhbW1hci1ydWxlLWRlY2xhcmF0 aW9uCiAgICAgIGJpc29uLXN0cmluZyBiaXNvbi1saXRlcmFsIGJpc29uLWRpcmVjdGl2ZS1n cmFtbWFyLXJ1bGUKICAgICAgYmlzb24tb3BlcmF0b3IgYmlzb24tZGVsaW1pdGVyKSkpCgoK CihkZWZ1biBiaXNvbi10cy0taW5kZW50LXJ1bGVzICgpCiAgIkluZGVudCBydWxlcyBzdXBw b3J0ZWQgYnkgYGJpc29uLXRzLW1vZGUnLiIKICAobGV0KgogICAgICAoKGNvbW1vbgoJIGAo CgoJICAgKChub2RlLWlzICJeZGVjbGFyYXRpb24kIikKCSAgICBjb2x1bW4tMCAwKQoKCSAg ICgoYW5kIChwYXJlbnQtaXMgIl5kZWNsYXJhdGlvbiQiKQoJCSAobm90IChub2RlLWlzICJe Y29kZV9ibG9jayQiKSkpCgkgICAgY29sdW1uLTAgMikKCgkgICAoKGFuZCAocGFyZW50LWlz ICJeZGVjbGFyYXRpb24kIikKCQkgKG5vZGUtaXMgIl5jb2RlX2Jsb2NrJCIpKQoJICAgIGNv bHVtbi0wIDApCgoJICAgKChwYXJlbnQtaXMgIl5kZWNsYXJhdGlvbiQiKQoJICAgIHBhcmVu dCAyKQoKCSAgICgobm9kZS1pcyAiXmdyYW1tYXJfcnVsZSQiKQoJICAgIGNvbHVtbi0wIDAp CgoJICAgKChhbmQKCSAgICAgKHBhcmVudC1pcyAiXmdyYW1tYXJfcnVsZSQiKQoJICAgICAo bm9kZS1pcyAiOyIpKQoJICAgIGNvbHVtbi0wIGJpc29uLXRzLW1vZGUtaW5kZW50LW9mZnNl dCkKCgkgICAoKGFuZCAocGFyZW50LWlzICJeZ3JhbW1hcl9ydWxlJCIpCgkJIChub2RlLWlz ICJ8IikpCgkgICAgY29sdW1uLTAgYmlzb24tdHMtbW9kZS1pbmRlbnQtb2Zmc2V0KQoKCSAg ICgoYW5kIChwYXJlbnQtaXMgIl5ncmFtbWFyX3J1bGUkIikKCQkgKG5vdCAobm9kZS1pcyAi XmdyYW1tYXJfcnVsZV9kZWNsYXJhdGlvbiQiKSkKCQkgKG5vdCAobm9kZS1pcyAiXmFjdGlv biQiKSkpCgkgICAgY29sdW1uLTAgLCgrIGJpc29uLXRzLW1vZGUtaW5kZW50LW9mZnNldCAy KSkKCgkgICAoKG9yCgkgICAgIChub2RlLWlzICJeYWN0aW9uJCIpCgkgICAgIChub2RlLWlz ICJ9IikpCgkgICAgY29sdW1uLTAgMTIpCgoJICAgOzsgU2V0ICclJScgYXQgdGhlIGJlZ2lu bmluZyBvZiB0aGUgbGluZQoJICAgKChvcgoJICAgICAoYW5kIChwYXJlbnQtaXMgIl5ncmFt bWFyX3J1bGVzX3NlY3Rpb24kIikKCQkgIChub2RlLWlzICIlJSIpKQoJICAgICAobm9kZS1p cyAiXmdyYW1tYXJfcnVsZXNfc2VjdGlvbiQiKSkKCSAgICBjb2x1bW4tMCAwKQoKCSAgIChu by1ub2RlIHBhcmVudCAwKQoJICAgKQoJICkpCiAgICBgKChiaXNvbiAuICxjb21tb24pKSkp CgoKKGRlZmluZS1kZXJpdmVkLW1vZGUgYmlzb24tdHMtbW9kZSBwcm9nLW1vZGUgIkJpc29u IgogICJBIG1vZGUgZm9yIEJpc29uLiIKICAod2hlbiAodHJlZXNpdC1yZWFkeS1wICdiaXNv bikKICAgIChzZXRxLWxvY2FsIHRyZWVzaXQtZm9udC1sb2NrLXNldHRpbmdzCiAgICAgICAg ICAgICAgICAoYXBwZW5kIChiaXNvbi10cy0tZm9udC1sb2NrLXNldHRpbmdzICdiaXNvbikK ICAgICAgICAgICAgICAgICAgICAgICAgKGMtdHMtbW9kZS0tZm9udC1sb2NrLXNldHRpbmdz ICdjKSkpCgogICAgKHNldHEtbG9jYWwgdHJlZXNpdC1mb250LWxvY2stZmVhdHVyZS1saXN0 CiAgICAgICAgICAgICAgICAodHJlZXNpdC0tbWVyZ2UtZmVhdHVyZS1saXN0cwoJCSBiaXNv bi10cy1tb2RlLS1mb250LWxvY2stZmVhdHVyZS1saXN0CgkJIGMtdHMtbW9kZS0tZmVhdHVy ZS1saXN0KSkKCiAgICAoc2V0cS1sb2NhbCB0cmVlc2l0LXNpbXBsZS1pbWVudS1zZXR0aW5n cwoJCWAoKCJHcmFtbWFyIgoJCSAgICJcXGBncmFtbWFyX3J1bGVfZGVjbGFyYXRpb25cXCci CgkJICAgbmlsCgkJICAgKGxhbWJkYSAobm9kZSkgKHRyZWVzaXQtbm9kZS10ZXh0IG5vZGUp ICkpKSkKCiAgICAoc2V0cS1sb2NhbCB0cmVlc2l0LXNpbXBsZS1pbmRlbnQtcnVsZXMKICAg ICAgICAgICAgICAgIChhcHBlbmQgKGMtdHMtbW9kZS0tZ2V0LWluZGVudC1zdHlsZSAnYykK CQkJKGJpc29uLXRzLS1pbmRlbnQtcnVsZXMpKSkKCiAgICAoc2V0cS1sb2NhbCB0cmVlc2l0 LWxhbmd1YWdlLWF0LXBvaW50LWZ1bmN0aW9uICdiaXNvbi10cy0tbGFuZ3VhZ2UtYXQtcG9p bnQtZnVuY3Rpb24pCgogICAgKHNldHEtbG9jYWwgdHJlZXNpdC1yYW5nZS1zZXR0aW5ncwoJ CSh0cmVlc2l0LXJhbmdlLXJ1bGVzCgkJIDplbWJlZCAnYwoJCSA6aG9zdCAnYmlzb24KCQkg OmxvY2FsIHQKCQkgJygoZW1iZWRkZWRfY29kZSkgQGNhcHR1cmUpCgkJICkpCgogICAgKHRy ZWVzaXQtbWFqb3ItbW9kZS1zZXR1cCkpKQoKKHByb3ZpZGUgJ2Jpc29uLXRzLW1vZGUpCjs7 OyBiaXNvbi10cy1tb2RlLmVsIGVuZHMgaGVyZQo= --------------JI50TSa5SjRRH1N8tyr0V3CJ Content-Type: text/plain; charset=UTF-8; name="treesit-bug-highlighting-demo" Content-Disposition: attachment; filename="treesit-bug-highlighting-demo" Content-Transfer-Encoding: base64 JXsKICAgc3RhdGljIHZvaWQgcHJpbnRfdG9rZW4gKHl5dG9rZW5fa2luZF90IHRva2VuLCBZ WVNUWVBFIHZhbCk7CiV9CgolJQpydWxlOiBhOwo= --------------JI50TSa5SjRRH1N8tyr0V3CJ--