Eligos ، أداة تحليل التعليمات البرمجية الثابتة للغة البرمجة Kotlin .
في الإصدار الحالي ، يمكننا اكتشاف رائحة الكود الـ 13 التالية:
| يكتب | ملصق | وصف |
| المراجع الدائرية | ؟ | فئتان أو أكثر أو ملفات لها ترابطات تشكل حلقة مغلقة |
| المعلمات المفرطة | ؟ | الطريقة لديها الكثير من الحجج |
| استيراد غير مستخدم | ؟ | الفئات أو السمات أو الأساليب أو الحزم التي تم استيرادها إلى ملف ، ولكن لم يتم استخدامها مطلقًا |
| طريقة معقدة | ؟ | تعقيد الحلقة كبير جدًا |
| توفير مجموعة ثابتة | ؟ | يوفر Kotlin أنواع التجميع غير القابلة للتغيير عندما تدعو Java Conner Kotlin API |
| تعرض داخلي | ؟ | Java تعرض إعلان Kotlin الداخلي للجمهور. |
| استخدام تعبير منصة غير مؤكد | ؟ | يستدعي Kotlin محليًا طريقة Java التي تُرجع نوعًا خاليًا من الفرق ، ويستخدم هذه النتيجة مباشرةً في طريقة Kotlin التي تتوقع وسيطات غير فائقة تمامًا |
| متصل منصة غير مؤكدة | ؟ | استدعاء طريقة أو الوصول إلى خاصية نوع تعبير المتصل هو نوع النظام الأساسي في Kotlin. |
| مرت لاغية إلى معلمة النظام الأساسي | ؟ | مرت Kotlin معلمة لاغية إلى طريقة Java التي تأخذ معلمة النظام الأساسي. |
| نوع النظام الأساسي غير المؤكد في الممتلكات | ؟ | يستدعي Kotlin طريقة أو خاصية Java فارغة فارغة وتستخدم هذه القيمة كقيمة الإرجاع لـ Getter لخاصية الفصل |
| وظيفة رفيق JVMSTATIC | ؟ | يجب شرح الوظائف العامة في كائن مصاحب باستخدام @JVMStatic لتتعرض كطريقة ثابتة. دون التعليق التوضيحي ، تكون هذه الوظائف متوفرة فقط كطرق مثيل في حقل مصاحب ثابت. |
| قيمة رفيق JVMfield | ؟ | يجب شرح الخصائص العامة غير الممتدة التي هي ثوابت فعالة في كائن مصاحب مع JVMfield لتتعرض كحقل ثابت. |
| اسم Javafacade غير مفهومة | ؟ | عندما يحتوي ملف على وظائف أو خصائص من المستوى الأعلى ، قم دائمًا بتعليقه مع FILE: JVMNAME ("Foo") لتوفير اسم لطيف. من خلال الأعضاء الافتراضيين ، سينتهي الأعضاء من المستوى الأعلى في ملف myClass.kt في فصل يسمى MyClasskt الذي يلفت النظر ويسرب اللغة كتفاصيل تنفيذ. |
| استثناء تم تجاهله | ؟ | الوظائف التي يمكن أن ترمي الاستثناءات التي تم فحصها يجب أن توثقها مع Throws. يجب توثيق استثناءات وقت التشغيل في KDOC.BE مع مراعاة واجهات برمجة التطبيقات ، وهي مندوبة الوظيفة لأنها قد ترمي استثناءات محددة تسمح Kotlin بصمت بالانتشار. |
| متى بدلاً من سلسلة ما إذا | ؟ | إذا كان ينبغي استبدال البيانات التي تحتوي على الكثير من الشلالات |
| وظيفة تعبير واحد ضمني | ؟ | تقوم طريقة التعبير الواحد من Kotlin بإرجاع قيمة النوع بخلاف الوحدة ، ولكنها لا تحدد نوع الإرجاع |
| يمتد الكائن | ؟ | الفصل المزين بكائن kotlin يرث من رمي |
| عودة ذيل الأمثل | ؟ | وظيفة عودة الذيل في Kotlin لا تشير إلى أنه عودية الذيل |
في الطاولة ، يكون اللون الأصفر شائعًا في Java Kotlin ، يتم إنشاء اللون الأخضر عندما يستدعي Koltin Java بعضها البعض ، والأرجواني فريد من نوعه لكوتلين.
git clone https://github.com/TnoAlex/Eligos.git| Gradle | كوتلين | مستوى الهدف جافا | إصدار JDK MIN |
|---|---|---|---|
8.0+ | 1.9.10 | 17 | 17 |
./gradlew build # on linux
./gradlew.bat build # on windowseligos-cli/build/libs والمكونات الإضافية القابلة للتثبيت في eligos-plugin/build/distributions .استنساخ هذا الريبو
git clone https://github.com/TnoAlex/Eligos.gitبناء صورة Docker
docker build -t eligos:1.0 .تشغيل illigos بواسطة Docker
docker run -v $PROJECT :/dist/project -v $RESULT :/dist/result eligos:1.0 kotlin ./project ./result --with java في الأمر أعلاه ، يشير $PRJECT إلى الموقع المحلي للعنصر الذي سيتم تحليله ، حيث يتم $RESULT الموقع الذي يتم فيه تخزين النتائج المحلية - تأكد من وجودها جميعًا قبل استخدام هذا الأمر . المجلدين الموجودين بعد معلمة Kotlin هما تعيينات Docker الداخلية ، والتي يتم إصلاحها.
يمكن إدراج استخدام أداة CLI بواسطة eligos --help ، مثل ما يلي:
Usage: command-parser [<options>] <major language> <source path> [<result
output path>]
Options:
-w, --with=<text> Secondary languages that are analyzed in
collaboration with the primary language
-ecp, --class-path=<path> The classpath of the project to be analyzed.
(Default is source path and '.',If your project
has external jar dependencies, add the paths of
them)
-jh, --jdk-home=<path> The path of 'JAVA_HOME'. (Default is current jvm's
base dir)
-kv, --kotlin-v=<text> The version of kotlin in the project
-jt, --jvm-target=<text> The target of project's bytecode
-kl, --kotlin-lib=<path> The path of kotlin-std-lib. (Default is current
kotlin lib's path)
-p, --prefix=<text> The result file name prefix
-f, --format=(JSON|XML|HTML|TEXT)
The Presentation of results
-r, --rules=<path> Specify the rules to use
-D, --debug Out put exception stack
-Nr, --no-report Disable reporter (debug only)
-h, --help Show this message and exit
Arguments:
<major language> The major language to be analyzed
<source path> The path of source files
<result output path> The path to out put result
إذا استخدمت YOB مكتبات الطرف الثالث ، أو استخدم أدوات بناء مثل Maven أو Gradlle ، فيرجى تعيين classpath الصحيح حتى تتمكن الأداة من العثور على هذه التبعيات وتجنب المشكلة التي لا يمكن حل بعض التبعيات الخارجية.
نحن نقدم آلية بسيطة لتوسيع eLigos. الخطوات التالية تسمح لك بإنشاء قاعدة تنتمي إليك:
قم بإنشاء معالج ملف psi يقوم بتنفيذ PsiProcessor ، وتحديد مشكلة Issue
أضف مستمع ملف PSI باستخدام @EventListener التعليق التوضيحي وأبلغ عن قضية مثل هذا:
class MyProcessor : PsiProcessor {
@EventLinster
fun process ( ktFile : PsiFile ){
// do someting
context.reportIssue( MyIssue (hashSetOf(ktFile.virtualFilePath)))
}
}
class MyIssue ( affectedFiles : HashSet < String >) : Issue( AnalysisHierarchyEnum . FILE , affectedFiles, " My Issue " , null ) اجعل القاعدة الخاصة بك يمكن أن يتم مسحها ضوئيًا من قبل مدير المكونات باستخدام @Component Strentation مثل هذا
@Component
class MyProcessor : PsiProcessor {
@EventLinster
fun process ( ktFile : PsiFile ){
// do someting
}
} إذا كنت تريد أن يتم تشغيل هذه القاعدة فقط على البرنامج المساعد ، فيرجى استخدام التعليق التوضيحي @Suitable
@Component
@Suitable( LaunchEnvironment . IDE_PLUGIN )
class MyProcessor : PsiProcessor {
@EventLinster
fun process ( ktFile : PsiFile ){
// do someting
}
}هذا كل شيء؟. إذا كنت ترغب في تخصيص eLigos بمزيد من التفصيل ، فيرجى الرجوع إلى مخطط Eligos Architecture ، وعملية التنفيذ.