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

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

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

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

Ответы [ 7 ]

53 голосов
/ 27 августа 2008

Тем временем я попробовал два инструмента, которые как-то интегрированы с vim.

Первый - Rope , библиотека рефакторинга Python, которая поставляется с плагином Vim (и emacs). Я пробовал несколько переименований, и это определенно сработало, как и ожидалось. Это позволило мне предварительно просмотреть рефакторинг как diff, что приятно. Это немного основано на тексте, но для меня это нормально, учиться нужно больше времени.

Второй - Bicycle Repair Man , который, я думаю, выигрывает очки на имя. Также подключается к vim и emacs. Пока еще не играл с этим, но я помню, как пробовал это давным-давно.

Еще не достаточно поиграл с обоими, или попробовал больше видов рефакторинга, но я сделаю еще несколько взломов с ними.

24 голосов
/ 15 октября 2014

Я бы настоятельно рекомендовал PyCharm - не только для рефакторинга. С тех пор, как несколько лет назад был опубликован первый ответ PyCharm, поддержка рефакторинга в PyCharm значительно улучшилась.

Рефакторинг Python доступен в PyCharm (последняя проверка 2016/07/27 в PyCharm 2016.2)

  • Изменить подпись
  • Преобразование в пакет / модуль Python
  • Копирование
  • Извлечение рефакторингов
  • Встроенный
  • Инвертировать логическое значение
  • Сделать функцию верхнего уровня
  • Перестановка рефакторингов
  • Толкайте членов вниз
  • Подтянуть членов
  • Переименовать Refactorings
  • Безопасное удаление

Рефакторинг XML (я проверил в контекстном меню в файле XML):

  • Переименовать
  • Move
  • Копирование
  • Извлечь подзапрос как CTE
  • Встроенный

Рефакторинг Javascript:

  • Извлечение параметра в JavaScript
  • Изменить подпись в JavaScript
  • Извлечение переменной в JavaScript
5 голосов
/ 03 февраля 2011

WingIDE 4.0 (WingIDE - мой выбор для Python IDE) будет поддерживать несколько рефакторингов, но я только что опробовал последнюю бета-версию, бета6, и ... еще предстоит проделать работу Метод отвода работает хорошо, но переименовать символ - нет.

Обновление: в версии 4.0 исправлены все инструменты рефакторинга. Теперь они отлично работают.

4 голосов
/ 27 сентября 2018

Я бы посмотрел на Боулер (https://pybowler.io).

Он лучше подходит для использования непосредственно из командной строки, чем веревка и поддерживает скрипты (одноразовые скрипты).

4 голосов
/ 10 сентября 2014

PyCharm имеет некоторые функции рефакторинга.

РЕФАКТОР ПИТОНА

Rename рефакторинг позволяет безопасно и мгновенно выполнять глобальные изменения кода. Локальные изменения в файле выполняются на месте. Рефакторинг работает в простых проектах Python и Django.

Используйте Ввести переменную / поле / константу и Inline Local для улучшения структуры кода внутри метода, Извлечь метод , чтобы разбить более длинные методы, Извлечение суперкласса , Push Up , Pull Down и Move для перемещения методов и классов.

4 голосов
/ 28 ноября 2009

Ваша IDE может поддерживать рефакторинг !! Проверьте это Эрик, Eclipse, WingIDE имеют встроенные инструменты для рефакторинга (переименование в том числе). И это очень безопасный рефакторинг - если что-то пойдет не так, IDE не сделает ref.

Также рассмотрите возможность добавления нескольких модульных тестов, чтобы ваш код не пострадал во время рефакторинга.

0 голосов
/ 27 декабря 2012

Вы можете использовать sed для этого. Хитрость заключается в том, чтобы вспомнить, что регулярные выражения могут распознавать границы слов. Это работает на всех платформах, при условии, что вы получаете инструменты, которые на Windows - Cygwin, Mac OS может потребовать установки инструментов разработки, я не уверен, и Linux имеет это из коробки. Так что grep, xargs и sed должны справиться с задачей после 12 часов чтения man-страниц, проб и ошибок;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...