JSCS — архитектура, история и будущее — Олег Гайдаренко

Preview:

DESCRIPTION

Я расскажу о прошлом, настоящем и будущем JSCS. Что это за проект и зачем он нужен, как он дополняет стандартные инструменты, отчего стал популярен, какова его архитектура и особенности, чем он отличается от других статических анализаторов кода.

Citation preview

Яндекс

Я

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