node replと生jshint
生のjshintの使い方
commit 3c77ac で確認。
- JSHINTという名前空間の中に処理が収まっている
- JSHINT( src, opts ) の形で lint を実行
- src は当然文字列、opts は JSON ?
- error がなければ JSHINT() の戻りは true で、あれば false
- JSHINT.data() で実行時の細かいデータが取れる
- JSHINT.report() はこれを HTML 化してくれる
- error は JSHINT.errors というプロパティに収まっている Hash の Array を見れば分かる
- ただ残念なことに JSON のように見えて valid な JSON ではないので、この情報を JS 以外の環境でそのまま扱うのは難しい。
以上のことをnode replで確認する
- node >
- var JSHINT = require( /PATH/TO/jshint.js ).JSHINT
- var fs = require('fs')
- JSHINT( fs.readFileSync( /PATH/TO/jshint.js, encoding ) )
- // => true
- jshint.js 自身を一部書き換えて保存(例えば末尾に , を足すとか)
- JSHINT( fs.readFileSync( /PATH/TO/jshint.js, encoding ) )
- // => false
- JSHINT.errors
結果、
[ { id: '(error)',
raw: 'Extra comma.',
evidence: ' wsh : true, // if the Windows Scripting Host environment globals',
line: 320,
character: 29,
a: undefined,
b: undefined,
c: undefined,
d: undefined,
reason: 'Extra comma.' } ]
当たり前だけどチェック対象は文字列なので、どのファイルのエラーなのかという情報はない。ここは呼び出し側で対応を取ってやる必要がある。
なるほど。
fs.readFileSyncにはencodingを忘れずに
fs.readFileSync( path, encoding )
なんだけど、encoding を与えないと文字として解釈できないっぽい? ASCII のファイルでもダメだった。数字の羅列になってたので codepoint 的な何かになってるのかなぁ。
とりあえず utf-8 にしたら動いたけど、たぶん ascii でもいいんじゃないかな。試してないけど。