From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: sbaugh@catern.com Newsgroups: gmane.emacs.devel Subject: Re: Adding refactoring capabilities to Emacs Date: Sun, 20 Aug 2023 09:00:39 -0400 Message-ID: <87v8d9q360.fsf@catern.com> References: <83fs4f36wi.fsf@gnu.org> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="1247"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) To: emacs-devel@gnu.org Cancel-Lock: sha1:6xN1D6aR/rU+ivO+golQWBkdBl0= Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Sun Aug 20 15:31:36 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 1qXiWm-00009h-1X for ged-emacs-devel@m.gmane-mx.org; Sun, 20 Aug 2023 15:31:36 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qXiVx-0006F1-I1; Sun, 20 Aug 2023 09:30:45 -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 1qXi31-0001Qd-A9 for emacs-devel@gnu.org; Sun, 20 Aug 2023 09:00:51 -0400 Original-Received: from ciao.gmane.io ([116.202.254.214]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qXi2y-0007dm-V4 for emacs-devel@gnu.org; Sun, 20 Aug 2023 09:00:51 -0400 Original-Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1qXi2w-0004eN-3e for emacs-devel@gnu.org; Sun, 20 Aug 2023 15:00:46 +0200 X-Injected-Via-Gmane: http://gmane.org/ Received-SPF: pass client-ip=116.202.254.214; envelope-from=ged-emacs-devel@m.gmane-mx.org; helo=ciao.gmane.io X-Spam_score_int: -15 X-Spam_score: -1.6 X-Spam_bar: - X-Spam_report: (-1.6 / 5.0 requ) BAYES_00=-1.9, HEADER_FROM_DIFFERENT_DOMAINS=0.25, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Sun, 20 Aug 2023 09:30:44 -0400 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:308963 Archived-At: Eli Zaretskii writes: > I originally wrote the below in a discussion of a bug report, but it > really belongs here. So here's a repost: > > > Okay, I'm convinced. I'll defer this functionality to the future > > refactoring support in Emacs, built with project.el and eglot no doubt. > > Eglot can serve as the back-end, and it isn't the only one that comes > to mind (I sincerely hope that at least some of the simpler > refactoring jobs will not require an LSP, but could be done using > built-in capabilities). > > But back-end is just one part of this. We should IMO begin by our own > research into the UI parts of this: how does the user specify the > requested refactoring? Several alternatives are possible, and we > should study them and decide what is best for Emacs. > > Would someone please step forward and work on adding refactoring to > Emacs? > > The main point of this is that it's high time Emacs had sophisticated > and flexible support for code refactoring. Let's start working on > this! I thought the UI in https://www.masteringemacs.org/article/combobulate-editing-searching-new-query-builder was quite interesting. Something heavily based on tree-sitter is interesting because such queries could easily be stored and used programmatically outside Emacs, you simply need to link against the tree-sitter library. That's somewhat more convenient than running Emacs as a subprocess to do bulk automated refactoring, e.g. across 100k files or on every new file that's committed.