Редактирование и рефакторинг кода C++ в Visual Studio
Visual Studio предоставляет разные средства для написания, редактирования и рефакторинга кода.
IntelliSense
IntelliSense — это мощное средство завершения кода, которое предлагает символы и фрагменты по мере ввода кода. IntelliSense C++ в Visual Studio выполняется в реальном времени, анализируя вашу базу кода по мере ее обновления и предоставляя рекомендации. Чем больше символов вы вводите, тем меньше предлагается рекомендуемых результатов.
Некоторые символы пропускаются автоматически, чтобы еще больше сократить список результатов. Например, при доступе к членам объекта класса извне класса вы не сможете видеть частные члены по умолчанию или защищенные элементы (если вы не находитсяе в контексте дочернего класса). Вы можете настроить фильтрацию с помощью кнопок в нижней части.
Выбрав нужный символ из раскрывающегося списка, вы можете вызвать для него автозавершение клавишами 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
функцией, поэтому она отображается в верхней части списка результатов.
В 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 для получения разных типов результатов:
- Переменные и константы
- Функции
- Типы
- Макросы
- Перечисления
- Пространства имен
Кнопка отображается только в том случае, если она относится к текущему сеансу IntelliSense. Обычно все кнопки не отображаются одновременно.
Шаблон IntelliSense
Панель шаблона — это элемент пользовательского интерфейса, который отображается, когда курсор находится в определении шаблона. Это полезно, так как можно указать примеры аргументов шаблона для intellisense, которые будут отображаться при редактировании текста шаблона. Например, можно указать, что аргумент шаблона имеет тип std::vector<int>
. Затем при использовании этого аргумента в тексте шаблона вы увидите элементы std::vector<int>
intellisense.
Щелкните значок <T>, чтобы развернуть или свернуть панель шаблонов. Щелкните значок карандаша или дважды щелкните панель шаблона, чтобы открыть окно "Изменить ", где указаны типы аргументов для параметров.
Панель шаблонов может автоматически заполнять типы параметров на основе экземпляров шаблона в коде. Щелкните Добавить все существующие экземпляры, чтобы просмотреть список всех аргументов, которые использовались для создания экземпляра шаблона, во всей базе кода.
В окне в нижней части редактора отображаются расположение и аргументы каждого экземпляра. Вы можете выбрать экземпляр, чтобы перейти к расположению в коде, где найден этот экземпляр.
Сведения о панели шаблонов зависят от пользователя. Он хранится в папке и не фиксируется в системе .vs
управления версиями.
Подчеркивание ошибок и быстрые исправления
Если редактор определяет ошибку в коде, он подчеркнет ее цветной волнистой линией. Красные волнистые линии указывают на код, который не будет скомпилирован. Зеленые волнистые линии указывают на другие проблемы, которые также могут быть серьезными. Вы можете открыть окно Список ошибок, чтобы просмотреть дополнительные сведения о проблемах.
Для некоторых типов ошибок и распространенных шаблонов программирования редактор предложит быстрое исправление в виде лампочки, которая отображается при наведении указателя мыши на волнистую линию. Щелкните стрелку вниз, чтобы просмотреть предложения.
В следующем примере мы объявили vector
, но определение не найдено, поэтому редактор предлагает включить требуемый файл заголовка:
Редактор также предлагает быстрые исправления для определенных функций рефакторинга. Например, если объявить класс в файле заголовка, Visual Studio предложит создать для него определение в отдельном файле .cpp.
Отслеживание изменений
При каждом изменении файла слева отображается желтая полоска, указывающая на то, что внесены несохраненные изменения. При сохранении файла полоска становится зеленой. Зеленая и желтая полоски отображаются, пока документ открыт в редакторе. Они представляют изменения, внесенные с момента последнего открытия документа.
Перенос кода
Строки кода можно перемещать вверх и вниз. Для этого выберите их, удерживая нажатой клавишу ALT и одну из клавиш со стрелками (вверх или вниз).
Вставка фрагментов кода
Фрагмент — это предварительно определенная часть исходного кода. Щелкните правой кнопкой мыши одну точку или выделенный текст и выберите фрагмент кода, чтобы вставить фрагмент или окружить выделенный текст фрагментом кода. На следующем рисунке показана процедура размещения выбранного оператора в цикле for. На последнем изображении желтым цветом выделены редактируемые поля, доступ к которым осуществляется с помощью клавиши TAB. Для получения дополнительной информации см. Code Snippets.
Выбрана функция. В раскрывающемся списке, который отображается после правой кнопкой мыши имя функции, в окружении... выделен желтым цветом. В раскрывающемся списке "Вокруг" выбран фрагмент цикла for. Это приводит к тому, что цикл поместит цикл вокруг функции. Переменная цикла и ограничение отображаются желтым цветом, чтобы указать, что они редактируемые поля.
Добавить класс
Добавьте новый класс из меню Проект или контекстного меню в обозревателе решений:
Можно также использовать мастер классов для изменения или просмотра существующего класса.
Дополнительные сведения см. в разделе Добавление функциональных возможностей с помощью мастеров кода (C++).
Рефакторинг
Рефакторинг доступен в контекстном меню быстрых действий. Или можно щелкнуть лампочку в редакторе. Некоторые также находятся в меню Правка > Рефакторинг. К этим функциям относятся:
- Переименовать
- Извлечение функции
- Реализация чистых виртуальных функций
- Создание объявления или определения
- Перемещение определения функции
- Преобразование в необработанный строковый литерал
- Изменение сигнатуры
Применение стиля кода с помощью ClangFormat и EditorConfig
В Visual Studio, начиная с версии 2017, реализована поддержка ClangFormat — популярной служебной программы для форматирования кода C++ на основе Clang/LLVM. Введите ClangFormat в поле быстрого запуска, чтобы настроить использование одного из следующих распространенных форматов:
- LLVM
- Chromium
- Mozilla
- WebKit
- Visual Studio
Вы также можете предоставить собственный .clang-format
или _clang-format
файл для применения пользовательских правил ко всем файлам кода на одном уровне или ниже.
Эти файлы легко использовать совместно с помощью системы управления версиями, следовательно, вы можете применять соглашения о написании кода во всей группе разработчиков.
Visual Studio, начиная с версии 2017, также поддерживает EditorConfig — программу, которая работает аналогичным образом. Однако ClangFormat имеет больше параметров стиля, чем EditorConfig, включая правила, относящиеся к C++. С помощью EditorConfig вы можете создавать и размещать файлы .editorconfig в разных папках вашей базы кода, чтобы определять стили кода для этих папок и подпапок. Файл .editorconfig заменяет все другие файлы .editorconfig в родительских папках, перезаписывая все параметры форматирования, которые можно настроить, выбрав Средства>Параметры. Вы можете задать правила, определяющие использование табуляции и пробелов, настраивающие размер отступов и многое другое. См. подробнее о создании переносимых настраиваемых параметров редактора с помощью EditorConfig.
Другие параметры форматирования
Поле быстрого запуска — это самый быстрый способ найти нужный параметр или средство. Он расположен в главном меню. Просто начните ввод и список автоматического завершения отфильтрует результаты.
Чтобы задать параметры форматирования, например отступы, завершение скобок и раскраску, введите C++ Formatting (Форматирование C++) в поле быстрого запуска.
Другие параметры форматирования можно настроить в главном меню, выбрав Изменить>Дополнительно.
Параметры для включения и настройки функций редактирования C++ можно настроить в разделе Сервис>Параметры>Текстовый редактор>C/C++. Чтобы получить дополнительную справку после выбора параметра, который вы хотите задать, выделите диалоговое окно и нажмите клавишу F1. Чтобы просмотреть общие параметры форматирования кода, введите Editor C++
в поле быстрого запуска.
Экспериментальные функции, которые могут присутствовать или отсутствовать в будущих версиях Visual Studio, можно найти в диалоговом окне экспериментальных функций C++ для текстового редактора. В Visual Studio, начиная с версии 2017, в этом диалоговом окне можно включить прогнозную технологию IntelliSense.
См. также
Чтение и понимание кода C++
Навигация по базе кода C++ в Visual Studio
Совместная работа с Live Share для C++