Eligos เครื่องมือวิเคราะห์รหัสแบบคงที่สำหรับภาษาการเขียนโปรแกรม Kotlin
ในเวอร์ชันปัจจุบันเราสามารถตรวจจับกลิ่น 13 ตัวต่อไปนี้:
| พิมพ์ | ฉลาก | คำอธิบาย |
| การอ้างอิงแบบวงกลม | - | สองคลาสหรือไฟล์หรือไฟล์มีการพึ่งพาซึ่งกันและกันซึ่งเป็นวงปิดแบบปิด |
| พารามิเตอร์มากเกินไป | - | วิธีการมีข้อโต้แย้งมากเกินไป |
| นำเข้าที่ไม่ได้ใช้ | - | คลาสแอตทริบิวต์วิธีการหรือแพ็คเกจที่นำเข้ามาในไฟล์ แต่ไม่เคยใช้ |
| วิธีที่ซับซ้อน | - | ความซับซ้อนของลูปมีขนาดใหญ่เกินไป |
| จัดเตรียมคอลเลกชันที่ไม่เปลี่ยนรูป | - | Kotlin ให้บริการประเภทคอลเลกชันที่ไม่เปลี่ยนรูปเมื่อ Java เรียก API ของ Kotlin |
| ภายในสัมผัส | - | Java เปิดเผยการประกาศภายในของ Kotlin ต่อสาธารณะ |
| การใช้งานแพลตฟอร์มที่ไม่มีค่าใช้จ่ายที่ไม่แน่นอน | - | Kotlin ในพื้นที่เรียกวิธี Java ที่ส่งคืนประเภท Null-Agnostic และใช้ผลลัพธ์นี้โดยตรงในวิธี Kotlin ที่คาดว่าจะมีข้อโต้แย้งที่ไม่ใช่ Null อย่างสมบูรณ์ |
| ผู้โทรแพลตฟอร์มที่ไม่แน่นอน | - | เรียกวิธีการหรือเข้าถึงคุณสมบัติที่มีประเภทนิพจน์ผู้โทรเป็นประเภทแพลตฟอร์มใน Kotlin |
| ส่งผ่านไปยังพารามิเตอร์แพลตฟอร์ม | - | Kotlin ส่งพารามิเตอร์ที่เป็นโมฆะไปยังวิธี Java ซึ่งใช้พารามิเตอร์แพลตฟอร์ม |
| ประเภทแพลตฟอร์มที่ไม่มีความไม่แน่นอนในคุณสมบัติ | - | Kotlin เรียกวิธีการหรือคุณสมบัติ Java ที่ว่างเปล่าและใช้ค่านี้เป็นค่าส่งคืนของ getter สำหรับคุณสมบัติคลาส |
| ฟังก์ชั่นสหาย jvmstatic ที่ไม่ใช่ | - | ฟังก์ชั่นสาธารณะในวัตถุสหายจะต้องมีคำอธิบายประกอบด้วย @jvmstatic เพื่อให้ได้รับเป็นวิธีการคงที่โดยไม่มีคำอธิบายประกอบฟังก์ชั่นเหล่านี้มีเฉพาะเป็นวิธีการอินสแตนซ์ในฟิลด์สหายคงที่ |
| ค่าสหายที่ไม่ใช่ JVMField | - | คุณสมบัติสาธารณะที่ไม่ใช่การประชุมซึ่งเป็นค่าคงที่ที่มีประสิทธิภาพในวัตถุสหายจะต้องมีคำอธิบายประกอบด้วย @JVMField ที่จะถูกเปิดเผยเป็นสนามคงที่ |
| ชื่อ Javafacade ที่เข้าใจไม่ได้ | - | เมื่อไฟล์มีฟังก์ชั่นหรือคุณสมบัติระดับบนสุดให้ใส่คำอธิบายประกอบด้วย @file: jvmname ("foo") เสมอเพื่อให้ชื่อที่ดีโดยเริ่มต้นสมาชิกระดับบนสุดในไฟล์ myclass.kt จะจบลงในชั้นเรียนที่เรียกว่า MyClasskt |
| ไม่สนใจข้อยกเว้น | - | ฟังก์ชั่นที่สามารถโยนข้อยกเว้นที่ตรวจสอบได้ควรจัดทำเอกสารด้วย @throws ข้อยกเว้นรันไทม์ควรได้รับการบันทึกไว้ใน KDOC.be Mindful ของ APIs A Function Alegates เนื่องจากพวกเขาอาจโยนข้อยกเว้นที่ตรวจสอบซึ่ง Kotlin เป็นอย่างอื่นอย่างเงียบ ๆ อนุญาตให้เผยแพร่ |
| เมื่อแทนที่จะเป็นน้ำตกถ้า | - | หากข้อความที่มีคาสเคดมากเกินไปควรถูกแทนที่ด้วยเมื่องบ |
| ฟังก์ชันนิพจน์เดียวโดยนัย | - | วิธีการแสดงออกเดียวของ Kotlin ส่งคืนค่าประเภทอื่นนอกเหนือจากหน่วย แต่ไม่ได้ระบุประเภทการส่งคืน |
| วัตถุขยายได้ | - | ชั้นเรียนที่ตกแต่งด้วยวัตถุ Kotlin ที่สืบทอดมาจากการโยนได้ |
| การเรียกซ้ำหางที่ดีที่สุด | - | ฟังก์ชั่นการเรียกซ้ำหางใน Kotlin ไม่ได้ระบุว่ามันเป็นแบบเรียกซ้ำหาง |
ในตารางสีเหลืองเป็นเรื่องปกติของ Java Kotlin สีเขียวจะถูกสร้างขึ้นเมื่อ Koltin Java โทรหากันและสีม่วงเป็นเอกลักษณ์ของ Kotlin
git clone https://github.com/TnoAlex/Eligos.git| ผู้สำเร็จการศึกษา | Kotlin | ระดับเป้าหมาย Java | เวอร์ชัน 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โคลน repo นี้
git clone https://github.com/TnoAlex/Eligos.gitสร้างภาพนักเทียบท่า
docker build -t eligos:1.0 .เรียกใช้ Eligos โดย 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 Annotation และรายงานปัญหาเช่นนี้:
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 เช่นนี้
@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 กระบวนการดำเนินการ