ReSharper C++ и Visual Assist

Здесь перечислены отличия между ReSharper C++ и расширением Visual Assist от Whole Tomato.

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

Если вы обнаружите неточности в таблице, сообщите нам об этом в комментариях — мы как можно скорее обновим данные.

Visual Assist в Visual Studio 2019 + Visual Assist Build 2341
в Visual Studio 2019 + ReSharper C++ 2019.2

Поддерживаемые версии Visual Studio

Visual Studio 2019 Visual Studio 2019
Visual Studio 2017 Visual Studio 2017
Visual Studio 2015 Visual Studio 2015
Visual Studio 2013 Visual Studio 2013
Visual Studio 2012 Visual Studio 2012
Visual Studio 2010 Visual Studio 2010
Visual Studio 2008 Не поддерживается
Visual Studio 2005 Не поддерживается
Visual Studio .NET 2003 Не поддерживается
Visual Studio .NET 2002 Не поддерживается
Visual C++ 6.0 Не поддерживается

Поддерживаемые спецификации C/C++

C/C++ C/C++
C++/CLI C++/CLI

Обнаружение проблем в коде

Подсветка неизвестных символов Подсветка неразрешенных символов
Навигация между проблемами в коде (окно инструментов, редактор) Навигация между проблемами в коде (окно инструментов, редактор, специальные команды)
21 инспекция Clang-Tidy 264 интегрированные проверки Clang-Tidy
Не поддерживается 652 интегрированные диагностические проверки Clang
Не поддерживается 87 интегрированных проверок Clang Static Analyzer
Проверка правописания Проверка правописания
Подсветка несоответствующих разделителей Не поддерживается
Не поддерживается Нарушение правил именования
Нулевую константу можно заменить на nullptr Нулевую константу можно заменить на nullptr
Переопределение функции без спецификатора override Переопределение функции без спецификатора override
Конструктор shared_pointer/unique_pointer можно заменить на make_shared/make_unique Конструктор умного указателя используется вместо соответствующей функции make
Не поддерживается Более 180 собственных инспекций кода
Не поддерживается Инспекции кода для большинства ошибок и некоторых предупреждений компилятора
Не поддерживается Асинхронный поиск проблем с кодом в любой области
Не поддерживается Запуск инспекции кода из командной строки

Быстрые исправления

Генерация объектов из использования Генерация объектов из использования
Добавление #include Импорт глобальной переменной, типа, определения типа, функции, макроса
Создание объявления Создание объявления
Исправление неверного регистра Не поддерживается
Больше 10 быстрых исправлений для настраиваемых инспекций Больше 120 быстрых исправлений для настраиваемых инспекций

Помощь при написании кода

Подсветка парных разделителей Подсветка парных объектов (включая макросы и аргументы формата в printf и boost::format)
Подсветка текущей строки Подсветка текущей строки
Аббревиатуры / Сокращения CamelHumps
Списки предложений / Умные предложения Контекстное автодополнение
Преобразование точки в -> Преобразование точки в -> и обратное действие
Умное выделение Расширение/сужение области выделения + Выделение текущего члена
Буфер обмена с несколькими записями История буфера обмена с предпросмотром объектов
Информация о параметрах Информация о параметрах
Не поддерживается Подсказки в редакторе
Дополнительное выделение цветом (6 видов идентификаторов) / Системные символы выделяются курсивом / Локальные символы выделяются жирным шрифтом Подсветка синтаксиса (20 различных идентификаторов)
Подсветка ссылок на текущий символ Подсветка использований символа в текущем файле
Оборачивание выделенного фрагмента кода конструкцией языка Оборачивание фрагмента кода конструкцией языка по шаблону / Добавление однострочных или блочных комментариев
Автоматическое добавление закрывающих скобок Автоматическое добавление парных разделителей и знаков форматирования
Быстрый просмотр документации Подсказки с документацией и подсветкой кода
Автоматическое раскрытие многострочных комментариев нажатием Enter Автоматическое раскрытие многострочных комментариев /**/ и /// нажатием Enter
Добавление нижнего подчеркивания после m и Shift Не поддерживается
Улучшенные списки автодополнения Не поддерживается
Подсветка совпадающих слов (в коде и комментариях) Не поддерживается
Индикатор длины строки (отступа справа) Не поддерживается
Сортировка строк Не поддерживается
Вставка пути Не поддерживается
Предварительный просмотр файлов, указанных в комментариях Не поддерживается
Сброс масштаба в редакторе Не поддерживается
Не поддерживается Дублирование текущей строки или выделенного фрагмента кода
Не поддерживается Постфиксное автодополнение
Не поддерживается Постфиксные шаблоны
Не поддерживается Быстрый просмотр документации
Не поддерживается Автоподсветка точек выхода из функции

Соответствие выбранному стилю кода

Форматирование после вставки (правила форматирования унаследованы из Visual Studio) Применение правил форматирования в любой области (собственный расширенный набор правил форматирования ReSharper C++)
Не поддерживается Обучение правилам форматирования на основе существующего кода
Не поддерживается Поддержка EditorConfig
Не поддерживается Поддержка Clang-Format
Не поддерживается Применение настроек стиля кода и удаление избыточного кода в любой области с помощью действия Code Cleanup
Не поддерживается Настраиваемый стиль директивы включения заголовочного файла
Не поддерживается Настраиваемые правила именования с предустановленными схемами (STL, Google, LLVM, CamelCase, Microsoft)
Не поддерживается Настраиваемый стиль модификаторов const и volatile в сгенерированном коде
Не поддерживается Настраиваемый стиль директивы include в сгенерированном коде
Не поддерживается Настраиваемый стиль инициализаторов указателей по умолчанию (0|nullptr|NULL) в сгенерированном коде

Рефакторинги и преобразования кода

Доступ к командам рефакторинга Рефакторинг элемента под кареткой
Rename Rename
Изменение сигнатуры Изменение сигнатуры
Введение переменной Введение переменной
Инкапсуляция поля Инкапсуляция поля (с помощью действия генерации функций get и set)
Извлечение метода Извлечение метода
Добавление/удаление фигурных скобок Добавление/удаление фигурных скобок
Переименование файлов Переименование файлов
Перенос реализации в исходный файл Перенос реализации в исходный файл
Перенос реализации в заголовочный файл / объявление класса Не поддерживается
Перенос выделенного кода в новый файл Не поддерживается
Шаблоны для рефакторингов (с возможностью редактирования) Не поддерживается
Преобразование экземпляра в указатель и наоборот Не поддерживается
Упрощение объявления Не поддерживается
Не поддерживается Введение поля
Не поддерживается Подстановка переменной
Не поддерживается Введение псевдонима пространства имен
Не поддерживается Введение/подстановка typedef
Не поддерживается Добавление спецификатора = default, = delete, pure или virtual к функции
Не поддерживается Преобразование ?: в if и обратно
Не поддерживается Замена угловых скобок вокруг директивы #include на кавычки и наоборот
Не поддерживается Преобразование объявления typedef в объявление псевдонима и наоборот
Не поддерживается Преобразование в определение пространства имен с вложенностью
Не поддерживается Преобразование обычного типа возвращаемого значения в trailing return type и обратно
Не поддерживается Создание производного типа: класса, интерфейса, структуры, класса интерфейса, структуры интерфейса, ссылочного класса или ссылочной структуры
Не поддерживается Перестановка операндов бинарного оператора сравнения
Не поддерживается Перестановка аргументов оператора
Не поддерживается Инициализация поля из параметра конструктора
Не поддерживается Инверсия инструкции if
Не поддерживается Объединение вложенных операторов if
Не поддерживается Отрицание логического выражения
Не поддерживается Удаление фигурных скобок
Не поддерживается Замена auto на явное объявление типа
Не поддерживается Замена 'decltype' явных значением типа
Не поддерживается Замена 'decltype(auto)' явным объявлением типа
Не поддерживается Разделить или объединить объявление с несколькими объявлениями
Не поддерживается Подстановка вызова макроса
Не поддерживается Замена псевдонима шаблонного типа
Не поддерживается Явное указание аргументов шаблона
Не поддерживается Замена typedef (или вложенных typedef) на тип из определения

Генерация кода

Реализация интерфейса/виртуальных методов Генерация отсутствующих/переопределяющих членов
Генерация реализации Генерация реализации + генерация реализаций на месте (inline implementation)
Генерация реализаций методов Генерация определений
Генерация пропущенных операторов case Генерация пропущенных операторов case для перечисляемых типов
Документирование метода Документирование символа
Добавление объявления (Forward Declaration) для неопределенного символа Добавление объявления (Forward Declaration) для неопределенного символа
Добавление члена Не поддерживается
Добавление похожего члена Не поддерживается
Не поддерживается Генерация конструкторов
Не поддерживается Генерация операторов copy и move
Не поддерживается Генерация функций get и set
Не поддерживается Генерация операторов равенства
Не поддерживается Генерация операторов сравнения
Не поддерживается Генерация операторов печати (включая функции Boost.Serialization)
Не поддерживается Генерация hash-функции
Не поддерживается Генерация swap-функции
Не поддерживается Генерация методов Google Mock
Не поддерживается Генерация функции для преобразования перечисления в строку (настраиваемая)
Не поддерживается Создание производного типа

Сниппеты и шаблоны

Шаблоны VA 30 встроенных шаблонов + возможность создавать пользовательские шаблоны
Оборачивание фрагмента кода в шаблон 19 встроенных шаблонов для оборачивания кода + возможность создавать пользовательские шаблоны
Создать файл (нужно вызывать дважды для файлов заголовков и cpp) Встроенные шаблоны файлов для класса и структуры (заголовочный и cpp-файл создаются одновременно) + пользовательские шаблоны файлов
Зарезервированные строки / заглушки для переменных окружения в шаблонах Макросы в шаблонах кода
Редактор шаблонов Редактор шаблонов
Создание шаблона из выбранного кода Создание шаблона из выбранного кода
Не поддерживается Многофайловые шаблоны

Навигация и поиск

Переход к объявлению (команда Goto) Переход к объявлению (с учетом использования)
Переход к реализации (команда Goto) Переход к реализации
Окно VA Outline Просмотр структуры файла
Недавние файлы (VA view) Переход к недавним файлам
Открыть файл в решении Переход к файлу
Поиск символа в решении Переход к символу
Переход к связанным файлам Переход к связанным файлам
Переход к члену класса Переход к члену файла
Переход по областям видимости Переход к следующему/предыдущему члену
Поиск ссылок Поиск использований
Поиск по контексту Переход к предыдущему/следующему подсвеченному элементу / окно Find Results
Открытие связанного файла Переключение между исходным и заголовочным файлом
Навигация вперед и назад по коду Перемещение по истории навигации
VA-хештеги Закладки
Ссылки на внешние источники Объекты to-do поддерживают ссылки на внешние ресурсы
Список методов файла Не поддерживается
Панель навигации VA Не поддерживается
Просмотр информации о классе по наведению мыши Не поддерживается
Подсветка файлов проекта в окне Output Не поддерживается
Подсветка результатов поиска Не поддерживается
Не поддерживается Search everywhere
Не поддерживается Переход к тексту
Не поддерживается Переход к недавним изменениям
Не поддерживается Переход к предыдущему изменению
Не поддерживается Команда Navigate to
Не поддерживается Переход к базовым символам
Не поддерживается Переход к производным символам
Не поддерживается Переход к типу символа
Не поддерживается Переход к соседним файлам
Не поддерживается Иерархия типов
Не поддерживается Иерархия включенных заголовочных файлов
Не поддерживается Переход к основному шаблону или к его специализациям
Не поддерживается Нахождение текущего файла в Solution Explorer
Не поддерживается Поиск действий и настроек
Не поддерживается Навигация по точкам останова и окно Breakpoints
Не поддерживается Анализ включенных заголовочных файлов

Отладка

Фильтры для пошаговой отладки Фильтры для пошаговой отладки
Временное отключение всех включенных точкек останова Не поддерживается
Временная привязка всех точек останова к текущему потоку Не поддерживается
Не поддерживается Отслеживание значений переменных
Не поддерживается DataTips с возможностью поиска

Unreal Engine

Поддержка проектов UE4 Поддержка проектов UE4
Умные подсказки для спецификаторов рефлексии Автодополнение спецификаторов рефлексии
Не поддерживается Быстрый просмотр документации для спецификаторов рефлексии UE4
Поддержка удаленного вызова процедур UE4 Поддержка удаленного вызова процедур UE4
Не поддерживается Рефакторинги Rename и Change Signature для работы с функциями UE4 RPC
Исключение исходных файлов из навигации Не поддерживается
Не поддерживается Отложенная индексация кода на движке
Не поддерживается Поддержка правил именования UE4
Не поддерживается Специализированные проверки кода анализатором для UE4

Юнит-тестирование

Не поддерживается Помощь при юнит-тестировании с фреймворками Google Test, Catch 2.5, Boost.Test, и doctest

Управление настройками

Импорт и экспорт настроек Автоматическая многоуровневая синхронизация настроек и пользовательских шаблонов