Jak refaktoryzować w projekcie w emacs (wszędzie zmieniać nazwę metody)?


15

Chcę przepisać części projektu typu open source. Obejmuje to zmiany nazw metod. Jak mogę to zrobić skutecznie w emacach w całym projekcie?

Wolałbym nie używać hacków takich jak wyszukiwanie i zamiana w każdym buforze.


1
Jaki język?
phils

Czy przeglądałeś ag / grep + wgrep + search / replace? Nie otwierasz w tym buforów indywidualnie. Powiązane: emacs.stackexchange.com/a/243/115
Kaushal Modi

Pyton. Zdaję sobie sprawę, że moje pytanie nie było najlepsze, przepraszam.
The Unfun Cat

Ponieważ pytanie to zostało uderzone do góry (na wypadek, gdyby ktoś natknął się na to z Google), istnieje specjalna biblioteka python do refaktoryzacji o nazwie Rope. Jest bardziej inteligentny niż inne oferowane rozwiązania, ponieważ uwzględnia kontekst. Jest zaimplementowany w Emacsie w pakiecie o nazwie ropemacs.
jcaw 30.09.16

@TheUnfunCat czy możesz dodać więcej kontekstu do swojego pytania? Na razie jest to dość niejasne, a dodanie, że chcesz to zrobić w projekcie Pythona, wyjaśni wiele rzeczy.
DoMiNeLa10 29.01.19

Odpowiedzi:


14

Teraz używam helm-agdo znajdowania wszystkich instancji nazwy funkcji (wyszukiwanie we wszystkich plikach, w tym w podkatalogach, nie tylko w otwartych buforach), a następnie używam C-c C-edo wprowadzenia bufora, który wyświetla wszystkie dopasowania, i tam zmieniam nazwę funkcji. Po C-c C-c (helm-ag--edit-commit)zakończeniu naciskam, aby zapisać zmiany we wszystkich otwartych plikach.

Może to zabrzmieć myląco, ale proszę zobaczyć https://github.com/ShingoFukuyama/helm-swoop

Kiedy będziesz go smucić, będziesz płakać łzami radości, że istnieje taka cudowna funkcjonalność.


1
Rozlało mi policzek.
mihai

1
dosłownie miałam łzy w oczach podczas wykonywania tego przepływu pracy po raz pierwszy, bez żartów
Paul

Świetne rozwiązanie!
fraxture

6

Ponieważ nie określono języka, trudno jest podać lepsze odpowiedzi niż „Wyszukaj i zamień”.

Korzystanie wgrep

Jeśli chcesz (interaktywnie) zastąpić wszystkie wystąpienia symbolu innym, najlepszym rozwiązaniem jest wgrep. Pozwala interaktywnie edytować bufor wyników grep.

  1. Zrobić M-x package-install RET wgrep.
  2. Uruchom M-x rgrep. Zadaje ci kilka prostych pytań, a następnie przeprowadza rekurencyjne wyszukiwanie wyszukiwanego terminu w określonym katalogu.
  3. Przejdź do bufora wyników i wykonaj M-x wgrep-change-to-wgrep-mode. Ten bufor można teraz edytować. Wszelkie wprowadzone tutaj zmiany zostaną odzwierciedlone w samych plikach.
  4. Uruchom a replace-regexplub a query-replace-regexpw tym buforze, aby dokonać refaktoryzacji.
  5. Zakończ edycję za pomocą M-x wgrep-save-all-buffersiM-x wgrep-finish-edit .


3

Możesz użyć, counsel-rga następnie, C-c C-oaby uzyskać listę wszystkich kandydatów w buforze. Naciśnij, waby edytować je za pomocą wgrep. Polecam ieditdo zmiany nazw symboli. naciśnijC-c C-c aby zatwierdzić.

Zależności:

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.