Russian Qt Forum

Qt => Qt-инструментарий => Тема начата: ViTech от Апрель 17, 2019, 19:45



Название: ClangFormat
Отправлено: ViTech от Апрель 17, 2019, 19:45
В Qt Creator добавили плагин ClangFormat (https://blog.qt.io/blog/2019/04/17/clangformat-plugin-qt-creator-4-9/). Это дело хорошее. Но есть у меня сторонний вопрос по самой утилите ClangFormat. Судя по её опциям командной строки (https://clang.llvm.org/docs/ClangFormat.html) файл конфигурации стиля должен называться .clang-format или _clang-format, и располагаться в одной из родительских директорий форматируемого файла. Насколько я понял, нельзя в опциях утилиты задать файл конфигурации с произвольным именем из произвольной директории. Кто-нибудь в курсе, в чём сакральный смысл такого ограничения?


Название: Re: ClangFormat
Отправлено: lit-uriy от Апрель 18, 2019, 06:54
>>and using clang-format -style=file
вроде файл указать можно


Название: Re: ClangFormat
Отправлено: ViTech от Апрель 18, 2019, 10:18
>>and using clang-format -style=file
вроде файл указать можно

Я тоже так сначала подумал (и не я один (https://stackoverflow.com/questions/46373858/how-do-i-specify-a-clang-format-file)), когда мельком просмотрел опции :). Только файл этот: ".clang-format file located in one of the parent directories of the source file". Вот мне и интересно, почему нет опции, в которой можно указать произвольный файл конфигурации.


Название: Re: ClangFormat
Отправлено: lit-uriy от Апрель 18, 2019, 12:15
а пробовал указать путь к файлу, пусть даже с предопределённым расширением?


Название: Re: ClangFormat
Отправлено: lit-uriy от Апрель 18, 2019, 12:17
там, по ссылке есть такое:
Цитировать
The correct usage for your example would be:
Код
Bash
./clang-format -style=file ~/myFile.cc


Название: Re: ClangFormat
Отправлено: ViTech от Апрель 18, 2019, 12:40
там, по ссылке есть такое:
Цитировать
The correct usage for your example would be:
Код
Bash
./clang-format -style=file ~/myFile.cc

Нет, по ссылке там такое:
Цитировать
The correct usage for your example would be:
Код
Bash
./clang-format -style=llvm -dump-config > ~/.clang-format
./clang-format -style=file ~/myFile.cc

Предложения лучше целиком читать, а не вырезать куски из контекста :). В этом ответе (https://stackoverflow.com/a/46374122) подробно описано, как работает опция -style. Меня же больше интересует, почему она работает именно так.


Название: Re: ClangFormat
Отправлено: ViTech от Апрель 23, 2019, 17:00
Для сравнения, как может выглядеть указание|поиск файла конфигурации здорового человека (не курильщика).

cmake-format (https://github.com/cheshirekow/cmake_format#usage):
Цитировать
cmake-format [-h]
            [--dump-config {yaml,json,python} | -i | -o OUTFILE_PATH]
            [-c CONFIG_FILE]
            infilepath [infilepath ...]

Parse cmake listfiles and format them nicely.

Formatting is configurable by providing a configuration file. The configuration
file can be in json, yaml, or python format. If no configuration file is
specified on the command line, cmake-format will attempt to find a suitable
configuration for each ``inputpath`` by checking recursively checking it's
parent directory up to the root of the filesystem. It will return the first
file it finds with a filename that matches '\.?cmake-format(.yaml|.json|.py)'.


Название: Re: ClangFormat
Отправлено: kambala от Апрель 29, 2019, 16:41
так можно ж достаточно легко симулировать чтение настроек из произвольного файла с помощью прямой передачи настроек в виде строки (см. конец)
Код:
  -style=<string>           - Coding style, currently supports:
                                LLVM, Google, Chromium, Mozilla, WebKit.
                              Use -style=file to load style configuration from
                              .clang-format file located in one of the parent
                              directories of the source file (or current
                              directory for stdin).
                              Use -style="{key: value, ...}" to set specific
                              parameters, e.g.:
                                -style="{BasedOnStyle: llvm, IndentWidth: 8}"


Название: Re: ClangFormat
Отправлено: ViTech от Апрель 29, 2019, 18:48
так можно ж достаточно легко симулировать чтение настроек из произвольного файла с помощью прямой передачи настроек в виде строки (см. конец)

Такой способ мне трудно всерьёз воспринимать, и тогда ещё больше вопросов появляется :). Например, как много людей предпочитают перечислять настройки в командной строке, вместо указания файла с ними? Сейчас в clang-format порядка 120 опций, даже если из них 10 изменить, то уже длинная строка получится. Для сравнения, в uncrustify (https://github.com/uncrustify/uncrustify) порядка 660 опций, из них у меня изменены 191. Не хотелось бы мне их в командной строке писать, будь у автора uncrustify такая же логика :).

И при симуляции чтения из файла его нужно обрабатывать: перевод строки менять на ','. Мне кажется не очень правильным заставлять пользователей утилиты такой фигнёй заниматься :).


Название: Re: ClangFormat
Отправлено: kambala от Апрель 30, 2019, 00:17
не лучший способ, не спорю, но решает задачу в заданных рамках :)

файл же превращается в строку грубо через file.readAll().split("\n").join(", "), если там нет комментариев и мультиязычности...)


Название: Re: ClangFormat
Отправлено: ViTech от Апрель 30, 2019, 10:51
не лучший способ, не спорю, но решает задачу в заданных рамках :)

Если такой способ добавили, значит кому-то он нужен. Тогда получается, что чтение настроек из заданного файла мало кому нужно? :) Особенно учитывая, что функционал чтения из файла (.clang-format) есть,  для произвольного осталось только опцию добавить. Для меня это странно. Хотя может я какую тенденцию упускаю. Например, по захламлению корневого каталога проекта :).