AStyle: форматировщик исходного кода |
![]() |
Добавил(а) microsin |
Утилита astyle (Artistic Style) это автоматический форматировщик и организатор стиля исходного кода, предназначенный для улучшения читаемости кода на языках программирования C, C++, C++/CLI, Objective-C, C# и Java. При оформлении исходного кода обычно программисты для отступов используют и табуляцию, и пробелы. Кроме того, многие редакторы по умолчанию вставляют пробелы вместо табуляции при нажатии на клавишу Tab. Другие редакторы (например Emacs, notepad2) имеют тенденцию "улучшать" текст, автоматически вставляя пробелы при переходе на другую строку, ориентируясь на отступ в предыдущей строке. Количество пробелов для каждого символа табуляции в исходном коде может меняться при переходе от одного редактора к другому (если пользователь предварительно не установил для себя желаемое количество пробелов). Одна из стандартных проблем программистов, когда они переключаются между редакторами кода состоит в том, что в тексте кода могут встречаться как пробелы, так и символы табуляции, и модуль кода, который казалось бы только что был оформлен правильно, вдруг оказывается совершенно непривычным. Даже если вы относитесь к тем программистам, которые используют для отступов исключительно только пробелы, это все равно может быть не очень удобным для других пользователей вашего кода. Для решения этой проблемы был создан Artistic Style - фильтр, написанный на C++, который автоматически переназначает отступы и переформатирует исходный код на C / C++ / Objective-C / C++/CLI / C# / Java. Он может быть использован как утилита командной строки, или может быть встроен в другую программу как билиотека. [Общая информация] Окончания строк. В форматируемом файле стиль завершения строк сохраняется таким же, каким он был в исходном файле. Например, если это был стиль Windows \r\n (CRLF, т. е. коды 0D0A), то он останется таким же. Если в тексте попалась смесь разных стилей завершения строк, то будет использован наиболее часто попадающийся стиль. Существует также опция для специального указания необходимого стиля окончания строк. Тип файла. AStyle будет определять тип файла по его расширению. Расширение ".java" показывает файл на языке Java file, и ".cs" показывает файл C#. Все остальное это тип файла стиля языка C (C, C++, C++/CLI или Objective-C). Если вы используете нестандартное расширение файла для Java или C#, то используйте одну из опций --mode=стиль. Шаблоны (wildcards) и вложенные каталоги. AStyle может рекурсивно обработать все подпапки указанного пути. Обрабатываются шаблоны имен файлов wildcards (такие как "*.cpp" или "*.c??"). Если используется шелл, то в AStyle должны быть переданы wildcards вместо того, чтобы он их сам распознавал. Для Linux используются двойные кавычки, когда в имени файла используются шаблоны wildcards. Для Windows двойные кавычки вокруг имен файлов используются, когда в имени пути содержатся пробелы. Для рекурсивной обработки файлов в подкаталогах имеется специальная опция (см. описание опции --recursive во врезке ниже). Имена файлов. Когда файл переформатируется, его оригинальное имя сохраняется. Будет создана копия оригинального файла с суффиксом .orig, добавленным к изначальному имени файла (значение "добавки можно поменять опцией --suffix=, или добавление суффикса может быть подавлено опциями -n или --suffix=none). Таким образом, после переоформления файла SourceFile.cpp результат будет тем же файлом SourceFile.cpp, а старое содержимое этого файла останется в файле SourceFile.cpp.orig. Интернационализация. Существует возможность трансляции на несколько языков. Используемая трансляция определяется по установленной текущей локали (User Locale) Windows и переменной окружения LANG на других системах. Трансляция будет произведена автоматически на основе этих настроек. Если трансляция недоступна, то по умолчанию используется English. Существует опция ascii, чтобы использовать English вместо установленного языка системы (system language). Исходный код для трансляций находится в конце ASLocalizer.cpp в форме пар English-Translation. Если вы сделали правки в трансляции, то отправьте исходник на bug report, чтобы разработчики могли включить его в следующий релиз. Для добавления нового языка добавьте новый класс трансляции в ASLocalizer.h. Добавьте пару English-Translation в конструктор в ASLocalizer.cpp. Обновите массив WinLangCode, и добавьте код языка в функцию setTranslationClass(). Программа ASLocalizer.cpp содержит комментарии, которые дают ссылки на web-страницы, содержащие идентификаторы LCID и коды языка. Отправьте исходный код на bug report, и он будет включен в следующий релиз. Дополнительные замечания. Имена специальных символов, используемых в программировании, меняются в зависимости от региона. В AStyle используется следующая терминология, за которой следуют другие общие названия: braces, или фигурные скобки { } - также называются брекетами, или curly brackets. В Visual Studio, и возможно в других средах разработки, есть расширения, которые выравнивают операторы присваивания по нескольким строкам. Также существует расширение "Code alignment" которое также выравнивает текст кода по другим элементам. В AStyle могут испльзоваться эти опции и расширения. Дополнение пробелами и выравнивание будет сохранено. AStyle может форматировать операторы библиотеки стандартных классов, таких как Open GL, wxWidgets, Qt и MFC. Корректно форматируется встроенный язык ассемблера. Это включает строки и блоки расширенного ассемблера (extended assembly) и специфического ассемблера от Microsoft. AStyle может форматировать встроенные операторы SQL. Форматирование SQL будет поддерживаться, пока сохраняется стандартный формат отступа. Если оператор "exec sql" находится в дополнительных последующих операторах, то SQL будет выровнен в один столбец. Будут отформатированы файлы Unicode, кодированные в UTF-16, в обоих вариантах big endian и little endian. Для распознавания файлы должны начинаться с маркера порядка следования байт (byte order mark, BOM). Файлы, закодированные UTF-32, будут отбрасываться. Некоторые компилятора не поддерживают эти кодировки. Такие файлы могут быть преобразованы в кодировку UTF-8 с помощью программы iconv, которая существует в версиях для Linux и Windows (версия Windows возможно не будет обрабатывать все кодировки). Visual Studio может преобразовать файлы через меню File -> Advanced Save Options. Есть другие среды разработки и текстовые редакторы, такие как SciTE и notepad2, которые могут преобразовать файлы в UTF-8. Встроенные многострочные операторы, не имеющие формата типа языка C, такие как Python, обычно будут отформатированы неправильно (форматa C-типа подразумевает блоки, окруженные фигурными скобками, и операторы, заканчивающиеся на точку с запятой). Макросы, которые определяют функции, могут привести к тому, что последующий код будет оформлен с ошибкой, потому что в определении макроса пропущены скобки и символы точки с запятой. Если у вас есть исходный код с операторами такого типа, то исключите их из обработки опцией exclude=#### (см. описание опции --exclude= во врезке ниже). Artistic Style 3.1 Usage: astyle [OPTIONS] File1 File2 File3 [...] Когда обрабатывается определенный файл, результат будет сохранен В имени файла могут использоваться шаблоны макроподстановки По умолчанию astyle настроен на отступы из 4 пробелов, с максимальным Опции: Программа astyle использует общепринятый GNU-стиль синтаксиса Файлы опций: Artistic Style ожидает файл опций по умолчанию и/или файл опций 1. Опции командной строки имеют преимущество. 2. Файл опций проекта имеет преимущество надо файлом умолчаний. o Имя файла показывается опцией командной строки --project=. 3. Для всех проектов может использоваться файл опций по умолчанию. o Путь до файла показывается опцией командной строки --options=. Длинные опции в файлах опций могут быть записаны без '--'. Строка комментария начинается с '#', и продолжается до конца строки. Запрет форматирования: Disable Block. Блок кода может быть запрещен для форматирования тегами комментария Disable Line. Дополнение операторов можно запретить на одной строке, используя тег Опции стиля фигурных скобок (Brace Style Options): Стиль скобок по умолчанию. Если никакой стиль специально не --style=allman ИЛИ --style=bsd ИЛИ --style=break ИЛИ -A1 --style=java ИЛИ --style=attach ИЛИ -A2 --style=kr ИЛИ --style=k&r ИЛИ --style=k/r ИЛИ -A3 --style=stroustrup ИЛИ -A4 --style=whitesmith ИЛИ -A5 --style=vtk ИЛИ -A15 --style=ratliff ИЛИ --style=banner ИЛИ -A6 --style=gnu ИЛИ -A7 --style=linux ИЛИ --style=knf ИЛИ -A8 --style=horstmann ИЛИ --style=run-in ИЛИ -A9 --style=1tbs ИЛИ --style=otbs ИЛИ -A10 --style=google ИЛИ -A14 --style=mozilla ИЛИ -A16 --style=pico ИЛИ -A11 --style=lisp ИЛИ -A12 Опции табуляции: Если опция отступа не установлена, то по умолчанию --indent=spaces=# ИЛИ -s# --indent=tab ИЛИ --indent=tab=# ИЛИ -t ИЛИ -t# --indent=force-tab=# ИЛИ -T# --indent=force-tab-x=# ИЛИ -xT# Опции для изменения установки скобок (Brace Modify Options): --attach-namespaces ИЛИ -xn --attach-classes ИЛИ -xc --attach-inlines ИЛИ -xl --attach-extern-c ИЛИ -xk --attach-closing-while ИЛИ -xV Опции отступа: --indent-classes ИЛИ -C --indent-modifiers ИЛИ -xG --indent-switches ИЛИ -S --indent-cases ИЛИ -K --indent-namespaces ИЛИ -N --indent-after-parens ИЛИ -xU --indent-continuation=# ИЛИ -xt# --indent-labels ИЛИ -L --indent-preproc-block ИЛИ -xW --indent-preproc-cond ИЛИ -xw --indent-preproc-define ИЛИ -w --indent-col1-comments ИЛИ -Y --min-conditional-indent=# ИЛИ -m# Допустимы значения: 0 - без минимального отступа. --max-continuation-indent=# ИЛИ -M# Опции заполнения (Padding): --break-blocks ИЛИ -f --break-blocks=all ИЛИ -F --pad-oper ИЛИ -p --pad-comma ИЛИ -xg --pad-paren ИЛИ -P --pad-paren-out ИЛИ -d --pad-first-paren-out ИЛИ -xd --pad-paren-in ИЛИ -D --pad-header ИЛИ -H --unpad-paren ИЛИ -U --delete-empty-lines ИЛИ -xd --fill-empty-lines ИЛИ -E --align-pointer=type ИЛИ -k1 --align-reference=none ИЛИ -W0 Опции форматирования: --break-closing-braces ИЛИ -y --break-elseifs ИЛИ -e --break-one-line-headers ИЛИ -xb --add-braces ИЛИ -j --add-one-line-braces ИЛИ -J --remove-braces ИЛИ -xj --break-return-type ИЛИ -xB --attach-return-type ИЛИ -xf --keep-one-line-blocks ИЛИ -O --keep-one-line-statements ИЛИ -o --convert-tabs ИЛИ -c --close-templates ИЛИ -xy --remove-comment-prefix ИЛИ -xp --max-code-length=# ИЛИ -xC# --mode=c --mode=java --mode=cs Опции Objective-C: --pad-method-prefix ИЛИ -xQ --unpad-method-prefix ИЛИ -xR --pad-return-type ИЛИ -xq --unpad-return-type ИЛИ -xr --pad-param-type ИЛИ -xS --unpad-param-type ИЛИ -xs --align-method-colon ИЛИ -xM --pad-method-colon=none ИЛИ -xP Другие опции: --suffix=#### --suffix=none ИЛИ -n --recursive ИЛИ -r ИЛИ -R --dry-run --exclude=#### --ignore-exclude-errors ИЛИ -i --ignore-exclude-errors-x ИЛИ -xi Позволяет продолжить обработку, если были ошибки в опциях --errors-to-stdout ИЛИ -X --preserve-date ИЛИ -Z --verbose ИЛИ -v --formatted ИЛИ -Q --quiet ИЛИ -q --lineend=windows ИЛИ -z1 Опции только для командной строки: --options=#### --project --ascii ИЛИ -I --version ИЛИ -V --help ИЛИ -h ИЛИ -? --html ИЛИ -! --html=#### --stdin=#### --stdout=#### [Установка] Последний релиз можно загрузить на официальной страничке SourceForge. Ссылка на последнюю версию (latest version) для вашей платформы будет находиться верхней части страницы. Как вариант, вы можете выбрать подходящий пакет из папок релизов "astyle". Пакет для Windows содержит скомпилированный бинарник. На других платформах может понадобиться компиляция из исходного кода. Для самых популярных компиляторов предоставлены файлы Makefile. Следуйте инструкциям по инсталляции для вашей платформы, см. [2]. Пример установки на Ubuntu: $ sudo apt install astyle
[Быстрый старт] Если вы никогда раньше не использовали AStyle, то есть несколько вариантов, с чего можно начать. Во-первых, можно запустить его вообще без опций. Этот вариант будет использовать стиль фигурных скобок по умолчанию, 4 символа на отступ, и текст не подвергнется переформатированию. Это разобьёт однострочные блоки и однострочные операторы. Чтобы изменить такое поведение, используйте опцию keep-one-line-blocks и/или keep-one-line-statements (см. "Опции форматирования" врезки выше). Во-вторых, вы можете попробовать применить один из стилей опций круглых скобок (см. "Опции стиля фигурных скобок" врезки выше). Если опция отступа не установлена, то по умолчанию будут использоваться 4 пробела. /Эти опции также разобьют однострочные блоки и операторы, как было описано выше. Также попробуйте использовать файл опций. Это помогает дублировать стиль форматирования кода, который уже был использован ранее. Чтобы указать файл опций, используйте options=####. Здесь значение #### должно содержить путь и имя файла. Когда вы освоитесь с опциями, то можете подобрать формат преобразования исходного кода в соответствии со своими предпочтениями. [Как использовать] Командная строка. AStyle это консольная программа, которая принимает управляющую информацию из опций командной строки. Формат командной строки: astyle [ОПЦИИ] SourceFilePath1 SourceFilePath2 SourceFilePath3 [ ... ] Квадратные скобки показывают, что здесь может быть введено одна или несколько опций, или одно или несколько имен файлов. Символы скобок не добавляются в команду. Описание формата опций см. в соответствующую документацию (вывод подсказки astyle -h, или см. врезку выше). Пример форматирования одного файла: $ astyle --style=allman /home/project/foo.cpp
Пример форматирования файлов C#, подкаталоги будут обрабатываться рекурсивно: $ astyle --style=allman --recursive /home/project/*.cs
Расширения файлов. Могут использоваться несколько расширений файлов, если их разделять запятыми или символом точки с запятой. Если путь содержит пробелы, то он должен быть заключен в двойные кавычки. Не существует ограничений на количество используемых расширений. Пример рекурсивного форматирования файлов C++, используя несколько расширений файлов: $ astyle --style=allman --recursive /home/project/*.cpp,*.h
Перенаправление. Могут использоваться символы < и > для перенаправления файлов в стандартный ввод (stdin) и в стандартный вывод (stdout). С этой опцией может использоваться только один форматируемый файл. В этом случае шаблоны подстановок для имен wildcards не распознаются, в консоль сообщения не выводятся, и файлы бэкапа не создаются. На Windows в выводе всегда будут использоваться стиль завершения строк CRLF. Вместо символов перенаправления можно использовать опции stdin= и stdout=. Пример перенаправления для форматирования одного файла и изменения имени файла: $ astyle --style=allman < OriginalSourceFile > BeautifiedSourceFile
Пример того же самого перенаправления с использованием опций stdin= и stdout=: $ astyle --style=allman --stdin=OriginalSourceFile --stdout=BeautifiedSourceFile
Опция перенаправления может использоваться для отображения форматированного файла без обновления его содержимого: $ astyle --style=allman < OriginalSourceFile | less
[Ссылки] 1. Artistic Style Documentation site:astyle.sourceforge.net. |