최근에 자바스크립트 공부를 하면서 느꼈던게 있었는데
코딩 컨벤션, 코딩 스타일에 대한 것이었습니다.
에어비앤비에서 깃헙에 올렸던
자바스크립트 코딩 스타일 가이드 문서 라던지,
https://github.com/airbnb/javascript
구글에 있는 자바스크립트 코딩 스타일 가이드도 봤었습니다.
https://google.github.io/styleguide/javascriptguide.xml
제 코드에서 조금씩 조금씩 바꿔보긴 했는데
힘들어서 자동툴 같은 것이 없을까해서 찾아봤는데
역시 누군가가 잘 만들어놨습니다.
(제가 한번 만들어보고 싶었는데 나중에 한번 만들어봐야겠습니다.)
위에 있는 스탠다드JS가 그 툴을 만든곳이고
그 툴의 이름이기도 합니다.
깃헙 주소는 https://github.com/feross/standard
사용법은 쉽습니다.
1. 설치
$npm install standard -g
2. 사용
자바스크립트로 작성중인 프로젝트의 디렉토리에 가셔서
$standard
그럼 각 라인별로 확인을 해서 기준에 맞는지 틀리는지 체크합니다.
결과는
/Users/pineoc/Desktop/project/server/app.js:1:33: Extra semicolon.
/Users/pineoc/Desktop/project/server/app.js:2:27: Extra semicolon.
/Users/pineoc/Desktop/project/server/app.js:3:5: 'favicon' is defined but never used
/Users/pineoc/Desktop/project/server/app.js:3:39: Extra semicolon.
/Users/pineoc/Desktop/project/server/app.js:4:31: Extra semicolon.
/Users/pineoc/Desktop/project/server/app.js:5:44: Extra semicolon.
/Users/pineoc/Desktop/project/server/app.js:6:40: Extra semicolon.
/Users/pineoc/Desktop/project/server/app.js:7:5: 'fs' is defined but never used
이런식으로 쭉해서
출력이 너무 많이 나와서 파일로 출력해봤습니다.
$standard > standard.out
그랬더니...
출력 라인수가 17828!
(파일 라인 확인하는 방법은 $wc -l [filename] 입니다.)
많이 고쳐야겠네요.. ㅎㅎ
아, 그리고 이 스타일 체크는 아래와 같은 기준으로 합니다.
/* 깃헙에 있는 룰을 가져왔습니다.*/
Rules
- 2 spaces – for indentation
- Single quotes for strings – except to avoid escaping
- No unused variables – this one catches tons of bugs!
- No semicolons – It's fine. Really!
- Never start a line with
(
,[
, or`
- This is the only gotcha with omitting semicolons – automatically checked for you!
- More details
- Space after keywords
if (condition) { ... }
- Space after function name
function name (arg) { ... }
- Always use
===
instead of==
– butobj == null
is allowed to checknull || undefined
. - Always handle the node.js
err
function parameter - Always prefix browser globals with
window
– exceptdocument
andnavigator
are okay- Prevents accidental use of poorly-named browser globals like
open
,length
,event
, andname
.
- Prevents accidental use of poorly-named browser globals like
PS. Node.js 프로젝트에 적용한 것이지만
어느정도 골라서 수정이 필요할 것 같습니다.