# JSHint, JSCS, JSLint, ESLint.

JSHint, JSCS, JSLint, ESLint.

Установка

JetBrains.

Поддерживаются из коробки для активации нужно :
1. войти Preferences > Language & Frameworks > JavaScript > Code Quality Tools

2. Выбрать нужный статический анализатор и активировать checkbox Enable
3. нажать OK.

Atom

Поддерживаются из плагинов для установки нужно :
Войти в Preferences > Install в строке поиска ввести имя нужного статического анализатора

подтвердить установку.

Настройка

JetBrains.

JSHint

Есть два варианта настройки первый в настройках самой IDE,второй черз файл настроек .jshintrc
Для настройки JSHint в настройках IDE после включения чекбокса в Preferences > Language & Frameworks > JavaScript > Code Quality Tools > JSHint будет активировано меню настроек

Параметры с жёсткими ограничениями

Эти параметры указывают JSHint-у более строго проверять ваш код. Используйте их, если вы хотите разрешить использовать только безопасные конструкции языка. Это полезно, когда код пишется большим числом разработчиков с разным уровнем знаний.

  • bitwise – этот параметр запрещает использование побитовых операторов, такие как ^(исключающее или), | (или) и другие. Могут быть две причины, по которым вы захотите включить этот параметр:
  1. Т.к. JavaScript не имеет целочисленных переменных (только с плавающей точкой двойной точности), побитовые операторы с ними происходят очень медленно.
  2. Побитовые операторы редко используются в программах на JavaScript, и зачастую, к примеру, & — это пропущенный символ в &&.

* curly – этот параметр заставляет всегда тело условий и циклов заключать в фигурные скобки. JavaScript позволяет опускать фигурные скобки, когда блок состоит только из одного оператора, к примеру:

 while (day) shuffle(); 

Однако, в некоторых случаях такая конструкция может привести к ошике:

 while (day) shuffle(); sleep();// Можно подумать, что это часть цикла, но это не так.

Вообще, если вы аккуратно пишите код, то лучше всегда требовать обрамлять блоки скобками.
* eqeqeq – этот параметр запрещает использовать == и != в пользу === и !==. Эти операторы пытаются всегда приводить операнды к одному типу, в результате чего можно получить неожиданный результат. Последние не делают приведения, следовательно являются более безопасными. Если вы хотите узнать больше о приведении типов в JavaScript, рекомендуем ознакомиться сTruth, Equality and JavaScript (Angus Crol).Примечание: даже если этот параметр выключен, JSHint все равно будет проверять небезопасное сравнение вида != null, если eqnull (см. ниже) включён!
* forin – этот параметр требует, чтобы во всех for in циклах выбирались только элементы объекта. Цикл for in перебирает все свойства объекта, в том числе и унаследованные. Это может привести к получению неожиданного свойства объекта. Обычно безопаснее фильтровать унаследованные свойства, например:

for (key in obj) {if (obj.hasOwnProperty(key)) { // Мы уверены, что obj[key] относится к текущему обхекту, а не унаследован.}}

Для лучшего понимания for in циклов в JavaScript, прочтите Exploring JavaScript for-in loops (Angus Croll).
* immed – этот параметр запрещает вызывать объявленную функцию, не обрамив ее скобками. При обрамлении скобками, становится понятно, что выражение — это результат функции, а не сама функция.
* latedef – этот параметр запрещает использование переменных до их объявления. JavaScrit позволяет объявлять переменные в любом месте, при этом, при исполнении кода, они все поднимаются в самый верх. Такое поведение может привести к непонятным ошибкам, поэтому использование этого параметра делает код более безопасным, разрешая использовать переменные только после их явного предварительного объявления.Для лучшего понимания области видимости переменных и их объявлении в JavaScrip, прочтите JavaScript Scoping and Hoisting (Angus Croll).
* newcap – этот параметр требует обязательно использовать оператор new перед функциями — конструкторами. Тк функции — конструкторы объявляются как и обычные функции, есть возможность вызвать такую функцию на исполнение, вместо того, чтобы создать объект, это, зачастую, является ошибкой, в особенности, когда в теле функции присутствует this.Отсутствие оператора new не вызовет никаких ошибок исполнения, и выявление такой ошибки будет затруднительным. А ошибка будет серьёзной, тк при вызове функции без оператора new, указатель this будет указывать не на создаваемый объект, а на глобальный.Пример:

 function MyConstructor() {console.log(this);}new MyConstructor(); // -> [MyConstructor]MyConstructor(); // 

-> [DOMWindow]Для лучшего понимания, как работаетthis, прочтите Understanding JavaScript Function Invocation and «this» (Yehuda Katz).
* noarg – этот параметр запрещает использование arguments.caller иarguments.callee. При их использовании, становится невозможным использовать множество оптимизаций, поэтому они объявлены устаревшими в новых версиях JavaScript. Также EcmaScript 5 запрещает использоватьargumants.callee в строгом режиме.
* noempty – этот параметр предупреждает, если в коде есть пустой блок. HSLint всегда делал такие предупреждения, мы сделали этот опциональным. В любом случае, не было случаев, чтобы пустой блок приводил к ошибке в программе.
* nonew – этот параметр запрещает вызывать конструктор, создавая объект, но нигде его не сохранив. Некоторые вызывают конструктор, не сохранив созданный объект в переменной, к примеру так:

new MyConstructor();

Такой подход не имеет смысла, поэтому вы должны избегать таких конструкций.
* plusplus – этот параметр запрещает использование унарных операторов инкремента и декремента. Некоторые считают, что использование ++ и — — это плохой стиль программирования, к примеру разработчики на Python, где такие операторы отсутствуют.
* regexp – этот параметр запрещает использовать . в регулярных выражениях, что может быть опасным.
* undef – этот параметр запрещает использовать не объявленные переменные. Этот параметр очень полезен, при поиске случаев, когда переменные создаются или используются глобально. Пример:/jshint undef:true */function test() { var myVar = ‘Hello, World’;console.log(myvar); // Здесь JSHint будет ругаться на неизвестную функцию}Если переменная (функция) объявлена где-то в другом файле, то вы должны использовать конструкцию /global … */ чтобы сообщить JSHint-у об этом. Польше информации ищите тут.
* strict – этот параметр требует, чтобы код был написан в соответствии с строгим режимом EcmaScript 5. Строгий режим запрещает использование некоторых конструкций JavaScript. При этом, строгий режим позволяет избежать появления некоторых ошибок и позволяет производить некоторые оптимизации кода.Примечание: этот параметр использует строгий режим только внутри области видимости функции, и запрещает использовать его глобально, тк это может нарушить работу прочих компонентов. Если вы хотите использовать строгий режим глобально, воспользуйтесь параметром globalstrict.
* trailing – этот параметр будет выдавать ошибку в случае, когда у вас в конце строки есть пробелы. Такие пробелы могут стать источником ошибок в многострочном тексте, к примеру:// Здесь действительно может возникнуть ошибка,// если после \ будет стоять пробелvar str = «Hello \World»;

Параметры с мягкими ограничениями

Эти параметры позволяют подавлять некоторые сообщения об ошибках. Используйте их только в том случае, когда вы полностью уверены в том, что делаете.

  • asi – этот параметр подавляет сообщения об ошибке, вызванной пропущенной точкой с запятой. Довольно много людей опасаются писать код без использования точки с запятой. Распространено мнение, что использование точки с запятой является обязательным в JavaScript (но это не так). JavaScript имеет свои правила по поводу использования точки с запятой, и их придерживаются все браузеры. Так что использовать этот параметр, или нет — это ваше дело.Больше информации по использованию точки с запятой в JavaScript вы можете прочитать в An Open Letter to JavaScript Leaders Regarding Semicolons (Isaac Schlueter) и JavaScript Semicolon Insertion.
  • boss – этот праметр подавляет сообщения об ошибке в случае, когда ожидается сравнение, но его не происходит. Чаще всего код вида if (a = 10) {} является опечаткой. Тем не менее, подобная конструкция может быть полехна в подобных случаях:
    for (var i = 0, person; person = people[i]; i++) {}
  • debug– этот параметр подавляет сообщения об ошибке, если в коде встречается ключевое слово debugger.
  • eqnull – этот параметр подавляет сообщения об ошибке в случае использования сравнения вида == null. Такое сравнение может быть полезным, если вы хотите узнать, значение переменной null или undefined.
  • es5 – Этот параметр сообщает JSHint-у, что ваш код использует возможности EcmaScript 5, такие как геттеры и сеттеры. Обратите внимание, что не все браузеры ещё поддерживают этот стандарт.Больше информации:
    1. ES5 compatibility table (Juriy Zaytcev)
    2. ECMAScript 5 support in Mozilla
  • esnext – этот параметр сообщает JSHint-у, что ваш код использует возможности ES.next, такие как const и let. Обратите внимание, что не все браузеры ещё поддерживают этот стандарт.Больше информации:
    1. Draft Specification for ES.next (ECMA-262 Ed. 6)
  • evil – этот параметр подавляет сообщения об ошибке при использовании eval. Использовать eval не рекомендуется, тк он делает код уязвимым для различных инъекций, так же затрудняет работу оптимизаторам.
  • expr – этот параметр подавляет сообщения об ошибке в случае, где обычно ожидается присваивание или вызов функции. Обычно такое случается в следствие опечатки, однако это не запрещается спецификацией.
  • funcscope – этот параметр подавляет сообщения об ошибке в случае, когда переменная была объявлена в некоторой области видимости, а после запрашивается уже вне её. Вообще, в JavaScript существует как локальная область видимости, так и глобальная, подобная запись может привести в замешательство малоопытных разработчиков, также усложняет процесс отладки. JSHint выдаёт предупреждения, если используется переменная вне предполагаемой области видимости.Пример:
    function test() {if (true) {var x = 0;}x += 1; // ‘x’ используется вне предполагаемой области объявления.// предупреждение не будет выведено, если выставить funcscope:true}
  • globalstrict – этот параметр подавляет сообщения об ошибке в случае использования строгого режима глобально. Глобальный строгий режим может не пропустить сторонний код, написанный в обычном режиме. Больше информации вы можете получить прочитав о параметре strict.
  • iterator – этот параметр подавляет сообщения об ошибке в случае использования свойства iterator. Это свойство поддерживается не всеми браузерами, и пользоваться им нужно с осторожностью.
  • lastsemic – этот параметр подавляет сообщения об ошибке при отсутствии точки с запятой в выражении, если оно записано с блоком в одну строку. Пример:
    var name = (function() { return ‘Anton’ }());

    Это удобно использовать в случае автоматической генерации JavaScript кода.

  • laxbreak – этот параметр подавляет большинство сообщений об ошибке в коде, где есть подозрения на неправильно записанную строку. Но при этом не подавляются предупреждения при использовании first-style написании кода (см laxcomma). Пример:var foo = «blah blah»+ «blah blah»;
  • laxcomma – этот параметр подавляет сообщения об ошибке при first-style написании кода. Пример:var obj = {name: ‘Anton’, handle: ‘valueof’, role: ‘SW Engineer’};
  • loopfunc – этот параметр подавляет сообщения об ошибке при объявлении функций внутри циклов. Такие объявления могут приводить в подобным ошибкам:
    var nums = [];for (var i = 0; i < 10; i++) {nums[i] = function (j) {return i + j;};}nums[0](2); // выводиться 12 вместо 2

    Исправить ошибку можно копируя i при объявлении функции:

    var nums = [];for (var i = 0; i < 10; i++) {(function (i) {nums[i] = function (j) {return i + j;}}(i));}
  • multistr – этот параметр подавляет сообщения об ошибке при при использовании «многострочных» строк текста. Многострочный текст может быть опасными в случае, если после экранирующего символа в конце строки () попадёт пробел.Хотя этот параметр перестаёт выводить предупреждения при использовании многострочного текста, при возникновении ошибки (пробел после экранирующего символа, либо отсутствие его совсем), сообщение будет выведено.Пример:
    /*jshint multistr:true */var text = «Hello\World»; // Все отлично.text = «HelloWorld»; // Предупреждение — нет экранирующего символа.text = «Hello\ World»; // Предупреждение — пробел после экранирующего символа
  • onecase – этот параметр подавляет сообщения об ошибке при использовании единственного варианта выбора в конструкции switch. Обычно, в таких случаях можно обойтись обычным условием, однако такая ситуация часто возникает при автоматической генерации кода.
  • proto – этот параметр подавляет сообщения об ошибке при использовании свойстваproto. Это свойство объявлено устаревшим и больше не поддерживается браузерами.
  • regexdash – этот параметр подавляет сообщения об ошибке, если используется не экранированный — в конце регулярного выражения.
  • scripturl – этот параметр подавляет сообщения об ошибке при использовании строки URL со скриптом, какой как javascript:….
  • smarttabs – этот параметр подавляет сообщения об ошибке при использовании для отделения блоков кода пробелов и табуляторов вперемешку. Такая техника называется SmartTabs.<
  • shadow – этот параметр подавляет сообщения об ошибке при объявлении переменной, которая уже была объявлена во внешней области видимости.
  • sub – этот параметр подавляет сообщения об ошибке при использовании нотации [] при обращению к свойствам объекта, когда это свойство возможно получить с использованием точечной нотации. Те person[‘name’] или person.name.
  • supernew – этот параметр подавляет сообщения об ошибке при использовании странных конструкций, типа new function () { … } и new Object;. Однако такие конструкции иногда используются при создании объектов «одиночек», к примеру:var singleton = new function() {var privateVar;this.publicMethod = function () {}this.publicMethod2 = function () {}};
  • validthis – этот параметр подавляет сообщения об ошибке при возможных нарушениях строгого режима. Использование этого параметра возможно в области видимости функции, которая работает в строгом режиме.Примечание: параметр нужно использовать только внутри функции. При попытке использовать его глобально, JSHint завершится с ошибкой.
Параметры среды исполнения.

Эти параметры позволяют предварительно определить глобальные переменные используемых библиотек, браузера или node.js. По сути они являются аналогами объявлений вида /*global $:false, jQuery:false */.

  • browser – этот параметр объявляет глобальные объекты современных браузеров, такие как document и navigator, а также объекты HTML5 типа FileReader и другие.Примечание: параметр не объявляет переменные типа alert или console. Для этого используется параметр devel.
  • couch – этот параметр объявляет глобальные объекты CouchDB. CouchDB — это документоориентированная база данных, данные из которой могут быть запрошены с использованием MapReduce, используя JavaScript.
  • devel – этот параметр объявляет глобальные объекты, которые обычно используются для отладки (console, alert). Как правило, они не должны присутствовать в готовом коде.
  • dojo – этот параметр объявляет глобальные объекты для Dojo Toolkit.
  • jquery – этот параметр объявляет глобальные объекты для jQuery — библиотеки JavaScript. Language & Frameworks > JavaScript > Code Quality Tools > JSHint нажать чекбокс Use config files,a затем выбрать радиобокс Custom configuration file и указать путь к файлу .jshintrc

JSLint

Настройка JSList производится только в настройках IDE Preferences > Language & Frameworks > JavaScript > Code Quality Tools > JSLint
assignment expressions – терпимо относится к операторам присвоения, true если присваивание должно быть разрешено вне позиции операторов

  • bitwise operators – Игнорирование битовых операторов, true, если битовые операторы не должны проходить проверку
  • a browser – Разрешить функции браузера, true, учитываются стандартные глобальные переменные браузера
  • Google Closure Idioms – Разрешить Google Closure идиомы, true, если Google Closure аннотации должны быть разрешены
  • continue – Разрешать continue, true, для того что бы использование countinue игнорировалось
  • couchDB – Предложение CouchDB, true, если нужо что бы функции CouchDB считались глобальными
  • debugger statments – Разрешать debgger, true, если оператор debug должен быть разрешен
  • devel – Разрешать console, alert, true, если не установлена опция browser, и нужно что бы эти операторы были разрешены
  • eqeq – Разрешить == и !=, true, если == и != операторы должны быть разрешены
  • eval – Разрешить eval, true, если eval должен быть разрешен
  • indent – Пробелы и отступы. Количество пробелов которые используются для отступов (по умолчанию 4)
  • maxerr – Максимальное количество ошибок. Максимальное количество предупреждений для отчета проверки (по умолчанию 50)
  • maxlen – Максимальная длинна строки. Максимальное количество символов в строке
  • newcap – Использование прописных букв в начале слова в названии конструктора, true, если первые буквы в именах функций конструктора являются обязательными
  • Node.js – Учитывать Node.js, true, если Node.js должна учитываться в глобальных переменных
  • nomen – Разрешать прочерк _ в индентификаторах, true, если не нужно разрешить использование таких переменных
  • passfail – Остановка на первой ошибке, true, если сканирование должно останавливаться на первой ошибке
  • ++and– – Разрешить ++ и –, true, если использование ++ или — должно быть разрешено
  • missing “use strict” pragma – Разрешить отсутствие “use strict” в начале функции, true, для того что бы вставка строки “use strict” была не обязательной
  • TODO comments – Разрешить TODO комментарии, true, для того что бы не реагировать на TODO комментарии
  • unused parameters – Разрешить неиспользуемые параметры, true, не показывать предупреждений о неиспользуемых параметрах
  • many var statements – Разрешить использование множества var в функции, true, для множественного использования var в функции
  • white – Разрешать грязные пробелы, true, для игнорирования грязных пробелов

JSCS

Настройка производится через файл настроек .jscsrc или .jscs.json в корневом католологе или в Preferences > Language & Frameworks > JavaScript > Code Quality Tools > JSСS указывается адрес файла настройки
Несмотря на большое количество правил, которые поддерживает JSCS, конфиг вряд ли будет большим, потому что в инструменте предусмотрены пресеты. Популярных стилей для JavaScript кода не так много, и если вы выбрали один из них, то нет нужды описывать стиль полностью.Достаточно указать, на кого вы хотели бы быть похожим:

  • airbnb
  • crockford
  • google
  • jquery
  • mdcs
  • wikimedia
  • yandex
    Даже если у вас есть расхождения с этими стилями, всё равно удобно выбрать максимально похожий пресет, потому что в JSCS возможно переопределить правила пресета.

ESLint

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s