본문 바로가기

NodeJS/JSHint

JSHint 옵션 정리

JSHint 옵션 정리 예정


http://jshint.com/docs/options/


제가  필요하다고 생각되는 옵션 위주로 작성하였습니다



1.  camelcase


처음 프로그래밍을  c언어로 공부하였는데

요즘 스타일과 다르게  코딩을 합니다


int hello_world() {

}


hello_world     <-  under bar 로  함수이름이나 변수를 구분하여  작성을 하는 방식인데 

이게 헝거리 표기법인가?  그럴겁니다

지금도 리눅스 관련  코드는 위와 같은 코드가 많고  아직도 쓰는데가 많습니다



자바스크립트에서는  camelcase  형식을 추천합니다

HelloWorld  <--   이런거  


camelcase  를  true 설정하면    표기법이 다른  문법을 에러 처리 합니다

제 생각은   나름   표준을  따를 필요가 있다 생각하여 필수입니다



2. curly

if,  for,  while  사용시  실행 코드가   1줄이면   중괄호 {} 를 생략해도 되는데

curly  :  true 를 하면  중괄호 생략을 못한다

음...  이건 나도   잘 안지키는 편인데

결론은  이것도  true 를 쓰자


3. eqeqeq

 비교문에서 ==나 !=대신 ===나 !==를 사용하도록 강제한다.이것도 필수라고 생각됨  


4. es5
ECMAScript 5.1 에 명시된 문법을 체크한다
최신 표준자바스크립트 문법이니  필수



5. forin 
for 문을 돌때  해당 객체값에 대한  검증을 해야 한다
ex) empty,  hasOwnProperty
아래 코드에서는  a 값 검증 루틴을 추가해야 에러가 없다

var a = {1: 'a', 2: 'b', 3: 'c'};

for(var key in a) {
    console.log(key);
}   


6. freeze
    // freeze: Array, Date, String 같은 네이티브 객체의 프로토타입을 덮어쓸 수 >
없도록 막는다.

7. funcscope
scope 에서 변수 a값이  아래와 같이  if문 밖에 선언되어 있어도  정상 동작을 하지만
JSHint 에서는  에러가 난다
그걸 방지하기 위한  funcscope 이다

이건  사용하지 말자...

function test() {
    if(true) {
        var a = 1;
    }

    a += 1;
}   

8. globalstrict
ECMAScript 5의 strict mode를 전역으로 사용하는 것을 허용한다.

이건 내가 문법을 아직 몰라  ... 일단 대기..



9. maxcomplexity
    사이클로매틱 복잡도  수치를 지정하여 에러를 발생시킨다
    처음 말을 들었을때 이해가 안가는데
    구글링 해보니  기능에 대한 코드 복잡도를 체크하는 거더라
    maxcomplexity: 20  으로 맞춘다

사이클로매틱 복잡도에 대한 설명은  : http://story.wisedog.net/sw-metric-cyclomatic-complexity-%EB%B3%B5%EC%9E%A1%EC%84%B1-%EC%A7%80%ED%91%9C/


10. maxdepth
    // 제어문의 최대 중법가능한 갯수
    "maxdepth": 3

11. maxparams
    // 값을 숫자로 지정하고 함수에서 파라미터의 최대 개수를 지정한다.
    "maxparams": 3

12. maxstatements
    // 함수에서 ; 기준으로 최대 몇개까지 허용할지 체크한다 (복잡도)
    "maxstatements": 4


13. noarg
// 최적화가 어려워 폐기될 예정인 arguments.caller   ,    arguments.callee 사용을 막는다
14. nocomma
이 옵션은 콤마 연산자의 사용을 금지한다. 잘못 사용하면 쉼표 연산자는 문장의 값을 모호하게하고 잘못된 코드를 홍보 할 수 있습니다.


15. nonew
    //  생성자함수의 실행결과를 다른 변수 등에 할당하지 않고는 사용할 수 없게 한
다.
    "nonew": true