Codehawk是JavaScript項目的靜態分析工具。它旨在作為警告系統,以確定需要開發人員特別關注的代碼的複雜領域。
FTA是Codehawk CLI項目的直接替代品。在Rust中進行了低水平的靜態分析,它更加健壯和更快。
建議在Codehawk CLI上使用FTA。 FTA處於主動開發狀態,而Codehawk CLI處於維護模式。
在這裡升級到fta。
支持JavaScript(包括打字稿和流)項目進行分析。 CLI工具支持UNIX和Windows Filesystems(Windows兼容碼有合理數量)。
它可以通過遍歷目錄並發現所有受支持的Filetypes,在每個文件上運行靜態分析例程,然後執行項目範圍內的分析,例如相互依賴性計數和測試覆蓋範圍映射,從而起作用。
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 | 要自定義分析,請使用以下選項,該選項放置在root目錄中的codehawk.json文件中。
| 選項 | 描述 | 預設 |
|---|---|---|
badgesDirectory | 目錄將在其中創建兩個維護徽章(啟用時) | ['/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-remove-types支持流,通過@babel/plugin-transform-typescript 。換句話說,在進行靜態分析之前,它將任何流或打字條代碼轉換為JavaScript代碼。
您項目中的每個分析文件最終都以:
codehawkScore代表其估計可維護性水平的Codehawk分數(0-100,較高)dependencies - 此文件依賴項的地圖timesDependedOn此文件導入其他文件的次數complexityReport - 各種詳細的複雜度指標,例如Halstead指標和環形複雜性默認情況下,CodeHawk-CLI通過主CLI接口來調用時生成2個徽章(以generated/*.svg ):
更高的分數更好(更簡單,更可維護的代碼)。
為避免生成徽章,請使用--no-badge選項。
Codehawk收集了各種複雜性指標,包括:
codehawk.json配置文件。但是,它們可以是空的。 “樣本”包含4個假和1個真實項目,以測試CLI工具。
該目錄中的SweetAlert是該圖書館的靜態出口(於2019年進行)。
每個示例包含一個空的codehawk.json配置文件(目前,此配置)
非拉丁蛋白(或某些Unicode?)字符,例如 u2019混淆flow-remove-types ,請參閱Facebook/Flow#8060