Renomear refatoração de variável local


10

Existe uma ferramenta de refatoração elisp que pode renomear variáveis ​​locais e argumentos de função? Eu gostaria de poder transformar:

(defun my-func (s r)
  ...
  (use s .. r))

para dentro:

(defun my-func (string replacement)
  ...
  (use string .. replacement))

usando um método que saiba como encontrar referências de variáveis. Eu estou bem se não for super-higiênico.


4
Vários cursores podem editar todas as instâncias de um símbolo no desfunçamento atual.
Malabarba 8/08

Veja também o iedit.
InHarmsWay


4
Nem todo código é nosso. Algum código é antigo.
Gracjan Polak

2
Eu costumo regexp substituir na região \ bSYM \ b ...
BRPocock

Respostas:


2

TL; DR: erefactor-rename-symbol-in-buffer

Você está procurando uma função de renomeação lexicamente inteligente - uma que renomeie variáveis ​​por seu escopo, não apenas um achado e substituído estúpido. Pacotes como este existem para muitos idiomas, mas até o momento da escrita (abril de 2019), não existem muitas opções para o Emacs Lisp. O erefactorpacote é o único que eu conheço.

erefactor-rename-symbol-in-bufferé a função que você deseja. É um comando inteligente de localização e substituição que substituirá os símbolos no escopo atual (incluindo as instruções). A limitação deste comando é que ele não pesquisará fora do buffer atual. É inteligente, mas não perfeito. Ele solicitará que você confirme cada ocorrência para garantir que o resultado final seja higiênico.

A outra função de renomeação é erefactor-rename-symbol-in-package. Isso não funciona da mesma maneira - funciona apenas em símbolos globais. Ele depende do seu pacote ser configurado corretamente, com um sistema de agrupamento e prefixo, e precisa da variável para corresponder ao prefixo do pacote. Não é muito robusto - falhará se você não tiver configurado as coisas da maneira que essa função espera. Acho que se você estiver renomeando um símbolo global, também poderá usar uma localização e substituição ingênuas, pois os símbolos globais no Elisp não têm um espaço para nome. Os benefícios do entendimento lexical são mínimos. Este comando é muito frágil para a troca. Eu sugeriria apenas usar projectile-replace.

O Erefactor possui vários outros comandos do Elisp que você pode achar úteis. Uma lista (incompleta) está disponível no leia - me .

Não está descrito na página do GitHub, mas erefactorestá disponível no MELPA ( M-x package-install RET erefactor). A página MELPA pode ser encontrada aqui .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.