Существует ли инструмент рефакторинга elisp, который может переименовывать локальные переменные и аргументы функций? Я хотел бы иметь возможность включить:
(defun my-func (s r)
...
(use s .. r))
в:
(defun my-func (string replacement)
...
(use string .. replacement))
используя метод, который знает, как найти ссылки на переменные. Я в порядке, если это не супергигенично.
Ответы:
TL; DR:
erefactor-rename-symbol-in-buffer
Вы ищете лексически интеллектуальную функцию переименования - такую, которая переименовывает переменные по объему, а не просто ищет и заменяет. Подобные пакеты существуют для многих языков, но на момент написания (апрель 2019 г.) вариантов для Emacs Lisp практически не было.
erefactor
Пакет только один я знаю.erefactor-rename-symbol-in-buffer
это функция, которую вы хотите. Это интеллектуальная команда поиска и замены, которая заменит символы в текущей области (включая строки документов). Ограничением этой команды является то, что она не будет искать вне текущего буфера. Это умно, но не идеально. Он попросит вас подтвердить каждый случай, чтобы убедиться, что конечный результат является санитарным.Другая функция переименования
erefactor-rename-symbol-in-package
. Это не работает так же - оно работает только с глобальными символами. Он зависит от того, правильно ли настроен ваш пакет, с системой группировки и префиксом, и ему нужна переменная, соответствующая префиксу пакета. Он не очень надежен - он потерпит неудачу, если вы не настроили все так, как ожидает эта функция. Я думаю, что если вы переименуете глобальный символ, вы также можете использовать наивный поиск и замену, поскольку глобальные символы в Elisp не имеют пространства имен. Преимущества лексического понимания минимальны. Эта команда слишком хрупкая для компромисса. Я бы предложил просто использоватьprojectile-replace
.Erefactor имеет ряд других команд Elisp, которые могут оказаться полезными. (Неполный) список доступен в файле readme .
Это не описано на странице GitHub, но
erefactor
доступно на MELPA (M-x package-install RET erefactor
). Страницу MELPA можно найти здесь .источник