Название: Автоматическое форматирование кода Отправлено: juvf от Сентябрь 28, 2020, 07:15 Есть ли Автоматическое форматирование кода в QtCreator?
Например в Eclipse открываешь такой код Код: void f(){ Настраиваешь свой стиль (я свой стиль храню в облаке/нафлешке в xml и просто подцепляю его на новом рабочем месте), нажимаешь Ctrl+Shift+F, и подобный код превращается в такой Код: void f() Нашел в QtCreator-e настройку стиля, но как его применить к написанному коду? ps Хорошо, если QtCreator это ещё не подрос и этого не умеет, то может кто-нибудь знает какую-нибудь утилиту, в которой можно выбрать папку, и "сказать - Переформатируй все файлы *.c, *.cpp, *.h, ... в формат вот такой" и одним махом у всех исходников поменять стиль? Можно каждый файл открыть в Eclipse и переформатировать, но проект большой и это будет долго и муторно... Название: Re: Автоматическое форматирование кода Отправлено: Пантер от Сентябрь 28, 2020, 08:06 Судя по stackoverflow https://stackoverflow.com/questions/37597117/what-is-the-shortcut-to-format-code-in-qt-creator#40174996 это решается отдельным плагином. facepalm... Изкоробки есть автоформатирование qml кода.
Название: Re: Автоматическое форматирование кода Отправлено: juvf от Сентябрь 28, 2020, 10:54 одним отдельным плагином это не решается. Плагин может только вызвать внешний форматер. Ещё нужно установить сам форматтер. См тут (https://doc.qt.io/qtcreator/creator-beautifier.html)
Я выбрал форматтер ClangFormat. В ClangFormat есть несколько дефолтных стилей (есть CNU, но Qt не предлагает gnu). Новый свой стиль настроить - это адский текстовый конфиг. Сделаю свой стиль, закину в своё облако для креатора. Название: Re: Автоматическое форматирование кода Отправлено: Авварон от Сентябрь 28, 2020, 11:19 в репе Креатора есть конфигурации для клана формата. требует небольшого допила на мой вкус но хорошая отправная точка
Название: Re: Автоматическое форматирование кода Отправлено: kambala от Сентябрь 28, 2020, 11:47 чет не понял, Ctrl+I не работает что ли?
Название: Re: Автоматическое форматирование кода Отправлено: Пантер от Сентябрь 28, 2020, 11:48 А люди еще спорят, когда я говорю, что QtCreator отстойное IDE... Автоформатирование это какбэ базовая функциональность.
Название: Re: Автоматическое форматирование кода Отправлено: Авварон от Сентябрь 28, 2020, 12:00 Пантер
Ты не путаешь автоформатирование с выравниванием отступов? Креатор предлагает на выбор 2-3 внешних тулзы для форматирования. Зачем им писать 4ю которая будет хуже чем шланг-формат? Название: Re: Автоматическое форматирование кода Отправлено: juvf от Сентябрь 28, 2020, 12:07 чет не понял, Ctrl+I не работает что ли? не работает и ни когда не работало. Ctrl+I вам расставит отступы/табы, а форматирование не сделает. Скобочки не расставит, новые строки и т.п. не расставит. Попробуйте мой код в первом посте по Ctrl+I. Получиться гэ. Цитировать когда я говорю, что QtCreator отстойное IDE... Да конечно отстойное.... во времена тролтеча был годный Qt плуг для эклипса. Сейчас плуга нет, приходиться пользоваться тем, что есть. ps в ClangFormat нашел Цитировать This will align the assignment operators of consecutive lines. This will result in formattings like int aaaa = 12; int b = 23; int ccаааааааc = 23; Название: Re: Автоматическое форматирование кода Отправлено: Пантер от Сентябрь 28, 2020, 12:18 Пантер Почему нет хоть одной тулзы в стандартной поставке? Выравнивание отступов это не то, нужно именно форматирование. Отступы есть и в виме :)Ты не путаешь автоформатирование с выравниванием отступов? Креатор предлагает на выбор 2-3 внешних тулзы для форматирования. Зачем им писать 4ю которая будет хуже чем шланг-формат? Название: Re: Автоматическое форматирование кода Отправлено: Авварон от Сентябрь 28, 2020, 12:21 Почему нет хоть одной тулзы в стандартной поставке? Выравнивание отступов это не то, нужно именно форматирование. Отступы есть и в виме :) Так какую из 3х тащить? Название: Re: Автоматическое форматирование кода Отправлено: juvf от Сентябрь 28, 2020, 12:27 Зачем им писать 4ю которая будет хуже чем шланг-формат? Зачем они написали свой редактор, который был хуже существующих (тех же эклипсок или kdevelop)? Вот сейчас дебажу код... в брейкпоинте не показывает мне элемент QDomNode, только его адрес и тип. Через 5-10 шагов дебага креатор вылетает. Я тоже считаю, что автоформатирование должно быть из коробки. Название: Re: Автоматическое форматирование кода Отправлено: Пантер от Сентябрь 28, 2020, 12:32 Почему нет хоть одной тулзы в стандартной поставке? Выравнивание отступов это не то, нужно именно форматирование. Отступы есть и в виме :) Так какую из 3х тащить? Допустим, самую распространенную. Название: Re: Автоматическое форматирование кода Отправлено: juvf от Сентябрь 28, 2020, 12:40 а шланг может (без креатора) все исходные файлы
Название: Re: Автоматическое форматирование кода Отправлено: Racheengel от Сентябрь 28, 2020, 12:58 Зачем они написали свой редактор, который был хуже существующих (тех же эклипсок или kdevelop)? Потому что посоны и МОГУТ. :) Иначе как? Своя ИДЕ - как свой калькулятор.Я тоже считаю, что автоформатирование должно быть из коробки. +1Название: Re: Автоматическое форматирование кода Отправлено: Авварон от Сентябрь 28, 2020, 13:16 Название: Re: Автоматическое форматирование кода Отправлено: Авварон от Сентябрь 28, 2020, 13:17 который был хуже существующих (тех же эклипсок или kdevelop)? Смешно, кроме Эклипса только Хром жрет больше памяти. КДевелоп уже не тащит половину кедов за собой и работает под маком? https://www.kdevelop.org/download Код: No official pre-built installers available currently Код: No official pre-built installers available yet Название: Re: Автоматическое форматирование кода Отправлено: kambala от Сентябрь 28, 2020, 13:24 чет не понял, Ctrl+I не работает что ли? не работает и ни когда не работало. Ctrl+I вам расставит отступы/табы, а форматирование не сделает. Скобочки не расставит, новые строки и т.п. не расставит. Попробуйте мой код в первом посте по Ctrl+I. Получиться гэ. а шланг может (без креатора) все исходные файлы может, но список файлов ему надо скормить (например, через команду find):Код: ❯ clang-format -h также есть удобная штука git-clang-format, которая форматирует только файлы, добавленные в индекс гита (т.е. в состоянии staged). Название: Re: Автоматическое форматирование кода Отправлено: ViTech от Сентябрь 28, 2020, 13:36 ClangFormat plugin in Qt Creator 4.9 (https://www.qt.io/blog/2019/04/17/clangformat-plugin-qt-creator-4-9) в коробке, вроде как. Я пользуюсь, вполне нормально.
а шланг может (без креатора) все исходные файлы ClangFormat (https://clang.llvm.org/docs/ClangFormat.html), можно подать на вход несколько файлов. Список файлов в папке/подпапках можно получить другой утилитой, unix-way.... Название: Re: Автоматическое форматирование кода Отправлено: Авварон от Сентябрь 28, 2020, 13:38 ClangFormat (https://clang.llvm.org/docs/ClangFormat.html), можно подать на вход несколько файлов. Список файлов в папке/подпапках можно получить другой утилитой, unix-way.... Есть же compilation database и jq. Выцепить файлы проекта задача тривиальная, нет? Название: Re: Автоматическое форматирование кода Отправлено: ViTech от Сентябрь 28, 2020, 13:54 Есть же compilation database и jq. Выцепить файлы проекта задача тривиальная, нет? Как один из вариантов получения списка файлов проекта, может быть и тривиальная. Но в compilation database разве не только *.cpp файлы перечислены? Можно её сгенерировать так, чтобы и *.h тоже там были? Название: Re: Автоматическое форматирование кода Отправлено: Авварон от Сентябрь 28, 2020, 13:58 да, о хедерах я не подумал=)
Название: Re: Автоматическое форматирование кода Отправлено: ViTech от Сентябрь 28, 2020, 14:16 да, о хедерах я не подумал=) Если проект собирается CMake'ом, то более подробную структуру проекта можно получить с помощью cmake-file-api (https://cmake.org/cmake/help/latest/manual/cmake-file-api.7.html), там и хидеры и исходники перечислены. Сгенерировать структуру проекта не сложно, но я бы не сказал, что просто и тривиально, одной командой не отделаешься. Проще будет каким-нибудь find'ом в папке проекта список файлов получить. В самом креаторе явно есть средства, чтобы получить все файлы проекта и скопом их отформатировать. Но вот такую фичу для него, похоже, ещё никто не запилил. Название: Re: Автоматическое форматирование кода Отправлено: juvf от Сентябрь 30, 2020, 12:09 не едут лыжи.
вот фрагмент кода Код: void _put_pixel(tContext *pContext, int X, int Y, int sx, int sy, long Es, настроил шланг-формат, креатор, горячие клавиши. Убрал галку "автоформатирование при сохранении". Нажимаю гор.клав. - получаю перед if два пробела, перед { один таб. Нажимаю "Сохранить" файл меняется и стновиться перед if 2 пробела, перед { четыре пробела. Wtf? Кто разбирается в конфигурировании clang-format? Какую опцию и как настроить? есть UseTab, указал UseTab: ForIndentation получаю 2 пробела и 1 таб. а после сохраниния одни пробелы. указал UseTab: Always получаю 2 пробела и 1 таб. а после сохраниния одни пробелы. 1) как настроить clang-format на табы? 2) почему Название: Re: Автоматическое форматирование кода Отправлено: juvf от Сентябрь 30, 2020, 12:17 2-ой вопрос решил, в 2-х местах нужно править
Код: Tools -> Options -> Text Editor -> Behaviour -> Tabs and Indentation & Tools -> Options -> C++ -> Code Styles -> Edit Название: Re: Автоматическое форматирование кода Отправлено: kuzulis от Сентябрь 30, 2020, 12:56 Цитировать В самом креаторе явно есть средства, чтобы получить все файлы проекта и скопом их отформатировать. Но вот такую фичу для него, похоже, ещё никто не запилил. Эмм.. а clang-format? ЗЫ: Ах, ты хочешь прям сразу весть проект... Хм.. Ну да, вроде нету такого. Тут как-бы не все так просто: а какие файлы из проекта должен форматтер форматировать? Т.к. кроме *.h / *.cpp (и их производных), есть и другие, например, какие-нить шаблоны, файлы ассемблера и прочее. Поэтому, наверное и не запилили это. Название: Re: Автоматическое форматирование кода Отправлено: juvf от Сентябрь 30, 2020, 13:13 а какие файлы из проекта должен форматтер форматировать? Т.к. кроме *.h / *.cpp тут всё очень просто. мне нужно *.h, *.c, *.cpp. 1) IndentWidth: 4 UseTab: Always TabWidth: 4 если IndentWidth: 2, то перед if будет два пробела, если 4, то будет 1 таб. Название: Re: Автоматическое форматирование кода Отправлено: kuzulis от Сентябрь 30, 2020, 13:15 Цитировать мне нужно *.h, *.c, *.cpp. а кому-то нужно еще что-то и он будет хныкать, что у него ничо не работает кроме *.h, *.c, *.cpp. :) Название: Re: Автоматическое форматирование кода Отправлено: juvf от Сентябрь 30, 2020, 13:19 мля.... я что, нельзя указать что форматировать? будет время, напишу утилиту, которая переберёт в папке все файлы и найдет те, которые хочет пользователь и каждый файл отформатирует шлангом.
возможно Название: Re: Автоматическое форматирование кода Отправлено: kuzulis от Сентябрь 30, 2020, 15:48 Во, можешь в QtC это запилить (типа добавить фичу форматирования всего проекта)
Название: Re: Автоматическое форматирование кода Отправлено: AkonResumed от Октябрь 31, 2020, 10:11 А как для встроенного стиля (точнее, Qt-based и отредактированный с использованием табов, а не пробелов) добиться выравнивания не по открывающей скобке, а просто с регулярным отступом:
Код:
QtCreator v4.12, но так было у меня всегда ... и в QtCreator v1.x.x. |