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.

The Unfun Cat
fonte
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.

The Unfun Cat
fonte
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.
Malabarba
fonte
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:

abo-abo
fonte