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.
Respostas:
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
erefactor
pacote é 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 usarprojectile-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
erefactor
está disponível no MELPA (M-x package-install RET erefactor
). A página MELPA pode ser encontrada aqui .fonte