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






А пока я попробовал два инструмента, у которых есть какая-то интеграция с vim.
Первый - это Веревка, библиотека рефакторинга Python, которая поставляется с подключаемым модулем Vim (и emacs). Я попробовал это для нескольких переименований, и это определенно сработало, как и ожидалось. Это позволило мне предварительно просмотреть рефакторинг как разницу, что приятно. Он немного основан на тексте, но для меня это нормально, просто нужно больше времени, чтобы научиться.
Второй - Ремонтник велосипедов, который, как мне кажется, приносит очки по названию. Также подключается к vim и emacs. Еще не очень много играл с ним, но помню, как давно пробовал.
Еще не поигрался с обоими в достаточной мере или пробовал больше типов рефакторинга, но я еще попробую их взломать.
Веревка находится в странном месте. Там много документации, но все еще трудно понять. Нет хороших руководств. Кто-то должен просто сделать версию vim на github под названием modern vim IDE, включая батареи, и сэкономить нам много времени. Janus - отличное начало, но он не включает никаких библиотек рефакторинга, автозавершения кода Django и т. д.
Ваша IDE может поддерживать рефакторинг !! Проверьте это Эрик, Eclipse, WingIDE имеют встроенные инструменты для рефакторинга (включая Rename). И это очень безопасный рефакторинг - если что-то пойдет не так, IDE не выполнит ref.
Также рассмотрите возможность добавления нескольких модульных тестов, чтобы убедиться, что ваш код не пострадал во время рефакторинга.
WingIDE 4.0 (WingIDE - моя предпочтительная IDE для python) будет поддерживать несколько рефакторингов, но я только что опробовал последнюю бета-версию beta6 и ... еще предстоит работа. Метод Retract работает хорошо, а вот Rename Symbol - нет.
Обновление: в выпуске 4.0 исправлены все инструменты рефакторинга. Теперь они отлично работают.
Просто попробовал Wing 6.0.4 pro на основе этого ответа, и первый простой рефакторинг, который я сделал (перемещение функций в отдельные файлы), сломал код, просто добавив новые операторы импорта за последним импортом, он смог найти без отступов, и хотя этот оператор не был на высшем уровне. Шесть лет спустя все еще основные проблемы. Не рекомендуется!
Вы можете использовать sed для этого. Уловка состоит в том, чтобы вспомнить, что регулярные выражения могут распознавать границы слов. Это работает на всех платформах при условии, что у вас есть инструменты, которыми в Windows является Cygwin, в Mac OS может потребоваться установка инструментов разработчика, я не уверен, и в Linux это есть из коробки. Итак, grep, xargs и sed должны сработать после 12 часов чтения страниц руководства и проб и ошибок;)
Надеюсь, поскольку он предлагает то же самое (найти и заменить), что и ответ с наименьшим количеством голосов.
PyCharm имеет некоторые функции рефакторинга.
PYTHON REFACTORING
Rename refactoring allows to perform global code changes safely and instantly. Local changes within a file are performed in-place. Refactorings work in plain Python and Django projects.
Use Introduce Variable/Field/Constant and Inline Local for improving the code structure within a method, Extract Method to break up longer methods, Extract Superclass, Push Up, Pull Down and Move to move the methods and classes.
Я настоятельно рекомендую PyCharm - не только для рефакторинга. С тех пор, как несколько лет назад здесь был опубликован первый ответ PyCharm, поддержка рефакторинга в PyCharm значительно улучшилась.
Рефакторинг Python доступен в PyCharm (последняя проверка 27.07.2016 в PyCharm 2016.2)
Рефакторинг XML (проверял в контекстном меню в XML-файле):
Рефакторинг Javascript:
Я только что проверил, он не может переименовать функцию внутри файла pyx Cython.
Я бы посмотрел на Котелок (https://pybowler.io).
Он лучше подходит для использования непосредственно из командной строки, чем веревка, и поощряет создание сценариев (одноразовые сценарии).
На самом деле я сам использовал RedBaron
Однажды Великий Бог сойдет с Небес и даст нам инструмент рефакторинга, основанный на Dev Express C# Code Rush для других языков. Когда наступит этот день, Ctrl + Plick станет наиболее часто используемым ярлыком на Земле. Аминь.