Правила оформления кода
Posted: Fri Oct 07, 2011 2:52 pm
В исходных текстах ядра /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.
Правила, естественно, должны быть машинно-проверяемыми. Всё вышесказанное обсуждению не подлежит. Сами правила можно обсуждать, для начала предлагаются следующие правила.
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.