What have you found for these years?

2011-02-15

javascript checker

我很懶惰不想測試 javascript, 因為覺得很麻煩,所以想說就跑個
checker 檢查 syntax 就好了。最有名的大概就是 jslint 吧。
brew install jslint
jsl -process file.js
一堆 missing semicolon 不知道能不能關掉,這根本沒差..
以前由於寫 C 出身,所以習慣上一定要加 semicolon. 後來
寫 ActionScript 也這樣要求著。但接下來讀到 ECMAScript 的
spec, 知道有 semicolon inference 這樣的東西,漸漸就開始覺得
其實這根本不是個需要人類去加的東西。接下來寫了 Ruby,
用了 Haskell, 更是開始覺得還要加 semicolon 其實是很笨的。

之前看到 nodejs 上的程式,還有人特地加上 semicolon,
果然有人開始覺得厭煩了,說因為 crappy browser 所以加
semicolon, 但跑在 server 上的 javascript 何必做這種事?
然後開始論戰 ECMAScript 的 semicolon inference 到底是不是
標準... 我發現好像寫 javascript 的人有很多都搞不清楚狀況。

其實這也是滿有趣的一件事?寫 ruby 搞不清楚狀況的人就
比較少,寫 haskell 的人當然更少。而寫 lua 的人,好像也
大多都是比較有常識的人。而考量到這些程式語言到底是
為何而發明,被用在哪裡,他的整個發展過程,也不難想像
會有這樣的結果...

所以或許我不應該對 javascript 的 user 大驚小怪才對。
更何況以前就抱怨過了:
1392. 12-29 js semi-colon

anyway 扯遠了...

有些 warning 其實或許應該注意一下,但瞥過去似乎不是大問題,
我也懶得管了。因為其實我只是調整一下排版,只要確定沒改錯
syntax 即可。但由於我對 jslint 向來印象不好,就想再試試其他的。
想起 google 有 closure-compiler, 裡面應該也有 checker 吧?
沒想到卻似乎是分開的,放在 closure-linter 裡面。可是 homebrew
裡面沒有 closure-linter 耶,只好自己弄了。

抓下來發現是 python 寫成的,我以為是 java, 因為 closure-compiler
分明是 java 寫的.. 分開寫還挺怪的?至少 parser 沒必要寫兩次吧?

看了一下 README, 又是直接安裝的方式 :(
python ./setup.py install
我最討厭這種形式了.. 因為很多這種都很難 uninstall. ruby 也曾經
一度用了 setup.rb, 是一個巨大的不知道在幹嘛的 script, 幸好現在
幾乎沒有人在用了,都是用 gem, 這樣容易管理多了。我不明白
為什麼 python 還在用這種方式。或許有方便的 uninstall 法?

總之我知道有 pip 可以用就是了,這是 homebrew 告訴我的...
pip search closure
可惜沒有 closure-linter 耶。看來還是得自己弄了。先是直接試跑:
python closure_linter/gjslint.py
立刻吐出:
ImportError: No module named closure_linter
很明顯是 load path 的問題。翻了一下 python --help,
倒是找不到如何像是 ruby/gcc 用 -I 表示 include path,
但有看到 PYTHONPATH 這東西。反正就是亂試,就試了:
env PYTHONPATH=(pwd)/closure_linter python closure_linter/gjslint.py
發現不行,去掉 closure_linter 試也不行:
env PYTHONPATH=(pwd) python closure_linter/gjslint.py
接著注意到,我的 pwd 其實是改過的,會把 $HOME 改寫成 ~
因此換成原本會印出 /Users/godfat 的 /bin/pwd 試:
env PYTHONPATH=(/bin/pwd) python closure_linter/gjslint.py file.js
果然這樣就可以了。不過會看到另一個錯誤:
ImportError: No module named gflags
確實在 setup.py 中有明確說明有這個 dependency 的存在,pip 有:
pip install python-gflags
灌好之後,果真就跑得起來了。結果我發現 closure-linter 更是神經病:
Single-quoted string preferred over double-quoted string.
[...]
Line too long (83 characters).
No docs found for member 'window.console'
Missing semicolon after function assigned to a variable
Missing space before "{"
Missing space before "+"
[...]
(New error) Missing semicolon at end of line
Extra space before ")"
Extra space after "("
Multi-line strings are not allowed
[...]
Found 126 errors, including 19 new errors, in 1 files (0 files OK).
這已經是有強迫症的程度了吧?... 不是 warning, 是 error 耶...

0 retries:

Post a Comment

All texts are licensed under CC Attribution 3.0