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-функции
Не поддерживается