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

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

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

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

Есть ли эта особенность, и я просто не знаю об этом, или кто-нибудь знает о каких-либо достойных условиях работы?

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

4b9b3361

Ответ 1

Использовать форматировщик 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*
}

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

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

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

Astyle:

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

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

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

Eclipse:

Меню "Выполнить" → Внешние инструменты → Внешние инструменты Конфигурации... Добавьте новую "Программу" и в окно конфигурации:

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

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

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

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

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

  • Отметьте "Выбранный ресурс"

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

  • Отображение в меню избранного, Отметьте "Внешние инструменты"

Ответ 2

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

clang-format - это утилита форматирования, которая снабжена Clang, и она поддерживает комментарии on/off // clang-format on и // clang-format off в коде C/С++/ObjC. Введение в сборку Clang и ее утилиты можно найти здесь. http://clang.llvm.org/get_started.html Вам не нужно устанавливать целые файлы Clang и LLVM в вашей системе. Поскольку clang-format - автономная программа, которая работает без Clang. Комментарии вкл/выкл не поддерживаются в старых версиях, поэтому, пожалуйста, используйте ver 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

Ответ 3

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

Ответ 4

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

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