Board.KolibriOS.org

Official KolibriOS board
It is currently Sun Nov 17, 2019 3:57 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 98 posts ]  Go to page 1 2 3 4 57 Next
Author Message
PostPosted: Fri Oct 07, 2011 2:52 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1621
В исходных текстах ядра /kernel/trunk творится полнейший бардак в плане оформления. Иногда доходит до того, что в соседних строчках одного и того же файла используются разные отступы. Это затрудняет чтение кода, затрудняет написание кода и вообще производит впечатление откровенного разгильдяйства. Поэтому я ввожу единые правила оформления на уровне svn-репозитория - svn-сервер будет просто отклонять коммиты, выполнение которых означало бы появление в kernel/trunk файлов *.asm или *.inc, нарушающих оформление. Естественно, сервер будет выдавать пояснение со ссылкой на эту тему форума. Ограничения появятся через неделю, я думаю, что за неделю правила вполне можно обсудить.

Правила, естественно, должны быть машинно-проверяемыми. Всё вышесказанное обсуждению не подлежит. Сами правила можно обсуждать, для начала предлагаются следующие правила.
1. Символы табуляции запрещены. Основание: возможность и табуляции, и пробелов, - главная причина несущественных изменений на svn типа r2257, когда большинство изменений, показываемых svn, в действительности вызваны автоматическим переформатированием кода редактором. Требовать табуляцию вместо пробелов чревато тем, что код будет нормально смотреться только при строго определённой настройке просмотрщика.
2. Метки должны идти в отдельной строке от кода. Основание: при этом не нужно вводить разницу между длинными и короткими метками; при необходимости дописать код сразу после метки svn-изменения будут затрагивать только дописанные строчки, а не старый код.
Поправка от 28 мая 2013: метки могут быть в одной строке с данными.
3. Оформление команд. Строка начинается с восьми пробелов. Далее идёт имя мнемоники или макроса. Команды распознаются по известной мнемонике, список можно взять из фасма, или макросу stdcall/ccall/invoke/cinvoke. Если имя короче восьми символов, то оно дополняется пробелами до восьми символов; если нет, то далее идёт один пробел. Потом опционально идут аргументы, разделённые запятой с пробелом. Если это макрос и аргументов много или они длинные, то строка может заканчиваться - с точностью до пробелов и комментариев - символом \, после чего аргументы продолжаются на следующей строке с той же позиции, где они начались в первой строке. Основание, почему именно 8: в эту длину укладываются все часто используемые мнемоники и относительно частый макрос stdcall.
4. Префиксы lock/rep[z|e|nz|ne] к команде, если они есть, считаются логическим целым с последующей мнемоникой, отделённой одним пробелом, так что начинаются с позиции 8, где и обычные команды.
5. Все файлы с кодом должны обладать служебным свойством 'svn:eol-style' со значением 'native', чтобы svn автоматически ставил переводы строк так, как принято в ОС, где он запущен.
6. Все файлы с кодом и текстом должны быть в кодировке UTF-8 без BOM.

На прочие элементы - глобальные переменные, глобальные переменные в {i|u}global/endg, локальные переменные, члены структур, константы, объявления макросов и так далее - ограничений нет.



Active rules for all *.asm and *.inc files in kernel/trunk and all subdirectories:
1. No tab characters allowed.
2. Code labels must be on a separate line. It is not allowed to have a label and a command on the same line. Combinations of label and data in one line is allowed.
3. Lines with commands must start with 8 spaces. A mnemonic is short if it's length is less than 8. Arguments for short mnemonics must start in the column 16. Arguments for long mnemonics must be separated from the mnemonic by exactly one space. Arguments must be separated with a comma and exactly one space after a comma. Arguments continued in the next line must start from the same position as in the first line.
4. Prefixes lock/rep[z|e|nz|ne] are considered as a logical part of the command, so they start at position 8, then after exactly one space follows the main mnemonic and arguments.
5. The special property 'svn:eol-style' must be set to 'native'.
6. All code and text files should be in UTF-8 without BOM.

_________________
Сделаем мир лучше!


Top
   
PostPosted: Fri Oct 07, 2011 2:56 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5066
Для меня нагляднее были бы примеры...

_________________
Через тернии к звездам


Top
   
PostPosted: Fri Oct 07, 2011 3:05 pm 
Замечательно! П.1 Я соблюдать не собираюсь - требование не использовать табуляцию это абсурд. Почему нельзя настроить табуляцию на границу 8 пробелов я откровенно не понимаю, но это царское решение походу обсуждению не подлежит.
Все остальные пункты меня не ущемляют, но если П.1 останется "AS IS", то я пожалуй пойду строить свой лунапарк.


Top
   
PostPosted: Fri Oct 07, 2011 3:11 pm 
Offline

Joined: Tue Oct 05, 2010 6:05 pm
Posts: 216
Если сервер может проверять корректность оформления кода, то может ли он автоматом приводить некорректные к "правильному" оформлению? Т.е. взять эту функцию на себя.


Top
   
PostPosted: Fri Oct 07, 2011 3:13 pm 
Offline
Kernel Developer
User avatar

Joined: Fri Aug 14, 2009 1:46 am
Posts: 1351
Очень прошу не распространять нововведения на бранчи.
Хотя бы на один из них.
У себя я сам как-нибудь порядок наведу, без svn-роботов.


Top
   
PostPosted: Fri Oct 07, 2011 3:14 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1621
Mario, "Почему нельзя настроить табуляцию на границу 8 пробелов" - потому что это ущемляет тех, у кого табуляция настроена на 4 пробела.
"это царское решение походу обсуждению не подлежит." - всё, что после соответствующей фразы, подлежит обсуждению.
lev, нет. В svn коммит либо проходит "как есть", либо вообще не проходит. Вариант "пропускать неправильный коммит, но тут же нормализовывать от имени робота" не годится, поскольку не решает проблемы мусорных изменений.

Ещё раз: на репозиторий вне kernel/trunk правила не распространяются.

_________________
Сделаем мир лучше!


Top
   
PostPosted: Fri Oct 07, 2011 3:20 pm 
Ога, присутствуют взаимпоисключающие параграфы: табуляция ущемляет права тех кто ей пользуется (они же идиоты и не знают как ее правильно настроить, потому и пользуются), потому мы отменяем табуляцию в принципе! Красота! Заставим всех пользоваться пробелами, а тех кто не согласен не пустим - синдром вахтера еще к тому же присутствует.


Top
   
PostPosted: Fri Oct 07, 2011 4:31 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Запрет на табуляцию поддерживаю. lock должен идти с отступом 8 знаков как и обычные команды. Без отступа только метки. lock меткой не является.


Top
   
PostPosted: Fri Oct 07, 2011 5:16 pm 
Offline

Joined: Mon Sep 24, 2007 11:11 am
Posts: 2814
А есть какие-нибудь редакторы, которые по enter делают 8 пробелов? Или по tab? (Кроме emacs/vim, в которых можно повесить хоткей или настроить вид документа)


Top
   
PostPosted: Fri Oct 07, 2011 6:12 pm 
Offline
User avatar

Joined: Tue Aug 25, 2009 4:45 pm
Posts: 796
Да, поскольку это касается в основном ядра, предлагаю вынести репозиторий ядра в отдельный реп.


Top
   
PostPosted: Fri Oct 07, 2011 6:30 pm 
Offline

Joined: Wed Dec 26, 2007 5:09 am
Posts: 214
Насчет табуляций CleverMouse абсолютно права: просмотр текста с табуляциями возможен только при правильной их настройке, что как минимум неудобно, ну а с пробелами отображение правильно всегда и везде. Lock, думаю, не должен отли чаться от других префиксов. Метки - имхо, отдельной строкой только "осмысленные" (например, имена подпрограмм), а "числовые" (мелкие циклы, условные операторы) - в одной строке с инструкцией.


Top
   
PostPosted: Fri Oct 07, 2011 6:37 pm 
Offline
User avatar

Joined: Mon Oct 27, 2008 10:10 pm
Posts: 811
А что если программист захочет внести изменения в файл в котором будет много другого ранее неотформатированного кода, тогда ему прийдется перед своей правкой форматировать полностью весь файл?
Думаю что подобные действия по форматированию должна выполнять какая нибудь программа наподобие ВебЛомастера.
Quote:
"ВебЛомастер" - программа для преобразования HTML-файлов
к виду, удобному для их просмотра без подключения к Интернету

Если подобной программы для asm файлов нет, прийдется написать самим, т. к. порядок в будущем может понадобится и в других местах.


Top
   
PostPosted: Fri Oct 07, 2011 6:39 pm 
Offline
User avatar

Joined: Tue Aug 25, 2009 4:45 pm
Posts: 796
в git есть режим коммита, без включения whitespaces. Может и в svn такое есть?


Top
   
PostPosted: Fri Oct 07, 2011 6:49 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1621
Требование отступа для lock принимается.
SoUrcerer, вроде все сколько-нибудь приличные редакторы поддерживают автоотступ, при котором при нажатии Enter дублируют отступ, бывший в начале, и если там были пробелы, то и после Enter появятся пробелы. По tab, опять же, все сколько-нибудь приличные редакторы имеют настройку типа "конвертировать табы в пробелы" с указанием размера табуляции.
Кроме того, можно сконвертировать табуляцию в пробелы непосредственно перед коммитом; если этого не позволяет сделать основной редактор - что само по себе странно - то можно использовать expand -t8 < input > output, для винды expand есть здесь.
XVilka, это слишком радикально и непонятно, зачем нужно.

_________________
Сделаем мир лучше!


Top
   
PostPosted: Fri Oct 07, 2011 6:49 pm 
Offline

Joined: Thu Nov 25, 2010 8:26 pm
Posts: 41
SoUrcerer wrote:
А есть какие-нибудь редакторы, которые по enter делают 8 пробелов? Или по tab? (Кроме emacs/vim, в которых можно повесить хоткей или настроить вид документа)

Да. Например Geany (по tab). Поддерживает автозамену табуляций пробелами, можно выставить размер отступа, может автоматически удалять пустые символы в конце строк. В целом довольно прост чтобы называться IDE.


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 98 posts ]  Go to page 1 2 3 4 57 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 3 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited