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