jscs — архитектура, история и будущее — Олег Гайдаренко
DESCRIPTION
Я расскажу о прошлом, настоящем и будущем JSCS. Что это за проект и зачем он нужен, как он дополняет стандартные инструменты, отчего стал популярен, какова его архитектура и особенности, чем он отличается от других статических анализаторов кода.TRANSCRIPT
Яндекс
Я
JSCSархитектура, история и будущее
Гайдаренко Олег, Разработчик
Я.Субботник, Киев, 22.11.2014
ндекс
Что это и зачем это нужно?
3
JSCS
4
Например
a b a
5
function foo() var = 1;var = 2;return ;
JSHint
6
Тот же пример
a b a
7
function foo() var = 1;var = 2;return ;
JSCS
8
Правильно
a b a b
9
function foo() var = 1,
= 2;return + ;
Как надо “else statement” писать? Спробелами или без?
x
x
10
else ++;
// Или вот так?
else++;
А куда запятые ставить?
x one two
x one two
11
= : 1
, : 2;
// Или вот так
= : 1,: 2
;
А надо ли использовать «условиеЙоды»? Или запретить?
a
a
12
if (1 == ) return;
// Или вот так?
if ( == 1) return;
Марат (@mdevils) опубликовал пост во внутреннем блоге оинструменте для код-стайла
А в это время, в рассылке jQuery, велся довольно неинтересныйтред про соответствие код-стайлу
Мы хотели автоматизировать форматирование кода
но рабочих инструментов не существовало
и не существует до сих пор :-(
История
13
Angular, jQuery, Bootstrap, Grunt, etc;
Google, Яндекс, Wikimedia, Adobe, Twitter, etc;
Плагины для сборщиков – Grunt, Gulp, Broccoli, etc;
Плагины для редакторов кода – Atom, VIM, Sublime Text, WebStorm(из коробки), etc;
Используют
14
AST (Abstract Syntax Tree)
15
Архитектура
В JSHint
В JSCS
Код
“noempty”
“disallowEmptyBlocks”
16
if (true)
AST
17
"type": "IfStatement","test":
"type": "Literal","value": true,"raw": "true"
,"consequent":
"type": "BlockStatement","body": []
Проверка
file node node body length errors node loc end
18
.iterateNodesByType('BlockStatement', function( ) if ( . . === 0)
.add('Empty block found', . . );
);
Конфиг
19
Preset
20
"preset": "jquery"
Preset с вашими значениями
21
"preset": "jquery","maximumLineLength": 120
Preset с вашими значениями
22
"preset": "google","maximumLineLength": null
Новый конфиг, пресеты иавтофиксинг
23
Будущее
Конфиг
https://github.com/jscs-dev/node-jscs/issues/698
24
"blocks":
"curlyBraces": "require": "allExcept": [ "else" ]
,"newlineBefore":
"require": true
Пресеты
25
"preset": "jscs‑ваш‑конфиг"
Или
26
"plugin": "jscs‑ваш‑конфиг"
200 $27
Автоформаттер
https://github.com/jscs-dev/node-jscs/issues/516
28
Гайдаренко ОлегРазработчик
Контакты
@arkel @markelog