Codehawk - это статический инструмент анализа для проектов JavaScript. Он предназначен как система предупреждения, чтобы определить сложные области кода, которые требуют особого внимания разработчиками.
FTA является прямой заменой проекта CODEHAWK CLI. Это гораздо более прочно и резко быстрее, с низким уровнем статического анализа, проведенного в ржавчине.
Рекомендуется использовать FTA через CODEHAWK CLI. FTA находится в активной разработке, тогда как CODEHAWK CLI находится в режиме обслуживания.
Обновите до FTA здесь.
Проекты JavaScript (включая TypeScript и Flow) поддерживаются для анализа. Инструмент CLI поддерживает файловые системы Unix и Windows (существует разумное количество кода совместимости Windows).
Он работает, пройдя каталог и обнаруживая все поддерживаемые филетипы, запускает подпрограмму статического анализа в каждом файле, а затем выполняет анализ по всему проекту, такой как подсчет межзависимости и отображение тестового покрытия.
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 | Чтобы настроить свой анализ, используйте следующие параметры, размещенные в файле 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 генерирует 2 значка (в generated/*.svg ) при вызове через основной интерфейс CLI:
Более высокий балл лучше (более простой, более поддерживаемый код).
Чтобы избежать генерирования значков, используйте вариант --no-badge .
Codehawk собирает различные показатели сложности, в том числе:
codehawk.json Файлы конфигурации в настоящее время требуются. Однако они могут быть пустыми. «Образцы» содержит 4 поддельные и 1 настоящий проект для целей тестирования инструмента CLI.
SweetAlert в этом каталоге - статический экспорт (проведенный в 2019 году) этой библиотеки.
Каждый образец содержит пустой файл конфигурации codehawk.json (в настоящее время, эта конфигурация)
Нелатинские (или определенные символы Unicode?), Такие как U2019, путайте flow-remove-types , см. Facebook/Flow#8060