자바스크립트 코드 검사 도구
$ sudo npm install jshint -g
먼저 프로젝트 폴더에 .jshintrc 파일을 생성한다. 그 후 아래와 같이 편집한다.
{
"undef": true,
"unused": true,
}
JSON 형식으로 작성하면 된다. “옵션명” : 사용여부 형식으로 작성한다. 그 후 아래 명령으로 코드를 검사한다.
$ jshint [파일명]
코딩 스타일을 강제하기 위한 옵션이다.
| bitwise | ^(XOR), | 같은 bit연산자를 금지한다. |
|---|---|
| camelcase | 변수를 카멜케이스(혹은 UPPER_CASE)로 강제한다(이름은 카멜케이스이지만 var test나 var Test모두 가능하다.) |
| curly | if문이나 while문 등 중괄호({})를 생략해도 되는 곳에서 중괄호를 강제한다. |
| eqeqeq | 비교문에서 ==나 !=대신 ===나 !==를 사용하도록 강제한다. |
| es3 | 구형브라우저를 위해서 es3 명세를 사용한 경우에 필요하다. |
| forin | for-in 루프를 사용할 때 반드시 필터링을 사용하도록 강제한다. for (var key in obj)식의 루프에서 프로토타입 체인을 사용한 키를 다 순회하므로 일반적으로 if (obj.hasOwnProperty(key)) {}같은 조건문을 두는데 이러한 필터링이 없을 경우(꼭 hasOwnProperty여야 하는 건 아니다.) 오류가 나오도록 한다. (루프문안에 다른 실행문이 없으면 무시한다.) |
| freeze | Array, Date, String 같은 네이티브 객체의 프로토타입을 덮어쓸 수 없도록 막는다. Array.prototype.count = function() { };와 같이 사용하는 경우 오류 메시지가 나온다. |
| immed | var a = function() {}();와 같이 함수를 바로 실행하는 경우 함수를 괄호로 감싸도록 강제한다. 이는 가독성을 높이기 위함이다. |
| indent | 들여쓰기 크기를 정하고 숫자로 지정한다. |
| latedef | 변수를 사용하는 하는 부분 뒤에 정의하는 것을 금지한다. 자바스크립트는 hoisting 때문에 같은 스코프에서 나중에 선언된 변수를 앞에서 사용할 수 있는데 이 부분을 차단한다는 의미이다. |
| newcap | new로 생성자 함수를 사용할 때 대분자로 시작하도록 강제한다. new animal(); 대신 new Animal();와 같이 사용해야 한다. |
| noarg | 최적화가 어려워 폐기될 예정인 arguments.caller와 arguments.callee의 사용을 막는다. |
| noempty | for (var i=0;i < 10;i++) { }와 같이 for문 등에서 빈 블록을 금지한다. |
| nonew | new Animal();같은 생성자함수의 실행결과를 다른 변수 등에 할당하지 않고는 사용할 수 없게 한다. |
| plusplus | ++, –같은 단항연산자를 금지한다. |
| quotmark | 문자열 등에 사용하는 따옴표의 스타일을 강제한다. true로 지정하면 쌍따옴표, 홑따옴표를 모두 쓸 수 있지만 섞어서 사용할 경우 오류가 나고 single은 홑따옴표 double는 쌍따옴표를 강제한다. |
| undef | 선언되지 않은 변수를 사용하면 오류가 발생한다. |
| unused | 변수를 선언하고 사용하지 않으면 오류가 발생한다. |
| strict | 함수에 ECMAScript 5의 strict mode를 강제한다. 이 옵션은 함수범위에만 강제하고 전역 strict mode는 허용하지 않는다. |
| trailing | 라인 끝에 불필요한 공백문자가 들어가면 오류가 발생한다. |
| maxparams | 값을 숫자로 지정하고 함수에서 파라미터의 최대 개수를 지정한다. |
| maxdepth | 제어문의 최대 중첩개수를 지정한다. |
| maxstatements | 한 함수내의 사용할 수 있는 최대 스테이트먼트 개수를 지정한다. |
| maxcomplexity | 코드의 사이클매틱 복잡도(cyclomatic complexity)를 지정한다. |
| maxlen | 한 라인의 최대 길이를 지정한다. |
안전하지 않은 코드에 대한 오류를 허용하기 위한 옵션이다.
| asi | 세미콜론이 빠졌을 때 발생하는 오류를 보여주지 않는다. |
|---|---|
| boss | if (a = 1)처럼 비교문이 와야 할 곳에 할당문이 올 때 발생하는 오류를 보여주지 않는다. |
| debug | debugger;문을 코드에 사용했을 때 발생하는 오류를 보여주지 않는다. |
| eqnull | == null 비교에 대한 오류를 보여주지 않는다. |
| esnext | ECMAScript 6 문법을 사용을 허용한다. |
| evil | eval을 사용했을 때 발생하는 오류를 보여주지 않는다. |
| expr | 함수 호출이나 할당문이 아닌 표현식에 대한 오류를 보여주지 않는다. 주로 테스트에서 true.should.be.ok;같은 표현식을 사용할 때 필요하다. |
| funcscope | if (true) { var a = 1; }처럼 제어문 내에서 변수를 정의하는 경우 발생하는 오류를 보여주지 않는다. 자바스크립트는 펑션스코프를 사용하므로 동작에는 이상이 없지만, 오류를 발생할 여지가 있으므로 이 방법을 권장하지 않는다. |
| globalstrict | ECMAScript 5의 strict mode를 전역으로 사용하는 것을 허용한다. |
| iterator | iterator 프로퍼티 사용에 대한 오류를 보여주지 않는다. |
| lastsemic | 한 줄짜리 블록에서 마지막 세미콜론이 빠진 경우에만 오류를 보여주고 블록 내부 등에서 세미콜론을 사용하지 않은 경우에는 오류를 보여주지 않는다. |
| laxbreak | 코드에서 안전하지 않은 줄 바꿈에 대한 오류를 보여주지 않는다. 이 오류는 콤마를 앞에 쓰는 형식에 대한 오류도 보여주지 않는데 이 경우에는 laxcomma를 사용해야 한다. |
| laxcomma | 객체 리터럴등에서 콤마를 앞에(마지막이 아니라) 쓰는 형식을 허용한다. |
| loopfunc | 루프 안에서 함수를 정의하는 경우 발생하는 오류를 보여주지 않는다. |
| moz | 모질라의 자바스크립트 확장 문법(JavaScript 1.7)을 사용하도록 허용한다. |
| multistr | \를 사용해서 문자열을 여러 라인에 걸쳐서 사용하는 경우 발생하는 오류를 보여주지 않는다. |
| notypeof | typeof의 값을 비교할 때 typeof의 값이 아닌 값과 비교하는 경우 발생하는 오류를 보여주지 않는다. |
| proto | proto 프로퍼티 사용에 대한 오류를 보여주지 않는다. |
| scripturl | <a href=“javascript:”>처럼 스크립트를 타켓으로 한 URL(javascript:)에 대한 오류를 보여주지 않는다. |
| smarttabs | 탭과 스페이스를 섞어서 사용하는 경우 발생하는 오류를 보여주지 않는다. |
| shadow | 이미 선언된 변수를 재선언해서 발생하는 variable shadowing에 대한 오류를 보여주지 않는다. |
| sub | obj['key']대신 .을 사용하는 표기법을 권장하는 오류를 보여주지 않는다. |
| supernew | new function () {}나 new Object;처럼 잘못 작성했을 가능성이 있는 생성자에 대한 오류를 보여주지 않는다. |
| validthis | strict 모드로 동작할 때 생성자가 아닌 함수에서 this를 사용하는 것에 대한 오류를 보여주지 않는다. |
JSHint가 알려진 라이브러리의 전역변수들을 알게끔 하기 위한 옵션이다.
| browser | 최신 브라우저들의 document, navigator같은 전역 변수를 정의한다. 이 옵션은 console, alert은 노출하지 않는다. |
|---|---|
| couch | CouchDB의 전역변수를 정의한다. |
| devel | console, alert등 개발용으로 사용하는 전역 변수/객체를 정의한다. |
| dojo | Dojo의 전역변수를 정의한다. |
| jquery | jQuery의 전역변수를 정의한다. |
| mootools | MooTools의 전역변수를 정의한다. |
| node | Node.js환경에 맞도록 브라우저 환경에만 어울리는 오류는 무시하고 Node.js에 맞는 전역변수를 정의한다. |
| nonstandard | escape나 unescape처럼 표준은 아니지만, 범용적으로 쓰이는 전역변수를 정의한다. |
| phantom | PhantomJS에서 동작하는 환경에 맞는 전역변수를 정의한다. |
| prototypejs | Prototype의 전역변수를 정의한다. |
| rhino | Rhino 환경에 맞는 전역변수를 정의한다. |
| worker | Web Worker 환경에 맞는 전역변수를 정의한다. |
| wsh | Windows ScriptHost 환경에 맞는 전역변수를 정의한다. |
| yui | YUI의 전역변수를 정의한다. |
Deprecated 된 옵션이다. 사용금지.
| nomen | 변수의 앞이나 뒤에 언더스코어(_)를 사용한 경우 오류가 발생한다. |
|---|---|
| onevar | 함수 안에 var 선언을 하나만 해야 한다. |
| passfail | 이 옵션을 사용하면 첫 오류나 경고에서 멈춘다. |
| white | JSHint가 더글라스 크록포드(Douglas Crockford)의 코딩 스타일가이드에 따라 코드를 검사하도록 한다. |