Como refatorar um projeto no emacs (alterar o nome do método em qualquer lugar)?


15

Quero reescrever partes de um projeto de código-fonte aberto. Isso inclui renomear métodos. Como posso fazer isso de maneira eficiente no emacs em todo o projeto?

Prefiro não usar hacks, como pesquisar e substituir em cada buffer.


1
Qual língua?
— precisa saber é

Você já viu ag / grep + wgrep + search / replace? Você não abre buffers individualmente nisso. Relacionados: emacs.stackexchange.com/a/243/115
— Kaushal Modi

Pitão. Sei que minha pergunta não foi das melhores, desculpe.
— The Unfun Cat

Como essa pergunta foi levada ao topo (no caso de alguém se deparar com isso do Google), existe uma biblioteca python dedicada para refatoração chamada Rope. É mais inteligente que as outras soluções oferecidas, pois leva em consideração o contexto. É implementado no Emacs em um pacote chamado ropemacs.
— jcaw

@TheUnfunCat, você pode adicionar mais contexto à sua pergunta? No momento, é bastante vago e acrescentar que você deseja fazer isso em um projeto python esclareceria muitas coisas.
— DoMiNeLa10

Respostas:


14

Agora eu uso helm-agpara encontrar todas as instâncias do nome da função (pesquisa em todos os arquivos, incluindo subdiretórios, não apenas nos buffers abertos) e, em seguida, uso C-c C-epara inserir um buffer que lista todas as correspondências e aí altero o nome da função. Ao terminar, pressione C-c C-c (helm-ag--edit-commit)para armazenar as alterações em todos os arquivos abertos.

Isso pode parecer confuso, mas consulte https://github.com/ShingoFukuyama/helm-swoop

Quando você grunhir, chorará de alegria por haver uma funcionalidade tão maravilhosa.


1
Escorreu uma lágrima pela minha bochecha.
— precisa saber é

1
literalmente tinha lágrimas nos meus olhos quando executar este fluxo de trabalho pela primeira vez, sem brincadeira
— Paul

Ótima solução!
— fraxture

6

Como você não especificou o idioma, é difícil fornecer respostas melhores do que "Pesquisar e substituir".

Usando wgrep

Se você quiser (interativamente) substituir todas as instâncias de um símbolo por outro, o wgrep é sua melhor aposta. Permite editar interativamente o buffer de resultados grep.

  1. Faça M-x package-install RET wgrep.
  2. Corra M-x rgrep. Ele fará algumas perguntas fáceis e fará uma pesquisa recursiva pelo termo de pesquisa dentro do diretório especificado.
  3. Alterne para o buffer de resultados e faça M-x wgrep-change-to-wgrep-mode. Este buffer agora é editável. Quaisquer alterações feitas aqui serão refletidas nos próprios arquivos.
  4. Execute a replace-regexpou a query-replace-regexpneste buffer, para fazer a refatoração.
  5. Termine suas edições com M-x wgrep-save-all-bufferse M-x wgrep-finish-edit.


3

Você pode usar counsel-rgseguido por C-c C-opara obter uma lista de todos os candidatos em um buffer. Pressione wpara editá-los com wgrep. Eu recomendo ieditpara renomear símbolos. Pressione C-c C-cpara confirmar.

Dependências:

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.