Перейменуйте локальний змінний рефакторинг


10

Чи є інструмент рефакторингу elisp, який може перейменовувати локальні змінні та аргументи функції? Я хотів би мати можливість повернути:

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

в:

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

використовуючи метод, який знає, як знайти змінні посилання. Я добре, якщо це не супергігенно.


4
Кілька курсорів можуть редагувати всі екземпляри символу в поточному розблокуванні.
Малабарба

Також дивіться iedit.
InHarmsWay


4
Не весь код - наш. Якийсь код старий.
Грачан Полак

2
Я, як правило, замінюю регулярне вираження в регіоні \ bSYM \ b…
BRPocock

Відповіді:


2

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

Ви шукаєте лексично інтелектуальну функцію перейменування - функцію, яка перейменовує змінні за їх обсягом, а не просто тупу знаходження та заміну. Такі пакети існують для багатьох мов, але що стосується написання (квітень 2019), Emacs Lisp насправді не існує багато. erefactorПакет тільки один я знаю.

erefactor-rename-symbol-in-bufferце потрібна вам функція. Це інтелектуальна команда "Знайти та замінити", яка замінить символи в поточному діапазоні (включаючи документи). Обмеженням цієї команди є те, що вона не здійснюватиме пошук за межами поточного буфера. Це розумно, але не ідеально. Він попросить підтвердити кожну ситуацію, щоб забезпечити санітарний результат.

Інша функція перейменування є erefactor-rename-symbol-in-package. Це не працює так само - він працює лише на глобальних символах. Він покладається на правильне налаштування вашого пакунка із системою групування та префіксом, і йому потрібна змінна, щоб відповідати префіксу пакету. Це не дуже надійно - воно вийде з ладу, якщо ви не налаштували речі так, як очікує ця функція. Я думаю, що якщо ви перейменовуєте глобальний символ, ви можете також використовувати наївну знахідку та заміну, оскільки глобальні символи в Еліспі не мають простору імен. Переваги лексичного розуміння мінімальні. Ця команда занадто крихка для компромісу. Я б запропонував просто використовувати projectile-replace.

У Erefactor є ряд інших команд Elisp, які можуть вам бути корисними. У readme доступний (неповний) список .

Це не описано на сторінці GitHub, але erefactorдоступне на MELPA ( M-x package-install RET erefactor). Сторінку MELPA можна знайти тут .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.