[Перевод] Рефакторинг C++ кода в Visual Studio 2015

Hello C++ World! В прошлую пятницу вышел релиз Visual Studio 2015 Preview, в котором были представлены новые возможности увеличения продуктивности разработки, в том числе рефакторинг кода на С++. В значительной мере на реализацию этого функционала повлияли отзывы комьюнити, которые были получены в ходе тестирования Visual Studio »14» CTPs, так что спасибо всем поучаствовавшим.

В этой статье мы рассмотрим такие возможности Visual Studio 2015 Preview по работе над С++ кодом, как:

Переименование (Rename) Извлечение функции (Extract Function) Генерация заглушек чисто виртуальных методов (Implement Pure Virtuals) Генерация объявлений/заглушек методов (Create Declaration/Definition) Перемещение объявлений функций (Move Function Definition) Преобразование в Raw-String (Convert to Raw-String Literal) Переименование, безусловно, наиболее часто нужный инструмент. Таким образом мы поместили его в самом верху контекстного меню при правом клике на классе\функции\переменной. Кроме того, мы можете активировать его двойным нажатием комбинации Ctrl+R. Сам инструмент двухшаговый — в первом окне вы указываете настройки переименования, второе окно — превью.imageimage

Полезные подсказки

Вы можете отключить поиск переименовываемого символа в комментариях и строковых литералах в первом окне (галочка «Search comments/strings») Также вы можете включить просмотр найденных в комментариях и строках символов, но не переименовывать их (галочка «Rename comments/strings») Больше информации об этой фиче вы можете найти вот в этом видео Извлечение функции было второй по количеству запросов фичей. Мы всё ещё в процессе работы над ней, так что пока что она реализована в виде расширения. После его установки выделите блок кода, который хотите выделить в отдельную функцию, затем правый клик и в меню «Refactor…» выберите «Extract Function/Method».

image

Полезные подсказки

Инструмент имеет кое-какие средства валидации кода, но всё же для нормальной работы старайтесь выделять валидный, целостный блок кода. Извлекаемая функция сохраняет контекст. Это означает, что если вы извлекаете часть кода из метода какого-либо класса, то новая функция будет методом этого же класса. Генерация заглушек виртуальных методов позволяет создать тела всех чисто виртуальных методов в наследуемом классе. Поддерживается множественное наследование. Инструмент вызывается из контекстного меню объявления класса.

image

Полезные подсказки

Инструмент генирирует объявления методов в заголовочном файле, а сами заглушки — в cpp-файле. Вы можете вызвать генерацию заглушек только для одного из базовых классов, из контекстного меню названия этого класса в объявлении наследуемого класса: Операция отмены (undo) удалит все сгенерированные заглушки, но не удалит cpp-файл, если он был создан на предыдущем шаге Больше информации об этом инструменте вы можете найти в этом видео Важный момент: все вышеперечисленные функции работают только при включенном IntelliSense.

Генерация объявлений/заглушек методов позволяет вам быстро сгенерировать недостающее объявление или заглушку тела метода.

image

image

Полезные подсказки

Методы, имеющие тело, но не определённые в заголовочном файле будут подчёркнуты волнистой зелёной линией Можно сгенирировать определения\заглушки сразу для нескольких методов (нужно выделить все и выбрать в контекстном меню «Refactor→Create Declaration/Definition») Больше информации об этом инструменте вы можете найти в этом видео Перемещение объявлений методов позволяет быстро переместить тело метода из заголовочного файла в cpp-файл или наоборот.

image

Полезные подсказки

Больше информации об этом инструменте вы можете найти в этом видео Преобразование в Raw-String позволяет вам сконвертировать любую строку в Raw-String, что значительно улучшает читабельность строк с escape-последовательностями. Функция вызывается из контекстного меню в любом месте строки.

image

Полезные подсказки

В данный момент поддерживаются только следующие символы: \n, \t, \', \», \? Если в вашей строке есть другие escape-последовательности вы получите сообщение об ошибке Обратного преобразования нет — пользуйтесь undo

© Habrahabr.ru