Кто-нибудь знает полнофункциональный инструмент рефакторинга для C ++, который надежно работает с большими базами кода (около 100 000 строк)?
В течение последних лет я пробовал все, что смогу найти снова и снова: SlickEdit, Eclipse CDT. Все они не были пригодны для использования.
РЕЗЮМЕ : Я взял время и оценил «Visual Assist X», а также «Refactor for C ++». Оба имеют некоторые впечатляющие особенности, но оба они далеки от совершенства. Извлечение большого блока кода обычно не выполняется без изменений вручную и, следовательно, не окупается.
«Visual Assist X» обладает хорошими функциями, такими как гораздо более полное автозаполнение и т. Д. Но он вызывает сильное мерцание и сильно замедляет работу в определенных точках.
Поэтому, на мой взгляд, ответ таков: «Нет, для C ++ не существует готового инструмента для рефакторинга».
ОБНОВЛЕНИЕ Март 2015 Что касается ответа hdoghmens, сегодня я попробовал Resharper для C ++. Его ссылка https://www.jetbrains.com/resharper/ ничего не говорит о C ++. Но я нашел Resharper C ++, который был анонсирован более года назад:
https://www.jetbrains.com/resharper/features/cpp.html
Я попробовал VC2010, используя кодовую базу в 20 МБ.
Тест 1: метод извлечения: приводит к исключению Resharper. Исходный код не изменился.
Тест 2: метод извлечения с другим источником: работает нормально
Тест 3: изменение сигнатуры извлеченной функции: результаты в неработающем коде C ++:
bool myclass::do_work123(<unknown long Color>int& Filled*&, long, int&)
Может быть, поэтому C ++ его нет на главной странице.
По моему мнению, ответ на этот вопрос все еще "НЕТ" .
источник
Ответы:
Я считаю Visual Assist X с Visual Studio очень полезным. Другой выбор - Refactor для C ++ .
источник
Visual Assist и Visual Studio значительно упрощают работу с большими кодами. Визуальная помощь хороша для отслеживания того, как используется класс или член, и более эффективна при переименовании без ложных срабатываний, чем при поиске и замене.
источник
Я ожидаю, что clang значительно изменит ландшафт инструментов рефакторинга C ++ в ближайшие пару лет. Это модульный компилятор с открытым исходным кодом, который предоставляет API для анализа и семантического анализа кода C ++. Среды IDE и другие инструменты смогут использовать этот API, вместо того чтобы выполнять сложную работу по написанию собственного синтаксического анализатора и анализатора.
Google уже сделал масштабный инструмент рефакторинга, используя clang .
источник
Mozilla имеет свой собственный инструмент рефакторинга под названием Pork ( Wiki , Developer Wiki ). Вот блог разработчика Pork. Из того, что я прочитал, свинина была успешно использована в рефакторинге в Mozilla.
Свинина должна помочь, если вы приехали из * nix land, для Visual Studio я тоже рекомендую Visual Assist.
источник
Наш DMS Software Reengineering Toolkit - это механизм преобразования, разработанный для выполнения сложных преобразований больших массивов кода, включая C ++. Он был использован для внесения надежных изменений в системах миллионов строк кода. Он работает с использованием точных компиляторов анализаторов и преобразователей языка.
Он имеет полный синтаксический анализатор C ++ с разрешением имен и типов, создает AST-коды кода, может применять процедурные преобразования или преобразования источника-источника (с синтаксисом поверхности C ++) для пересмотра этих деревьев и регенерации компилируемого вывода с сохранением комментариев. (Правка: 01.07.2011: теперь работает C ++ 1X, насколько мы понимаем стандарт :)
Он использовался в крупномасштабных проектах реинжиниринга, включая ре-архитектуру компонентов C ++ и 100% полностью автоматизированные переводы между языками. Вы можете прочитать об этом на сайте.
DMS также используется для создания произвольных инструментов анализа источников. Примеры включают в себя обнаружение клонов, покрытие тестами, умные различия (сравнение структур исходного кода и операций редактирования аннотаций, а не строк с простыми вставками и удалениями) и т. Д.
То, чем оно не является (в настоящее время), является интерактивным инструментом рефакторинга. Мы считаем, что для успешного проведения большинства рефакторингов необходим глубокий контроль и анализ данных. DMS имеет общий механизм для поддержки этого, и этот механизм реализован для C, COBOL и Java на данном этапе, с C ++ следующим на очереди. Это тяжелая работа. Вы не увидите много серьезных инструментов рефакторинга C ++ ни от кого, пока эта проблема не будет хорошо решена. Для начала вам нужен полный синтаксический анализатор C ++: -}
РЕДАКТИРОВАТЬ 05.07.2011: Похоже, что мы собираемся пробовать на интерактивной версии. Мы выиграли этап I SBIR Министерства энергетики, чтобы выяснить, как это сделать. См. Http://science.energy.gov/sbir/awards-and-general-stats/fy-2011/phase-i-by-state/?p=1#tx (поиск семантических дизайнов в разделе «Техас»). Не ожидайте результата в спешке; это только начало 3-х фазной многолетней программы по освоению инструмента.
РЕДАКТИРОВАНИЕ 8/11/2011: Первый прогресс ... Теперь мы обрабатываем все директивы C ++ 0x и OpenMP.
РЕДАКТИРОВАТЬ 1/4/2012: выполняет полный контроль потока анализа кода C ++.
РЕДАКТИРОВАТЬ 15/09/2014: Теперь хорошо разбирайте синтаксический анализатор и механизм преобразования C ++ 14. Даже переименовывает довольно надежно на этом этапе: -}
источник
Если вы используете emacs, попробуйте Xrefactory . Он поддерживает извлечение методов, переименование классов / функций / переменных и вставку / удаление / перемещение параметров. Он также имеет очень хороший / быстрый механизм завершения кода.
источник
В настоящее время я не могу рекомендовать какой-либо инструмент рефакторинга для C ++, конечно, не для больших баз кода от 100 тыс. Строк и выше. Я надеялся, что это изменится, как ОП, и я надеюсь, что однажды будет что-то. Я боюсь, что сам язык может существенно измениться, прежде чем мы увидим какие-то действительно хорошие инструменты.
Кстати, SlickEdit отказался от своих функций рефакторинга?
источник
Я рекомендую попробовать rtags, если вы используете emacs и еще не пробовали его (есть также пакет для vim). Это клиент-серверное приложение на основе clang, которое индексирует код C / C ++, включая следующие функции:
Я решил попробовать после просмотра этого доклада, который представил мне rtags (и emacs).
(Я должен сказать, что я пошел так далеко только после того, как моему QtCreator не удалось правильно переименовать некоторые символы, что является препятствием для моего использования этой великолепной IDE на данный момент)
Помимо того, что поддерживается rtags, мне также нужны некоторые дополнительные полезные функции, в том числе:
Для этого я рекомендую использовать пакет семантического рефактора для emacs (не уверен, есть ли альтернативы для vim)
Как правило, инструменты на основе лязг выглядит очень многообещающе. Если вам интересна дополнительная информация об инструментах Clang для рефакторинга C ++, в том числе для проектов с большой кодовой базой, то есть несколько замечательных докладов Чендлера Каррута.
источник
DMS программного обеспечения rengineering инструментарий делает это , я думаю. Это механизм преобразования кода, разработанный для больших масштабов и работающий с C ++. Понятия не имею, насколько элегантен выход.
источник
Обязательно стоит упомянуть Klocwork как коммерческий пакет рефакторинга кода. Это выглядит очень многообещающе, когда вы просматриваете демонстрационное видео.
источник
Проблема в C ++ шаблонах. По состоянию на 2019 год я не знаю ни одного инструмента рефакторинга, который бы поддерживал шаблоны C ++. Я пробовал VS2019, VisualAssist, Clion, QtCreator.
Рассмотрим пример:
Если я запускаю функцию «Переименовать рефакторинг»
foo::print
,bar::print
она также должна автоматически переименовываться. Потому что они связаны черезcall_print
экземпляры шаблонов функций.источник
Если вы используете Visual C ++ (Express Edition бесплатно), вы можете использовать Visual Assist с www.wholetomato.com (ссылка на функции рефакторинга C ++).
Он имеет 30-дневный пробный период, и мы обнаружили, что он быстрее и более полнофункциональный, чем встроенный IntelliSense в самом продукте Visual C ++.
источник
Если вы ищете для реинжиниринга вашей кодовой базы: MOOSE. Но это большая коллекция инструментов анализа и реинжиниринга, а не редактор.
источник
Теперь есть расширение C ++ для рефакторинга для Visual Studio 2013 от Microsoft: http://visualstudiogallery.msdn.microsoft.com/164904b2-3b47-417f-9b6b-fdd35757d194
источник
Определенно Resharper Ultimate это путь. Счастье гарантировано :)
В бета-версии по состоянию на март 2015 года.
источник
CLion выглядит очень перспективно.
Отказ от ответственности: я еще не пробовал, так как мне нужно преобразовать свои проекты в формат CMake, чтобы использовать его.
источник
Я рекомендую вам попробовать Lattix . Он позволяет анализировать большие кодовые базы C / C ++ для обнаружения архитектуры, выявления проблемных зависимостей и реинжиниринга кода для улучшения модульности и сокращения технической задолженности. Lattix также предоставляет ряд алгоритмов, которые помогут в процессе рефакторинга. Эти алгоритмы помогают вам понять, как перемещать элементы из одной части иерархии в другую, прерывать циклы и перемещать подсистемы, чтобы можно было улучшить взаимодействие и сплоченность подсистем. Вот результаты Lattix, анализирующего ядро Android (1,6 миллиона LOC C / C ++). Полное раскрытие: я работаю на Lattix
источник
Извините, что нашел этот вопрос так поздно. Мои студенты и помощники занимаются рефакторингом C ++ примерно с 2006 года. Большинство инфраструктур рефакторинга CDT было разработано моей командой в институте программного обеспечения IFS. Уже несколько лет мы предоставляем Cevelop нашу версию CDT с поддержкой рефакторинга модернизации кода C ++ и т. д. Cevelop может работать с большими базами кода, если рабочее пространство настроено правильно. Бесплатно доступно на https://cevelop.com
источник
Я нашел следующий плагин для Visual Studio 2013: Visual C ++ Refactoring by Microsoft.
Это простой инструмент переименования, но он работает безупречно. После щелчка правой кнопкой мыши на символе добавляется следующее контекстное меню:
источник