SlideShare uma empresa Scribd logo
1 de 22
Baixar para ler offline
Зачем	
  и	
  как	
  мы	
  используем	
  
JSLint	
  
Дмитрий	
  Щадей	
  
Разработчик	
  интерфейсов	
  



Я.Субботник,	
  Киев,	
  5	
  мая	
  2012	
  года	
  
2	
  
JSLint	
  
Статический	
  анализатор	
  кода	
  
—  Ищет	
  анти-­‐паттерны	
  в	
  вашем	
  коде	
  
—  Повышает	
  читаемость	
  кода	
  
—  Уменьшает	
  количество	
  багов	
  
—  Автор	
  Douglas	
  Crockford	
  
        ü  h_p://en.wikipedia.org/wiki/Douglas_Crockford	
  




3	
  
Наиболее	
  частые	
  кейсы	
  




4	
  
Отладочная	
  информация,	
  
которую	
  мы	
  забыли	
  убрать	
  

    function handler(e) {
          alert(‘clicked’); // clicked?!?
          if (e.keyCode === 13) {
                 // Error: ‘console’ is
    undefined в IE7
                 console.log(‘zzzzzzzzzzz’);
          }
    }	
  
    	
  

5	
  
Лишние	
  запятые	
  
в	
  конце	
  массивов	
  и	
  объектов	
  
    // Error: Expected identifier, string or
    number
    var foo = {
          a:'b',
          c:'d',
          e:'f’,
    };

    // Bug in IE bar.length === 5
    var bar = [1,2,3,4,];



6	
  
Глобальные	
  переменные, 	
  	
  
которых	
  мы	
  не	
  ждали	
  
    var a
        b; // one more dead kitten

    for( i=0; len = items.length; i <
    len; i++ ) {
        /* killing spree */
    }


7	
  
Глупые	
  ошибки,	
  
которые	
  мы	
  часто	
  делаем	
  
    var a = 2, name = ‘Yandex’, misSpelledVar = 1, unusedVar;

    if ( a = ‘1’) {
            /* always fires */
    } else {
            /* never fires */
    }

    new RegExp(”^s*" + name + “s*$", "i");
    //equals to /^s*Yandexs*$/I

    console.log(misSpeledVar); // undefined




8	
  
Проверка	
  Style	
  Guide-­‐ов	
  
—  Обязательная	
  точка	
  с	
  запятой	
  
—  Все	
  переменные	
  объявляются	
  в	
  одном	
  операторе	
  
   var	
  
—  Обязательные	
  блоки	
  для	
  if,	
  while,	
  for	
  	
  
—  Оператор	
  void	
  запрещен	
  
—  Конструкторы	
  пишутся	
  с	
  большой	
  буквы	
  
—  Табуляция	
  и	
  пробелы	
  
—  	
  Strict	
  mode	
  

9	
  
Спорные	
  рекомендации	
  




10	
  
“Move	
  the	
  invocazon	
  into	
  the	
  parents	
  that	
  contain	
  the	
  
funczon”	
  


  (function() { /* code */ }	
  )()




  (function() { /* code */ }()	
  )




11	
  
“Expected	
  an	
  assignment	
  or	
  funczon	
  call	
  and	
  instead	
  saw	
  
an	
  expression”	
  

arg && arg.longMethodName && false &&
arg.longMethodName.doSomething();




if ( arg && arg.longMethodName ) {
     arg.doSomething();
}


12	
  
“The	
  body	
  of	
  a	
  for	
  in	
  should	
  be	
  wrapped	
  in	
  an	
  if	
  statement	
  
to	
  filter	
  unwanted	
  properzes	
  from	
  the	
  prototype”	
  

  var i, items = {/* properties*/};
  for (i in items) {
        /* code*/
  }


  var i, items = {/* properties*/};
  for (i in items) {
        if (items.hasOwnProperty(i)){
              /* code*/
        }
  }

13	
  
Как	
  начать	
  использовать	
  
JSLint?	
  




14	
  
Установить	
  JSLint	
  
консольный	
  клиент	
  
—  Используя	
  V8	
  

   $ sudo apt-get install nodejs
   $ sudo apt-get install npm
   $ npm install –g jslint


—  Используя	
  SpiderMonkey	
  

   $ sudo apt-get install jsl




15	
  
Настроить	
  JSLint	
  
—  Указать	
  допустимые	
  глобальные	
  переменные	
  
         ü  jQuery,swfobject,BEM,	
  Modernizr	
  
         ü  Шорткаты	
  :	
  -­‐-­‐browser,	
  -­‐-­‐node	
  
—  Отключить	
  не	
  нужные	
  вам	
  рекомендации	
  
         ü  Доступные	
  опции	
  :	
  h_p://www.jslint.com/lint.html	
  

         alias jslint=“jslint –
         predef=jQuery,swfobject,BEM, Modernizr –
         white –plusplus --passfail --browser --
         evil”

16	
  
Настроить	
  JSLint	
  
   JSLINT_DIRS ?= trunk vkfox-52

   jslint: $(shell find $(JSLINT_DIRS) -name '*.js')

   %.js :
            @echo "$*.js"
            @jslint --predef=jQuery,swfobject 
                    --bitwise 
                    --browser 
                    --confusion 
                    --evil 
                    --nomen 
                    --passfail 
                    --plusplus 
                    --regexp 
                    --sloppy 
                    --sub 
                    --white 
                    $*.js
                           h_ps://github.com/metrofun/yasubbotnik	
  
17	
  
Настроить	
  JSLint	
  
для	
  конкретного	
  файла	
  
Опции	
  можно	
  указывать	
  внутри	
  файлов.	
  

   /*global alert: false */

   /*jslint evil: false */

   alert(new Function("return 1;")());




18	
  
Сделать	
  git-­‐hook	
  
на	
  pre-­‐commit	
  
   #!/bin/sh –e
   case "${1}” in
          --about )
                 echo "check *.js files using jslint";;
          * )
          for FILE in $(git diff --cached --diff-
   filter=ACMTR --name-only HEAD | grep -e '.js$');
   do
                 echo jslint $FILE
                 jslint $FILE
          done;;
   esac
                       h_ps://github.com/metrofun/yasubbotnik	
  


19	
  
JSHint	
  
еще	
  один	
  анализатор	
  
—  Fork	
  JSLint-­‐а	
  
         ü  h_ps://github.com/jshint	
  
—  Community-­‐driven	
  
—  Больше	
  настроек	
  
         ü  h_p://www.jshint.com/opzons/	
  
	
  


20	
  
Питання,	
  пропозиції?	
  




21	
  
Дмитрий	
  Щадей	
  
Разработчик	
  интерфейсов	
  
	
  
metrofun@yandex-­‐team.ru	
  

@metrofun	
  

vk.com/metrofun	
  

	
  

Mais conteúdo relacionado

Mais procurados

Пластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать житьПластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать житьMoscow.pm
 
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013Moscow.pm
 
Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптах
Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптахПриемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптах
Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптахrevisium
 
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15MoscowJS
 
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15MoscowJS
 
Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP-сценариях
Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP-сценарияхПриемы, затрудняющие обнаружение и анализ вредоносного кода в PHP-сценариях
Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP-сценарияхPositive Hack Days
 
Making Scalable JavaScript Application
Making Scalable JavaScript ApplicationMaking Scalable JavaScript Application
Making Scalable JavaScript ApplicationMikhail Davydov
 
"Успеть за 100 миллисекунд: контекстная реклама на Sphinx" Дмитрий Хасанов (...
"Успеть за 100 миллисекунд: контекстная реклама на Sphinx" Дмитрий Хасанов  (..."Успеть за 100 миллисекунд: контекстная реклама на Sphinx" Дмитрий Хасанов  (...
"Успеть за 100 миллисекунд: контекстная реклама на Sphinx" Дмитрий Хасанов (...AvitoTech
 
PHP Advanced
PHP AdvancedPHP Advanced
PHP AdvancedNoveo
 

Mais procurados (18)

Парсер: что? зачем? как?
Парсер: что? зачем? как?Парсер: что? зачем? как?
Парсер: что? зачем? как?
 
Пластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать житьПластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать жить
 
Perl in practice
Perl in practicePerl in practice
Perl in practice
 
new JavaScript
new JavaScriptnew JavaScript
new JavaScript
 
Native Development
Native DevelopmentNative Development
Native Development
 
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013
 
Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптах
Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптахПриемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптах
Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптах
 
Основы MongoDB + NodeJS
Основы MongoDB + NodeJSОсновы MongoDB + NodeJS
Основы MongoDB + NodeJS
 
Erlang tasty & useful stuff
Erlang tasty & useful stuffErlang tasty & useful stuff
Erlang tasty & useful stuff
 
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
 
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15
 
Основы JS
Основы JSОсновы JS
Основы JS
 
Python i18n
Python i18nPython i18n
Python i18n
 
Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP-сценариях
Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP-сценарияхПриемы, затрудняющие обнаружение и анализ вредоносного кода в PHP-сценариях
Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP-сценариях
 
Decorators' recipes
Decorators' recipesDecorators' recipes
Decorators' recipes
 
Making Scalable JavaScript Application
Making Scalable JavaScript ApplicationMaking Scalable JavaScript Application
Making Scalable JavaScript Application
 
"Успеть за 100 миллисекунд: контекстная реклама на Sphinx" Дмитрий Хасанов (...
"Успеть за 100 миллисекунд: контекстная реклама на Sphinx" Дмитрий Хасанов  (..."Успеть за 100 миллисекунд: контекстная реклама на Sphinx" Дмитрий Хасанов  (...
"Успеть за 100 миллисекунд: контекстная реклама на Sphinx" Дмитрий Хасанов (...
 
PHP Advanced
PHP AdvancedPHP Advanced
PHP Advanced
 

Destaque

Дизайн и разработка фронтенда
Дизайн и разработка фронтендаДизайн и разработка фронтенда
Дизайн и разработка фронтендаYandex
 
Сергей Сергеев "Git — ветки, деревья, лес"
Сергей Сергеев "Git — ветки, деревья, лес"Сергей Сергеев "Git — ветки, деревья, лес"
Сергей Сергеев "Git — ветки, деревья, лес"Yandex
 
Чираг Шах «Коллективный поиск, взаимодействие пользователей: подходы к изучен...
Чираг Шах «Коллективный поиск, взаимодействие пользователей: подходы к изучен...Чираг Шах «Коллективный поиск, взаимодействие пользователей: подходы к изучен...
Чираг Шах «Коллективный поиск, взаимодействие пользователей: подходы к изучен...Yandex
 
Ксения Покровская «Проблемы доставки iOS-приложений на тестовые устройства»
Ксения Покровская «Проблемы доставки iOS-приложений на тестовые устройства»Ксения Покровская «Проблемы доставки iOS-приложений на тестовые устройства»
Ксения Покровская «Проблемы доставки iOS-приложений на тестовые устройства»Yandex
 
О.В.Сухорослов "Многопотчное программирование. Часть 2"
О.В.Сухорослов "Многопотчное программирование. Часть 2"О.В.Сухорослов "Многопотчное программирование. Часть 2"
О.В.Сухорослов "Многопотчное программирование. Часть 2"Yandex
 
Scott Meyers — Why C++ Sails When the Vasa Sank
Scott Meyers — Why C++ Sails When the Vasa SankScott Meyers — Why C++ Sails When the Vasa Sank
Scott Meyers — Why C++ Sails When the Vasa SankYandex
 
О.В.Сухорослов "Многопотчное программирование. Часть 1"
О.В.Сухорослов "Многопотчное программирование. Часть 1"О.В.Сухорослов "Многопотчное программирование. Часть 1"
О.В.Сухорослов "Многопотчное программирование. Часть 1"Yandex
 

Destaque (7)

Дизайн и разработка фронтенда
Дизайн и разработка фронтендаДизайн и разработка фронтенда
Дизайн и разработка фронтенда
 
Сергей Сергеев "Git — ветки, деревья, лес"
Сергей Сергеев "Git — ветки, деревья, лес"Сергей Сергеев "Git — ветки, деревья, лес"
Сергей Сергеев "Git — ветки, деревья, лес"
 
Чираг Шах «Коллективный поиск, взаимодействие пользователей: подходы к изучен...
Чираг Шах «Коллективный поиск, взаимодействие пользователей: подходы к изучен...Чираг Шах «Коллективный поиск, взаимодействие пользователей: подходы к изучен...
Чираг Шах «Коллективный поиск, взаимодействие пользователей: подходы к изучен...
 
Ксения Покровская «Проблемы доставки iOS-приложений на тестовые устройства»
Ксения Покровская «Проблемы доставки iOS-приложений на тестовые устройства»Ксения Покровская «Проблемы доставки iOS-приложений на тестовые устройства»
Ксения Покровская «Проблемы доставки iOS-приложений на тестовые устройства»
 
О.В.Сухорослов "Многопотчное программирование. Часть 2"
О.В.Сухорослов "Многопотчное программирование. Часть 2"О.В.Сухорослов "Многопотчное программирование. Часть 2"
О.В.Сухорослов "Многопотчное программирование. Часть 2"
 
Scott Meyers — Why C++ Sails When the Vasa Sank
Scott Meyers — Why C++ Sails When the Vasa SankScott Meyers — Why C++ Sails When the Vasa Sank
Scott Meyers — Why C++ Sails When the Vasa Sank
 
О.В.Сухорослов "Многопотчное программирование. Часть 1"
О.В.Сухорослов "Многопотчное программирование. Часть 1"О.В.Сухорослов "Многопотчное программирование. Часть 1"
О.В.Сухорослов "Многопотчное программирование. Часть 1"
 

Semelhante a Дмитрий Щадей "Зачем и как мы используем jsLint"

О безопасном использовании PHP wrappers
О безопасном использовании PHP wrappersО безопасном использовании PHP wrappers
О безопасном использовании PHP wrappersPositive Hack Days
 
Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"Yandex
 
Страх и ненависть в исходном коде
Страх и ненависть в исходном кодеСтрах и ненависть в исходном коде
Страх и ненависть в исходном кодеKolya Korobochkin
 
PHP Tricks
PHP TricksPHP Tricks
PHP TricksBlackFan
 
Взломать Web-сайт на ASP.NET? Сложно, но можно!
Взломать Web-сайт на ASP.NET? Сложно, но можно!Взломать Web-сайт на ASP.NET? Сложно, но можно!
Взломать Web-сайт на ASP.NET? Сложно, но можно!Vladimir Kochetkov
 
Внутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackВнутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackAlexey Ivanov
 
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/Linux
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/LinuxSECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/Linux
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/LinuxSECON
 
pgday17. How shared memory works in modern PostgreSQL
pgday17. How shared memory works in modern PostgreSQLpgday17. How shared memory works in modern PostgreSQL
pgday17. How shared memory works in modern PostgreSQLDmitry Kremer
 
Cтрах и ненависть в MongoDB
Cтрах и ненависть в MongoDBCтрах и ненависть в MongoDB
Cтрах и ненависть в MongoDBDmitry Viskov
 
Фундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел ТайкалоФундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел ТайкалоStanfy
 
Как мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальКак мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальBadoo Development
 
Problems of Automated Generation of Exploits on the Basis of Source Code
Problems of Automated Generation of Exploits on the Basis of Source CodeProblems of Automated Generation of Exploits on the Basis of Source Code
Problems of Automated Generation of Exploits on the Basis of Source CodePositive Hack Days
 
Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"
Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"
Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"Yandex
 
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScriptСтажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScriptSmartTools
 

Semelhante a Дмитрий Щадей "Зачем и как мы используем jsLint" (20)

Bytecode
BytecodeBytecode
Bytecode
 
О безопасном использовании PHP wrappers
О безопасном использовании PHP wrappersО безопасном использовании PHP wrappers
О безопасном использовании PHP wrappers
 
Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"
 
UWDC 2013, Yii2
UWDC 2013, Yii2UWDC 2013, Yii2
UWDC 2013, Yii2
 
Страх и ненависть в исходном коде
Страх и ненависть в исходном кодеСтрах и ненависть в исходном коде
Страх и ненависть в исходном коде
 
Funny JS #2
Funny JS #2Funny JS #2
Funny JS #2
 
Js fuckworks
Js fuckworksJs fuckworks
Js fuckworks
 
PHP Tricks
PHP TricksPHP Tricks
PHP Tricks
 
Приручаем linux-консоль
Приручаем linux-консольПриручаем linux-консоль
Приручаем linux-консоль
 
Взломать Web-сайт на ASP.NET? Сложно, но можно!
Взломать Web-сайт на ASP.NET? Сложно, но можно!Взломать Web-сайт на ASP.NET? Сложно, но можно!
Взломать Web-сайт на ASP.NET? Сложно, но можно!
 
Внутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackВнутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpack
 
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/Linux
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/LinuxSECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/Linux
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/Linux
 
pgday17. How shared memory works in modern PostgreSQL
pgday17. How shared memory works in modern PostgreSQLpgday17. How shared memory works in modern PostgreSQL
pgday17. How shared memory works in modern PostgreSQL
 
Cтрах и ненависть в MongoDB
Cтрах и ненависть в MongoDBCтрах и ненависть в MongoDB
Cтрах и ненависть в MongoDB
 
Фундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел ТайкалоФундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел Тайкало
 
php frameworks
php frameworksphp frameworks
php frameworks
 
Как мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальКак мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон Довгаль
 
Problems of Automated Generation of Exploits on the Basis of Source Code
Problems of Automated Generation of Exploits on the Basis of Source CodeProblems of Automated Generation of Exploits on the Basis of Source Code
Problems of Automated Generation of Exploits on the Basis of Source Code
 
Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"
Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"
Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"
 
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScriptСтажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
 

Mais de Yandex

Предсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksПредсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksYandex
 
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Yandex
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаYandex
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаYandex
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Yandex
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Yandex
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Yandex
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Yandex
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Yandex
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Yandex
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Yandex
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Yandex
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровYandex
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Yandex
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Yandex
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Yandex
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Yandex
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Yandex
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Yandex
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Yandex
 

Mais de Yandex (20)

Предсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksПредсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of Tanks
 
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
 

Дмитрий Щадей "Зачем и как мы используем jsLint"

  • 1. Зачем  и  как  мы  используем   JSLint   Дмитрий  Щадей   Разработчик  интерфейсов   Я.Субботник,  Киев,  5  мая  2012  года  
  • 3. JSLint   Статический  анализатор  кода   —  Ищет  анти-­‐паттерны  в  вашем  коде   —  Повышает  читаемость  кода   —  Уменьшает  количество  багов   —  Автор  Douglas  Crockford   ü  h_p://en.wikipedia.org/wiki/Douglas_Crockford   3  
  • 5. Отладочная  информация,   которую  мы  забыли  убрать   function handler(e) { alert(‘clicked’); // clicked?!? if (e.keyCode === 13) { // Error: ‘console’ is undefined в IE7 console.log(‘zzzzzzzzzzz’); } }     5  
  • 6. Лишние  запятые   в  конце  массивов  и  объектов   // Error: Expected identifier, string or number var foo = { a:'b', c:'d', e:'f’, }; // Bug in IE bar.length === 5 var bar = [1,2,3,4,]; 6  
  • 7. Глобальные  переменные,     которых  мы  не  ждали   var a b; // one more dead kitten for( i=0; len = items.length; i < len; i++ ) { /* killing spree */ } 7  
  • 8. Глупые  ошибки,   которые  мы  часто  делаем   var a = 2, name = ‘Yandex’, misSpelledVar = 1, unusedVar; if ( a = ‘1’) { /* always fires */ } else { /* never fires */ } new RegExp(”^s*" + name + “s*$", "i"); //equals to /^s*Yandexs*$/I console.log(misSpeledVar); // undefined 8  
  • 9. Проверка  Style  Guide-­‐ов   —  Обязательная  точка  с  запятой   —  Все  переменные  объявляются  в  одном  операторе   var   —  Обязательные  блоки  для  if,  while,  for     —  Оператор  void  запрещен   —  Конструкторы  пишутся  с  большой  буквы   —  Табуляция  и  пробелы   —   Strict  mode   9  
  • 11. “Move  the  invocazon  into  the  parents  that  contain  the   funczon”   (function() { /* code */ }  )() (function() { /* code */ }()  ) 11  
  • 12. “Expected  an  assignment  or  funczon  call  and  instead  saw   an  expression”   arg && arg.longMethodName && false && arg.longMethodName.doSomething(); if ( arg && arg.longMethodName ) { arg.doSomething(); } 12  
  • 13. “The  body  of  a  for  in  should  be  wrapped  in  an  if  statement   to  filter  unwanted  properzes  from  the  prototype”   var i, items = {/* properties*/}; for (i in items) { /* code*/ } var i, items = {/* properties*/}; for (i in items) { if (items.hasOwnProperty(i)){ /* code*/ } } 13  
  • 15. Установить  JSLint   консольный  клиент   —  Используя  V8   $ sudo apt-get install nodejs $ sudo apt-get install npm $ npm install –g jslint —  Используя  SpiderMonkey   $ sudo apt-get install jsl 15  
  • 16. Настроить  JSLint   —  Указать  допустимые  глобальные  переменные   ü  jQuery,swfobject,BEM,  Modernizr   ü  Шорткаты  :  -­‐-­‐browser,  -­‐-­‐node   —  Отключить  не  нужные  вам  рекомендации   ü  Доступные  опции  :  h_p://www.jslint.com/lint.html   alias jslint=“jslint – predef=jQuery,swfobject,BEM, Modernizr – white –plusplus --passfail --browser -- evil” 16  
  • 17. Настроить  JSLint   JSLINT_DIRS ?= trunk vkfox-52 jslint: $(shell find $(JSLINT_DIRS) -name '*.js') %.js : @echo "$*.js" @jslint --predef=jQuery,swfobject --bitwise --browser --confusion --evil --nomen --passfail --plusplus --regexp --sloppy --sub --white $*.js h_ps://github.com/metrofun/yasubbotnik   17  
  • 18. Настроить  JSLint   для  конкретного  файла   Опции  можно  указывать  внутри  файлов.   /*global alert: false */ /*jslint evil: false */ alert(new Function("return 1;")()); 18  
  • 19. Сделать  git-­‐hook   на  pre-­‐commit   #!/bin/sh –e case "${1}” in --about ) echo "check *.js files using jslint";; * ) for FILE in $(git diff --cached --diff- filter=ACMTR --name-only HEAD | grep -e '.js$'); do echo jslint $FILE jslint $FILE done;; esac h_ps://github.com/metrofun/yasubbotnik   19  
  • 20. JSHint   еще  один  анализатор   —  Fork  JSLint-­‐а   ü  h_ps://github.com/jshint   —  Community-­‐driven   —  Больше  настроек   ü  h_p://www.jshint.com/opzons/     20  
  • 22. Дмитрий  Щадей   Разработчик  интерфейсов     metrofun@yandex-­‐team.ru   @metrofun   vk.com/metrofun