CodeHawk es una herramienta de análisis estático para proyectos JavaScript. Se pretende como un sistema de advertencia, para identificar áreas complejas de código que necesitan atención especial por parte de los desarrolladores.
El FTA es un reemplazo directo para el proyecto CodeHawk CLI. Es mucho más robusto y dramáticamente más rápido, con un análisis estático de bajo nivel realizado en óxido.
Se recomienda usar FTA sobre CodeHawk CLI. El TLC está en desarrollo activo, mientras que CodeHawk CLI está en modo de mantenimiento.
Actualice a FTA aquí.
Los proyectos de JavaScript (incluidos TypeScript y Flow) son compatibles con el análisis. La herramienta CLI admite los sistemas de archivos UNIX y Windows (hay una cantidad razonable de código de compatibilidad de Windows).
Funciona atravesando un directorio y descubriendo todos los filetipos compatibles, ejecuta una rutina de análisis estático en cada archivo, luego realiza un análisis de todo el proyecto, como el conteo entre dependencias y la asignación de cobertura de prueba.
La CLI se ejecuta como un proceso Node.js. Node.js> = 14 es necesario, pero> = 16 se recomienda. El nodo V12 y debajo no es compatible.
La forma más sencilla de usar CodeHawk-Cli es usarlo en un directorio en su proyecto:
npm install --save-dev codehawk-cli o yarn add --dev codehawk-cli
Agregue un codehawk.json a la raíz de su proyecto, por ejemplo:
{
"skipDirectories" : [ " /node_modules " , " coverage " ]
} Agregue un nuevo script a package.json , por ejemplo: "codehawk": "codehawk src"
Ejecutar npm run codehawk y obtener la salida a stdout
También vea un ejemplo usando 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 su análisis, use las siguientes opciones, colocadas en un archivo codehawk.json en el directorio raíz.
| Opción | Descripción | Por defecto |
|---|---|---|
badgesDirectory | Directorio donde se crearán las dos insignias de mantenimiento (cuando esté habilitado) | ['/generated'] |
enableFlow | Habilitar soporte de flujo | false |
extensions | Archivo extensiones que deben analizarse. El valor predeterminado siempre se usa, pero puede agregar más extensiones. Puede usar las opciones exclude[...] para excluir archivos específicos. | ['.js', '.jsx', '.ts', '.tsx'] |
excludeFilenames | Coincidencias de nombre de archivo que deben excluirse del análisis estático (pero aún se muestran en los datos). El valor predeterminado siempre se usa, pero puede agregar más coincidencias para ser excluidos. Tenga en cuenta que la coincidencia es exacta. La lista de exclusión se tiene en cuenta después de la lista de extensión. | ['.d.ts', '.min.js', '.bundle.js'] |
excludeDirectories | Coincidencias de directorio que deben excluirse del análisis estático (pero aún se muestran en los datos). En relación con la raíz. Eg ['/fixtures', '/test'] | ['/dist', '/bin', '/build'] |
excludeExact | COMPORTAS EXACTOS DE ARCHIVO que deben excluirse del análisis estático (pero aún se muestran en los datos). En relación con la raíz. Eg ['/src/foo/bar.ts'] | [] |
skipDirectories | Directorios que deben excluirse por completo, es decir, no visibles en los datos resultantes. Los valores predeterminados siempre serán omitidos. | ['/node_modules', '/flow-typed', '/coverage'] |
minimumThreshold | Puntaje mínimo de mantenimiento aceptable. Si un archivo viola este puntaje, la CLI saldrá con el Código 1 (utilizado para garantizar un nivel mínimo de mantenibilidad en CI). Se recomienda establecer esto en al menos 30. | 10 |
cliOutputLimit | Número de archivos para enumerar en la salida CLI (desde la peor puntuación hasta la mejor puntuación). | 25 |
Analizar un directorio completo:
const { analyzeProject } = require ( 'codehawk-cli' )
const output = analyzeProject ( '/path/to/project' ) // returns a Results object
// Get summary maintainability scores
const {
average ,
median ,
worst ,
} = output . summaryAnalice una sola pieza 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 CodeHawk depende de typhonjs-escomplex para métricas de complejidad de bajo nivel.
El flujo se admite a través de flow-remove-types y tipo de mecanografiado es compatible a través de @babel/plugin-transform-typescript . En otras palabras, transforma cualquier flujo o código de mecanografiado en el código JavaScript antes de que se realice el análisis estático.
Cada archivo analizado en su proyecto termina con:
codehawkScore : una puntuación de CodeHawk que representa su nivel estimado de mantenibilidad (0-100, más alto es mejor)dependencies : un mapa de las dependientes de este archivotimesDependedOn - Número de veces este archivo es importado por otros archivoscomplexityReport : varias métricas de complejidad detalladas, como las métricas Halstead y la complejidad ciclomática De forma predeterminada, CodeHawk-CLI genera 2 insignias (en generated/*.svg ) cuando se llama a través de la interfaz CLI principal:
Un puntaje más alto es mejor (código más simple y más mantenible).
Para evitar generar insignias, use la opción --no-badge .
CodeHawk reúne varias métricas de complejidad, que incluyen:
codehawk.json . Sin embargo, pueden estar vacíos. "Muestras" contiene 4 proyectos falsos y 1 real para probar la herramienta CLI.
Sweetalert en este directorio es una exportación estática (realizada en 2019) de esa biblioteca.
Cada muestra contiene un archivo de configuración de codehawk.json vacío (en la actualidad, esta configuración)
Los caracteres no latino (¿o ciertos unicode?) Como u2019 confunden flow-remove-types , consulte Facebook/Flow#8060