Eligos、 Kotlinプログラミング言語の静的コード分析ツール。
現在のバージョンでは、次の13コードの臭いを検出できます。
| タイプ | ラベル | 説明 |
| 円形の参照 | ? | 2つ以上のクラスまたはファイルには、閉ループを形成する相互依存関係があります |
| 過剰なパラメーター | ? | メソッドにはあまりにも多くの議論があります |
| 未使用のインポート | ? | ファイルにインポートされたが使用されていないクラス、属性、メソッド、またはパッケージ |
| 複雑な方法 | ? | ループの複雑さが大きすぎます |
| 不変のコレクションを提供します | ? | KotlinはJavaがKotlinのAPIを呼ぶときに不変のコレクションタイプを提供します |
| 内部露出 | ? | Javaは、Kotlinの内部宣言を公開にさらします。 |
| 不確かなプラットフォーム表現の使用法 | ? | Kotlinは、Null-Angosticタイプを返すJavaメソッドをローカルに呼び、この結果を完全に非ヌルの引数を期待するKotlinメソッドで直接使用します |
| 不確かなヌル可能なプラットフォーム発信者 | ? | メソッドを呼び出すか、発信者式タイプがKotlinのプラットフォームタイプであるプロパティにアクセスします。 |
| Nullableはプラットフォームパラメーターに渡されました | ? | Kotlinは、プラットフォームパラメーターを取得するJavaメソッドにヌル可能なパラメーターを渡しました。 |
| 不動産の不確かなプラットフォームタイプ | ? | Kotlinは空の不可知論のJavaメソッドまたはプロパティを呼び出し、この値をクラスプロパティのゲッターの返品値として使用します |
| 非jvmstaticコンパニオン関数 | ? | コンパニオンオブジェクトのパブリック関数は、静的メソッドとして公開するために@JVMStaticで注釈を付けなければなりません。注釈を使用して、これらの関数は静的コンパニオンフィールドのインスタンスメソッドとしてのみ使用できます。 |
| 非jvmfieldコンパニオン値 | ? | コンパニオンオブジェクトの有効な定数であるパブリック、非コンストプロパティは、静的フィールドとして公開するために@JVMFieldで注釈を付けなければなりません。 |
| 理解できないJavafacadeの名前 | ? | ファイルにトップレベルの関数またはプロパティが含まれている場合、@file:jvmname( "foo")で常に注釈を付けて、デフォルトでは、ファイルMyClass.ktのトップレベルメンバーが、魅力的であるMyClassKTと呼ばれるクラスになります。 |
| 無視された例外 | ? | チェックされた例外をスローできる関数は、 @スローでそれらを文書化する必要があります。ランタイムの例外は、KDOCに文書化する必要があります。APISは、Kotlinが静かに伝播できるチェックされた例外をスローする可能性があるため、関数を委任します。 |
| カスケードの代わりに場合 | ? | カスケードが多すぎるステートメントをいつでも置き換える必要がある場合 |
| 暗黙の単一式関数 | ? | Kotlinの1つの発現方法は、ユニット以外のタイプの値を返しますが、返品タイプを指定していません |
| オブジェクトはスロー可能です | ? | Kotlinオブジェクトで装飾されたクラスは、スロー可能から継承されます |
| 最適化されたテール再帰 | ? | コトリンの尾の再帰関数は、それが尾の再帰であることを示していません |
テーブルでは、黄色はジャバ・コトリンに共通しており、コルチン・ジャワが互いに呼び出されたときに緑が生成され、紫はコトリンに固有のものです。
git clone https://github.com/TnoAlex/Eligos.git| 等級 | コトリン | Javaターゲットレベル | JDK MINバージョン |
|---|---|---|---|
8.0+ | 1.9.10 | 17 | 17 |
./gradlew build # on linux
./gradlew.bat build # on windowseligos-cli/build/libsで実行可能なCli Jarを見つけることができるLibsを見つけ、 eligos-plugin/build/distributionsでインストール可能なプラグインを見つけます。このレポをクローンします
git clone https://github.com/TnoAlex/Eligos.gitDocker画像を作成します
docker build -t eligos:1.0 .Dockerによってエリゴを実行します
docker run -v $PROJECT :/dist/project -v $RESULT :/dist/result eligos:1.0 kotlin ./project ./result --with java上記のコマンドでは、 $PRJECT分析するアイテムのローカル位置を指します。 $RESULT 、ローカル結果が保存されている場所を結果、このコマンドを使用する前にそれらがすべて存在することを確認します。 Kotlinパラメーターの後にある2つのフォルダーは、固定された内部Dockerマッピングです。
CLIツールの使用は、 eligos --help 、次のようなもの:
Usage: command-parser [<options>] <major language> <source path> [<result
output path>]
Options:
-w, --with=<text> Secondary languages that are analyzed in
collaboration with the primary language
-ecp, --class-path=<path> The classpath of the project to be analyzed.
(Default is source path and '.',If your project
has external jar dependencies, add the paths of
them)
-jh, --jdk-home=<path> The path of 'JAVA_HOME'. (Default is current jvm's
base dir)
-kv, --kotlin-v=<text> The version of kotlin in the project
-jt, --jvm-target=<text> The target of project's bytecode
-kl, --kotlin-lib=<path> The path of kotlin-std-lib. (Default is current
kotlin lib's path)
-p, --prefix=<text> The result file name prefix
-f, --format=(JSON|XML|HTML|TEXT)
The Presentation of results
-r, --rules=<path> Specify the rules to use
-D, --debug Out put exception stack
-Nr, --no-report Disable reporter (debug only)
-h, --help Show this message and exit
Arguments:
<major language> The major language to be analyzed
<source path> The path of source files
<result output path> The path to out put result
YOBがサードパーティライブラリを使用する場合、またはMavenやGradlleなどのビルドツールを使用する場合、ツールがこれらの依存関係を見つけて、一部の外部依存関係を解決できない問題を回避できるように、正しいclasspathを設定してください。
エリゴを拡張するための簡単なメカニズムを提供します。次の手順では、自分に属するルールを作成できます。
PsiProcessorを実装するpsiファイルプロセッサを作成し、拡張Issueである問題を定義します
@EventListenerアノテーションを使用してPSIファイルリスナーを追加し、次のような問題を報告します。
class MyProcessor : PsiProcessor {
@EventLinster
fun process ( ktFile : PsiFile ){
// do someting
context.reportIssue( MyIssue (hashSetOf(ktFile.virtualFilePath)))
}
}
class MyIssue ( affectedFiles : HashSet < String >) : Issue( AnalysisHierarchyEnum . FILE , affectedFiles, " My Issue " , null )このような@Componentアノテーションでコンポーネントマネージャーによってルールをスキャンすることができます
@Component
class MyProcessor : PsiProcessor {
@EventLinster
fun process ( ktFile : PsiFile ){
// do someting
}
}このルールがプラグインのみを実行したい場合は、 @Suitable Annotationを使用してください
@Component
@Suitable( LaunchEnvironment . IDE_PLUGIN )
class MyProcessor : PsiProcessor {
@EventLinster
fun process ( ktFile : PsiFile ){
// do someting
}
}それだけです?。 Eligosを詳細にカスタマイズする場合は、Eligosアーキテクチャ図、実行プロセスを参照してください。