私もこれに興味があるので、この答えはちょっとしたブレインダンプです。それが役に立てば幸い。
Google Closure Compiler を使用して、CoffeeScript が生成するコードを静的に分析します。非常に優れた静的アナライザーがあり、ここで車輪を再発明する正当な理由があるかどうかはわかりません。簡単な方法は、注釈を手で書くことです:
###*
* @param {number} x
* @param {number} y
* @return {number}
###
adder = (x, y) -> x + y
少し冗長ですが、一方で、非常に強力で多くのチェックが可能なクロージャ コンパイラの静的解析機能を借りています。実際にはもう少し簡潔な方法で型注釈を記述し、コーヒー ファイルを書き換えるスクリプトを作成します。私のコードは次のようになります。
#! {number} x {number} y @return {number}
adder = (x, y) -> x + y
リライターが非常に簡単であることがわかると思います。
先に進む前に簡単なメモ。クロージャ コンパイラを使用してコードを実行する場合は、必ず(bare)でコードをコンパイルしてください。-b
クロージャ コンパイラは非常に優れていますが、データ フロー分析を行うほどスマートではありません。デフォルトでは、CoffeeScript はコードを無名関数でラップするため、コンパイラがトリップします。
同じパスに沿った別のオプション (これは CoffeeScript との互換性を損なうことになりますが、はるかにクールです) は、Coffee コンパイラに次のようにコンパイルさせることです。
adder = (number x, number y): number -> x + y
次のように JS に変換します。
/***
* @param {number} x
* @param {number} y
* @return {number
*/
var adder = function(x, y) {
return x + y;
};
これは、コンパイル時にクロージャ コンパイラに入力できます。エラーがなければ、コンパイラはすべてのコメントを削除できます。
実際、この男はまさにこれを行っているように見えました。悲しいことに、彼の作品は不完全な状態にあるようです。
これらすべてのケースで、大変な作業 (静的型チェック) をクロージャ コンパイラに委ねます。あなたがこれをやりたくないのなら、私には理解できますが、まったく新しい静的分析ツールをゼロから構築する価値があると私に納得させるのは難しいでしょう. :)
1年後に編集:最近はタイプスクリプトを使用しています。:)