New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Experimental automated reformatting #1556
Conversation
A little explanation: |
Unfortunately, it looks like astyle has not options to control comments formatting this way. The only way is to disable auto formatting such blocks using
Should I use it? Another option is to use semicolons, but it looks like an ugly hack:
|
Also astyle looks to be discontinued. Asked on stackoverflow if clang-format can avoid mixing tabs and spaces anyhow: |
I used some googled example, modified UseTab and TabWidth and seems its doing things right now: |
what still missing is that i personally like increments written in such bit weird indentation:
|
some adjustements: clang-format.zip |
Still produces mixture of tabs and spaces at the beginning of some lines:
|
Also things like
or
look a bit weird. Why so much indents? |
Looks as it adjusted 'inner' condition to its opening brace, i would do this like:
|
Do you mean manual fixing such cases after clang-format? |
Just expressed how such code should look.. ideally |
again corrected config: |
Still mixture of tabs and spaces at the beginning of lines, but I guess that can not be totally avoided with clang-format so manual fixing will be required anyway:
etc Also maybe opening curly bracket should be at the new line to avoid situations like this there conditions and the inner block are indented the same way:
|
Still mixture of tabs and spaces and conditions are indented the same as inner block:
Looks like astyle, despite being abandoned, still does the job better. |
However i more like
but this also acceptable, if there is no way to do so..:
|
My astyle config does not change this. That was manual formatting. So changed to style you prefer by hands. Also reverted right side comments style change. There are only three such cases throughout the source tree, so can be easily fixed by hands after processing by astyle. Anyway any automatic formatting tool need manual fixes after it. |
There are one more actively developed formatting tool: Looks extremely configurable. Now experimenting with it. |
Unfortunately uncrustify does not have an option similar to |
if set in clang's config |
some tuning through 'penalties': clang-format.zip |
Still conditions and inner block indented equally:
Also mixture of tabs and spaces:
Maybe also ask clang-format devs to implement something like astyle -xU does? |
bit tweaked clang-format to make assignment spaces behave as descibed and modified config to make continuation indentation to be 2 spaces instead of tab.. Looks not bad? |
как же долго он собирается :) |
с make -j16 норм |
Воу!
вот тут вторая строчка у меня за экран уезжает. и зачем-то два таба перед комментариями. ещё длинные каменты иногда вылезают за экран, но это вроде не особо страшно, и в любом случае не ясно, что с этим можно сделать автоматизированно.
ух ты! красивое!
вот тут по идее второй камент должен на два таба левее быть
а вот здесь-то он зачем после X1 перенос строки сделал?
вот тут не очень семантично получилось, по-моему. оригинал читабельнее.
нижние звёздочки на таб вправо уехали в целом - очень круто! каких-то прям адских ошибок не видно, скорее, шероховатости небольшие. |
лишние табы подфиксил тока что но не все.. |
Кстати то что
все же ограничение на ширину экрана это больше для читабельности кода в окне диффа, коменты тут менее важную роль играют, их можно вовсе не читать) |
Логика форматтера там запутанная но скорее всего однопроходная, то есть если выражение длинное - он переносит токены на новую строку один за одним пока очередной остаток не начнет влазить в экран. То что иногда после этого эффективнее смержить уже перенесенное - этого он видимо не умеет. |
Просто коменты расположенные на смежных строках выравниваются относительно друг друга по максимальной позиции |
это, похоже, поправлено. остальное, о чём я писал, пока на месте. впрочем, оно не то чтобы такое уж критичное. |
so, do you consider... тьфу опять запутался в языках тикетов)) в общем, можно ли считать clang-format достаточно допиленным, чтобы все легаси исходники фара через него прогонять? |
еще хочу сделать чтоб вместо
но не выравнивались присвоения в коде
|
в целом думаю на след выходных можно будет реформатнкуть |
сделал раздельную настройку для мемберов: |
прикольно! а почему он где-то табами выравнивает, а где-то пробелами?
|
добавил фичу чтоб в таких местах выравнивало пробелами: UseTab: ForContinuationAndIndentationAndComments |
Ага, починилось, ура! А ещё что-нибудь будет доделываться, или оставшиеся шероховатости уже не выглядят критическими? |
Согласен про старый код, тоже экспериментировал с новым, пришёл к тем же выводам. Мне кажется, наилучшим подходом будет такой:
Дальше что-то совсем уж кривое будем сами исправлять руками понемногу по мере обнаружения. Главное, что наличие правил не позволит вносить новый «некрасивый» код, а старый станет нормально читабельным. |
еще хорошо бы попереименовывать переменные чтоб было както так:
на это вроде clang-tidy способен, но это в другой раз, наверное |
Это надо прописать как раз в правила оформления нового кода, потому что я вот не знал, например. Как в итоге форматировать будем? С моей стороны требуется что-то? |
я переформатирую, я просто хочу перед комитом убедится что все точно норм, для чего сделаю дизасм оригинальной версии и новой и убедюсь/убежусь/убеждусь что единственные изменения в бинарниках - только номера строк в дебажных принтах (их там есть немного) |
Ну вроде все. Я тут в последний момент обнаружил опцию AlignArrayOfStructures, которая структуры красиро ровняет, но ох и глючная же она оказалась... На некоторых файлах не патченный форматтер даже падает когда она включена. Но даже после дофиксов дофига длинных объявлений структур пришлось руками переформатировать, может еще гдето незамеченные косяки остались. |
Ага, я посмотрю по логу коммитов на характерные паттерны, и тоже поправлю если где попадется. Круто, спасибо! А доработки форматтера будем в апстрим предлагать? Обидно если потеряются |
можно попробовать, для начала стоит спросить не против ли они вообще таких доработок, потому что если предлагать в апстрим - там юниттесты делать нормальные, доки там какието в ихнем своем формате и т.п. Если они согласны можно заморочится) |
а какой первый шаг для этого? доку какую-то написать на новые опции? |
using astyle -T -S -p -xg -H -U -xU with minor manual fixups. @elfmz please review!