Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Стандарт кодирования для команды Sijeko

Если вкратце, то египетские скобки, кемелКейс и смарт-табуляция (табы для отступов, пробелы для выравнивания).

Данные правила написания кода являются стандартом по умолчанию. Они используются, если в проекте или других стандартах, специфичных для языков, не оговорены иные правила.

На территории Sijeko царит стиль-дискриминация и формат-фашизм. При этом сохраняется разумность: правила не взяты с потолка, каждое из них имеет причины и свою предысторию. Общие стандарты по написанию кода, именованию файлов и прочему позволяют легче разбираться с существующими проектами даже новичкам.

Главное правило

Код должен выглядеть, как написанный одним человеком, независимо от того, сколько человек над ним работает.

Настройка IDEA-подобных сред для работы на примере PhpStorm/WebStorm

Настройки делаются один раз после установки Идеи в диалоге настроек по умолчанию:

File → Default Settings

Если проект уже есть, можно настроить его отдельно:

File → Settings

В основном требуется настроить стиль кодирования и инспекции кода. Остальные настройки по умолчанию выставлены хорошо, можно изменять по вкусу.

Стиль кодирования

Табуляция

Мы везде используем символы табуляции для отступов и подход смарт-табуляции. В окне настроек:

Editor → Code Style

проходим по всем языкам, выставляем везде одинаково:

Use tab character: Yes
Smart tabs: Yes
Tab size: 4
Indent: 4
Continuation indent: 4

При желании можно поставить во все три числовых поля числа 2 или 8, или сколько хотите (лишь бы числа были равны).

Пустая строка (перенос строки) в конце файла

Файлы обязаны заканчиваться пустой строкой — это упрощает выделение текста мышкой от текущего места до конца файла. Также полезно в редакторе видеть пустые символы в конце строк. Ставим галочки:

Settings → Editor → General → Ensure line feed at file end on Save
Settings → Editor → General → Appearance → Show whitespaces и Trailing (две галочки)

Всё остальное

Остальное в стилях кодирования по умолчанию в Идее стоит нормально: PSR-2 для PHP, нечто похожее для JavaScript и так далее.

Инспекции кода

Все инспекции, приведённые в этом разделе производятся при проталкивании изменений в наши репозитории. Если код не соответствует единому стандарту, коммиты не пройдут.

Удобным будет настроить инспекции прямо в среде разработки, чтобы не править стиль кодирования по сообщениям при коммитах: они не интерактивны (выдаются простым текстом) и могут занять очень много коммитов на исправление.

PHP Code Sniffer

Если вы работаете с PHP-кодом и хотите включить PHP Code Sniffer, необходимо поставить в операционную систему PHP.

… … …

После этого:

Editor → Inspections → PHP → PHP Code Sniffer validation (поставить галочку)

ESLint

ESLint — мощный инструмент для проверки яваскрипт-кода как на потенциальные ошибки программирования, так и на соответствие текста определённому стилю.

Ставим NodeJS и NPM.

Ставим ESLint:

sudo npm install -g eslint

Настраиваем инспекции в Идее (настройки среды по умолчанию):

File → Default Settings → Languages & Frameworks → JavaScript → Code Quality Tools → ESLint

Там галочки и путь к файлу настроек:

Enable: Yes
Node interpreter: /usr/bin/node  (свой путь до интерпретатора: nodejs, node.exe)
ESLint package: /usr/lib/node_modules/eslint  (свой путь до пакета eslint)
Configuration file: /home/username/project/codestyle/eslint/eslintrc.js  (свой путь к файлу)
Кнопка [Apply]

После этого:

Editor → Inspections → JavaScript → Code Quality Tools → ESLint (поставить галочку)

После этого повторить эти же действия в настройках текущего проекта, если он был создан до настройки ESLint в Идее:

File → Settings

Встроенная документация для библиотек

jQuery

File → Settings → Languages and Frameworks → JavaScript → Libraries

Дополнительно

Чтобы не запоминать, что где находится, можно пользоваться удобным поиском прямо в окне настроек. Например, указанные выше плагины легко находятся с помощью поиска фраз: code sniffer, jshint, jscs.

Файлы

  • jscs/jscs-options.js — настройки JSCS;
  • jshint/jshint-options.js — настройки JSHint;
  • php-code-sniffer — каталог, содержащий в себе сам Code Sniffer и наш стиль кодирования для PHP-кода Sijeko.

Этот каталог можно положить, например, в папку с настройками Идеи, которая находится:

  • в Linux: /home/<username>/.WebIde100
  • в Windows: C:\Users\<username>\.WebIde100
  • в MacOS: /home/<username>/.WebIde100

Стандарт кодирования вкратце

Египетские скобки

В случае PHP стандарт скобок равен стандартам PSR-1 и PSR-2. Для методов и классов открывающая скобка ставится на новой строке. Во всех остальных случаях (управляющие конструкции и т. д.) в конце текущей строки:

class Controller
{
	/**
	 * Получить модель документа.
	 *
	 * @param  string    $alias  Псевдоним документа, который нужно найти.
	 * @return Document          Возвращает документ, заданный псевдонимом в параметре.
	 * @throws \app\web\HttpException
	 */
	protected function getModel($alias)
	{
		/* @var Document $model */
		$model = Document::find(['alias' => $alias]);
		if ($model === null) {
			throw new HttpException('404', 'Not Found');
		}
		if (App::user->isGuest && $model->access !== Document::TYPE_PUBLIC) {
			throw new HttpException('403', 'Access Denied');
		}
		return $model;
	}
}

Короткие управляющие конструкции без скобок крайне нежелательны (это чревато различными проблемами):

// Да-да-да
if (CONDITION) {
	do();
}

// Нет-нет-нет
if (CONDITION)
	do();

С лета 2014 года короткие управляющие конструкции в коде запрещены.

кемелКейс

Названия классов пишутся с БольшойБуквы; имена переменных, методов и прочее — со строчнойБуквы. Приватные члены класса также пишутся со строчнойБуквы, подчёркивание в начале имени не используется.

Константы

Константы называются ЗАГЛАВНЫМИ_БУКВАМИ, слова разделяются подчёркиваниями. Желательно для каждой константы написать PhpDoc/JsDoc.

Отступы табами и выравнивание пробелами

В начале строк (indentation) отступы должны быть табуляциями. Внутри строк (alignment, выравнивание) — пробелами. Данная техника называется SmartTabs.

Строковые литералы

В PHP, JavaScript и CSS лучше использовать строки с 'одинарными кавычками', а не с "двойными". В значениях атрибутов HTML использовать только "двойные кавычки". Таким образом, количество проблем при смешивании кода будет сведено к минимуму.

CSS

В CSS также используются египетские скобки и жёсткая табуляция.

html, body {
	padding: 0;
	margin: 0;
	height: 100%;
	width: 100%;
}

В общем случае, желательно использовать LESS вместо CSS, а вывод LESS-компилятора сразу делать минимизированным.

Баннер-стиль в CSS

До марта 2014 в CSS использовался так называемый баннер-стиль отступов: закрывающая скобка выравнивалась по вложенному блоку (в данном случае это блок правил):

html, body {
	padding: 0;
	margin: 0;
	height: 100%;
	width: 100%;
	}

Поэтому такое расположение скобок ещё иногда может встречаться в старых проектах.

PhpDoc и JsDoc

По возможности, всегда документировать классы и методы с помощью PhpDoc/JsDoc. В классах описывать члены и методы в функциях и методах описывать параметры и возвращаемые значения. Предполагается, что встроенная документация написана с использованием языка разметки Маркдаун (он не требует специальной подготовки, понятен без лишних разъяснений).

Кодировка UTF-8

Допускается использование только Юникод-кодировки UTF-8. Это относится, как к исходным текстам программ и кодировке базы данных, так и к обычным текстовым файлам. В базе данных MySQL следует использовать кодировку utf8mb4 для таблиц и полей, если она доступна (если недоступна, выбираем по старинке utf8): она содержит более полный набор символов Юникода.

Использовать однобайтовые кодировки категорически запрещается! Те, кто используют однобайтовые кодировки (Windows/CP1251, KOI8 и прочие), попадут в ад.

About

Codestyle for Sijeko team

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages