Как отключить форматирование кода Eclipse CDT для блока кода

Форматировщик кода CDT имеет довольно приличный выбор опций, но, похоже, у него нет функции, которая позволяет ему игнорировать блок кода. Эта функция существует в программе форматирования кода Java:

// @formatter:off
... // code that should not be formatted
// @formatter:on

Эта функция существует, и я просто не знаю об этом, или кто-нибудь знает какие-либо приличные обходные пути?

В моем конкретном случае я пытаюсь определить структуры данных (перечисление типов и массивов строк), которые я хочу иметь конкретные макеты.

16

Решение

Используйте форматировщик Astyle (Artistic Style), он намного превосходит встроенный форматировщик Eclipse CDT и обладает необходимой вам функцией:

http://astyle.sourceforge.net/astyle.html#_Disable_Formatting

Пример:

#include <iostream>

int main(int argc, char** argv)
{
// *INDENT-OFF*
std::cout<<"hello world"<<'\n';
// *INDENT-ON*
}

Форматирование с использованием astyle не приведет к отступу кода между // INDENT-OFF а также // INDENT-ON но он также отключит любые другие функции форматирования, которые делает Astyle, например, расстояние между инструкциями в этом случае.

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

Подробнее о конфигурации (linux):

Стиль:

Вы можете легко получить его из своих репозиториев или через официальный сайт.

Чтобы настроить файл конфигурации с настройками форматирования:

http://astyle.sourceforge.net/astyle.html#_Options_File

Я использую вариант домашней папки, просто создайте .astylerc в вашем $ HOME, мой содержит:

--suffix=none
--style=allman
--indent=tab=4
--max-code-length=70
--close-templates
--keep-one-line-blocks
--break-elseifs
--break-closing-brackets
--align-reference=type
--align-pointer=type
--indent-classes
--indent-modifiers
--indent-switches
--indent-cases
--indent-labels
--indent-col1-comments
--min-conditional-indent=0
--pad-oper
--pad-header
--unpad-paren

Затмение:

Меню «Выполнить» -> Внешние инструменты -> Внешние инструменты Конфигурации … Добавить новую «Программу» и в окне конфигурации:

  • Расположение: / usr / bin / astyle (используйте whereis или найдите, чтобы проверить это)

  • Рабочий каталог: $ {project_loc}

  • Аргументы: $ {selected_resource_loc}

В том же окне обновите вкладку:

  • Отметьте Обновить ресурсы после завершения.

  • Галочка «Выбранный ресурс»

То же окно, общая вкладка:

  • Отображение в избранном меню, галочка «Внешние инструменты»
5

Другие решения

Если вы используете OS X или Linux (я не проверял Windows, но она может поддерживаться), вы можете использовать clang-format а также CppStyle вместо.

clang-format утилита форматирования, которая предоставляется Clangи поддерживает вкл / выкл комментарии // clang-format on а также // clang-format off в коде C / C ++ / ObjC. Введение в сборку Clang и его утилиты можно найти здесь.
http://clang.llvm.org/get_started.html
Вам не нужно устанавливать весь Clang а также LLVM файлы в вашей системе. Так как clang-format это отдельная программа, которая работает без Clang, Комментарии вкл / выкл не поддерживаются в старых версиях, поэтому, пожалуйста, используйте версию 3.7 (доступна из SVN по состоянию на февраль 2015 г.).

CppStyle это плагин Eclipse, который позволяет нам использовать clang-format от Eclipse CDT.
https://github.com/wangzw/cppstyle

FYI. Вот та же самая функция запроса в CDT Bugzilla. Функциональность может быть официально поддержана в будущем, но с использованием clang-format или же Astyle кажется, лучшее решение на данный момент. https://bugs.eclipse.org/bugs/show_bug.cgi?id=453926

1

Я думаю, я мог бы вставить их в файл с расширением, игнорируемым средством форматирования, и включить этот файл, где это необходимо. Я попробовал это, и это работает — структура данных получает индексатор (т.е. работает автозаполнение). Тем не менее, было бы неплохо иметь эквивалент синтаксиса Java «@formatter: …».

0

Насколько я знаю, ответ просто нет, такой функции не существует. Возможно, вы сможете реализовать такую ​​функцию с помощью SDK. Помните, что по моему опыту, документация очень неполная, и очень трудно найти разработчика Eclipse, который был бы готов помочь вам заполнить пробелы. Но поскольку эта функция существует в форматере Java и является продуктом с открытым исходным кодом, возможно, вы могли бы перенести логику на форматтер C ++.

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

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector