18 November 2014

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

Блог компании Инфопульс Украина corporate blogC++Designing and refactoringVisual Studio
Translation
Tutorial
Original author: Gabriel Ha
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. Сам инструмент двухшаговый — в первом окне вы указываете настройки переименования, второе окно — превью.

image
image

Полезные подсказки
  • Вы можете отключить поиск переименовываемого символа в комментариях и строковых литералах в первом окне (галочка «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
Tags:c++Visual Studio
Hubs: Блог компании Инфопульс Украина corporate blog C++ Designing and refactoring Visual Studio
+14
23.8k 50
Comments 15