Visual studio не работает рефакторинг

Обновлено: 05.07.2024

1. Тормозящие окошки Toolbox, Solution Explorer и т.п.
Очень удобная и полезная функция "самоубирающихся" вспомогательных окон иногда бывает настоящим злом, особенно если на машине идет параллельно с работой в Visual Studio какой-то ресурсоемкий процесс. Чаще всего заторможенность при появлении этих окон связана с эффектом "плавного появления", отключив который можно добиться несколько большей производительности.
Решение: Tools -> Options -> General -> Убрать галку Animate environment tools

2. Долгая загрузка справочной системы по F1
Сама по себе справочная система загружается не моментально (особенно в первый раз). Можно ускорить процесс появления справки, если вас устроит информация из локальной установленной справки, просто отключив поиск online. В большинстве случаев локальной документации, при условии полной установки MSDN, более чем достаточно.
Решение: Tools -> Options -> Help -> Online -> Выбрать Try local only, not online

3. Быстрый переход к директории, содержащей исходные коды проекта
Если в Visual Studio 2005 у вас уже открыт проект и Вам необходимо выполнить нечто вне IDE, то открыть директорию проекта можно прямо из Visual Stuio.
Решение: щелкните правой кнопкой мыши по вкладке любого файла, открытого в редакторе и выберите Open Containing Folder

7. Создание собственных шаблонов приложений
Например, вы разработали заготовку для создания plug-in'ов для некоторой системы и хотите добавить в список проектов Visual Studio шаблон plug-in'а. Для этого есть экспорт проектов как шаблонов!
Решение: File -> Export Template.

8. Удобное редактирование кода в полноэкранном режиме
Если вы также как и я большую часть времени проводите за написанием кода, а не за тасканием контролов мышью или перебиранием свойств в окне Properties, то, конечно, удобнее всего редактировать код в полноэкранном режиме. Главное - знать, как его вызвать!
Решение: Shift + Alt + Enter

9. Отладка хранимых процедур
Работает только в Visual Studio 2005 Professional и более высоких редакций.
Решение: Откройте диалоговое окно настроек проекта (щелчек правой кнопкой мыши по проекту в Solution Explorer -> Properties). В окне, для Web приложения выберите Start Options, а для Windows приложения выберите Debug. Установите галочку Enable SQL Debugging. Теперь можно ставить точки останова в хранимых процедурах.

У меня возникли проблемы с поиском контекстного меню правой кнопкой мыши в Visual Studio 2015. Я знаю, что ничего не случилось с моим проектом или файлом, над которым я работаю. Я могу найти контекстное меню рефакторинга правой кнопкой мыши в Visual Studio 2013. Однако в Visual Studio 2015 нет контекстного меню рефакторинга в контекстном меню правой кнопкой мыши.

куда он делся? Как мне его вернуть?

ваше предложение не может включать "Edit - >Refactor".

редактировать Я попытались сбросить настройки visual studio по умолчанию с помощью Tools - >Import и Export Settings, и это также не вернуло меню.

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

используя рефакторинг метода извлечения в качестве примера, вы все равно можете использовать эту функцию, она просто не выполняется так же, как раньше:

Select parts to extract

щелкните правой кнопкой мыши

Right click

Quick actions

Click extract method

Я думаю, что они изменили его, чтобы чувствовать себя более "ReSharper" ey. Все функции еще должна быть там.

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

рекомендуется использовать сочетания клавиш в Visual Studio.

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

Ctrl + . сочетание клавиш для извлечения метода в Visual Studio 2015 и далее, Ctrl + M , R больше не работает в новых версиях

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

IntelliSense

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

Снимок экрана C++ раскрывающийся список элементов.

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

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

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.

Снимок экрана: отображение существующих экземпляров IntelliSense для шаблона C++

Щелкните значок <T> , чтобы развернуть или свернуть строку шаблона. Щелкните значок карандаша или дважды щелкните строку шаблона, чтобы открыть окно Редактирование.

Снимок экрана: IntelliSense для шаблона в C++.

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

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

Снимок экрана: список результатов IntelliSense для шаблона C++

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

Снимок экрана: сопоставление экземпляров IntelliSense для шаблона C++

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

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

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

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

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

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

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

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

Change tracking

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

Снимок экрана: отслеживание изменений в C++.

Перенос кода

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

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

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

Снимок экрана: раскрывающееся- меню "Вставка фрагмента" в C++.

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

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

Добавление нового класса в C++

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

Мастер классов C++.

Рефакторинг

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

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

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

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

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

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

Снимок экрана: формат Clang в C++.

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

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

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

Снимок экрана: быстрый запуск Visual Studio.

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

Снимок экрана: параметры форматирования C++.

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

Снимок экрана: расширенные параметры редактирования C++.

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

Снимок экрана: Инструменты Visual Studio > параметры редактора в диалоговом окне "Параметры".

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

Операции рефакторинга кода, доступные в Visual Studio

Встроенная поддержка рефакторинга, предлагаемая системой Visual Studio 2013 для разработчиков проектов на языке VB, ограничена символическими методами Rename и Generate Method Stub.

Операции рефакторинга

Операция Extract Method

Создание метода с помощью рефакторинга

Например, в следующем сниппете, для того чтобы вынести условное логическое выражение в отдельный метод, необходимо выделить код и выбрать команду Extract Method из контекстного меню, появляющегося после щелчке правой кнопкой мыши:

На этом месте автоматически генерируется следующий код:

Операция Encapsulate Field

При рефакторинге часто требуется инкапсулировать в существующий класс некое свойство. Для этого предназначена операция Encapsulate Field. Чтобы выполнить это действие, следует выбрать переменную, которую требуется инкапсулировать, и выбрать соответствующую команду в контекстном меню. Это дает разработчику возможность указать свойство и выбрать место, в котором следует искать ссылку на него:

Пример использовании операции рефакторинга Encapsulate Field

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

Операция Extract Interface

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

Извлечение интерфейса с помощью команды рефакторинга Extract Interface

В следующем примере требуется извлечь в отдельный интерфейс первый метод:

После выбора команды Extract Interface из контекстного меню, появляющегося после щелчка правой кнопкой мыши, и выбора метода ShouldBeInInterface, подлежащего извлечению, в диалоговом окне Extract Interface (как показано на рисунке выше), в новом файле возникает новый интерфейс, а исходный файл обновляется следующим образом:

Операция Reorder Parameters

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

Диалоговое окно Reorder Parameters dialog, показанное на рисунке ниже, позволяет переставлять параметры в списке в соответствии с требуемым порядком:

Перестановка параметров метода с помощью команды рефакторинга Reorder Parameters

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

Операция Remove Parameters

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

На рисунке ниже показано диалоговое окно Remove Parameters, которое используется для удаления параметров из списка параметров. Если параметр был удален непреднамеренно, его легко восстановить. Как указывает предупреждение, размещенное в этом диалоговом окне, удаление параметров часто приводит к неожиданным функциональным ошибкам, поэтому важно контролировать внесенные изменения. Для того чтобы оценить внесенные изменения, можно снова использовать окно предварительного просмотра.

Использование команды рефакторинга Remove Parameters

Операция Rename

Переименование переменных с помощью операции рефакторинга Rename

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

Операция Generate Method Stub

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

Разумеется, этот код порождает ошибку при сборке, поскольку вызываемый метод еще не определен. Используя операцию рефакторинга Generate Method Stub (доступную с помощью интеллектуального указателя в самом коде), можно сгенерировать заглушку метода. Как видно из следующего примера, заглушка метода содержит входные параметры и тип возвращаемого значения:

Меню Organize Usings

Использование команд меню Organize Usings

Разработчики проектов на языке VB не имеют возможности упорядочивать и удалять неиспользуемые инструкции Imports. Однако на закладке References в диалоговом окне Project Properties можно пометить пространства имен, которые должны быть импортированы в каждый исходный файл. Это позволит значительно сократить количество инструкций Imports. На этой странице можно также удалить ссылки на неиспользуемые сборки.

Очень полезно упорядочивать директивы using в алфавитном порядке, чтобы легко управлять пространствами имен, на которые они ссылаются. Для того чтобы не делать это вручную, нужно щелкнуть правой кнопкой мыши в окне редактора кода и выбрать команду Organize Usings --> Sort Usings.

Для того чтобы одновременно упорядочить директивы using и удалить неиспользуемые, достаточно щелкнуть правой кнопкой мыши в окне редактора кода и выбрать команду Organize Usings --> Remove and Sort.

Файлы шаблонного кода, предусмотренные в системе Visual Studio по умолчанию, содержат директивы using в начале файла за пределами блока пространства имен. Однако, согласно принципам стиля StyleCop, директивы using должны содержаться в блоке пространства имен. Операция Organize Usings распознает текущее расположение инструкций using в файле и оставляет их на месте.

Читайте также: