O Codehawk é uma ferramenta de análise estática para projetos JavaScript. Destina -se como um sistema de aviso, identificar áreas complexas de código que precisam de atenção especial dos desenvolvedores.
O FTA é um substituto direto para o projeto Codehawk CLI. É muito mais robusto e dramaticamente mais rápido, com análise estática de baixo nível realizada em ferrugem.
É recomendável usar o FTA sobre o Codehawk CLI. O FTA está em desenvolvimento ativo, enquanto o Codehawk CLI está no modo de manutenção.
Atualize para o FTA aqui.
Os projetos JavaScript (incluindo TypeScript e Flow) são suportados para análise. A ferramenta CLI suporta o Unix e o Windows FileSystems (há uma quantidade razoável de código de compatibilidade do Windows).
Funciona atravessando um diretório e descobrindo todos os arquivos suportados, executa uma rotina de análise estática em cada arquivo e executa análises em todo o projeto, como contagem entre dependência e mapeamento de cobertura de teste.
O CLI é executado como um processo node.js. Node.js> = 14 é necessário, mas> = 16 é recomendado. O nó v12 e abaixo não é suportado.
A maneira mais simples de usar o Codehawk-cli é usá-lo contra um diretório em seu projeto:
npm install --save-dev codehawk-cli ou yarn add --dev codehawk-cli
Adicione um codehawk.json à raiz do seu projeto, por exemplo:
{
"skipDirectories" : [ " /node_modules " , " coverage " ]
} Adicione um novo script ao package.json , por exemplo: "codehawk": "codehawk src"
Execute npm run codehawk e obtenha saída para STDOUT
Veja também um exemplo usando o 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 | Para personalizar sua análise, use as seguintes opções, colocado em um arquivo codehawk.json no diretório raiz.
| Opção | Descrição | Padrão |
|---|---|---|
badgesDirectory | Diretório onde os dois crachás de manutenção serão criados (quando ativado) | ['/generated'] |
enableFlow | Ativar suporte de fluxo | false |
extensions | Extensões de arquivo que devem ser analisadas. O padrão é sempre usado, mas você pode adicionar mais extensões. Você pode usar as opções exclude[...] para excluir arquivos específicos. | ['.js', '.jsx', '.ts', '.tsx'] |
excludeFilenames | As correspondências de nome do arquivo que devem ser excluídas da análise estática (mas ainda são mostradas nos dados). O padrão é sempre usado, mas você pode adicionar mais correspondências a serem excluídas. Observe que a correspondência é exata. A lista de exclusão é levada em consideração após a lista de extensão. | ['.d.ts', '.min.js', '.bundle.js'] |
excludeDirectories | As correspondências de diretório que devem ser excluídas da análise estática (mas ainda são mostradas nos dados). Em relação à raiz. Por exemplo ['/fixtures', '/test'] | ['/dist', '/bin', '/build'] |
excludeExact | As correspondências exatas de arquivo que devem ser excluídas da análise estática (mas ainda são mostradas nos dados). Em relação à raiz. Por exemplo ['/src/foo/bar.ts'] | [] |
skipDirectories | Diretórios que devem ser excluídos completamente, ou seja, não é visível nos dados resultantes. Os padrões sempre serão ignorados. | ['/node_modules', '/flow-typed', '/coverage'] |
minimumThreshold | Pontuação mínima de manutenção aceitável. Se um arquivo violar essa pontuação, a CLI sairá com o Código 1 (usado para garantir um nível mínimo de manutenção no IC). Recomenda -se definir isso como pelo menos 30. | 10 |
cliOutputLimit | Número de arquivos para listar na saída da CLI (da pior pontuação à melhor pontuação). | 25 |
Analise um diretório inteiro:
const { analyzeProject } = require ( 'codehawk-cli' )
const output = analyzeProject ( '/path/to/project' ) // returns a Results object
// Get summary maintainability scores
const {
average ,
median ,
worst ,
} = output . summaryAnalise um único pedaço de código:
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 O CodeHawk depende das typhonjs-escomplex para métricas de complexidade de baixo nível.
O fluxo é suportado por meio flow-remove-types e o TypeScript é suportado via @babel/plugin-transform-typescript . Em outras palavras, ele transforma qualquer código de fluxo ou texto digital em código JavaScript antes que a análise estática seja realizada.
Cada arquivo analisado em seu projeto acaba com:
codehawkScore - uma pontuação Codehawk que representa seu nível estimado de manutenção (0-100, mais alto é melhor)dependencies - um mapa das dependências deste arquivotimesDependedOn - Número de vezes este arquivo é importado por outros arquivoscomplexityReport - várias métricas detalhadas de complexidade, como métricas de Halstead e complexidade ciclomática Por padrão, o Codehawk-cli gera 2 crachás (em generated/*.svg ) quando chamados pela interface da CLI principal:
Uma pontuação mais alta é melhor (código mais simples e sustentável).
Para evitar gerar crachás, use a opção --no-badge .
O Codehawk reúne várias métricas de complexidade, incluindo:
codehawk.json são atualmente necessários. No entanto, eles podem estar vazios. "Amostras" contém 4 projetos falsos e 1 real para fins de teste da ferramenta CLI.
A Sweetalert neste diretório é uma exportação estática (realizada em 2019) dessa biblioteca.
Cada amostra contém um arquivo de configuração codehawk.json vazio (atualmente, esta configuração)
Não-latina (ou certos unicode?) Personagens como u2019 confundem- flow-remove-types , consulte Facebook/Flow#8060