Редактирование и рефакторинг кода 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. Если прогнозный 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 = Candle и другие.

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

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

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

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

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

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

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

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

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

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

Change tracking

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

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

Перенос кода

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

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

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

Снимок экрана: элемент управления

Выбрана функция. В раскрывающемся списке, который отображается после щелчка правой кнопкой мыши по имени функции , Окружить... выделен желтым цветом. В раскрывающемся списке Surround With: выбран фрагмент цикла for. Это приводит к тому, что вокруг функции будет помещать цикл 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.

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

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

Снимок экрана: поле поиска быстрого запуска. Он показывает поиск 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++