С кодом будь строг. Настройка jshint

Сейчас использую, и лучшего не видел jshint. До него я работал с js2-mode для emacs и его более продвинутой версией, с jshint от дядюшки Крокфорда. jshint использую в качестве плагина к sublimetext2. Чтобы начать пользоваться им
  • надо установить node.js
  • через package control установить SublimeLinter
  • покрутить настройки до удовлетворяющего уровня
Кстати, этот инструмент доступен для ряда других редакторов (notepad++, eclipse).
Остановлюсь на настройках и на случаях, которые они покрывают. Мой файл настроек можно взять тут. Что такое .jshintrc можно прочитать в документации

curly : true

Заставляет ставить фигурные скобки даже тогда, когда они не обязательны. С одной стороны улучшается читаемость кода, с другой, при простейшей обфускации код продолжает корректно работать.
if (ready())
	onready();
else
	on_not_ready();
// VS
if (ready()) {
	onready();
} else {
	on_not_ready();
}

eqeqeq : true

Контролирует использование строгого сравнения. Выигрыш получается не только в производительности (он мизерный на самом деле), а в чуть большей прозрачности кода (не надо задумываться о том, какого типа данные хранятся в переменных). Подробнее про автоматическое приведение типов при нестрогом сравнении.
['1'] == 1;     // true
['1'] === 1;    // false
month === '7';  // очевидно, что month содержит строку

forin : true

Ошибочным считает перебор свойств объекта без проверки hasOwnProperty (этого метода нет в ie7). Особенно полезно создателям 3-d party библиотек или встраиваемых скриптов. Подобная проверка ограничит код от удовлетворенных порывов к monkey patching.

immed : true

Обязывает оборачивать моментально вызываемые функции в скобки. Таким образом читающему становится ясно, что фишка в вызове функции, а не в ее определении (при этом ясно как читая с начала, так и с конца определения).

latedef : true

Обращает внимание на вызов функций перед их определением. Хотя это и естественная практика (так как определением функций происходит на этапе чтения кода, и функции уже объявлены на этапе интерпретации), для не знающего тонкостей ecma, подобная запись будет сюрпризом.

newcap : true

Стимулирует использование заглавных первых букв в именах конструкторов.

noarg : true


Негодует при использовании arguments.calle, arguments.calle.caller (см. strict mode).

noempty : true

Не приемлет использование пустых блоков кода. Чаще всего такие конструкции связаны с ошибкой или опиской.
if (document) {} // вероятнее всего описка

plusplus : true

Поощряет использование += и -= вместо ++ и --. Запись чуть длиннее, зато понятно что происходит и в каком порядке.

undef : true

Присвоение неопределенной переменной выдаст ошибку. В нестрогом режиме в таком случае создает глобальная переменная (см. strict mode).

asi : false

Принуждает к расстановке точек с запятой. Стандарт говорит, что точку с запятой ставить не обязательно, интерпретатор самостоятельно их расставит. Правда сделать это он может неоднозначно. Код ниже приведет к ошибке из-за отсутствия точки с запятой после объявления объекта. Подобную неожиданность можно встретить при конкатенации файлов, при длинном объявлении объекта или при большом расстоянии между объявлением объекта и вызовом функции (в виде комментария, например). Одно из решений — всегда ставить точку с запятой перед вызовом анонимной функции.
var obj = {
	prop : 'val'
}

(function () {
	// полезная функция
}()); // ошибка

funcscope : false

Возбраняет использование функций и переменных, объявленных в лексических областях видимости. Для новичка не прозрачно то, что все вар-ы создаются на этапе чтения скрипта. К тому-же на сегодняшний момент код ниже генерирует ошибку в фаерфоксе.
if (true) {
	function a () {}
} else {
	function b () {}
}
b();

Теперь у вас в руках остро наточенный инструмент, который позволит не задумываться над синтаксисом, а сконцентрироваться на логике.
Share
Send
Popular