CodeHawkは、JavaScriptプロジェクトの静的分析ツールです。これは、開発者が特別な注意を必要とする複雑なコード領域を特定するための警告システムとして意図されています。
FTAは、CodeHawk CLIプロジェクトの直接代替品です。それははるかに堅牢で劇的に速く、錆で低レベルの静的解析が行われます。
CodeHawk CLIを介してFTAを使用することをお勧めします。 FTAはアクティブな開発中ですが、CodeHawk CLIはメンテナンスモードです。
ここでFTAにアップグレードします。
JavaScript(TypeScriptおよびFlowを含む)プロジェクトが分析のためにサポートされています。 CLIツールは、UNIXおよびWindowsファイルシステムをサポートしています(妥当な量のWindows互換性コードがあります)。
ディレクトリを通過し、サポートされているすべてのフィルタイプを発見することで機能し、各ファイルで静的分析ルーチンを実行し、依存性カウントやテストカバレッジマッピングなどのプロジェクト全体の分析を実行します。
CLIはnode.jsプロセスとして実行されます。 node.js> = 14が必要ですが、> = 16が推奨されます。ノードV12以下はサポートされていません。
CodeHawk-Cliを使用する最も簡単な方法は、プロジェクトのディレクトリに対してそれを使用することです。
npm install --save-dev codehawk-cliまたはyarn add --dev codehawk-cli
たとえば、プロジェクトのルートにcodehawk.jsonを追加します。
{
"skipDirectories" : [ " /node_modules " , " coverage " ]
} package.jsonに新しいスクリプトを追加します。たとえば、 "codehawk": "codehawk src"
npm run codehawkを実行し、stdoutに出力を取得します
next.jsを使用した例も参照してください。
Codehawk Static Analysis Results
Top 14 files
| File | # of Lines | Times Used/Depended On | Maintainability (higher is better) |
| -------------------------------------------------- | ---------- | ---------------------- | ---------------------------------- |
| /test/codehawk.test.js | 149 | 1 | 45.3 (Needs improvement) |
| /src/util.ts | 143 | 4 | 47.26 (Needs improvement) |
| /src/codehawk.ts | 122 | 2 | 47.94 (Needs improvement) |
| /src/options.ts | 72 | 2 | 52.64 (Could be better) |
| /src/analyze.ts | 67 | 3 | 54.04 (Could be better) |
| /src/cli-util.ts | 63 | 2 | 54.68 (Could be better) |
| /src/traverseProject.ts | 51 | 2 | 56.91 (Could be better) |
| /src/reporters/escomplex.ts | 43 | 2 | 57.44 (Could be better) |
| /src/badge.ts | 45 | 2 | 58.09 (Could be better) |
| /test/options.test.js | 47 | 1 | 58.55 (Could be better) |
| /src/dependencies.ts | 40 | 2 | 58.7 (Could be better) |
| /src/coverage.ts | 21 | 2 | 60.75 OK |
| /src/index.ts | 20 | 1 | 60.97 OK | 分析をカスタマイズするには、ルートディレクトリのcodehawk.jsonファイルに配置された次のオプションを使用します。
| オプション | 説明 | デフォルト |
|---|---|---|
badgesDirectory | 2つのメンテナンスバージリティバッジが作成されるディレクトリ(有効になったとき) | ['/generated'] |
enableFlow | フローサポートを有効にします | false |
extensions | 分析する必要があるファイル拡張子。デフォルトは常に使用されますが、さらに拡張機能を追加できます。 exclude[...]オプションを使用して、特定のファイルを除外できます。 | ['.js', '.jsx', '.ts', '.tsx'] |
excludeFilenames | 静的分析から除外する必要があるファイル名一致(ただし、データに表示されます)。デフォルトは常に使用されますが、除外するためにさらに一致を追加できます。マッチングは正確であることに注意してください。除外リストは、拡張リストの後に考慮されます。 | ['.d.ts', '.min.js', '.bundle.js'] |
excludeDirectories | 静的分析から除外する必要があるディレクトリマッチ(ただし、データに表示されます)。ルートに対して。例: ['/fixtures', '/test'] | ['/dist', '/bin', '/build'] |
excludeExact | 静的分析から除外する必要がある正確なファイル一致(ただし、データに表示されます)。ルートに対して。例['/src/foo/bar.ts'] | [] |
skipDirectories | 完全に除外すべきディレクトリ、つまり、結果のデータにはまったく表示されません。デフォルトは常にスキップされます。 | ['/node_modules', '/flow-typed', '/coverage'] |
minimumThreshold | 最低許容維持可能性スコア。ファイルがこのスコアに違反した場合、CLIはコード1で終了します(CIの保守性の最小レベルを確保するために使用されます)。これを少なくとも30に設定することをお勧めします。 | 10 |
cliOutputLimit | CLI出力にリストするファイルの数(最悪のスコアリングから最高のスコアリングまで)。 | 25 |
ディレクトリ全体を分析します。
const { analyzeProject } = require ( 'codehawk-cli' )
const output = analyzeProject ( '/path/to/project' ) // returns a Results object
// Get summary maintainability scores
const {
average ,
median ,
worst ,
} = output . summary単一のコードを分析します:
const { calculateComplexity } = require ( 'codehawk-cli' )
const STATIC_SAMPLE = `
import lodash from 'lodash';
const chunkIntoFives = (myArr) => {
return _.chunk(myArr, 5);
}
export default chunkIntoFives;
`
const metrics = calculateComplexity ( STATIC_SAMPLE )
console . log ( metrics ) // Inspect the full metrics Codehawkは、低レベルの複雑さメトリックのtyphonjs-escomplexに依存しています。
Flowはflow-remove-typesを介してサポートされ、TypeScriptは@babel/plugin-transform-typescriptを介してサポートされます。言い換えれば、静的解析が実行される前に、フローまたはタイプスクリプトコードをJavaScriptコードに変換します。
プロジェクト内の分析された各ファイルは次のとおりです。
codehawkScore保守性の推定レベルを表すCodeHawkスコア(0-100、より高い方が優れています)dependencies - このファイルの依存関係のマップtimesDependedOnこのファイルが他のファイルによってインポートされる回数complexityReport Halstead MetricsやCyclomaticの複雑さなどのさまざまな詳細な複雑さメトリックデフォルトでは、CodeHawk-Cliは、メインCLIインターフェイスを介して呼び出されると、2つのバッジ( generated/*.svg )を生成します。
より高いスコアの方が優れています(よりシンプルで、より保守可能なコード)。
バッジの生成を避けるために、 --no-badgeオプションを使用します。
CodeHawkは、次のようなさまざまな複雑さの指標を集めます。
codehawk.json構成ファイルが現在必要です。しかし、それらは空になる可能性があります。 「サンプル」には、CLIツールをテストする目的で、4つの偽物と1つの実際のプロジェクトが含まれています。
このディレクトリのSweetAlertは、そのライブラリの静的なエクスポート(2019年に実施)です。
各サンプルには、空のcodehawk.json構成ファイルが含まれています(現在、この構成)
u2019を混乱させるflow-remove-typesなどの非ラチン(または特定のユニコード?)文字、Facebook/flow#8060を参照してください