CodeHawk هي أداة تحليل ثابت لمشاريع JavaScript. الغرض منه كنظام تحذير ، لتحديد المجالات المعقدة من التعليمات البرمجية التي تحتاج إلى عناية خاصة من قبل المطورين.
اتفاقية التجارة الحرة هي بديل مباشر لمشروع CodeHawk CLI. إنه أكثر قوة وأسرع بشكل كبير ، مع إجراء تحليل ثابت منخفض المستوى في الصدأ.
يوصى باستخدام FTA عبر CodeHawk CLI. اتفاقية التجارة الحرة في التطوير النشط في حين أن 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 ويتم دعم TypeScript عبر @babel/plugin-transform-typescript . بمعنى آخر ، فإنه يحول أي رمز تدفق أو typeScript إلى رمز JavaScript قبل إجراء التحليل الثابت.
ينتهي كل ملف تم تحليله في مشروعك بـ:
codehawkScore - درجة CodeHawk التي تمثل المستوى المقدر من قابلية الصيانة (0-100 ، أعلى أفضل)dependencies - خريطة تبعية لهذا الملفtimesDependedOn - عدد مرات استيراد هذا الملف بواسطة ملفات أخرىcomplexityReport - مقاييس التعقيد التفصيلية المختلفة مثل مقاييس Halstead والتعقيد السيكلومي بشكل افتراضي ، يقوم CodeHawk-Cli بإنشاء شاراتان (في generated/*.svg ) عند استدعائه عبر واجهة CLI الرئيسية:
درجة أعلى أفضل (أبسط وأكثر قابلية للصيانة).
لتجنب توليد الشارات ، استخدم خيار --no-badge .
يجمع CodeHawk مقاييس التعقيد المختلفة ، بما في ذلك:
codehawk.json مطلوبة حاليًا. ومع ذلك ، يمكن أن تكون فارغة. تحتوي "العينات" على 4 مشروع حقيقي و 1 مشروع حقيقي لأغراض اختبار أداة CLI.
Sweetalert في هذا الدليل هو تصدير ثابت (يتم في عام 2019) لتلك المكتبة.
تحتوي كل عينة على ملف تكوين codehawk.json فارغ (في الوقت الحاضر ، هذا التكوين)
أحرف غير لاتينية (أو معينة Unicode؟) مثل u2019 تخلط بين flow-remove-types ، انظر Facebook/Flow#8060