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

Visual Studio предоставляет разные средства для написания, редактирования и рефакторинга кода.

IntelliSense

IntelliSense — это мощное средство завершения кода, которое предлагает символы и фрагменты по мере ввода кода. IntelliSense C++ в Visual Studio выполняется в реальном времени, анализируя вашу базу кода по мере ее обновления и предоставляя рекомендации. Чем больше символов вы вводите, тем меньше предлагается рекомендуемых результатов.

Снимок экрана: раскрывающийся список элементов C плюс плюс, показывающий методы, доступные для строк, таких как добавление, назначение и т. д.

Некоторые символы пропускаются автоматически, чтобы еще больше сократить список результатов. Например, при доступе к членам объекта класса извне класса вы не сможете видеть частные члены по умолчанию или защищенные элементы (если вы не находитсяе в контексте дочернего класса). Вы можете настроить фильтрацию с помощью кнопок в нижней части.

Выбрав нужный символ из раскрывающегося списка, вы можете вызвать для него автозавершение клавишами TAB или ВВОД либо использовать один из других символов фиксации (по умолчанию: { } [ ] ( ) . , : ; + - * / % & | ^ ! = ? @ # \). Чтобы добавить или удалить символы из этого списка, выполните поиск по слову "IntelliSense" в поле быстрого запуска (CTRL+Q) и выберите Текстовый редактор > C/C++ > Дополнительно. Параметр Символы фиксации списка членов позволяет настроить список, внеся необходимые изменения.

Параметр Режим фильтрации списка членов определяет, какие виды автозавершения IntelliSense вы видите. По умолчанию для него задано значение "Нечетко". Если при нечетком поиске соответствий у вас есть символ, который называется MyAwesomeClass, вы можете ввести MAC и найти класс в предложениях автозаполнения. Алгоритм нечеткого поиска задает минимальный порог, которому должны соответствовать символы, отображаемые в списке. При интеллектуальной фильтрации будут отображаться все символы, которые содержат подстроки, соответствующие тому, что вы ввели. При фильтрации по префиксу выполняется поиск строк, которые начинаются с введенных вами символов.

См. подробнее в руководствах по Visual C++ IntelliSense и настройке проекта C++ для IntelliSense.

IntelliCode

IntelliCode — это средство IntelliSense на основе ИИ, которое помещает предположительно наиболее подходящий результат в верхнюю часть списка завершения. Для создания рекомендаций IntelliCode анализирует тысячи проектов с открытым кодом на GitHub, каждый из которых имеет более 100 звезд. В сочетании с контекстом кода список завершения используется для популяризации распространенных приемов работы.

Когда вы пишете код на C++, IntelliCode помогает вам с использованием таких популярных библиотек, как стандартная библиотека C++. Контекст кода используется для ранжирования наиболее полезных рекомендаций. В следующем примере size функция-член обычно используется с sort функцией, поэтому она отображается в верхней части списка результатов.

Снимок экрана: C плюс раскрывающийся список IntelliCode, в котором показаны члены векторного класса, отсортированные по наиболее часто используемым в коде.

В Visual Studio 2022 и Visual Studio 2019 IntelliCode предоставляется как дополнительный компонент в рабочей нагрузке Разработка классических приложений на C++. Чтобы включить IntelliCode для C++, последовательно выберите Средства>Параметры>IntelliCode>Общие и задайте для параметра Базовая модель C++ значение Включено.

В Visual Studio 2017 IntelliCode предоставляется как расширение в Visual Studio Marketplace.

Прогнозная технология IntelliSense (экспериментальная функция)

Прогнозная технология IntelliSense — это экспериментальная функция, которая ограничивает число результатов, отображаемых в раскрывающемся списке IntelliSense, на основе контекста. Алгоритм применяет сопоставление типов, чтобы отобразить только те результаты, которые соответствует ожидаемому типу. Самый просто пример: если ввести int x = и вызвать раскрывающийся список IntelliSense, вы увидите только целые числа или функции, которые их возвращают. Эта функция отключена по умолчанию, так как она по-прежнему находится в разработке. Он лучше всего работает с глобальными символами; Функции-члены пока не поддерживаются. Можно включить эту функцию, введя "прогнозный" в поле быстрого запуска или последовательно выбрав Средства>Параметры>Текстовый редактор>C/C++>Экспериментальные функции>Включить прогнозный IntelliSense.

Чтобы переопределить прогнозную intelliSense и отобразить более длинный список, нажмите клавиши CTRL+J. Если функция Predictive IntelliSense включена, при вызове CTRL+J удаляется фильтр прогнозной версии. Повторное нажатие CTRL+J снова удалит фильтр специальных возможностей из результатов списка членов, где это применимо. Кнопка ([+]) в раскрывающемся списке IntelliSense выполняет то же самое, что и CTRL+J. Наведите указатель мыши на кнопку, чтобы просмотреть сведения о отображаемых подсказках.

Снимок экрана: прогнозный IntelliSense C++.

На предыдущем снимке экрана показаны несколько кнопок в раскрывающемся списке. Они позволяют включить фильтры IntelliSense для получения разных типов результатов:

  • Переменные и константы
  • Функции
  • Типы
  • Макросы
  • Перечисления
  • Пространства имен

Кнопка отображается только в том случае, если она относится к текущему сеансу IntelliSense. Обычно все кнопки не отображаются одновременно.

Шаблон IntelliSense

Панель шаблона — это элемент пользовательского интерфейса, который отображается, когда курсор находится в определении шаблона. Это полезно, так как можно указать примеры аргументов шаблона для intellisense, которые будут отображаться при редактировании текста шаблона. Например, можно указать, что аргумент шаблона имеет тип std::vector<int>. Затем при использовании этого аргумента в тексте шаблона вы увидите элементы std::vector<int>intellisense.

Снимок экрана: панель шаблона с выделенным параметром

Щелкните значок <T>, чтобы развернуть или свернуть панель шаблонов. Щелкните значок карандаша или дважды щелкните панель шаблона, чтобы открыть окно "Изменить ", где указаны типы аргументов для параметров.

Снимок экрана: режим редактирования в строке шаблона, в котором вы вводите тип для каждого параметра шаблона.

Панель шаблонов может автоматически заполнять типы параметров на основе экземпляров шаблона в коде. Щелкните Добавить все существующие экземпляры, чтобы просмотреть список всех аргументов, которые использовались для создания экземпляра шаблона, во всей базе кода.

Снимок экрана: Результаты шаблона IntelliSense, в котором перечислены различные типы, используемые для создания экземпляра параметра шаблона C, например C = AmbientLight, C = Свеча и другие.

В окне в нижней части редактора отображаются расположение и аргументы каждого экземпляра. Вы можете выбрать экземпляр, чтобы перейти к расположению в коде, где найден этот экземпляр.

Снимок экрана: список экземпляров шаблона в коде. Список экземпляров, файлов, расположений и аргументов.

Сведения о панели шаблонов зависят от пользователя. Он хранится в папке и не фиксируется в системе .vs управления версиями.

Подчеркивание ошибок и быстрые исправления

Если редактор определяет ошибку в коде, он подчеркнет ее цветной волнистой линией. Красные волнистые линии указывают на код, который не будет скомпилирован. Зеленые волнистые линии указывают на другие проблемы, которые также могут быть серьезными. Вы можете открыть окно Список ошибок, чтобы просмотреть дополнительные сведения о проблемах.

Для некоторых типов ошибок и распространенных шаблонов программирования редактор предложит быстрое исправление в виде лампочки, которая отображается при наведении указателя мыши на волнистую линию. Щелкните стрелку вниз, чтобы просмотреть предложения.

В следующем примере мы объявили vector, но определение не найдено, поэтому редактор предлагает включить требуемый файл заголовка:

Снимок экрана: ошибка и предлагаемое быстрое исправление для #include vector.

Редактор также предлагает быстрые исправления для определенных функций рефакторинга. Например, если объявить класс в файле заголовка, Visual Studio предложит создать для него определение в отдельном файле .cpp.

Снимок экрана: быстрое исправление с помощью выделенного пункта

Отслеживание изменений

При каждом изменении файла слева отображается желтая полоска, указывающая на то, что внесены несохраненные изменения. При сохранении файла полоска становится зеленой. Зеленая и желтая полоски отображаются, пока документ открыт в редакторе. Они представляют изменения, внесенные с момента последнего открытия документа.

Снимок экрана: C плюс отслеживание изменений. Желтая полоса вниз слева указывает на изменения.

Перенос кода

Строки кода можно перемещать вверх и вниз. Для этого выберите их, удерживая нажатой клавишу ALT и одну из клавиш со стрелками (вверх или вниз).

Вставка фрагментов кода

Фрагмент — это предварительно определенная часть исходного кода. Щелкните правой кнопкой мыши одну точку или выделенный текст и выберите фрагмент кода, чтобы вставить фрагмент или окружить выделенный текст фрагментом кода. На следующем рисунке показана процедура размещения выбранного оператора в цикле for. На последнем изображении желтым цветом выделены редактируемые поля, доступ к которым осуществляется с помощью клавиши TAB. Для получения дополнительной информации см. Code Snippets.

Снимок экрана: раскрывающийся список вставки фрагмента кода.

Выбрана функция. В раскрывающемся списке, который отображается после правой кнопкой мыши имя функции, в окружении... выделен желтым цветом. В раскрывающемся списке "Вокруг" выбран фрагмент цикла for. Это приводит к тому, что цикл поместит цикл вокруг функции. Переменная цикла и ограничение отображаются желтым цветом, чтобы указать, что они редактируемые поля.

Добавить класс

Добавьте новый класс из меню Проект или контекстного меню в обозревателе решений:

Снимок экрана: диалоговое окно

Можно также использовать мастер классов для изменения или просмотра существующего класса.

Снимок экрана мастера классов с параметрами добавления методов, переменных-членов и многое другое.

Дополнительные сведения см. в разделе Добавление функциональных возможностей с помощью мастеров кода (C++).

Рефакторинг

Рефакторинг доступен в контекстном меню быстрых действий. Или можно щелкнуть лампочку в редакторе. Некоторые также находятся в меню Правка > Рефакторинг. Эти функции включают перечисленные ниже.

Применение стиля кода с помощью ClangFormat и EditorConfig

В Visual Studio, начиная с версии 2017, реализована поддержка ClangFormat — популярной служебной программы для форматирования кода C++ на основе Clang/LLVM. Введите ClangFormat в поле быстрого запуска, чтобы настроить использование одного из следующих распространенных форматов:

  • LLVM
  • Google
  • Chromium
  • Mozilla
  • WebKit
  • Visual Studio

Вы также можете предоставить собственный .clang-format или _clang-format файл для применения пользовательских правил ко всем файлам кода на одном уровне или ниже.

Эти файлы легко использовать совместно с помощью системы управления версиями, следовательно, вы можете применять соглашения о написании кода во всей группе разработчиков.

Снимок экрана: файл формата .clang, который имеет множество параметров, таких как ограничение столбца, ширина отступа, ширина вкладки и т. д.

Visual Studio, начиная с версии 2017, также поддерживает EditorConfig — программу, которая работает аналогичным образом. Однако ClangFormat имеет больше параметров стиля, чем EditorConfig, включая правила, относящиеся к C++. С помощью EditorConfig вы можете создавать и размещать файлы .editorconfig в разных папках вашей базы кода, чтобы определять стили кода для этих папок и подпапок. Файл .editorconfig заменяет все другие файлы .editorconfig в родительских папках, перезаписывая все параметры форматирования, которые можно настроить, выбрав Средства>Параметры. Вы можете задать правила, определяющие использование табуляции и пробелов, настраивающие размер отступов и многое другое. См. подробнее о создании переносимых настраиваемых параметров редактора с помощью EditorConfig.

Другие параметры форматирования

Поле быстрого запуска — это самый быстрый способ найти нужный параметр или средство. Он расположен в главном меню. Просто начните ввод и список автоматического завершения отфильтрует результаты.

Снимок экрана: поле поиска быстрого запуска. В нем показан поиск C плюс плюс расширенный, который приводит к параметрам текстового редактора.

Чтобы задать параметры форматирования, например отступы, завершение скобок и раскраску, введите C++ Formatting (Форматирование C++) в поле быстрого запуска.

Снимок экрана, показывающий параметры форматирования C++, такие как автоматическое отступ при вводе вкладки.

Другие параметры форматирования можно настроить в главном меню, выбрав Изменить>Дополнительно.

Снимок экрана: расширенные параметры редактирования, такие как просмотр пробела, оболочка слов, комментирование выделения, увеличение отступа и многое другое.

Параметры для включения и настройки функций редактирования C++ можно настроить в разделе Сервис>Параметры>Текстовый редактор>C/C++. Чтобы получить дополнительную справку после выбора параметра, который вы хотите задать, выделите диалоговое окно и нажмите клавишу F1. Чтобы просмотреть общие параметры форматирования кода, введите Editor C++ в поле быстрого запуска.

Снимок экрана: выбранные элементы меню Visual Studio и выделенный пункт меню

Экспериментальные функции, которые могут присутствовать или отсутствовать в будущих версиях Visual Studio, можно найти в диалоговом окне экспериментальных функций C++ для текстового редактора. В Visual Studio, начиная с версии 2017, в этом диалоговом окне можно включить прогнозную технологию IntelliSense.

См. также

Чтение и понимание кода C++
Навигация по базе кода C++ в Visual Studio
Совместная работа с Live Share для C++