Какие инструменты рефакторинга вы используете для Python?
У меня есть куча классов, которые я хочу переименовать. Некоторые из них имеют небольшие имена и это имя повторно используется в других именах классов, где я не хочу, чтобы это имя было изменено. Большинство из них живет в коде Python, но у нас также есть код XML, который ссылается на имена классов.
Простой поиск и замена только меня достает. В моем случае я хочу переименовать AdminAction в AdminActionPlug и AdminActionLogger в AdminActionLoggerPlug, поэтому первый поиск и замена также попадут во второй, ошибочно.
Есть ли у кого-нибудь опыт работы с инструментами рефакторинга Python? Бонусные баллы, если они также могут исправлять имена классов в документах XML.
Ответы
Ответ 1
Тем временем я попробовал два инструмента, которые имеют некоторую интеграцию с vim.
Первая - это Rope, библиотека рефакторинга Python, которая поставляется с плагином Vim (и emacs). Я пробовал несколько переименований, и это определенно сработало, как и ожидалось. Это позволило мне предварительно просмотреть рефакторинг как diff, что приятно. Это немного основано на тексте, но это хорошо для меня, просто требуется больше времени, чтобы учиться.
Второй - Bicycle Repair Man, который, я думаю, выигрывает очки по названию. Также подключается к vim и emacs. Пока еще не играл с этим, но я помню, как пробовал это давным-давно.
Еще не достаточно поиграл с обоими, или попробовал больше видов рефакторинга, но я сделаю еще несколько взломов с ними.
Ответ 2
Я бы настоятельно рекомендовал PyCharm - не только для рефакторинга. Поскольку первый ответ PyCharm был опубликован здесь несколько лет назад, поддержка рефакторинга в PyCharm значительно улучшилась.
Рефакторинг Python, доступный в PyCharm (последний раз проверен 2016/07/27 в PyCharm 2016.2)
- Изменить подпись
- Преобразование в пакет/модуль Python
- Копировать
- Извлечение рефакторинга
- Встроенный
- Инвертировать логическое
- Сделать функцию верхнего уровня
- Переместить рефакторинг
- Нажмите Члены вниз.
- Pull Members up
- Переименовать рефакторинги
- Безопасное удаление
XML-рефакторинг (я проверил в контекстном меню в файле XML):
- Переименовать
- Переместить
- Копировать
- Извлечь подзапрос как CTE
- Встроенный
Рефакторинг Javascript:
- Извлечь параметр в JavaScript
- Изменить подпись в JavaScript
- Извлечь переменную в JavaScript
Ответ 3
WingIDE 4.0 (WingIDE - это моя IDE на основе python) будет поддерживать несколько рефакторингов, но я только что опробовал последнюю бета-версию, бета-версию6 и... еще предстоит сделать. Метод Retract работает красиво, но переименовать символ не делает.
Обновление. В версии 4.0 исправлены все инструменты рефакторинга. Теперь они отлично работают.
Ответ 4
Ваша IDE может поддерживать рефакторинг!
Проверьте это. Eric, Eclipse, WingIDE создают инструменты для рефакторинга (включая переименование). И это очень безопасные рефакторинги - если что-то может пойти не так, IDE не будет делать ссылку.
Также рассмотрите возможность добавления нескольких unit test, чтобы ваш код не пострадал во время рефакторинга.
Ответ 5
PyCharm имеют некоторые функции рефакторинга.
РЕФЕРАЦИЯ PYTHON
Переименовать. Рефакторинг позволяет безопасно и мгновенно выполнять глобальные изменения кода. Локальные изменения внутри файла выполняются на месте. Рефакторинги работают в простых проектах Python и Django.
Используйте Ввести переменную/поле/константу и Inline Local для улучшения структуры кода внутри метода Извлечь метод, чтобы разбить более длинные методы, Извлечь суперкласс, Push Up, Вытянуть и Переместить, чтобы переместить методы и классы.
Ответ 6
Я бы взглянул на Боулера (https://pybowler.io).
Он лучше подходит для использования непосредственно из командной строки, чем веревка и поддерживает скрипты (одноразовые скрипты).
Ответ 7
Во время кодирования на #python это произошло:
RefactoringTool: файлы, которые были изменены, я также использую инструменты 2to3. Но это не сработало. Справка этого сайта: (ссылка: https://python-modernize.readthedocs.io/en/latest/) python-modernize.readthedocs.io/en/latest/и код для использования в git: python-modernize [CN00 ] pythonfile
Ответ 8
Вы можете использовать sed для выполнения этого. Трюк состоит в том, чтобы вспомнить, что регулярные выражения могут распознавать границы слов. Это работает на всех платформах, если вы получаете инструменты, которые на Windows Cygwin, Mac OS может потребовать установки инструментов dev, я не уверен, и Linux имеет это из коробки. Таким образом, grep, xargs и sed должны делать трюк после 12 часов чтения справочных страниц и проб и ошибок;)