Подтвердить что ты не робот

Какие инструменты рефакторинга вы используете для Python?

У меня есть куча классов, которые я хочу переименовать. Некоторые из них имеют небольшие имена и это имя повторно используется в других именах классов, где я не хочу, чтобы это имя было изменено. Большинство из них живет в коде Python, но у нас также есть код XML, который ссылается на имена классов.

Простой поиск и замена только меня достает. В моем случае я хочу переименовать AdminAction в AdminActionPlug и AdminActionLogger в AdminActionLoggerPlug, поэтому первый поиск и замена также попадут во второй, ошибочно.

Есть ли у кого-нибудь опыт работы с инструментами рефакторинга Python? Бонусные баллы, если они также могут исправлять имена классов в документах XML.

4b9b3361

Ответ 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 часов чтения справочных страниц и проб и ошибок;)