Codehawk ist ein statisches Analyse -Tool für JavaScript -Projekte. Es ist als Warnsystem gedacht, komplexe Codebereiche zu identifizieren, die besondere Aufmerksamkeit von Entwicklern benötigen.
FTA ist ein direkter Ersatz für das Codehawk CLI -Projekt. Es ist viel robuster und dramatisch schneller, wobei die statische Analyse mit niedriger Ebene in Rost durchgeführt wird.
Es wird empfohlen, FTA über Codehawk CLI zu verwenden. FTA befindet sich in aktiver Entwicklung, während Codehawk CLI im Wartungsmodus befindet.
Upgrade auf FTA hier.
JavaScript (einschließlich TypeScript- und Flow) -Projekte werden für die Analyse unterstützt. Das CLI -Tool unterstützt Unix- und Windows -Dateisysteme (es gibt eine angemessene Menge an Windows -Kompatibilitätscode).
Es erfolgt durch Überqueren eines Verzeichnisses und das Erkennen aller unterstützten Filetypen, führt eine statische Analyseroutine für jede Datei aus und führt dann projektweite Analyse durch, z.
Die CLI läuft als Node.js -Prozess. Node.js> = 14 ist erforderlich, aber> = 16 wird empfohlen. Der Knoten v12 und unter wird nicht unterstützt.
Die einfachste Möglichkeit, Codehawk-CLI zu verwenden, besteht darin, es gegen ein Verzeichnis in Ihrem Projekt zu verwenden:
npm install --save-dev codehawk-cli oder yarn add --dev codehawk-cli
Fügen Sie der Stammin Ihres Projekts einen codehawk.json hinzu, zum Beispiel:
{
"skipDirectories" : [ " /node_modules " , " coverage " ]
} Fügen Sie package.json ein neues Skript hinzu, zum Beispiel: "codehawk": "codehawk src"
Führen Sie npm run codehawk aus und erhalten Sie die Ausgabe auf STDOut
Siehe auch ein Beispiel mit 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 | Um Ihre Analyse anzupassen, verwenden Sie die folgenden Optionen, die in einer Datei codehawk.json im Stammverzeichnis platziert sind.
| Option | Beschreibung | Standard |
|---|---|---|
badgesDirectory | Verzeichnis, in dem die beiden Wartungsabzeichen erstellt werden (wenn es aktiviert ist) | ['/generated'] |
enableFlow | Durchflussstütze aktivieren | false |
extensions | Dateierweiterungen, die analysiert werden sollten. Die Standardeinstellung wird immer verwendet, aber Sie können mehr Erweiterungen hinzufügen. Sie können die Optionen für exclude[...] , um bestimmte Dateien auszuschließen. | ['.js', '.jsx', '.ts', '.tsx'] |
excludeFilenames | Dateiname -Übereinstimmungen, die von der statischen Analyse ausgeschlossen werden sollten (zeigen jedoch in den Daten immer noch). Die Standardeinstellung wird immer verwendet, aber Sie können weitere Übereinstimmungen hinzufügen, die ausgeschlossen werden können. Beachten Sie, dass die Übereinstimmung genau ist. Die Ausschlussliste wird nach der Erweiterungsliste berücksichtigt. | ['.d.ts', '.min.js', '.bundle.js'] |
excludeDirectories | Verzeichnisübereinstimmungen, die von der statischen Analyse ausgeschlossen werden sollten (werden jedoch in den Daten immer noch angezeigt). Relativ zur Wurzel. ZB ['/fixtures', '/test'] | ['/dist', '/bin', '/build'] |
excludeExact | Genaue Dateiübereinstimmungen, die von der statischen Analyse ausgeschlossen werden sollten (jedoch in den Daten angezeigt). Relativ zur Wurzel. ZB ['/src/foo/bar.ts'] | [] |
skipDirectories | Verzeichnisse, die vollständig ausgeschlossen werden sollten, dh in den resultierenden Daten nicht sichtbar. Die Standardeinstellungen werden immer übersprungen. | ['/node_modules', '/flow-typed', '/coverage'] |
minimumThreshold | Minimum akzeptable Wartbarkeitsbewertung. Wenn eine Datei gegen diese Punktzahl verstößt, wird die CLI mit Code 1 beendet (verwendet, um ein Mindestgrad der Wartbarkeit in CI zu gewährleisten). Es wird empfohlen, dies auf mindestens 30 zu setzen. | 10 |
cliOutputLimit | Anzahl der Dateien, die in der CLI -Ausgabe aufgeführt sind (vom schlimmsten Punkte bis zum besten Punktzahl). | 25 |
Analysieren Sie ein ganzes Verzeichnis:
const { analyzeProject } = require ( 'codehawk-cli' )
const output = analyzeProject ( '/path/to/project' ) // returns a Results object
// Get summary maintainability scores
const {
average ,
median ,
worst ,
} = output . summaryAnalysieren Sie einen einzelnen 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 hängt von typhonjs-escomplex für Komplexitätsmetriken mit niedriger Ebene ab.
Der Fluss wird über flow-remove-types unterstützt und TypeScript wird über @babel/plugin-transform-typescript unterstützt. Mit anderen Worten, es transformiert den Fluss- oder Typscript -Code in JavaScript -Code, bevor eine statische Analyse durchgeführt wird.
Jede analysierte Datei in Ihrem Projekt endet mit:
codehawkScore - Ein Codehawk -Score, der das geschätzte Wert der Wartbarkeit darstellt (0-100, höher ist besser)dependencies - eine Karte der Abhängigkeit dieser DateitimesDependedOn - Häufigkeit, mit der diese Datei von anderen Dateien importiert wirdcomplexityReport - verschiedene detaillierte Komplexitätsmetriken wie Halstead -Metriken und zyklomatische Komplexität Standardmäßig generiert Codehawk-Cli 2 Abzeichen (in generated/*.svg ), wenn sie über die Haupt-CLI-Schnittstelle aufgerufen werden:
Eine höhere Punktzahl ist besser (einfacherer, wartbarerer Code).
Verwenden Sie die Option --no-badge -Option, um Abzeichen zu vermeiden.
Codehawk versammelt verschiedene Komplexitätsmetriken, darunter:
codehawk.json -Konfigurationsdateien erforderlich. Sie können jedoch leer sein. "Proben" enthält 4 gefälschte und 1 reale Projekte zum Testen des CLI -Tools.
SweetAlert in diesem Verzeichnis ist ein statischer Export (2019) dieser Bibliothek.
Jedes Beispiel enthält eine leere codehawk.json -Konfigurationsdatei (derzeit diese Konfiguration)
Nicht-Latin- (oder bestimmte Unicode?) Zeichen wie u2019 verwirren Sie flow-remove-types , siehe Facebook/Flow#8060