Received: (at 61368) by debbugs.gnu.org; 18 Feb 2023 12:15:06 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Sat Feb 18 07:15:06 2023 Received: from localhost ([127.0.0.1]:42722 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1pTM7O-00027X-8e for submit <at> debbugs.gnu.org; Sat, 18 Feb 2023 07:15:06 -0500 Received: from mail-oi1-f174.google.com ([209.85.167.174]:35579) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <joaotavora@HIDDEN>) id 1pTM7M-00026l-PQ for 61368 <at> debbugs.gnu.org; Sat, 18 Feb 2023 07:15:05 -0500 Received: by mail-oi1-f174.google.com with SMTP id bp9so1349733oib.2 for <61368 <at> debbugs.gnu.org>; Sat, 18 Feb 2023 04:15:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=w5EJA5zRniAjz5Wyb1cPrSgJCoM5U413AjH5fAql5Tc=; b=dqMEZzyS2LH+RK+oREuM0NSNeJ0sMX3/wrsOVinlCoGK77nKqCzS14zG5Bbg5gjV3v NkpD8aHmfaU4l68Y+YIbjDLiV3k4mPkE1gMkBDrBAZ/nByFAMSwypXo5fhlptc9o0vfI ylWfE9nvg/DI1xsFh8yJv0VpNoERonTNNCtkEcbprHB1WERWyDN2yU2Z4UWRMtXVXZXM +n80kuvStURAMqaenCj/SviRSMOT9w/JSH5aFaPiDZysPpIfO6f6rURrihs1ILCQROMS TFiUBssQoOksxgNui1ps3vkqLFojdXR7xcTMWWELY5SCLwx5ME6yBuVKC6eegSnHpP3/ fz6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=w5EJA5zRniAjz5Wyb1cPrSgJCoM5U413AjH5fAql5Tc=; b=Hll+2COSTIZknaG9X3gt4WoxLKEI/5uWWYLQpr7srmJPJ3xWDR2SWfvkxMPHOw38Sq Lh9FUVyiKCzbJSyrqhiAMJocd/m0cwk4ANHJJ+bJl4u7mmQHdY0N1s+apPe93kxrQg87 Msy8SIL5s6x7bcxxNSbH9q+jtRnCSt3z6nzZVN5/XePPhqs3RxgwiPhVr4ct8hEkEfFY K96KZ4L/STCQKWibo51onqdNdc5aTu4RN5RWgxpcCm8jHG2V1Mq2ujJAT5RciOa32wyQ 2PzUR4YkZj3BByf0oFxmxqgrbornjdz/f+rCg6sB2DlLanGjLhe26v+EdSCwLsZZVd2C aaeA== X-Gm-Message-State: AO0yUKUUAUYEuowgLZwT/F1VNP7+6uKiv0MtxPkyE0ilxVXldoxYLttu G8X5TmQJFediVdgzaotuWPwsqgWS515Puegy2+M= X-Google-Smtp-Source: AK7set9hnKBJABGKy5s+KYhWPUu4yjjyvYTJxFH82g5+yyLAQaVgFh5qkosh5PKFVaWOmtMGPr0Sep5XSO/NhqfYyJw= X-Received: by 2002:a05:6808:128b:b0:37b:9a3:136f with SMTP id a11-20020a056808128b00b0037b09a3136fmr11801oiw.6.1676722499126; Sat, 18 Feb 2023 04:14:59 -0800 (PST) MIME-Version: 1.0 References: <CAMCrgaUgMx9+0Q8f_cezZ0TW_-u=mdeHf=TL=qw9wbhiS-nJ9w@HIDDEN> <83edr0nmq6.fsf@HIDDEN> <CAMCrgaUa26s2BM8EskKt5FTEyFqyioqx13abOFSMjcyShgG=Pg@HIDDEN> <83357flzys.fsf@HIDDEN> <CAMCrgaVHtNZ6vAyTfxdfXQYmE8TKQHJK-wKoc78YcF=eCygyTQ@HIDDEN> In-Reply-To: <CAMCrgaVHtNZ6vAyTfxdfXQYmE8TKQHJK-wKoc78YcF=eCygyTQ@HIDDEN> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Date: Sat, 18 Feb 2023 12:14:49 +0000 Message-ID: <CALDnm53sBt-o8txJ7ToZsA3BaFzYUVtnMLzPKz8wf0jKUROQPA@HIDDEN> Subject: Re: bug#61368: [PATCH] Extend go-ts-mode with support for pre-filling return statements To: Evgeni Kolev <evgenysw@HIDDEN> Content-Type: multipart/alternative; boundary="000000000000f28c7d05f4f860df" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 61368 Cc: Randy Taylor <dev@HIDDEN>, Eli Zaretskii <eliz@HIDDEN>, Theodor Thornhill <theo@HIDDEN>, 61368 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) --000000000000f28c7d05f4f860df Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sat, Feb 18, 2023, 11:46 Evgeni Kolev <evgenysw@HIDDEN> wrote: > + Jo=C3=A3o, author of yasnippet. > > Hi, Jo=C3=A3o, I'd appreciate any suggestions you might have. I'm aiming = to > extend go-ts-mode with a snippet-like feature. go-ts-mode would be > able to insert a "smart / context-aware" return statement. My question > is - is there a way for major modes to provide yasnippet snippets? My > understanding is the snippets are either created by each user > individually, or distributed as a collection of snippets (e.g. > yasnippet-snippets). Snippets can be distributed as files, but that's not a very good way as I see it today. One of the reasons might be too leverage the TAB and menu expansion of the yasnippet system. But probably you don't want this, and snippets can also be defined programmatically, albeit not with a beautiful language. Are there any major modes which provide snippets > (I wasn't able to find any in emacs' repo)? > That's because yasnippet is not part of the Emacs repo proper, i.e. the "core". So adding snippets to major modes in the core would introduce into the core a dependency on an non-core ELPA package. Nevertheless, there are ways to conditionally provide functionality based on whether the non-core package is detected. A soft dependency. In my opinion it makes sense for popular non-core packages: company, markdown-mode, yasnippet, etc. Look at Eglot, for example. Jo=C3=A3o Jo=C3=A3o --000000000000f28c7d05f4f860df Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"auto"><div><div class=3D"gmail_quote"><div dir=3D"ltr" class=3D= "gmail_attr">On Sat, Feb 18, 2023, 11:46 Evgeni Kolev <<a href=3D"mailto= :evgenysw@HIDDEN">evgenysw@HIDDEN</a>> wrote:<br></div><blockquote= class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc soli= d;padding-left:1ex">+ Jo=C3=A3o, author of yasnippet.<br> <br> Hi, Jo=C3=A3o, I'd appreciate any suggestions you might have. I'm a= iming to<br> extend go-ts-mode with a snippet-like feature. go-ts-mode would be<br> able to insert a "smart / context-aware" return statement. My que= stion<br> is - is there a way for major modes to provide yasnippet snippets? My<br> understanding is the snippets are either created by each user<br> individually, or distributed as a collection of snippets (e.g.<br> yasnippet-snippets).</blockquote></div></div><div dir=3D"auto"><br></div><d= iv dir=3D"auto">Snippets can be distributed as files, but that's not a = very good way as I see it today. One of the=C2=A0 reasons might be too leve= rage the TAB and menu expansion of the yasnippet system. But probably you d= on't want this, and snippets can also be defined programmatically, albe= it not with a beautiful language.=C2=A0</div><div dir=3D"auto"><br></div><d= iv dir=3D"auto"><div class=3D"gmail_quote"><blockquote class=3D"gmail_quote= " style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">A= re there any major modes which provide snippets<br> (I wasn't able to find any in emacs' repo)?<br></blockquote></div><= /div><div dir=3D"auto"><br></div><div dir=3D"auto">That's because yasni= ppet is not part of the Emacs repo proper, i.e. the "core". So ad= ding snippets to major modes in the core would introduce into the core a de= pendency on an non-core ELPA package.</div><div dir=3D"auto"><br></div><div= dir=3D"auto">Nevertheless, there are ways to conditionally provide functio= nality based on whether the non-core package is detected.=C2=A0 A soft depe= ndency. In my opinion it makes sense for popular non-core packages: company= , markdown-mode, yasnippet, etc. Look at Eglot, for example.</div><div dir= =3D"auto"><br></div><div dir=3D"auto">Jo=C3=A3o</div><div dir=3D"auto"><br>= </div><div dir=3D"auto">Jo=C3=A3o</div></div> --000000000000f28c7d05f4f860df--
bug-gnu-emacs@HIDDEN
:bug#61368
; Package emacs
.
Full text available.Received: (at 61368) by debbugs.gnu.org; 18 Feb 2023 11:46:39 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Sat Feb 18 06:46:39 2023 Received: from localhost ([127.0.0.1]:42670 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1pTLfq-0001GD-VC for submit <at> debbugs.gnu.org; Sat, 18 Feb 2023 06:46:39 -0500 Received: from mail-qv1-f45.google.com ([209.85.219.45]:36595) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <evgenysw@HIDDEN>) id 1pTLfp-0001G1-QD for 61368 <at> debbugs.gnu.org; Sat, 18 Feb 2023 06:46:38 -0500 Received: by mail-qv1-f45.google.com with SMTP id jy21so1993817qvb.3 for <61368 <at> debbugs.gnu.org>; Sat, 18 Feb 2023 03:46:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1676720792; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=5XmL9JNabLr/rnvO2UC0Uf6R15gxZ6H/9f5EnuQfLD0=; b=ickWjYOUICsBIdoykQGjP5cGV1jsqzwHK/NoUZyZzl0YoQl9agY+f58iLA1dNqZX1p 9b47LVinjq/YAfY9hy0vIrb9EoxThbQH07KUHjnL1NR7ihx8iUz1+jVgSkwlpevTK3hC /hgNJPFuykzkJlTAf6nB/8sYSLiK8aMcCI61iZkXiPRLWEsPXGSTeBRWyMw71bCRoHiI c+lOq6c6ThaP4RBrcFWZ4yC8SlQLa9l3quzXXMOcyxJb/yJ7gdlHND0OPbVcEPFKlW1/ SCzpJWtH6kXn4Kd8UtSneXUAb8vUfOupUgMX5q3MM8ClLwc7bcqatX3UsztDEqDaz9Fc WkbA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1676720792; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=5XmL9JNabLr/rnvO2UC0Uf6R15gxZ6H/9f5EnuQfLD0=; b=3TOkmaAOW0KhZ/G5tijJNJ3r4HL1VO6DYGJB7a4lRW4V68Cui90Ok6eapI15TESKJL H5b9nDtoVauCQJtT92mmtwYvMZkBs2hu1571C9kTArA1l9iyeCWQvefVHCmA8QLSUmhJ nUml6k8qpIWESqhCUvbKIYGs47hIOearAphZfpgmQ87bALajzz9Vat6dl29K1wlPuRXe IskM05orAE2iQAp+rq/tKx2vfsPechEWQzHsgbTu8pGae+NMFftOb81/E50+pZR7eLzI KsOjGPnM/zSWGkn5UdwBgaL5m/RG9SEimqlgEhHd0/wzDDXWDuV9Elt0jJBHCTeKZb7L bm4Q== X-Gm-Message-State: AO0yUKVhBXLzXHhWiFzbNo8B+JZb96AY9uhC8OcayYyxoSdSxZFyNWTk uFu0ZimAOtRZj55KEBNbP2tFCQMHjW8lzdsAjgLoAMIJ0rdEngKl X-Google-Smtp-Source: AK7set/IYJK6bLCmuQszbvxkI3viWxSa6PwzsqF8HJ6PHD3ETZZj96X9YK9v/ItVtHTZcCQcDs/TMdlL6cg84JC4rEg= X-Received: by 2002:a0c:dd8d:0:b0:56e:bb64:9907 with SMTP id v13-20020a0cdd8d000000b0056ebb649907mr66221qvk.61.1676720792161; Sat, 18 Feb 2023 03:46:32 -0800 (PST) MIME-Version: 1.0 References: <CAMCrgaUgMx9+0Q8f_cezZ0TW_-u=mdeHf=TL=qw9wbhiS-nJ9w@HIDDEN> <83edr0nmq6.fsf@HIDDEN> <CAMCrgaUa26s2BM8EskKt5FTEyFqyioqx13abOFSMjcyShgG=Pg@HIDDEN> <83357flzys.fsf@HIDDEN> In-Reply-To: <83357flzys.fsf@HIDDEN> From: Evgeni Kolev <evgenysw@HIDDEN> Date: Sat, 18 Feb 2023 13:46:05 +0200 Message-ID: <CAMCrgaVHtNZ6vAyTfxdfXQYmE8TKQHJK-wKoc78YcF=eCygyTQ@HIDDEN> Subject: Re: bug#61368: [PATCH] Extend go-ts-mode with support for pre-filling return statements To: Eli Zaretskii <eliz@HIDDEN>, =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Content-Type: multipart/mixed; boundary="0000000000003611f805f4f7fb5f" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 61368 Cc: dev@HIDDEN, theo@HIDDEN, 61368 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) --0000000000003611f805f4f7fb5f Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable + Jo=C3=A3o, author of yasnippet. Hi, Jo=C3=A3o, I'd appreciate any suggestions you might have. I'm aiming to extend go-ts-mode with a snippet-like feature. go-ts-mode would be able to insert a "smart / context-aware" return statement. My question is - is there a way for major modes to provide yasnippet snippets? My understanding is the snippets are either created by each user individually, or distributed as a collection of snippets (e.g. yasnippet-snippets). Are there any major modes which provide snippets (I wasn't able to find any in emacs' repo)? On Thu, Feb 9, 2023 at 3:40 PM Eli Zaretskii <eliz@HIDDEN> wrote: > > Makes sense. I am familiar with electric-pair-mode. I see that it adds > > a hook in post-self-insert-hook. Is your suggestion to do something > > like this: > > - add hook in post-self-insert-hook > > - in the hook check if RET is typed after an "return" > > - if yes, replace the "return" with the "context-aware return > > statement", possibly using (yas-expand-snippet) > > Yes, something like that. See electric.el for more examples. > > Electric modes are usually minor modes that let major modes customize > them by setting variables. Again, I think you will find examples in > electric.el. The attached patch now adds a (go-ts-electric-return-mode) which, when enabled, replaces "return RET" with a context-aware return statement. I used sh-script.el's (sh-electric-here-document-mode) as an example. I'm concerned this electric mode can turn out to be too aggressive/surprising for the user - "return RET" is a common text to be entered, I'm not sure the user would always want it to be replaced. For example, when debugging I might insert return statements all over the place. Put differently, I would be more comfortable if there's a distinct mechanism to trigger the context-aware return, for example with a trigger key like when a snippet is inserted. --0000000000003611f805f4f7fb5f Content-Type: application/octet-stream; name="0001-Extend-go-ts-mode-with-support-for-pre-filling-retur.patch" Content-Disposition: attachment; filename="0001-Extend-go-ts-mode-with-support-for-pre-filling-retur.patch" Content-Transfer-Encoding: base64 Content-ID: <f_le9vhjq30> X-Attachment-Id: f_le9vhjq30 RnJvbSAzZWZhYTcxM2FjOWZkY2I0NTA3ZTk0NWMyZGI3NzFmN2JiM2ExYmU2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBFdmdlbmkgS29sZXYgPGV2Z2VueXN3QGdtYWlsLmNvbT4KRGF0 ZTogTW9uLCA2IEZlYiAyMDIzIDA5OjQ5OjUyICswMjAwClN1YmplY3Q6IFtQQVRDSF0gRXh0ZW5k IGdvLXRzLW1vZGUgd2l0aCBzdXBwb3J0IGZvciBwcmUtZmlsbGluZyByZXR1cm4KIHN0YXRlbWVu dHMKCkV4dGVuZCBnby10cy1tb2RlIHRvIGluc2VydCBjb250ZXh0LWF3YXJlIHJldHVybiBzdGF0 ZW1lbnQgZm9yIHRoZQpjdXJyZW50IGZ1bmN0aW9uLiBUaGUgcmV0dXJuIHN0YXRlbWVudCBpcyBw cmUtZmlsbGVkIHdpdGggdGhlIHplcm8KdmFsdWVzIG9mIHRoZSBmdW5jdGlvbidzIG91dHB1dCBw YXJhbWV0ZXJzLgoKRm9yIGV4YW1wbGUsIHRoaXMgcmV0dXJuIHN0YXRlbWVudCBpcyBhZGRlZCBi eSBFbWFjczoKYGBgCmZ1bmMgZigpIChib29sLCBpbnQsIG15U3RydWN0LCAqaW50LCBjaGFuIGJv b2wsIGVycm9yKSB7CiAgICByZXR1cm4gZmFsc2UsIDAsIG15U3RydWN0e30sIG5pbCwgbmlsLCBl cnIKfQpgYGAKCiogbGlzcC9wcm9nbW9kZXMvZ28tdHMtbW9kZS5lbCAoZ28tdHMtbW9kZS1lcnJv ci16ZXJvLXZhbHVlKTogTmV3CmRlZmN1c3RvbS4gKGdvLXRzLW1vZGUtaW5zZXJ0LXJldHVybiwg Z28tdHMtbW9kZS1yZXR1cm4sCmdvLXRzLW1vZGUtLWZ1bmN0aW9uLXJldHVybi10eXBlcywgZ28t dHMtbW9kZS0tZnVuY3Rpb24tYXQtcG9pbnQsCmdvLXRzLW1vZGUtLXR5cGVzLWZyb20tcGFyYW0t ZGVjbGFyYXRpb24sIGdvLXRzLW1vZGUtLXplcm8tdmFsdWUpIE5ldwpmdW5jdGlvbnMuCi0tLQog bGlzcC9wcm9nbW9kZXMvZ28tdHMtbW9kZS5lbCB8IDEwMyArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDEwMyBpbnNlcnRpb25zKCspCgpkaWZmIC0t Z2l0IGEvbGlzcC9wcm9nbW9kZXMvZ28tdHMtbW9kZS5lbCBiL2xpc3AvcHJvZ21vZGVzL2dvLXRz LW1vZGUuZWwKaW5kZXggMmEyNzgzZjQ1ZjYuLjBhMTYzNzUzZjI5IDEwMDY0NAotLS0gYS9saXNw L3Byb2dtb2Rlcy9nby10cy1tb2RlLmVsCisrKyBiL2xpc3AvcHJvZ21vZGVzL2dvLXRzLW1vZGUu ZWwKQEAgLTQ2LDYgKzQ2LDE1IEBAIGdvLXRzLW1vZGUtaW5kZW50LW9mZnNldAogICA6c2FmZSAn aW50ZWdlcnAKICAgOmdyb3VwICdnbykKIAorKGRlZmN1c3RvbSBnby10cy1tb2RlLWVycm9yLXpl cm8tdmFsdWUgICJlcnIiCisgICJUaGUgemVybyB2YWx1ZSBmb3IgdHlwZSBcImVycm9yXCIuCitU aGUgZGVmYXVsdCBpcyBcImVyclwiLCBhc3N1bWluZyB0aGVyZSdzIGEgdmFyaWFsYmUgbmFtZWQg XCJlcnJcIiBpbgordGhlIGN1cnJlbnQgc2NvcGUuIgorICA6dmVyc2lvbiAiMzAiCisgIDp0eXBl ICdzdHJpbmcKKyAgOm9wdGlvbnMgJygiZXJyIiwgImZtdC5FcnJvcmYoXCJmb3JtYXQ6ICV3XCIs IGVycikiLCAiZXJyb3JzLldyYXAoZXJyLCBcImZvcm1hdFwiKSIpCisgIDpncm91cCAnZ28pCisK IChkZWZ2YXIgZ28tdHMtbW9kZS0tc3ludGF4LXRhYmxlCiAgIChsZXQgKCh0YWJsZSAobWFrZS1z eW50YXgtdGFibGUpKSkKICAgICAobW9kaWZ5LXN5bnRheC1lbnRyeSA/KyAgICIuIiAgICAgIHRh YmxlKQpAQCAtMzI4LDYgKzMzNywxMDAgQEAgZ28tdHMtbW9kZS0tY29tbWVudC1vbi1wcmV2aW91 cy1saW5lLXAKICAgICAgKDw9ICh0cmVlc2l0LW5vZGUtc3RhcnQgbm9kZSkgcG9pbnQgKHRyZWVz aXQtbm9kZS1lbmQgbm9kZSkpCiAgICAgIChzdHJpbmctZXF1YWwgImNvbW1lbnQiICh0cmVlc2l0 LW5vZGUtdHlwZSBub2RlKSkpKSkKIAorKGRlZmluZS1taW5vci1tb2RlIGdvLXRzLWVsZWN0cmlj LXJldHVybi1tb2RlCisgICJNYWtlIGByZXR1cm4gUkVUJyBpbnNlcnQgYSByZXR1cm4gc3RhdGVt ZW50IHdpdGggemVybyB2YWx1ZXMuIgorICA6bGlnaHRlciBuaWwKKyAgKGlmIGdvLXRzLWVsZWN0 cmljLXJldHVybi1tb2RlCisgICAgICAoYWRkLWhvb2sgJ3Bvc3Qtc2VsZi1pbnNlcnQtaG9vayAj J2dvLXRzLW1vZGUtLW1heWJlLWluc2VydC1yZXR1cm4gbmlsIHQpCisgICAgKHJlbW92ZS1ob29r ICdwb3N0LXNlbGYtaW5zZXJ0LWhvb2sgIydnby10cy1tb2RlLS1tYXliZS1pbnNlcnQtcmV0dXJu IHQpKSkKKworKGRlZnVuIGdvLXRzLW1vZGUtLW1heWJlLWluc2VydC1yZXR1cm4gKCkKKyAgIklm IFJFVCBpcyBlbnRlcmVkIGFmdGVyIGByZXR1cm4nLCBhZGQgemVybyB2YWx1ZXMuIgorICAod2hl biAoYW5kIChlcXVhbCAodGhpcy1jb21tYW5kLWtleXMpIChrYmQgIlJFVCIpKQorICAgICAgICAg ICAgIChsb29raW5nLWJhY2sgKHJ4IHdvcmQtYm91bmRhcnkgInJldHVybiIgIlxuIiAoKiBzcGFj ZSkpIChwb3MtYm9sIDApKSkKKyAgICAoZGVsZXRlLXJlZ2lvbiAocG9pbnQpIChwb3MtZW9sIDAp KSA7OyBkZWxldGUgdGhlIGxpbmUgYWRkZWQgYnkgUkVUCisgICAgKGRlbGV0ZS1jaGFyICgtIChs ZW5ndGggInJldHVybiIpKSkKKyAgICAoaW5zZXJ0IChnby10cy1tb2RlLXJldHVybikpKSkKKwor KGRlZnVuIGdvLXRzLW1vZGUtcmV0dXJuKCkKKyAgIlJldHVybiBhIHJldHVybiBzdGF0ZW1lbnQg d2l0aCB6ZXJvIHZhbHVlcyBmb3IgZnVuY3Rpb24gYXQgcG9pbnQuCitJdCdzIGFuIGVycm9yIHRv IGNhbGwgdGhpcyBmdW5jdGlvbiBvdXRzaWRlIG9mIGEgZnVuY3Rpb24gYm9keS4iCisgIChpbnRl cmFjdGl2ZSkKKyAgKGxldCogKChmdW5jLW5vZGUgKGdvLXRzLW1vZGUtLWZ1bmN0aW9uLWF0LXBv aW50KSkKKyAgICAgICAgIChib2R5LW5vZGUgKHRyZWVzaXQtbm9kZS1jaGlsZC1ieS1maWVsZC1u YW1lIGZ1bmMtbm9kZSAiYm9keSIpKSkKKworICAgICh1bmxlc3MgKGFuZCBib2R5LW5vZGUgKDwg KHRyZWVzaXQtbm9kZS1zdGFydCBib2R5LW5vZGUpIChwb2ludCkgKHRyZWVzaXQtbm9kZS1lbmQg Ym9keS1ub2RlKSkpCisgICAgICAodXNlci1lcnJvciAiUG9pbnQgbXVzdCBiZSBpbnNpZGUgYSBH byBmdW5jdGlvbiBib2R5IikpCisKKyAgICAobGV0KiAoKHR5cGVzIChnby10cy1tb2RlLS1mdW5j dGlvbi1yZXR1cm4tdHlwZXMgZnVuYy1ub2RlKSkKKyAgICAgICAgICAgKHplcm8tdmFsdWVzICht YXBjYXIgJ2dvLXRzLW1vZGUtLXplcm8tdmFsdWUgdHlwZXMpKQorICAgICAgICAgICAocmV0dXJu LXN0YXRlbWVudCAoZm9ybWF0ICJyZXR1cm4gJXMiIChzdHJpbmctam9pbiB6ZXJvLXZhbHVlcyAi LCAiKSkpKQorICAgICAgKHN0cmluZy10cmltLXJpZ2h0IHJldHVybi1zdGF0ZW1lbnQpKSkpCisK KyhkZWZ1biBnby10cy1tb2RlLS1mdW5jdGlvbi1hdC1wb2ludCAoKQorICAiUmV0dXJuIHRoZSB0 cmVlc2l0IGZ1bmN0aW9uIG5vZGUgYXQgcG9pbnQuCitGdW5jdGlvbiwgbWV0aG9kcyBhbmQgY2xv c3VyZXMgKGFub255bW91cyBmdW5jdGlvbnMpIGFyZSByZWNvZ25pemVkLgorSWYgcG9pbnQgaXMg bm90IGluIGEgcmVjb2duaXplZCBmdW5jdGlvbiwgbmlsIGlzIHJldHVybmVkLiIKKyAgKGludGVy YWN0aXZlKQorICAodHJlZXNpdC1wYXJlbnQtdW50aWwKKyAgICh0cmVlc2l0LW5vZGUtYXQgKHBv aW50KSkKKyAgIChsYW1iZGEgKHgpCisgICAgIChtZW1iZXIgKHRyZWVzaXQtbm9kZS10eXBlIHgp CisgICAgICAgICAgICAgJygiZnVuY19saXRlcmFsIiAiZnVuY3Rpb25fZGVjbGFyYXRpb24iICJt ZXRob2RfZGVjbGFyYXRpb24iKSkpIHQpKQorCisoZGVmdW4gZ28tdHMtbW9kZS0tZnVuY3Rpb24t cmV0dXJuLXR5cGVzIChmdW5jLW5vZGUpCisgICJSZXR1cm4gdGhlIHR5cGVzIG9mIHRoZSBvdXRw dXQgdmFyaWFibGVzIG9mIEZVTkMtTk9ERS4KK1RoZSByZXN1bHQgaXMgYSBsaXN0IHdoaWNoIGNv dWxkIGNvbnRhaW4gYSBzaW5nbGUgZWxlbWVudCAodGhlIEdvCitmdW5jdGlvbiBoYXMgb25lIHJl dHVybiBhcmd1bWVudCksIG11bHRpcGxlIGVsZW1lbnRzIChtdWx0aXBsZSByZXR1cm4KK2FyZ3Vt ZW50cyksIG9yIG5vIGVsZW1lbnRzIChubyByZXR1cm4gYXJndW1lbnRzKS4iCisgIChsZXQgKChy ZXN1bHQtbm9kZSAodHJlZXNpdC1ub2RlLWNoaWxkLWJ5LWZpZWxkLW5hbWUgZnVuYy1ub2RlICJy ZXN1bHQiKSkpCisgICAgKHBjYXNlICh0cmVlc2l0LW5vZGUtdHlwZSByZXN1bHQtbm9kZSkKKyAg ICAgICgicGFyYW1ldGVyX2xpc3QiIDs7IG11bHRpcGxlIHJldHVybiB2YWx1ZXMKKyAgICAgICAo bGV0ICgodHlwZXMtbmVzdGVkICh0cmVlc2l0LWluZHVjZS1zcGFyc2UtdHJlZSByZXN1bHQtbm9k ZSAicGFyYW1ldGVyX2RlY2xhcmF0aW9uIiAjJ2dvLXRzLW1vZGUtLXR5cGVzLWZyb20tcGFyYW0t ZGVjbGFyYXRpb24pKSkKKyAgICAgICAgIChhcHBseSAjJ2FwcGVuZCAobWFwY2FyICdjYXIgKGNk ciB0eXBlcy1uZXN0ZWQpKSkpKQorICAgICAgKChwcmVkIG51bGwpIDs7IG5vIHJldHVybiB2YWx1 ZQorICAgICAgIG5pbCkKKyAgICAgIChfIDs7IHNpbmdsZSByZXR1cm4gdmFsdWUKKyAgICAgICAo bGlzdCAodHJlZXNpdC1ub2RlLXRleHQgcmVzdWx0LW5vZGUgdCkpKSkpKQorCisoZGVmdW4gZ28t dHMtbW9kZS0tdHlwZXMtZnJvbS1wYXJhbS1kZWNsYXJhdGlvbiAobm9kZSkKKyAiRXh0cmFjdCB0 aGUgR28gdHlwZShzKSBmcm9tIE5PREUuICBJdCBtdXN0IGhhdmUgdHlwZSBwYXJhbWV0ZXJfZGVj bGFyYXRpb24uCisKK0EgcGFyYW1ldGVyX2RlY2xhcmF0aW9uIG5vZGUgY2FuIGNvbnRhaW4gc2lu Z2xlIHZhbHVlIGAoaW50KScsIG5hbWVkCitzaW5nbGUgdmFsdWUgYChzdW0gaW50KScsIG11bHRp cGxlcyB2YWx1ZXMgYChpbnQsIGludCknLCBvciBtdWx0aXBsZQorbmFtZWQgdmFsdWVzIGAoeCwg eSBpbnQpJy4KKworQWxsIHRoZSBhYm92ZSBjYXNlcyBhcmUgcmVjb2duaXplZC4gIE9ubHkgdGhl IHR5cGVzIGFyZSByZXR1cm5lZCwgZm9yCitleGFtcGxlLCB3aXRoIHBhcmFtZXRlcl9kZWNsYXJh dGlvbiBgKHgsIHkgaW50KScsIHRoZSByZXN1bHQgaXMKK1woXCJpbnRcIiwgXCJpbnRcIikuIgor ICAobGV0ICgodHlwZSAodHJlZXNpdC1ub2RlLWNoaWxkLWJ5LWZpZWxkLW5hbWUgbm9kZSAidHlw ZSIpKQorICAgICAgICAoY291bnQgKGxlbmd0aCAodHJlZXNpdC1xdWVyeS1jYXB0dXJlIG5vZGUg IihwYXJhbWV0ZXJfZGVjbGFyYXRpb24gbmFtZTooXykgQG5hbWUpIiBuaWwgbmlsIHQpKSkpCisg ICAgKG1ha2UtbGlzdCAoaWYgKHplcm9wIGNvdW50KSAxIGNvdW50KSAodHJlZXNpdC1ub2RlLXRl eHQgdHlwZSB0KSkpKQorCisoZGVmdW4gZ28tdHMtbW9kZS0temVyby12YWx1ZSAoZ28tdHlwZSkK KyAgIlJldHVybiB0aGUgR28gemVybyB2YWx1ZSBmb3IgR08tVFlQRS4KK0ZvciB0eXBlIFwiZXJy b3JcIiwgdGhlIHplcm8gdmFsdWUgaXMgZGV0ZXJtaW5lZCBieSB2YXJpYWJsZQorYGdvLXRzLW1v ZGUtZXJyb3ItemVyby12YWx1ZScuCisKK1RoaXMgZnVuY3Rpb24gYXNzdW1lcyBhcmJpdHJhcnkg dHlwZXMgYXJlIEdvIHN0cnVjdHMsIGZvciBleGFtcGxlIGZvcgorR08tVFlQRSBcInBlcnNvblwi LCB0aGUgcmV0dW4gdmFsdWUgaXMgXCJwZXJzb257fVwiLiIKKyAgKHBjYXNlIGdvLXR5cGUKKyAg ICAoKG9yICJpbnQiICAiaW50OCIgICJpbnQxNiIgICJpbnQzMiIgICJpbnQ2NCIpICIwIikKKyAg ICAoKG9yICJ1aW50IiAidWludDgiICJ1aW50MTYiICJ1aW50MzIiICJ1aW50NjQiKSAiMCIpCisg ICAgKCJib29sIiAiZmFsc2UiKQorICAgICgic3RyaW5nIiAiXCJcIiIpCisgICAgKChvciAidWlu dHB0ciIgImJ5dGUiICJydW5lIikgIjAiKQorICAgICgob3IgImZsb2F0MzIiICJmbG9hdDY0Iikg IjAuMCIpCisgICAgKChvciAiY29tcGxleDY0IiAiY29tcGxleDEyOCIpICJjb21wbGV4KDAsIDAp IikKKyAgICAoKHByZWQgKHN0cmluZy1wcmVmaXgtcCAibWFwIikpICJuaWwiKQorICAgICgocHJl ZCAoc3RyaW5nLXByZWZpeC1wICIqIikpICJuaWwiKQorICAgICgocHJlZCAoc3RyaW5nLXByZWZp eC1wICJbXSIpKSAibmlsIikKKyAgICAoKHByZWQgKHN0cmluZy1wcmVmaXgtcCAiY2hhbiIpKSAi bmlsIikKKyAgICAoKHByZWQgKHN0cmluZy1wcmVmaXgtcCAiZnVuYyIpKSAibmlsIikKKyAgICAo ImVycm9yIiBnby10cy1tb2RlLWVycm9yLXplcm8tdmFsdWUpCisgICAgKChyeCBib2wgKDErIChv ciBhbHBoYW51bWVyaWMgIl8iICIuIikpIGVvbCkgKGNvbmNhdCBnby10eXBlICJ7fSIpKQorICAg IChfICh1c2VyLWVycm9yICJVbmtub3duIEdvIHR5cGUgXCIlc1wiIiBnby10eXBlKSkpKQorCiA7 OyBnby5tb2Qgc3VwcG9ydC4KIAogKGRlZnZhciBnby1tb2QtdHMtbW9kZS0tc3ludGF4LXRhYmxl Ci0tIAoyLjM5LjEKCg== --0000000000003611f805f4f7fb5f--
bug-gnu-emacs@HIDDEN
:bug#61368
; Package emacs
.
Full text available.Received: (at 61368) by debbugs.gnu.org; 9 Feb 2023 13:40:35 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Feb 09 08:40:35 2023 Received: from localhost ([127.0.0.1]:57938 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1pQ7AA-0004Zx-S0 for submit <at> debbugs.gnu.org; Thu, 09 Feb 2023 08:40:35 -0500 Received: from eggs.gnu.org ([209.51.188.92]:39630) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1pQ7A8-0004Zb-KA for 61368 <at> debbugs.gnu.org; Thu, 09 Feb 2023 08:40:33 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <eliz@HIDDEN>) id 1pQ7A0-0003d5-6W; Thu, 09 Feb 2023 08:40:26 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=wPbpxefi8evV2B+m6L+EqIsMK9GlyUb9s770kYvV+0g=; b=pLeaweVTTLdt bo2tQLugi6yXGHFfB89VKtjqVXHTuMAuSlySygNttYJa3Clu/hDuOHQmWcLQ5RAELEaDs81E/bbPU 5edQWeWtQcDkYsXSDV5vCbu/zAkb1d9wuKkyaeyxEv8O3FOcon4gM1k//7ohMD0olHHAtLanBbjMZ x/vuRrNDXSr3TZz1gk5v82+rX4sDQRXAHBL3Fp2lpufB1cH8pPPM5ctT7y2aZLOl+MGFO0zAjZ9di n9/zuA2nky3rxMqtp29J3kU/TMM64cLaiLXjIGodAclZGfizsN4oBqynOMPB/p8OY4Qc1foTQksCI d0l9TUPDHVVWbaHegcoK2w==; Received: from [87.69.77.57] (helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <eliz@HIDDEN>) id 1pQ79h-0003XN-HF; Thu, 09 Feb 2023 08:40:23 -0500 Date: Thu, 09 Feb 2023 15:39:55 +0200 Message-Id: <83357flzys.fsf@HIDDEN> From: Eli Zaretskii <eliz@HIDDEN> To: Evgeni Kolev <evgenysw@HIDDEN> In-Reply-To: <CAMCrgaUa26s2BM8EskKt5FTEyFqyioqx13abOFSMjcyShgG=Pg@HIDDEN> (message from Evgeni Kolev on Thu, 9 Feb 2023 13:47:01 +0200) Subject: Re: bug#61368: [PATCH] Extend go-ts-mode with support for pre-filling return statements References: <CAMCrgaUgMx9+0Q8f_cezZ0TW_-u=mdeHf=TL=qw9wbhiS-nJ9w@HIDDEN> <83edr0nmq6.fsf@HIDDEN> <CAMCrgaUa26s2BM8EskKt5FTEyFqyioqx13abOFSMjcyShgG=Pg@HIDDEN> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 61368 Cc: dev@HIDDEN, theo@HIDDEN, 61368 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -3.3 (---) > From: Evgeni Kolev <evgenysw@HIDDEN> > Date: Thu, 9 Feb 2023 13:47:01 +0200 > Cc: 61368 <at> debbugs.gnu.org, dev@HIDDEN, theo@HIDDEN > > > Instead of a command bound to a special key sequences, would it > > perhaps make more sense to add some kind of "electric" behavior to > > "normal" keys? Like perhaps typing RET after inserting "return" would > > add the "context-aware return statement"? Then the user could turn on > > the electric behavior with some minor mode, and get this behavior, > > while avoiding the need to dedicate a key sequence. > > > > WDYT? > > Makes sense. I am familiar with electric-pair-mode. I see that it adds > a hook in post-self-insert-hook. Is your suggestion to do something > like this: > - add hook in post-self-insert-hook > - in the hook check if RET is typed after an "return" > - if yes, replace the "return" with the "context-aware return > statement", possibly using (yas-expand-snippet) Yes, something like that. See electric.el for more examples. > I'm wondering what customization options would make sense for users - > changing the electric trigger from "return" RET to "ret" RET for > example. > > Is there another major mode which can be used as an example for such > electric behavior? Electric modes are usually minor modes that let major modes customize them by setting variables. Again, I think you will find examples in electric.el.
bug-gnu-emacs@HIDDEN
:bug#61368
; Package emacs
.
Full text available.Received: (at 61368) by debbugs.gnu.org; 9 Feb 2023 11:47:36 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Feb 09 06:47:36 2023 Received: from localhost ([127.0.0.1]:57728 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1pQ5Op-0005EE-Js for submit <at> debbugs.gnu.org; Thu, 09 Feb 2023 06:47:36 -0500 Received: from mail-qt1-f174.google.com ([209.85.160.174]:39639) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <evgenysw@HIDDEN>) id 1pQ5On-0005DX-Ar for 61368 <at> debbugs.gnu.org; Thu, 09 Feb 2023 06:47:33 -0500 Received: by mail-qt1-f174.google.com with SMTP id g18so1503590qtb.6 for <61368 <at> debbugs.gnu.org>; Thu, 09 Feb 2023 03:47:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=xabf3RZYrrJ64Lb5TAyVS9s/yGdReZQfPJmmo2NHjSU=; b=i7X7DOfV+1x3t0pLmd7+du8tPv0Y+56iTr35zuo+2ZALQemzuo6JWotM9xrEhnITpC qBDImXbtNm4ZcYQof8GXa2s1NM/k/Wz9QzsAx1iOK8PhKmA3bvY/U/cDaHkytXgzs38F AD7SFF43wya9vkVzSAfEc/qKrpkRzW194SXVEe+I/qAVZ6z/98l8PKAJJRHI6V6wjc1G DPqd96vH6XkbwbItKpARI5SvF1nhZK7JJgINvsYExRU+WD4TZ4NV9F97/YEyh6LMqim+ 3Gelg99I1iy3/K6qFrW0Tjg0WruVjtDPtVUJgJtZNZ7CG43y706qGvJFN9BhRMk2h7rs w3dg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=xabf3RZYrrJ64Lb5TAyVS9s/yGdReZQfPJmmo2NHjSU=; b=lOrgZ7px9yzpg0kxTeMCXf5Kq7/iMFgiUtR/NMv/q6Y5HcWvudv+RSybONjECVXDv/ 2dVw/ZaXR6jxk4y0EV20NIDWqvpCU1w6b4wfmzMHDGSCYzG4Phy9IVUPUBL1Hh8EdmCR KE/grqbjoIueepOV1p0m5ybAp96DlbD7MHAqVQmt+3Kmac8RAuva+tPars/PAUI1QqZt HOWVs8juevgYcHXMFxscgq72lanKHR/RCuY0k338jDrr9DcTxORjaqctOfWtmwwQmTum y/EwHVdHO/sURLr7utCSXgLneP1lBmu/YAQek98ASnE46Q620Xpr3mwgKLs5GfTDZY7S RCOw== X-Gm-Message-State: AO0yUKVvyEBB5AkIS6NCL1UfzIfNnHfApdJ61Y4jGbUaD24175Z7zYU1 RFiD27BzWDAEyUPiFZnZn6sQCZpYzjHoYFRaCOE= X-Google-Smtp-Source: AK7set+BQeSDvVgVlPieSrYKk+JqbwoDrcGq4LOivWypT44Sosa5SkVDbQ4jvV9GssbjL+kAwDhMYJKYY3RW5CbNH5g= X-Received: by 2002:a05:622a:1007:b0:3ac:c2b8:13 with SMTP id d7-20020a05622a100700b003acc2b80013mr1868008qte.332.1675943247646; Thu, 09 Feb 2023 03:47:27 -0800 (PST) MIME-Version: 1.0 References: <CAMCrgaUgMx9+0Q8f_cezZ0TW_-u=mdeHf=TL=qw9wbhiS-nJ9w@HIDDEN> <83edr0nmq6.fsf@HIDDEN> In-Reply-To: <83edr0nmq6.fsf@HIDDEN> From: Evgeni Kolev <evgenysw@HIDDEN> Date: Thu, 9 Feb 2023 13:47:01 +0200 Message-ID: <CAMCrgaUa26s2BM8EskKt5FTEyFqyioqx13abOFSMjcyShgG=Pg@HIDDEN> Subject: Re: bug#61368: [PATCH] Extend go-ts-mode with support for pre-filling return statements To: Eli Zaretskii <eliz@HIDDEN> Content-Type: text/plain; charset="UTF-8" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 61368 Cc: dev@HIDDEN, theo@HIDDEN, 61368 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) On Wed, Feb 8, 2023 at 9:20 PM Theodor Thornhill <theo@HIDDEN> wrote: > > Evgeni Kolev <evgenysw@HIDDEN> writes: > > > > > I'm open to suggestions about how to best expose this functionality to > > the user. I think a snippet makes the most sense, but there's no > > standard way for major modes to expose snippets as far as I'm aware. > > It's possible to tweak C-c C-r to call (yas-expand-snippet) if > > available, otherwise call (insert). In general, I don't feel strong > > about the C-c C-r key binding, but I didn't have a better idea. > > > > How about using tempo or skeleton as fallbacks when yasnippet isn't > installed? I've never used either of these packages. Is there a consensus which one is preferred for major modes to use? > > Personally I think this should be a contrib to gopls as a code action so > that others can benefit from it. Is upstreaming it to gopls too hard? > Great suggestion! I did a quick research and this seems to already be implemented in gopls here: https://github.com/golang/tools/blob/master/gopls/internal/lsp/source/completion/statements.go#L179 To use it you have to enable "usePlaceholders", reference: https://github.com/golang/tools/blob/master/gopls/doc/settings.md Do you think it makes sense go-ts-mode to also have its own implementation? I think it does - similar to how both gopls (eglot) and tree sitter provide Imenu candidates. I personally use tree sitter's Imenu (setq eglot-stay-out-of '(imenu)) because I find it advantageous to avoid the RPC call to an external process. Also having a tree sitter implementation is more flexible. For example, I'm planning to have multiple yasnippet snippets for different scenarios (wrap the error, don't wrap, return a new error, etc.). The gopls implementation is ridgid - it only works if there's an "err" variable in scope, and the trigger is one of these three "if e", "if er" and "if err". On Wed, Feb 8, 2023 at 6:30 PM Eli Zaretskii <eliz@HIDDEN> wrote: > > The command go-ts-mode-insert-return is experimentally bound to a key > > C-c C-r ("r" as return statement). It's a user error to run C-c C-r > > outside of a function body. > > Instead of a command bound to a special key sequences, would it > perhaps make more sense to add some kind of "electric" behavior to > "normal" keys? Like perhaps typing RET after inserting "return" would > add the "context-aware return statement"? Then the user could turn on > the electric behavior with some minor mode, and get this behavior, > while avoiding the need to dedicate a key sequence. > > WDYT? Makes sense. I am familiar with electric-pair-mode. I see that it adds a hook in post-self-insert-hook. Is your suggestion to do something like this: - add hook in post-self-insert-hook - in the hook check if RET is typed after an "return" - if yes, replace the "return" with the "context-aware return statement", possibly using (yas-expand-snippet) I'm wondering what customization options would make sense for users - changing the electric trigger from "return" RET to "ret" RET for example. Is there another major mode which can be used as an example for such electric behavior?
bug-gnu-emacs@HIDDEN
:bug#61368
; Package emacs
.
Full text available.Received: (at submit) by debbugs.gnu.org; 8 Feb 2023 19:20:38 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Wed Feb 08 14:20:38 2023 Received: from localhost ([127.0.0.1]:56701 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1pPpzi-0001A1-Bv for submit <at> debbugs.gnu.org; Wed, 08 Feb 2023 14:20:38 -0500 Received: from lists.gnu.org ([209.51.188.17]:48136) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <theo@HIDDEN>) id 1pPpze-00019q-Ak for submit <at> debbugs.gnu.org; Wed, 08 Feb 2023 14:20:36 -0500 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 <theo@HIDDEN>) id 1pPpze-0003Ve-4M for bug-gnu-emacs@HIDDEN; Wed, 08 Feb 2023 14:20:34 -0500 Received: from out-165.mta1.migadu.com ([2001:41d0:203:375::a5]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <theo@HIDDEN>) id 1pPpza-0004yW-Hm for bug-gnu-emacs@HIDDEN; Wed, 08 Feb 2023 14:20:33 -0500 X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no; s=key1; t=1675884028; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=5Xnl/zb6YScx0+0e9VRnmchqHJz5WXBIyKXkUrMgR2c=; b=PgQsIUoy+zSeX5IXGr4T5Tq3Uokj8w2x85qsN/3KmKukkFhxcP3Nu6MH8u59EAEPFoqqUp RsOVckDwYxw0d2UuffvQrZnMGlFhicJDj3wlHNYY9gipyRz7MvQgCaDEvKUSAuvVxhRghz iHfaY04I9Eq4w9GO3fCifXnobpypM6nBxui77US4Mxd0ItQ++CcbC+LAbghu65UYhrojMS gh0Ci8dHmdcm67Ak8RnUS4Ug015H0UGLKBF19g6urWS3JfkpAyfWcbCI9d59SUXQfdssDb KXb5KLIeD6BhK7Ml/ZDMNFDzLeGAL9iqlAmYYejEoz6cm9RYNit/TH4M4tzBYg== From: Theodor Thornhill <theo@HIDDEN> To: Evgeni Kolev <evgenysw@HIDDEN>, bug-gnu-emacs@HIDDEN Subject: Re: [PATCH] Extend go-ts-mode with support for pre-filling return statements In-Reply-To: <CAMCrgaUgMx9+0Q8f_cezZ0TW_-u=mdeHf=TL=qw9wbhiS-nJ9w@HIDDEN> References: <CAMCrgaUgMx9+0Q8f_cezZ0TW_-u=mdeHf=TL=qw9wbhiS-nJ9w@HIDDEN> Date: Wed, 08 Feb 2023 20:20:27 +0100 Message-ID: <87o7q46k1w.fsf@HIDDEN> MIME-Version: 1.0 Content-Type: text/plain X-Migadu-Flow: FLOW_OUT Received-SPF: pass client-ip=2001:41d0:203:375::a5; envelope-from=theo@HIDDEN; helo=out-165.mta1.migadu.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-Spam-Score: -1.4 (-) X-Debbugs-Envelope-To: submit Cc: Randy Taylor <dev@HIDDEN> X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -2.4 (--) Evgeni Kolev <evgenysw@HIDDEN> writes: > [CC Randy, author of go-ts-mode, Theo, who asked to keep the patches coming :)] > :-) > This is a patch which adds support to go-ts-mode to insert > context-aware return statements for the current function. The return > statements are pre-filled with the Go zero values of the output > parameters. > > For example, all these return statements are inserted by M-x > go-ts-mode-insert-return: > > ``` > func f() (x, y, z int) { > return 0, 0, 0 > } > > func exotic() (bool, int, myStruct, *int, chan bool, error) { > return false, 0, myStruct{}, nil, nil, err > } > > func closure(numbers []int) { > sort.Slice(numbers, func(i, j int) bool { > return false > }) > } > ``` Cool! > > The command go-ts-mode-insert-return is experimentally bound to a key > C-c C-r ("r" as return statement). It's a user error to run C-c C-r > outside of a function body. > > Customization: when the output params contain "error" the pre-filled > text is "err". A customization variable is added to allow the user to > pick a different value, for example they might pick `fmt.Errorf("...: > %w", err)` which will result in error wrapping: > ``` > func f() (int, error) { > return 0, fmt.Errorf("...: %w", err) > } > ``` > > Personally, I'll use yasnippet instead of C-c C-r. Something like this: > ``` > # -*- mode: snippet -*- > # name: ret > # key: ret > # type: command > # -- > > (let ((go-ts-mode-error-zero-value "${1:fmt.Errorf(\"${2:format}: > %w\", err)}")) > (yas-expand-snippet (go-ts-mode-return))) > ``` > > I'm open to suggestions about how to best expose this functionality to > the user. I think a snippet makes the most sense, but there's no > standard way for major modes to expose snippets as far as I'm aware. > It's possible to tweak C-c C-r to call (yas-expand-snippet) if > available, otherwise call (insert). In general, I don't feel strong > about the C-c C-r key binding, but I didn't have a better idea. > How about using tempo or skeleton as fallbacks when yasnippet isn't installed? > Known bug: this example does not work, fails with error "Unknown Go > type "[int]int"": > ``` > func notOk() (int, map[int]int) { > } > ``` > The root cause is an issue with the tree-sitter-go parser. The bug has > been reported here > https://github.com/tree-sitter/tree-sitter-go/issues/107 > > Known limitation: unfamiliar types are assumed to be structs. This > assumption does not work for aliased types. For example: > ``` > type MyInt = int > > func alias() MyInt { > return MyInt{} > } > ``` > Above the correct return statement is "return MyInt(0)". My assumption > is that type aliases of primitive types are rare in Go codebases. In > these rare cases, the user is expected to replace "MyInt{}" with > "MyInt(0)", or not use C-c C-r at all. > > Inspired by: this emacs conf talk "08:21 Intelligent templates" > https://emacsconf.org/2022/talks/treesitter/ > > Feedback is more than welcome! In particular: > - how to best expose the functionality - key binding, snippet (how > exactly?), something else? > Personally I think this should be a contrib to gopls as a code action so that others can benefit from it. Is upstreaming it to gopls too hard? Theo
bug-gnu-emacs@HIDDEN
:bug#61368
; Package emacs
.
Full text available.Received: (at 61368) by debbugs.gnu.org; 8 Feb 2023 16:30:34 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Wed Feb 08 11:30:33 2023 Received: from localhost ([127.0.0.1]:56481 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1pPnL7-00053h-Ip for submit <at> debbugs.gnu.org; Wed, 08 Feb 2023 11:30:33 -0500 Received: from eggs.gnu.org ([209.51.188.92]:37030) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1pPnL3-00053O-Nn for 61368 <at> debbugs.gnu.org; Wed, 08 Feb 2023 11:30:32 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <eliz@HIDDEN>) id 1pPnKx-0001Tl-OP; Wed, 08 Feb 2023 11:30:23 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=1fIsDX8gvJyxcR8Pdhg95blb4yEHM0Geu7LqdkYiyD8=; b=ppni7rf5ADHP GVdizalj0Baaq8SoKOryD/kjnEOp9Yzd/zFN3siwPp4yHZgcpJVnxK3sWv58moyJ0C3cXDOt+8YwT 4ayoIU3KcmVfD11j4VeuF8J9E2g+1WkcqUKwOxt1YyFM7RB6Ey51ktNMdvjMV3PgNvbdv9GFY0Afx kk4pKtJit0rlB3QtmQGBI3Noqj2f4SRX0ozD9awjwCQEbhlWcxOSNcVBkzZz1fuKKw0my82OvN4/2 eXjIfbcbisyP1g96zw4zYd3HkXc3+dTEf/9Mjw1Fd+dPTRteM9iCrLCiyuUdmXswJbkMuGPkat/C5 qHq8PgaiCOsTuJM/2XBRCg==; Received: from [87.69.77.57] (helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <eliz@HIDDEN>) id 1pPnKx-0007fX-7y; Wed, 08 Feb 2023 11:30:23 -0500 Date: Wed, 08 Feb 2023 18:30:41 +0200 Message-Id: <83edr0nmq6.fsf@HIDDEN> From: Eli Zaretskii <eliz@HIDDEN> To: Evgeni Kolev <evgenysw@HIDDEN> In-Reply-To: <CAMCrgaUgMx9+0Q8f_cezZ0TW_-u=mdeHf=TL=qw9wbhiS-nJ9w@HIDDEN> (message from Evgeni Kolev on Wed, 8 Feb 2023 17:27:58 +0200) Subject: Re: bug#61368: [PATCH] Extend go-ts-mode with support for pre-filling return statements References: <CAMCrgaUgMx9+0Q8f_cezZ0TW_-u=mdeHf=TL=qw9wbhiS-nJ9w@HIDDEN> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 61368 Cc: dev@HIDDEN, theo@HIDDEN, 61368 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -3.3 (---) > Cc: Randy Taylor <dev@HIDDEN>, Theodor Thornhill <theo@HIDDEN> > From: Evgeni Kolev <evgenysw@HIDDEN> > Date: Wed, 8 Feb 2023 17:27:58 +0200 > > This is a patch which adds support to go-ts-mode to insert > context-aware return statements for the current function. The return > statements are pre-filled with the Go zero values of the output > parameters. > > For example, all these return statements are inserted by M-x > go-ts-mode-insert-return: > > ``` > func f() (x, y, z int) { > return 0, 0, 0 > } > > func exotic() (bool, int, myStruct, *int, chan bool, error) { > return false, 0, myStruct{}, nil, nil, err > } > > func closure(numbers []int) { > sort.Slice(numbers, func(i, j int) bool { > return false > }) > } > ``` > > The command go-ts-mode-insert-return is experimentally bound to a key > C-c C-r ("r" as return statement). It's a user error to run C-c C-r > outside of a function body. Instead of a command bound to a special key sequences, would it perhaps make more sense to add some kind of "electric" behavior to "normal" keys? Like perhaps typing RET after inserting "return" would add the "context-aware return statement"? Then the user could turn on the electric behavior with some minor mode, and get this behavior, while avoiding the need to dedicate a key sequence. WDYT?
bug-gnu-emacs@HIDDEN
:bug#61368
; Package emacs
.
Full text available.Received: (at submit) by debbugs.gnu.org; 8 Feb 2023 15:28:39 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Wed Feb 08 10:28:39 2023 Received: from localhost ([127.0.0.1]:56344 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1pPmNC-0003Cg-JC for submit <at> debbugs.gnu.org; Wed, 08 Feb 2023 10:28:38 -0500 Received: from lists.gnu.org ([209.51.188.17]:39906) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <evgenysw@HIDDEN>) id 1pPmN9-0003CX-K2 for submit <at> debbugs.gnu.org; Wed, 08 Feb 2023 10:28:36 -0500 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 <evgenysw@HIDDEN>) id 1pPmN4-0000FZ-3V for bug-gnu-emacs@HIDDEN; Wed, 08 Feb 2023 10:28:33 -0500 Received: from mail-qt1-x829.google.com ([2607:f8b0:4864:20::829]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <evgenysw@HIDDEN>) id 1pPmN1-0004GK-Ea for bug-gnu-emacs@HIDDEN; Wed, 08 Feb 2023 10:28:29 -0500 Received: by mail-qt1-x829.google.com with SMTP id q13so2706423qtx.2 for <bug-gnu-emacs@HIDDEN>; Wed, 08 Feb 2023 07:28:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=znGEijb3n5b8BZkPQMvx6xxjW917Px/eqPIvdWTyIkI=; b=UPbe/+c9vihICLEGVko/teBzjWl5s9XJKKjUb7C80R0X+ntggbYCharNMmIr8+I34J C6zzQYIprIlF1emmcRzwsha77WXw84lteyfAQzx+ozDWJfzIUhzA3S88HCEVZF+WOhLd 8H3bk7mcvb4Wu6k5ydD9xcydp+TIjBGtCEmAoNc85DuyXWvPW8Oq6HLxmE9d41+ZDzOr iZdEP8BA3d2r9t8GP8B0JAGg3ybR2qP914zW3E9U2cwZcv0bDOxcsBu5+ZTsvmtt+flT CiQNv1xcEvq4XsB2n6V7iPy56h62YReW+OJDTwlHKa1oAU4DAeLEPl+0mv0Ibs8GhniF O4PA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=znGEijb3n5b8BZkPQMvx6xxjW917Px/eqPIvdWTyIkI=; b=ZffZp/B4ZSM9oSDWVPl1LK3mNpsiGguLQdB92qFRH4t3bRQBMAAKMKIy6sCPSD+1hk GLUf/qt8s8wJg8TKE4wi3TmEcsgKkCMGOW5a+GHeBmzieV12jrdEgscbbjpm3kv1wdJu BadF4m5+s/OuM0qZ8AlnUEmowjd2Rg3VZPIsAnqFUYt/3oY/OvG9x1gugIg+wwGBCEGH bBFwE1GVFr5Acs3vexTzAA9eLzpvTzRL/x/MifKhK98cLY2ijWyqB9yqaFAyR8hiaeyk 8IDKwz8w15/0oYw4jisSOLrj87pscWZYAYZ4bvdJRGb1gYKJXuyEEdvpVgHtLcs0MBRb GEPA== X-Gm-Message-State: AO0yUKU+vXKYKgYXcZGaqpoAWfgllEFSAeqUncEcfp7TYfrHFgH8gCyg PrtZIRq4B2BBi6Qr+6Apd8ibdaNYYuFy81Gp90VYg8JB0n5uBw== X-Google-Smtp-Source: AK7set8Q5ZZuxREwxjnzGdWIvHyOSqkmmgykNibVSOLXVK3EfKi6zdMrzacUQhq4XHD3RXvd2hB6cFZ8CCCwaE3p3R4= X-Received: by 2002:a05:622a:b:b0:3b9:bd60:2679 with SMTP id x11-20020a05622a000b00b003b9bd602679mr1589425qtw.381.1675870104544; Wed, 08 Feb 2023 07:28:24 -0800 (PST) MIME-Version: 1.0 From: Evgeni Kolev <evgenysw@HIDDEN> Date: Wed, 8 Feb 2023 17:27:58 +0200 Message-ID: <CAMCrgaUgMx9+0Q8f_cezZ0TW_-u=mdeHf=TL=qw9wbhiS-nJ9w@HIDDEN> Subject: [PATCH] Extend go-ts-mode with support for pre-filling return statements To: bug-gnu-emacs@HIDDEN Content-Type: multipart/mixed; boundary="00000000000045bbbd05f431ead0" Received-SPF: pass client-ip=2607:f8b0:4864:20::829; envelope-from=evgenysw@HIDDEN; helo=mail-qt1-x829.google.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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Score: -1.3 (-) X-Debbugs-Envelope-To: submit Cc: Randy Taylor <dev@HIDDEN>, Theodor Thornhill <theo@HIDDEN> X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -2.3 (--) --00000000000045bbbd05f431ead0 Content-Type: text/plain; charset="UTF-8" [CC Randy, author of go-ts-mode, Theo, who asked to keep the patches coming :)] This is a patch which adds support to go-ts-mode to insert context-aware return statements for the current function. The return statements are pre-filled with the Go zero values of the output parameters. For example, all these return statements are inserted by M-x go-ts-mode-insert-return: ``` func f() (x, y, z int) { return 0, 0, 0 } func exotic() (bool, int, myStruct, *int, chan bool, error) { return false, 0, myStruct{}, nil, nil, err } func closure(numbers []int) { sort.Slice(numbers, func(i, j int) bool { return false }) } ``` The command go-ts-mode-insert-return is experimentally bound to a key C-c C-r ("r" as return statement). It's a user error to run C-c C-r outside of a function body. Customization: when the output params contain "error" the pre-filled text is "err". A customization variable is added to allow the user to pick a different value, for example they might pick `fmt.Errorf("...: %w", err)` which will result in error wrapping: ``` func f() (int, error) { return 0, fmt.Errorf("...: %w", err) } ``` Personally, I'll use yasnippet instead of C-c C-r. Something like this: ``` # -*- mode: snippet -*- # name: ret # key: ret # type: command # -- (let ((go-ts-mode-error-zero-value "${1:fmt.Errorf(\"${2:format}: %w\", err)}")) (yas-expand-snippet (go-ts-mode-return))) ``` I'm open to suggestions about how to best expose this functionality to the user. I think a snippet makes the most sense, but there's no standard way for major modes to expose snippets as far as I'm aware. It's possible to tweak C-c C-r to call (yas-expand-snippet) if available, otherwise call (insert). In general, I don't feel strong about the C-c C-r key binding, but I didn't have a better idea. Known bug: this example does not work, fails with error "Unknown Go type "[int]int"": ``` func notOk() (int, map[int]int) { } ``` The root cause is an issue with the tree-sitter-go parser. The bug has been reported here https://github.com/tree-sitter/tree-sitter-go/issues/107 Known limitation: unfamiliar types are assumed to be structs. This assumption does not work for aliased types. For example: ``` type MyInt = int func alias() MyInt { return MyInt{} } ``` Above the correct return statement is "return MyInt(0)". My assumption is that type aliases of primitive types are rare in Go codebases. In these rare cases, the user is expected to replace "MyInt{}" with "MyInt(0)", or not use C-c C-r at all. Inspired by: this emacs conf talk "08:21 Intelligent templates" https://emacsconf.org/2022/talks/treesitter/ Feedback is more than welcome! In particular: - how to best expose the functionality - key binding, snippet (how exactly?), something else? Evgeni --00000000000045bbbd05f431ead0 Content-Type: application/x-patch; name="0001-Extend-go-ts-mode-with-support-for-pre-filling-retur.patch" Content-Disposition: attachment; filename="0001-Extend-go-ts-mode-with-support-for-pre-filling-retur.patch" Content-Transfer-Encoding: base64 Content-ID: <f_ldvr1ev90> X-Attachment-Id: f_ldvr1ev90 RnJvbSBjNTIxMjJjOTgzNzU5OWQ2MzFhODdiNjI1NWNkZjE4OTQ2NTI5MDc4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBFdmdlbmkgS29sZXYgPGV2Z2VueXN3QGdtYWlsLmNvbT4KRGF0 ZTogTW9uLCA2IEZlYiAyMDIzIDA5OjQ5OjUyICswMjAwClN1YmplY3Q6IFtQQVRDSF0gRXh0ZW5k IGdvLXRzLW1vZGUgd2l0aCBzdXBwb3J0IGZvciBwcmUtZmlsbGluZyByZXR1cm4KIHN0YXRlbWVu dHMKCkV4dGVuZCBnby10cy1tb2RlIHRvIGluc2VydCBjb250ZXh0LWF3YXJlIHJldHVybiBzdGF0 ZW1lbnQgZm9yIHRoZQpjdXJyZW50IGZ1bmN0aW9uLiBUaGUgcmV0dXJuIHN0YXRlbWVudCBpcyBw cmUtZmlsbGVkIHdpdGggdGhlIHplcm8KdmFsdWVzIG9mIHRoZSBmdW5jdGlvbidzIG91dHB1dCBw YXJhbWV0ZXJzLgoKRm9yIGV4YW1wbGUsIHRoaXMgcmV0dXJuIHN0YXRlbWVudCBpcyBhZGRlZCBi eSBFbWFjczoKYGBgCmZ1bmMgZigpIChib29sLCBpbnQsIG15U3RydWN0LCAqaW50LCBjaGFuIGJv b2wsIGVycm9yKSB7CiAgICByZXR1cm4gZmFsc2UsIDAsIG15U3RydWN0e30sIG5pbCwgbmlsLCBl cnIKfQpgYGAKCiogbGlzcC9wcm9nbW9kZXMvZ28tdHMtbW9kZS5lbCAoZ28tdHMtbW9kZS1lcnJv ci16ZXJvLXZhbHVlKTogTmV3CmRlZmN1c3RvbS4gKGdvLXRzLW1vZGUtaW5zZXJ0LXJldHVybiwg Z28tdHMtbW9kZS1yZXR1cm4sCmdvLXRzLW1vZGUtLWZ1bmN0aW9uLXJldHVybi10eXBlcywgZ28t dHMtbW9kZS0tZnVuY3Rpb24tYXQtcG9pbnQsCmdvLXRzLW1vZGUtLXR5cGVzLWZyb20tcGFyYW0t ZGVjbGFyYXRpb24sIGdvLXRzLW1vZGUtLXplcm8tdmFsdWUpIE5ldwpmdW5jdGlvbnMuCi0tLQog bGlzcC9wcm9nbW9kZXMvZ28tdHMtbW9kZS5lbCB8IDEwMiArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrLQogMSBmaWxlIGNoYW5nZWQsIDEwMSBpbnNlcnRpb25zKCspLCAxIGRlbGV0 aW9uKC0pCgpkaWZmIC0tZ2l0IGEvbGlzcC9wcm9nbW9kZXMvZ28tdHMtbW9kZS5lbCBiL2xpc3Av cHJvZ21vZGVzL2dvLXRzLW1vZGUuZWwKaW5kZXggMmEyNzgzZjQ1ZjYuLjdmZmRjYTE2MDI5IDEw MDY0NAotLS0gYS9saXNwL3Byb2dtb2Rlcy9nby10cy1tb2RlLmVsCisrKyBiL2xpc3AvcHJvZ21v ZGVzL2dvLXRzLW1vZGUuZWwKQEAgLTQ2LDYgKzQ2LDE1IEBAIGdvLXRzLW1vZGUtaW5kZW50LW9m ZnNldAogICA6c2FmZSAnaW50ZWdlcnAKICAgOmdyb3VwICdnbykKIAorKGRlZmN1c3RvbSBnby10 cy1tb2RlLWVycm9yLXplcm8tdmFsdWUgICJlcnIiCisgICJUaGUgemVybyB2YWx1ZSBmb3IgdHlw ZSBcImVycm9yXCIuCitUaGUgZGVmYXVsdCBpcyBcImVyclwiLCBhc3N1bWluZyB0aGVyZSdzIGEg dmFyaWFsYmUgbmFtZWQgXCJlcnJcIiBpbgordGhlIGN1cnJlbnQgc2NvcGUuIgorICA6dmVyc2lv biAiMzAiCisgIDp0eXBlICdzdHJpbmcKKyAgOm9wdGlvbnMgJygiZXJyIiwgImZtdC5FcnJvcmYo XCJmb3JtYXQ6ICV3XCIsIGVycikiLCAiZXJyb3JzLldyYXAoZXJyLCBcImZvcm1hdFwiKSIpCisg IDpncm91cCAnZ28pCisKIChkZWZ2YXIgZ28tdHMtbW9kZS0tc3ludGF4LXRhYmxlCiAgIChsZXQg KCh0YWJsZSAobWFrZS1zeW50YXgtdGFibGUpKSkKICAgICAobW9kaWZ5LXN5bnRheC1lbnRyeSA/ KyAgICIuIiAgICAgIHRhYmxlKQpAQCAtMTk5LDcgKzIwOCw4IEBAIGdvLXRzLW1vZGUtLWZvbnQt bG9jay1zZXR0aW5ncwogKGRlZnZhci1rZXltYXAgZ28tdHMtbW9kZS1tYXAKICAgOmRvYyAiS2V5 bWFwIHVzZWQgaW4gR28gbW9kZSwgcG93ZXJlZCBieSB0cmVlLXNpdHRlciIKICAgOnBhcmVudCBw cm9nLW1vZGUtbWFwCi0gICJDLWMgQy1kIiAjJ2dvLXRzLW1vZGUtZG9jc3RyaW5nKQorICAiQy1j IEMtZCIgIydnby10cy1tb2RlLWRvY3N0cmluZworICAiQy1jIEMtciIgIydnby10cy1tb2RlLWlu c2VydC1yZXR1cm4pCiAKIDs7OyMjI2F1dG9sb2FkCiAoZGVmaW5lLWRlcml2ZWQtbW9kZSBnby10 cy1tb2RlIHByb2ctbW9kZSAiR28iCkBAIC0zMjgsNiArMzM4LDk2IEBAIGdvLXRzLW1vZGUtLWNv bW1lbnQtb24tcHJldmlvdXMtbGluZS1wCiAgICAgICg8PSAodHJlZXNpdC1ub2RlLXN0YXJ0IG5v ZGUpIHBvaW50ICh0cmVlc2l0LW5vZGUtZW5kIG5vZGUpKQogICAgICAoc3RyaW5nLWVxdWFsICJj b21tZW50IiAodHJlZXNpdC1ub2RlLXR5cGUgbm9kZSkpKSkpCiAKKyhkZWZ1biBnby10cy1tb2Rl LWluc2VydC1yZXR1cm4oKQorICAiSW5zZXJ0IGEgcmV0dXJuIHN0YXRlbWVudCB3aXRoIHplcm8g dmFsdWVzIGZvciBmdW5jdGlvbiBhdCBwb2ludC4KK0l0J3MgYW4gZXJyb3IgdG8gY2FsbCB0aGlz IGZ1bmN0aW9uIG91dHNpZGUgb2YgYSBmdW5jdGlvbiBib2R5LiIKKyAgKGludGVyYWN0aXZlKQor ICAobGV0ICgocmV0dXJuLXN0YXRlbWVudCAoZ28tdHMtbW9kZS1yZXR1cm4pKSkKKyAgICAobGV0 ICgoc3RhcnQgKHBvaW50KSkpCisgICAgICAoYmFjay10by1pbmRlbnRhdGlvbikKKyAgICAgIChp bnNlcnQgcmV0dXJuLXN0YXRlbWVudCkKKyAgICAgIChuZXdsaW5lLWFuZC1pbmRlbnQpCisgICAg ICAoaW5kZW50LXJlZ2lvbiBzdGFydCAocG9pbnQpKSkpKQorCisoZGVmdW4gZ28tdHMtbW9kZS1y ZXR1cm4oKQorICAiUmV0dXJuIGEgcmV0dXJuIHN0YXRlbWVudCB3aXRoIHplcm8gdmFsdWVzIGZv ciBmdW5jdGlvbiBhdCBwb2ludC4KK0l0J3MgYW4gZXJyb3IgdG8gY2FsbCB0aGlzIGZ1bmN0aW9u IG91dHNpZGUgb2YgYSBmdW5jdGlvbiBib2R5LiIKKyAgKGludGVyYWN0aXZlKQorICAobGV0KiAo KGZ1bmMtbm9kZSAoZ28tdHMtbW9kZS0tZnVuY3Rpb24tYXQtcG9pbnQpKQorICAgICAgICAgKGJv ZHktbm9kZSAodHJlZXNpdC1ub2RlLWNoaWxkLWJ5LWZpZWxkLW5hbWUgZnVuYy1ub2RlICJib2R5 IikpKQorCisgICAgKHVubGVzcyAoYW5kIGJvZHktbm9kZSAoPCAodHJlZXNpdC1ub2RlLXN0YXJ0 IGJvZHktbm9kZSkgKHBvaW50KSAodHJlZXNpdC1ub2RlLWVuZCBib2R5LW5vZGUpKSkKKyAgICAg ICh1c2VyLWVycm9yICJQb2ludCBtdXN0IGJlIGluc2lkZSBhIEdvIGZ1bmN0aW9uIGJvZHkiKSkK KworICAgIChsZXQqICgodHlwZXMgKGdvLXRzLW1vZGUtLWZ1bmN0aW9uLXJldHVybi10eXBlcyBm dW5jLW5vZGUpKQorICAgICAgICAgICAoemVyby12YWx1ZXMgKG1hcGNhciAnZ28tdHMtbW9kZS0t emVyby12YWx1ZSB0eXBlcykpCisgICAgICAgICAgIChyZXR1cm4tc3RhdGVtZW50IChmb3JtYXQg InJldHVybiAlcyIgKHN0cmluZy1qb2luIHplcm8tdmFsdWVzICIsICIpKSkpCisgICAgICAoc3Ry aW5nLXRyaW0tcmlnaHQgcmV0dXJuLXN0YXRlbWVudCkpKSkKKworKGRlZnVuIGdvLXRzLW1vZGUt LWZ1bmN0aW9uLWF0LXBvaW50ICgpCisgICJSZXR1cm4gdGhlIHRyZWVzaXQgZnVuY3Rpb24gbm9k ZSBhdCBwb2ludC4KK0Z1bmN0aW9uLCBtZXRob2RzIGFuZCBjbG9zdXJlcyAoYW5vbnltb3VzIGZ1 bmN0aW9ucykgYXJlIHJlY29nbml6ZWQuCitJZiBwb2ludCBpcyBub3QgaW4gYSByZWNvZ25pemVk IGZ1bmN0aW9uLCBuaWwgaXMgcmV0dXJuZWQuIgorICAoaW50ZXJhY3RpdmUpCisgICh0cmVlc2l0 LXBhcmVudC11bnRpbAorICAgKHRyZWVzaXQtbm9kZS1hdCAocG9pbnQpKQorICAgKGxhbWJkYSAo eCkKKyAgICAgKG1lbWJlciAodHJlZXNpdC1ub2RlLXR5cGUgeCkKKyAgICAgICAgICAgICAnKCJm dW5jX2xpdGVyYWwiICJmdW5jdGlvbl9kZWNsYXJhdGlvbiIgIm1ldGhvZF9kZWNsYXJhdGlvbiIp KSkgdCkpCisKKyhkZWZ1biBnby10cy1tb2RlLS1mdW5jdGlvbi1yZXR1cm4tdHlwZXMgKGZ1bmMt bm9kZSkKKyAgIlJldHVybiB0aGUgdHlwZXMgb2YgdGhlIG91dHB1dCB2YXJpYWJsZXMgb2YgRlVO Qy1OT0RFLgorVGhlIHJlc3VsdCBpcyBhIGxpc3Qgd2hpY2ggY291bGQgY29udGFpbiBhIHNpbmds ZSBlbGVtZW50ICh0aGUgR28KK2Z1bmN0aW9uIGhhcyBvbmUgcmV0dXJuIGFyZ3VtZW50KSwgbXVs dGlwbGUgZWxlbWVudHMgKG11bHRpcGxlIHJldHVybgorYXJndW1lbnRzKSwgb3Igbm8gZWxlbWVu dHMgKG5vIHJldHVybiBhcmd1bWVudHMpLiIKKyAgKGxldCAoKHJlc3VsdC1ub2RlICh0cmVlc2l0 LW5vZGUtY2hpbGQtYnktZmllbGQtbmFtZSBmdW5jLW5vZGUgInJlc3VsdCIpKSkKKyAgICAocGNh c2UgKHRyZWVzaXQtbm9kZS10eXBlIHJlc3VsdC1ub2RlKQorICAgICAgKCJwYXJhbWV0ZXJfbGlz dCIgOzsgbXVsdGlwbGUgcmV0dXJuIHZhbHVlcworICAgICAgIChsZXQgKCh0eXBlcy1uZXN0ZWQg KHRyZWVzaXQtaW5kdWNlLXNwYXJzZS10cmVlIHJlc3VsdC1ub2RlICJwYXJhbWV0ZXJfZGVjbGFy YXRpb24iICMnZ28tdHMtbW9kZS0tdHlwZXMtZnJvbS1wYXJhbS1kZWNsYXJhdGlvbikpKQorICAg ICAgICAgKGFwcGx5ICMnYXBwZW5kIChtYXBjYXIgJ2NhciAoY2RyIHR5cGVzLW5lc3RlZCkpKSkp CisgICAgICAoKHByZWQgbnVsbCkgOzsgbm8gcmV0dXJuIHZhbHVlCisgICAgICAgbmlsKQorICAg ICAgKF8gOzsgc2luZ2xlIHJldHVybiB2YWx1ZQorICAgICAgIChsaXN0ICh0cmVlc2l0LW5vZGUt dGV4dCByZXN1bHQtbm9kZSB0KSkpKSkpCisKKyhkZWZ1biBnby10cy1tb2RlLS10eXBlcy1mcm9t LXBhcmFtLWRlY2xhcmF0aW9uIChub2RlKQorICJFeHRyYWN0IHRoZSBHbyB0eXBlKHMpIGZyb20g Tk9ERS4gIEl0IG11c3QgaGF2ZSB0eXBlIHBhcmFtZXRlcl9kZWNsYXJhdGlvbi4KKworQSBwYXJh bWV0ZXJfZGVjbGFyYXRpb24gbm9kZSBjYW4gY29udGFpbiBzaW5nbGUgdmFsdWUgYChpbnQpJywg bmFtZWQKK3NpbmdsZSB2YWx1ZSBgKHN1bSBpbnQpJywgbXVsdGlwbGVzIHZhbHVlcyBgKGludCwg aW50KScsIG9yIG11bHRpcGxlCituYW1lZCB2YWx1ZXMgYCh4LCB5IGludCknLgorCitBbGwgdGhl IGFib3ZlIGNhc2VzIGFyZSByZWNvZ25pemVkLiAgT25seSB0aGUgdHlwZXMgYXJlIHJldHVybmVk LCBmb3IKK2V4YW1wbGUsIHdpdGggcGFyYW1ldGVyX2RlY2xhcmF0aW9uIGAoeCwgeSBpbnQpJywg dGhlIHJlc3VsdCBpcworXChcImludFwiLCBcImludFwiKS4iCisgIChsZXQgKCh0eXBlICh0cmVl c2l0LW5vZGUtY2hpbGQtYnktZmllbGQtbmFtZSBub2RlICJ0eXBlIikpCisgICAgICAgIChjb3Vu dCAobGVuZ3RoICh0cmVlc2l0LXF1ZXJ5LWNhcHR1cmUgbm9kZSAiKHBhcmFtZXRlcl9kZWNsYXJh dGlvbiBuYW1lOihfKSBAbmFtZSkiIG5pbCBuaWwgdCkpKSkKKyAgICAobWFrZS1saXN0IChpZiAo emVyb3AgY291bnQpIDEgY291bnQpICh0cmVlc2l0LW5vZGUtdGV4dCB0eXBlIHQpKSkpCisKKyhk ZWZ1biBnby10cy1tb2RlLS16ZXJvLXZhbHVlIChnby10eXBlKQorICAiUmV0dXJuIHRoZSBHbyB6 ZXJvIHZhbHVlIGZvciBHTy1UWVBFLgorRm9yIHR5cGUgXCJlcnJvclwiLCB0aGUgemVybyB2YWx1 ZSBpcyBkZXRlcm1pbmVkIGJ5IHZhcmlhYmxlCitgZ28tdHMtbW9kZS1lcnJvci16ZXJvLXZhbHVl Jy4KKworVGhpcyBmdW5jdGlvbiBhc3N1bWVzIGFyYml0cmFyeSB0eXBlcyBhcmUgR28gc3RydWN0 cywgZm9yIGV4YW1wbGUgZm9yCitHTy1UWVBFIFwicGVyc29uXCIsIHRoZSByZXR1biB2YWx1ZSBp cyBcInBlcnNvbnt9XCIuIgorICAocGNhc2UgZ28tdHlwZQorICAgICgob3IgImludCIgICJpbnQ4 IiAgImludDE2IiAgImludDMyIiAgImludDY0IikgIjAiKQorICAgICgob3IgInVpbnQiICJ1aW50 OCIgInVpbnQxNiIgInVpbnQzMiIgInVpbnQ2NCIpICIwIikKKyAgICAoImJvb2wiICJmYWxzZSIp CisgICAgKCJzdHJpbmciICJcIlwiIikKKyAgICAoKG9yICJ1aW50cHRyIiAiYnl0ZSIgInJ1bmUi KSAiMCIpCisgICAgKChvciAiZmxvYXQzMiIgImZsb2F0NjQiKSAiMC4wIikKKyAgICAoKG9yICJj b21wbGV4NjQiICJjb21wbGV4MTI4IikgImNvbXBsZXgoMCwgMCkiKQorICAgICgocHJlZCAoc3Ry aW5nLXByZWZpeC1wICJtYXAiKSkgIm5pbCIpCisgICAgKChwcmVkIChzdHJpbmctcHJlZml4LXAg IioiKSkgIm5pbCIpCisgICAgKChwcmVkIChzdHJpbmctcHJlZml4LXAgIltdIikpICJuaWwiKQor ICAgICgocHJlZCAoc3RyaW5nLXByZWZpeC1wICJjaGFuIikpICJuaWwiKQorICAgICgocHJlZCAo c3RyaW5nLXByZWZpeC1wICJmdW5jIikpICJuaWwiKQorICAgICgiZXJyb3IiIGdvLXRzLW1vZGUt ZXJyb3ItemVyby12YWx1ZSkKKyAgICAoKHJ4IGJvbCAoMSsgKG9yIGFscGhhbnVtZXJpYyAiXyIg Ii4iKSkgZW9sKSAoY29uY2F0IGdvLXR5cGUgInt9IikpCisgICAgKF8gKHVzZXItZXJyb3IgIlVu a25vd24gR28gdHlwZSBcIiVzXCIiIGdvLXR5cGUpKSkpCisKIDs7IGdvLm1vZCBzdXBwb3J0Lgog CiAoZGVmdmFyIGdvLW1vZC10cy1tb2RlLS1zeW50YXgtdGFibGUKLS0gCjIuMzkuMQoK --00000000000045bbbd05f431ead0--
Evgeni Kolev <evgenysw@HIDDEN>
:bug-gnu-emacs@HIDDEN
.
Full text available.bug-gnu-emacs@HIDDEN
:bug#61368
; Package emacs
.
Full text available.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997 nCipher Corporation Ltd,
1994-97 Ian Jackson.