Googleクロージャコンパイラに関してアプリケーションを100%入力するにはどうすればよいですか?
私はすでにすべてをjsdocコメントでタグ付けしました。100を取得することさえ可能ですか?私は64,6%です
Googleクロージャコンパイラに関してアプリケーションを100%入力するにはどうすればよいですか?
私はすでにすべてをjsdocコメントでタグ付けしました。100を取得することさえ可能ですか?私は64,6%です
100%を達成することは可能です。私自身のプロジェクトは100%タイプされています。クロージャコンパイラは、型が不明な式に関する警告を出力できます。残念ながら、この機能を有効にするコマンドラインオプションはありません。ソースコードを変更して有効にする必要があります。
現在のソースをダウンロードします。
git clone https://code.google.com/p/closure-compiler/
src / com / google / javascript / jscomp/CompilerOptions.javaを編集して行reportUnknownTypes = CheckLevel.OFF
を次のように変更しますreportUnknownTypes = CheckLevel.WARNING
ant
ルートディレクトリを呼び出すだけで、closure-compilerをコンパイルします。変更されたcompiler.jarは、ビルドディレクトリにあります。
この変更されたコンパイラをスクリプトで使用すると、コンパイラがタイプを判別できなかったすべての式について多くの警告が出力されます。コード内のこれらすべての警告を修正すると、100%入力されます。
コンパイラには、不明なタイプに警告を出力させるために設定できるフラグがあります。
--jscomp_warning=reportUnknownTypes
また、警告レベルを上げる必要があります。
--warning_level=VERBOSE
テストとしてgoog.net.XhrIoをコンパイルしてみました。
goog.require('goog.Uri.QueryData');
goog.require('goog.debug.ErrorHandler');
goog.require('goog.net.XhrIo');
goog.net.XhrIo;
これをコンパイルすると、次の結果が得られます。
20-nov-2010 1:12:21 com.google.javascript.jscomp.LoggerErrorManager printSummary
WARNING: 0 error(s), 1 warning(s), 91,5% typed
JSC_USELESS_CODE. Suspicious code. This code lacks side-effects. Is there a bug? at test.js line 5 : 0
クロージャーライブラリ自体が100%型付けされていないようで、100%に到達することは目標ではないと思います。Javascriptは静的に型付けされた言語ではありません。Closureは、静的に型付けされた言語のいくつかの利点をjavascriptに取り入れようとします。どっちがいい。しかし、それはあなたがこの種の言語の重荷を持ち込まなければならないという意味ではありません。
空のファイルをコンパイルしようとしましたが、結果は90.4%でした。これは、すべてのプリミティブ関数を含むbase.jsが100%型指定されていないことを意味すると思います。そこで、もう少し実験を行ったところ、すべてのローカル変数に型情報を入力すると、パーセンテージが上がることがわかりました。すべてのローカル変数に型情報を入れる必要はないと思います。私はこれを想像することを意味します:
/** @type {number} */
var i = 0;
for(i = 0; i < 10; i++) {
// do something
}
これは、クロージャーコンパイラーでコンパイルすることの目標にはなり得ません。これは、base.jsをコンパイルしても100%にならないという事実によって証明されています。私はこの数値を85%から95%の間に保つようにしています。時間、プログラミングスタイル、およびこれに取り組んでいるアプリケーションによっては、コース外で異なる場合があります。最良のガイドラインは、アプリケーションの開発全体を通して、60%であろうと90%であろうと、パーセンテージを一定に保つようにすることです。自分のコードに慣れるために、必要なだけ入力してください。
すべてのクレジットは@kayahrに送られますが、時間が経つにつれて。古いバージョンのコンパイラに基づいた彼の答えの更新を提供したかったのです。
タイプチェックを適用してソースを再コンパイルする必要があります。そうするために:
ソースgit clone https://code.google.com/p/closure-compiler/
をダウンロードして、closure-compiler
編集src/com/google/javascript/jscomp/CompilerOptions.java
してinに設定checkTypes
しtrue
ます。また、あらゆる種類のコンパイル変数と最適化変数を試してみることができます。
を実行してコードをコンパイルしますant
ただし、tightenTypes
実験的でかなり壊れていることに注意してください。