CodeHawk est un outil d'analyse statique pour les projets JavaScript. Il est destiné à un système d'avertissement, pour identifier les domaines de code complexes qui nécessitent une attention particulière des développeurs.
FTA est un remplacement direct du projet Codehawk CLI. C'est beaucoup plus robuste et considérablement plus rapide, avec une analyse statique de bas niveau réalisée dans la rouille.
Il est recommandé d'utiliser FTA sur Codehawk CLI. L'EFT est en développement actif tandis que Codehawk CLI est en mode de maintenance.
Passer à FTA ici.
Les projets JavaScript (y compris TypeScript et Flow) sont pris en charge pour l'analyse. L'outil CLI prend en charge les systèmes de fichiers UNIX et Windows (il y a une quantité raisonnable de code de compatibilité Windows).
Il fonctionne en traversant un répertoire et en découvrant tous les filetypes pris en charge, exécute une routine d'analyse statique sur chaque fichier, puis effectue une analyse à l'échelle du projet tel que le comptage interdépendance et la cartographie de la couverture des tests.
La CLI fonctionne comme un processus Node.js. Node.js> = 14 est requis, mais> = 16 est recommandé. Le nœud v12 et moins n'est pas pris en charge.
La façon la plus simple d'utiliser Codehawk-Cli est de l'utiliser contre un répertoire dans votre projet:
npm install --save-dev codehawk-cli ou yarn add --dev codehawk-cli
Ajoutez un codehawk.json à la racine de votre projet, par exemple:
{
"skipDirectories" : [ " /node_modules " , " coverage " ]
} Ajoutez un nouveau script à package.json , par exemple: "codehawk": "codehawk src"
Exécuter npm run codehawk et obtenez la sortie vers STDOUT
Voir également un exemple en utilisant 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 | Pour personnaliser votre analyse, utilisez les options suivantes, placées dans un fichier codehawk.json dans le répertoire racine.
| Option | Description | Défaut |
|---|---|---|
badgesDirectory | Répertoire où les deux badges de maintenabilité seront créés (lorsqu'ils sont activés) | ['/generated'] |
enableFlow | Activer le support de débit | false |
extensions | Extensions de fichiers qui doivent être analysées. La valeur par défaut est toujours utilisée, mais vous pouvez ajouter plus d'extensions. Vous pouvez utiliser les options exclude[...] pour exclure des fichiers spécifiques. | ['.js', '.jsx', '.ts', '.tsx'] |
excludeFilenames | Matchs de noms de fichier qui devraient être exclus de l'analyse statique (mais qui sont toujours affichées dans les données). La valeur par défaut est toujours utilisée, mais vous pouvez ajouter plus de correspondances à exclure. Notez que l'appariement est exact. La liste d'exclusion est prise en considération après la liste des extensions. | ['.d.ts', '.min.js', '.bundle.js'] |
excludeDirectories | Matchs de répertoires qui devraient être exclus de l'analyse statique (mais qui se montrent toujours dans les données). Par rapport à la racine. Par exemple ['/fixtures', '/test'] | ['/dist', '/bin', '/build'] |
excludeExact | Les correspondances de fichiers exactes qui doivent être exclues de l'analyse statique (mais qui s'affichent toujours dans les données). Par rapport à la racine. Par exemple ['/src/foo/bar.ts'] | [] |
skipDirectories | Les répertoires qui doivent être complètement exclus, c'est-à-dire non visibles dans les données résultantes. Les valeurs par défaut seront toujours ignorées. | ['/node_modules', '/flow-typed', '/coverage'] |
minimumThreshold | Score de maintenabilité minimum acceptable. Si un fichier viole ce score, la CLI quittera le code 1 (utilisé pour assurer un niveau minimum de maintenabilité dans CI). Il est recommandé de régler ceci sur au moins 30. | 10 |
cliOutputLimit | Nombre de fichiers à inscrire dans la sortie CLI (du pire score au meilleur score). | 25 |
Analyser un répertoire entier:
const { analyzeProject } = require ( 'codehawk-cli' )
const output = analyzeProject ( '/path/to/project' ) // returns a Results object
// Get summary maintainability scores
const {
average ,
median ,
worst ,
} = output . summaryAnalyser un seul morceau de code:
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 dépend de typhonjs-escomplex pour les métriques de complexité de bas niveau.
Le flux est pris en charge via flow-remove-types et TypeScript est pris en charge via @babel/plugin-transform-typescript . En d'autres termes, il transforme tout flux ou code de type dactylographié en code JavaScript avant que l'analyse statique ne soit effectuée.
Chaque fichier analysé dans votre projet se retrouve avec:
codehawkScore - un score Codehawk qui représente son niveau de maintenabilité estimé (0-100, plus haut, c'est mieux)dependencies - une carte des dépendances de ce fichiertimesDependedOn - Nombre de fois ce fichier est importé par d'autres fichierscomplexityReport - Diverses mesures de complexité détaillées telles que les mesures Halstead et la complexité cyclomatique Par défaut, CodeHawk-Cli génère 2 badges (dans generated/*.svg ) lorsqu'il est appelé via l'interface CLI principale:
Un score plus élevé est meilleur (code plus simple et plus maintenable).
Pour éviter de générer des badges, utilisez l'option --no-badge .
Codehawk rassemble diverses mesures de complexité, notamment:
codehawk.json sont actuellement requis. Cependant, ils peuvent être vides. "Échantillons" contient 4 faux et 1 projet réel à des fins de test de l'outil CLI.
SweetAlert dans ce répertoire est une exportation statique (réalisée en 2019) de cette bibliothèque.
Chaque échantillon contient un fichier de configuration codehawk.json vide (à l'heure actuelle, cette configuration)
Des caractères non latins (ou certains Unicode?) Tels que u2019 confondent flow-remove-types , voir Facebook / Flow # 8060