Skip to content

sijeko/codestyle

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

No releases published

Packages

No packages published