2011年 07月 08日

gerry++

JSを編集してエディタで保存するとき、JSHint でコーディングバリデーションをかける

errormaker.vim を使って JS 保存時に末尾カンマチェックとかをやっていたのだけれど、今までチェックに使っていた Spidermonkey の最近のバージョンだと、strict モードにしても末尾カンマを warn しなくなって意味がなくなっていたので、JSHint でやるようにした。

setlocal makeprg=$HOME/.vim/vimparse.js\ %\ $*
setlocal errorformat=%f:%l:%m

は今までのままにして、vimparse.js を以下のようにした。JSHintJSLint よりはマイルドというか偏執さがないのだけど、まだ癖が強くて「実害のある」という警告と「単に好み」という警告がごっちゃになっていてうざいので、できるだけ自分でカスタマイズできるようにした。

node.js を実行環境にしているのは、node.js のインストールが特に依存もなく簡単だから (clone して make するだけでいいから) です。

#!/usr/bin/env node


var JSHINT = require("./jshint.js").JSHINT;
var fs = require("fs");

var argv = process.argv;
argv.shift();
argv.shift();

argv.forEach(function (filename) {
	var source = fs.readFileSync(filename, 'utf-8');
	var result = JSHINT(source, {
		browser : true,
		jquery  : true,
		evil    : true,
		passfail : false
	});
	if (!result) {
		JSHINT.errors.forEach(function (error) {
			if (!error) return;

			if (error.reason.indexOf('Stopping, unable to continue.') != -1) return;

			// 何これ?
			if (error.reason.indexOf("Confusing use of '!'.") != -1) return;

			// for (var i...) は何度も書きたい
			if (error.reason.indexOf("'i' is already defined.") != -1) return;
			if (error.reason.indexOf("'it' is already defined.") != -1) return;

			// 可読性のために意図的にそうしているのでうざいし、そういう最適化は実行エンジンがすべきこと
			if (error.reason.indexOf('is better written in dot notation') != -1) return;

			// 根拠がわからないので保留
			if (error.reason.indexOf("Don't make functions within a loop") != -1) return;

			if (error.evidence) {
				error.evidence = error.evidence.replace(/\t/g, '    ');

				// 明示的に抑止されてるなら無視
				if (error.evidence.indexOf('no warnings') != -1) return;

				// やたら長い行は圧縮されたJSコードとみなす
				if (error.evidence.length > 1000) return;

				// 閉じブレース前のセミコロンは省略可能に
				if (error.reason.indexOf('Missing semicolon') != -1 && error.evidence.substring(error.character).match(/^\s*\}/)) return;
			}

			console.log([filename, error.line, error.character].join(':') + "\t" + error.reason);
		});
	}
});
2011年 07月 05日

gerry++

2011年 07月 04日

gerry++

gerry++

2011年 07月 01日

gerry++

2011年 06月 29日

transit.yahoo.co.jp (Yahoo! ロコ) の路線検索結果を2クリックで Google Calendar にインポートできるようにする

↓ の「カレンダーに追加」は Yahoo! カレンダーへインポートするためのリンクなってるんですが、Google カレンダーにしてほしいのでそうする user.js を書きました (Chrome で動作確認済み)

↓ こんな感じに入ります。

もっとマシなのを書いてもらいました

https://gist.github.com/1056634

gerry++

2011年 06月 28日

gerry++

2011年 06月 27日

gerry++