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