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で確認する

  1. node >
  2. var JSHINT = require( /PATH/TO/jshint.js ).JSHINT
  3. var fs = require('fs')
  4. JSHINT( fs.readFileSync( /PATH/TO/jshint.js, encoding ) )
    • // => true
  5. jshint.js 自身を一部書き換えて保存(例えば末尾に , を足すとか)
  6. JSHINT( fs.readFileSync( /PATH/TO/jshint.js, encoding ) )
    • // => false
  7. 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 でもいいんじゃないかな。試してないけど。

More