
เครื่องมือวิเคราะห์รหัสแบบคงที่สำหรับ CFML
ใบอนุญาต: BSD
เวอร์ชันปัจจุบัน: 1.5.x
ดู Changelog.md สำหรับข้อมูลเพิ่มเติม
Cflint เป็นโครงการที่พัฒนาและทำงานโดยอาสาสมัคร เมื่อมีปัญหาในการบันทึกให้ดีและมีน้ำใจ เรามาที่นี่เพื่อช่วย เราขอขอบคุณการแก้ไขและการปรับปรุงดังนั้นอย่าลังเลที่จะพูดคุยกับเราและ/หรือให้คำขอดึง
/src/main มีซอร์สโค้ด การทดสอบสามารถพบได้ใน /src/test Cflint อาศัยโครงการ CFParser เป็นอย่างมากรวมถึงห้องสมุด Java ของบุคคลที่สาม
สาขาหลักถือว่าเป็นรหัสฐานที่เสถียรของเรา การพัฒนาส่วนใหญ่เกิดขึ้นในสาขา dev สาขาการพัฒนาท้องถิ่นสำหรับปัญหาเฉพาะ
แยกที่เก็บลงในบัญชีของคุณและโคลนหรือดาวน์โหลด codebase เป็นไฟล์ซิป
ติดตั้งเครื่องมือที่คุณเลือกและสร้างผ่าน Gradle หรือ Maven (เลิกใช้แล้ว) Cflint ต้องใช้ Java 8
. Gradle: ดำเนินการ
gradlew build
ในไดเรกทอรี cflint
ข. Maven: ดำเนินการ
mvn clean install
ในไดเรกทอรี cflint
อีกทางเลือกหนึ่งนำเข้า codebase cflint ไปยัง IDE ที่คุณเลือกและใช้การรวม Gradle/Maven ตามลำดับ สิ่งนี้ควรทำงานนอกกรอบสำหรับผู้ใช้ Eclipse และ Intellij
รับเวอร์ชันล่าสุดจาก Maven Central หรือหน้า CFLINT GITHUB หรือสร้างโครงการ
หากคุณต้องการใช้ Cflint จากภายในโครงการ Maven อื่นให้ใช้:
< dependency >
< groupId >com.github.cflint</ groupId >
< artifactId >CFLint</ artifactId >
< version >1.4.0</ version >
</ dependency >หรือใช้ล่าสุด: เสมอ:
< dependency >
< groupId >com.github.cflint</ groupId >
< artifactId >CFLint</ artifactId >
< version >LATEST</ version >
</ dependency >ด้วยการเรียกใช้ไบนารีอย่างใดอย่างหนึ่งคุณสามารถใช้ cflint บนบรรทัดคำสั่ง
CFLint-1.5.0-all.jar
java -jar CFLint-1.5.0-all.jar -folder <baseFolder>
java -jar CFLint-1.5.0-all.jar -file <fullPathToFile>
java -jar CFLint-1.5.0-all.jar -help
หมายเหตุ: นี่เป็นงานที่กำลังดำเนินการอยู่เรากำลังรวบรวมข้อมูลจากแหล่งข้อมูลที่หลากหลาย
ตัวเลือกที่ง่ายที่สุดสำหรับการดำเนินการ CFLINT คือผ่านบรรทัดคำสั่ง ปัจจุบัน Cflint มีโหมด UI (ทริกเกอร์โดย -UI บนบรรทัดคำสั่ง) ซึ่งจะถูกลบออกโดยล่าสุดสำหรับ CFLINT 2.0 - ดูปัญหา #316 หากคุณพึ่งพาโหมด UI คุณน่าเสียดายที่คุณเอง - จะไม่มีงานทำอีกต่อไปจากที่นี่เป็นต้นไป
อีกทางเลือกหนึ่งกับบรรทัดคำสั่งคุณสามารถใส่ไฟล์ .cflintrc ลงในไดเรกทอรีบางอย่าง การกำหนดค่า cflint ด้วยวิธีนี้แนวคิดช่วยให้คุณเรียกใช้กฎเฉพาะในส่วนเฉพาะของแอปพลิเคชันของคุณ
ปัจจุบัน CFLINT รองรับการกำหนดค่าที่ใช้ JSON- และ XML การกำหนดค่าที่ใช้ XML เลิกใช้ใน CFLINT 1.3.0 และจะถูกลบออกใน CFLINT 2.0
เมื่อ CFLINT ดำเนินการจะสแกนและแยกวิเคราะห์รหัสของคุณ (โดยใช้ CFPARSER) จากนั้นต้นไม้ไวยากรณ์จะถูกตรวจสอบกับชุดของกฎในตัว
ใน Cflint กฎเหล่านั้นถูกเรียกและนำไปใช้เป็นปลั๊กอิน (พวกเขาอาศัยอยู่ใน /src/main/java/com/cflint/plugins ) โดยค่าเริ่มต้นกฎทั้งหมดจะถูกใช้กับ codebase ของคุณ นี่คือสิ่งที่ผู้คนจำนวนมากจะทำ แต่การใช้การกำหนดค่าช่วยให้คุณสามารถสร้างสถานการณ์ที่กำหนดเองเพื่อทดสอบรหัสของคุณกับ ดู Rules.md สำหรับข้อมูลเพิ่มเติมเกี่ยวกับกฎและความหมายของพวกเขา
Cflint มีความคิดเห็นและทุกการเปิดตัวหลังจาก 1.3.0 จะไม่สแกนในไดเรกทอรีเริ่ม . ด้วย เพื่อป้องกันการสูญเสียเวลาของไดเรกทอรีที่ซ่อนอยู่เช่นการกำหนดค่าการสร้างโมดูล/ที่เก็บข้อมูลห้องสมุดหรือข้อมูลการควบคุมเวอร์ชัน
ไฟล์การกำหนดค่าเริ่มต้นและส่วนกลางคือ /src/main/resources/cflint.definition.json การใช้งานทั่วไปของ cflint มักไม่จำเป็นต้องเปลี่ยนไฟล์นี้
การใส่ไฟล์ .cflintrc ลงในไดเรกทอรีช่วยให้คุณสามารถระบุกฎบางอย่างที่ควรดำเนินการสำหรับไดเรกทอรีนี้และลูก ๆ นอกจากนี้คุณสามารถระบุคุณสมบัติอื่น ๆ จำนวนหนึ่ง
ตัวอย่างไฟล์ .cflintrc แสดงอยู่ด้านล่าง:
{
"rule" : [ ],
"excludes" : [ ],
"includes" : [ {
"code" : " FUNCTION_HINT_MISSING "
} ],
"inheritParent" : false ,
"parameters" : { }
} rule ช่วยให้คุณเพิ่มปลั๊กอินสำหรับโฟลเดอร์นี้ที่ไม่ได้อยู่ในรายการในการกำหนดค่าส่วนกลาง ดู ruleImpl ใน cflint.definition.json สำหรับตัวอย่าง
excludes และ includes อนุญาตให้คุณระบุอาร์เรย์ของวัตถุที่อธิบายกฎที่คุณต้องการใช้สำหรับไดเรกทอรีนี้และลูก ๆ ของมัน ในตัวอย่างข้างต้นกฎเดียวที่จะตรวจสอบจะเป็น function_hint_missing
inheritParent กำหนดค่าหากกฎที่ตั้งไว้ใน Global หรือการกำหนดค่าหลักใด ๆ ควรได้รับการสืบทอดเป็นชุดพื้นฐานของกฎ
parameters อนุญาตให้กำหนดค่ากฎ ดู Rules.md สำหรับพารามิเตอร์ของแต่ละกฎและค่าเริ่มต้น คุณต้องนำหน้าชื่อพารามิเตอร์ด้วยชื่อกฎคั่นด้วยจุด
โปรดทราบ: inheritPlugins และ output ถูกทำเครื่องหมายว่าเลิกใช้งานใน CFLINT 1.2.0 และลบออกใน 1.4.0 การสืบทอดปลั๊กอินได้รับการปฏิบัติเสมอเป็นจริงเนื่องจากทีมไม่สามารถเห็นกรณีการใช้งานที่ควรปิดใช้งาน ประเภทเอาต์พุตสามารถควบคุมได้ที่อื่นเช่นธงบรรทัดคำสั่ง
เราให้บริการสคีมาที่มีคุณสมบัติที่ไม่ได้รับการยกเว้น
ดูสูตรสำหรับตัวอย่างการใช้งานของ .cflintrc ตัวอย่างไฟล์สามารถพบได้โดยการเรียกดูไฟล์ทดสอบโครงการ
บ่อยครั้งที่มีสถานการณ์ที่โดยทั่วไปคุณต้องการเรียกใช้ชุดของกฎบางอย่างกับรหัสของคุณ แต่ในบางกรณีจำเป็นต้องเพิกเฉยต่อการละเมิดที่ถูกต้องเป็นอย่างอื่น
ตัวอย่างทั่วไปคือการละเมิด CFQueryParam_REQ ที่ไม่สามารถแก้ไขได้โดยใช้ <cfqueryparam> เนื่องจากเซิร์ฟเวอร์ DB ของคุณไม่อนุญาตให้มีพารามิเตอร์ในบางตำแหน่ง (เช่นใน SELECT something FROM #application.config.linkedServerName#.DefaultDatabase.dbo.Comment ดูปัญหา #282 สำหรับตัวอย่างเพิ่มเติม
CFLINT เสนอการกำหนดค่าที่ใช้คำอธิบายประกอบเพื่อจัดการกับสถานการณ์นี้และสถานการณ์ที่คล้ายกัน คำอธิบายประกอบสามารถวางไว้ในส่วนประกอบหรือระดับฟังก์ชั่นใน CFC หรืออินไลน์ด้วยรหัส
<!---
@CFLintIgnore SOMETHINGELSE,MISSING_VAR,ANOTHERTHINGTOIGNORE
--->
ไม่สนใจกฎทั้งหมดในบรรทัดปัจจุบัน:
//cflint ignore:line
ไม่สนใจกฎเฉพาะ (หรือรายการกฎที่คั่นด้วยเครื่องหมายจุลภาค) ในบรรทัดปัจจุบัน:
//cflint ignore:MISSING_VAR
Multiline ละเว้นคำอธิบายประกอบ:
/*
@CFLintIgnore SOMETHINGELSE,MISSING_VAR,ANOTHERTHINGTOIGNORE
*/
ภายใน SQL คุณสามารถใช้งานได้
<!--- @CFLintIgnore CFQUERYPARAM_REQ --->
เพื่อเพิกเฉยต่อการละเมิดกฎในบรรทัดถัดไป
การกำหนดค่าของปลั๊กอินที่เรียกใช้และกฎใดที่รวมอยู่เริ่มต้นด้วยการกำหนดค่าทั่วโลกและไหลผ่านพารามิเตอร์บรรทัดคำสั่งกฎระดับระดับโฟลเดอร์และลงไปที่คำอธิบายประกอบภายในแหล่งที่มา
-configfile เรา ไม่ สนับสนุนให้ตัวเลือกนี้ใช้ในการดำเนินงานประจำวันของ Cflint)-rulegroups , พฤติกรรมเริ่มต้นคือ -rulegroups! การทดลอง)-includeRule และ -excludeRule )กฎการกำหนดค่าที่ใกล้เคียงกับกฎคือกฎที่มีผล
.cflintrc เพิ่มกลับเข้ามามันจะยิงสำหรับไฟล์ต้นฉบับในส่วนนั้นของแผนผังต้นทาง-includeRule "MISSING_VAR,CFQUERYPARAM_REQ" Cflint รองรับตัวเลือกการรายงานและเอาต์พุตที่หลากหลายซึ่งคุณสามารถควบคุมผ่านธงบรรทัดคำสั่ง นอกเหนือจากรูปแบบเอาต์พุตที่กำหนดเป้าหมายของข้อความ XML, JSON หรือ HTML คุณยังสามารถเรียกใช้ CFLINT ด้วยตัวเลือกสำหรับความเงียบ verbose และเอาต์พุตดีพุท
หากไม่มีการระบุรูปแบบเอาต์พุตเป้าหมายเลย CFLINT จะเริ่มต้นเพื่อสร้างรายงาน HTML ในไฟล์ cflint-result.html
คุณสามารถบังคับพฤติกรรมเอาต์พุตของ Cflint ไปยัง stdout และ stderr ได้โดยการระบุตัวเลือกสำหรับความเงียบ verbose และ debug หากคุณไม่ได้ระบุอย่างใดอย่างหนึ่ง CFLINT จะส่งคืนข้อมูลภายในและเอาต์พุตข้อผิดพลาดไปยัง Stdout และ Stderr
โหมดเงียบ ( -quiet <boolean> ) ยับยั้งการเอาท์พุท cflint ส่วนใหญ่จะสร้างขึ้นในระหว่างการตัดหญ้า สิ่งนี้อาจมีข้อผิดพลาดและข้อยกเว้นที่เกิดขึ้นจริง แต่ยังรวมถึงข้อมูลเช่นการยกเลิกการแยกวิเคราะห์เทมเพลตแบบเรียกซ้ำหรือปัญหาการกำหนดค่าบางอย่าง อย่าเรียกใช้โหมดเงียบ ๆ หากคุณต้องการความช่วยเหลือเกี่ยวกับข้อความแสดงข้อผิดพลาดหรือต้องการเข้าใจดีกว่าว่า Cflint กำลังทำอะไรอยู่
นี่คือโหมดเอาต์พุตขั้นต่ำที่คุณสามารถเรียกใช้ Cflint ได้และคุณลักษณะนี้ได้รับแรงบันดาลใจจากปัญหา #4
อาจมีข้อความเป็นครั้งคราวจาก CFPARSER และ AntLR ที่ถูกผลักเข้าไปใน Stderr ในขั้นตอนนี้ - แม้ว่า Cflint จะทำงานในโหมดเงียบ นี่เป็นปัญหาที่ทราบและจะได้รับการแก้ไขในอนาคต
โหมด Verbose ( -verbose <boolean> ) เปิดใช้งานเอาต์พุตของผ้าสำลี verbose สิ่งนี้มีข้อมูลเกี่ยวกับรูปแบบเอาต์พุตที่เลือกและไฟล์การกำหนดค่าที่พบและกระบวนการในระหว่างการผ้าสำลีรวมถึงไฟล์ cflint ที่ประมวลผลในปัจจุบันกำลังทำงานอยู่ (แสดงเฉพาะไฟล์ที่สแกนจริง)
หากคุณต้องการข้อมูลเพิ่มเติมเกี่ยวกับการทำงานภายในของ Cflint ในระหว่างการดำเนินการโหมด Verbose เป็นขั้นต่ำที่คุณควรเรียกใช้ Cflint
โหมดการดีบัก ( -debug <boolean> ) เปิดใช้งานเอาต์พุตดีบั๊ก โหมดการดีบักหมายถึงโหมด verbose แต่เพิ่มข้อมูลเพิ่มเติมเช่นโทเค็นตัวแยกวิเคราะห์และไฟล์ที่ประมวลผลทุกไฟล์ (โดยไม่คำนึงถึงการสนับสนุนโดยรายการส่วนขยายเริ่มต้นของคุณหรือเริ่มต้น) ลงในสตรีมเอาต์พุต
เป็นไปได้ที่จะเปิดและเรียกใช้โหมดเงียบ ๆ verbose และการดีบักเข้าด้วยกันในเวลาเดียวกัน นี่เป็นส่วนหนึ่งที่คุณอาจไม่ต้องการเห็นข้อมูลข้อผิดพลาดถูกระงับโดยโหมดเงียบ แต่ก็ยังต้องการดูข้อมูลบางอย่างที่แสดงในโหมด Verbose โปรดใช้พฤติกรรมนี้ด้วยเม็ดเกลือ -อาจมีสถานการณ์แปลก ๆ ที่การรวมกัน -quiet , -verbose และ -debug ทำให้เกิดผลลัพธ์ที่ผิดปกติ
ข้อยกเว้นคือโหมดการดีบัก ในโหมดดีบัก CFLINT จะเพิกเฉยต่อการตั้งค่าผู้ใช้สำหรับ verbose และเงียบและตั้งค่า verbose ให้เป็น true และ quiet เป็น false
ธง -html สั่งให้ Cflint สร้างเอกสาร HTML ไวยากรณ์เต็มคือ:
-html -html <outputFileName>
ธง -xml สั่งให้ Cflint สร้าง XML มีสองตัวเลือกสำหรับการรายงาน XML
ตัวเลือกแรกคือสิ่งที่เราเรียกว่า Cflint XML เป็นรูปแบบภายในที่ยึดติดกับสคีมาพื้นฐานที่ให้ไว้ที่นี่ จากนั้นคุณสามารถใช้รูปแบบนี้ตามที่เป็นอยู่หรือเพื่อประมวลผลเพิ่มเติมที่คุณเลือก
ตัวเลือกที่สองคือ FindBugs XML เอกสาร XML ที่ได้นั้นเป็นไปตามเวอร์ชันปัจจุบันของ FindBugs Bugcollection XML Schema Jefinition และสามารถใช้ในผลิตภัณฑ์ Ci-/Build-Server ส่วนใหญ่ Jetbrains TeamCity 10+ สามารถนำเข้ารูปแบบนี้ออกจากกล่อง
โปรดทราบ : ขณะนี้ไม่สามารถผลิตรายงาน XML ได้ทั้งสองในเวลาเดียวกัน นี่เป็นข้อ จำกัด ที่รู้จัก ข้อ จำกัด นี้จะถูกลบออกเป็นส่วนหนึ่งของ CFLINT 2.0 (ดูปัญหา #331)
ในการสร้าง Cflint XML ให้อาร์กิวเมนต์บรรทัดคำสั่งต่อไปนี้:
-xml -xmlstyle cflint -xmlfile <outputFileName>
ตัวอย่างของ cflint xml:
<? xml version = " 1.0 " encoding = " UTF-8 " ?>
< issues version = " 1.2.1 " timestamp = " 1500107134 " >
< issue severity = " WARNING " id = " CFQUERYPARAM_REQ " message = " CFQUERYPARAM_REQ " category = " CFLint " abbrev = " CR " >
< location file = " /Users/kai/Documents/Code/paypal.cfc " fileName = " paypal.cfc " function = " doSomething " column = " 0 " line = " 325 " message = " < cfquery > should use < cfqueryparam/ > for variable 'arguments.PaymentType'. " variable = " arguments.PaymentType " >
< Expression > <![CDATA[ <cfquery name="doPayment" datasource="#paymentDatasource#">...some more Details... ]]> </ Expression >
</ location >
</ issue >
< issue severity = " WARNING " id = " CFQUERYPARAM_REQ " message = " CFQUERYPARAM_REQ " category = " CFLint " abbrev = " CR " >
< location file = " /Users/kai/Documents/Code/paypal.cfc " fileName = " paypal.cfc " function = " doSomethingElse " column = " 0 " line = " 432 " message = " < cfquery > should use < cfqueryparam/ > for variable 'arguments.something'. " variable = " arguments.something " >
< Expression > <![CDATA[ <cfquery name="doPayment" datasource="#paymentDatasource#">...some more Details... ]]> </ Expression >
</ location >
</ issue >
...
< counts totalfiles = " 108 " totallines = " 55596 " >
< count code = " CFQUERYPARAM_REQ " count = " 39 " ></ count >
< count severity = " WARNING " count = " 39 " ></ count >
</ counts >
</ issues >ในการสร้าง FindBugs XML ให้อาร์กิวเมนต์บรรทัดคำสั่งต่อไปนี้:
-xml -xmlstyle findbugs -xmlfile <outputFileName>
รูปแบบ FindBugs XML ถูกสร้างขึ้นในขณะนี้โดยใช้เอกสาร XSLT แปลงรายงาน CFLINT เป็น FindBugs XML ( /src/main/resources/findbugs/cflint-to-findbugs.xsl )
สามารถสร้างเอาต์พุต JSON ได้ด้วย
-json -jsonfile <outputFileName>
ตัวอย่างของ cflint json:
{
"version" : " 1.2.1 " ,
"timestamp" : 1501202128 ,
"issues" : [ {
"severity" : " ERROR " ,
"id" : " MISSING_VAR " ,
"message" : " MISSING_VAR " ,
"category" : " CFLINT " ,
"abbrev" : " MV " ,
"locations" : [ {
"file" : " src/test/resources/com/cflint/tests/Ignores/ignoreCFMLAny2.cfc " ,
"fileName" : " ignoreCFMLAny2.cfc " ,
"function" : " testFunction " ,
"column" : 6 ,
"line" : 14 ,
"message" : " Variable someVar is not declared with a var statement. " ,
"variable" : " someVar " ,
"expression" : " someVar "
} ]
} ],
"counts" : {
"totalFiles" : 7 ,
"totalLines" : 49 ,
"countByCode" : [ {
"code" : " MISSING_VAR " ,
"count" : 1
} ],
"countBySeverity" : [ {
"severity" : " ERROR " ,
"count" : 1
} ]
}
}Schema JSON มีให้ที่นี่
สามารถสร้างเอาต์พุตข้อความธรรมดาได้ด้วย
-text -textfile <outputFileName>
ตัวอย่างเอาต์พุตข้อความธรรมดา:
Issue
Severity:WARNING
Message code:CFQUERYPARAM_REQ
File:/Users/kai/Documents/Code/paypal.cfc
Column:0
Line:79
Message:<cfquery> should use <cfqueryparam/> for variable 'arguments.something'.
Variable:'arguments.something' in function:
Expression:<cfquery name="qry" datasource="#variables.dsn#" cachedwithin="#createTimeSpan(0,0,arguments.cacheInMins,0)#">rn...some Details...
Severity:WARNING
Message code:CFQUERYPARAM_REQ
File:/Users/kai/Documents/Code/paypal.cfc
Column:0
Line:145
Message:<cfquery> should use <cfqueryparam/> for variable 'arguments.something'.
Variable:'arguments.something' in function:
Expression:<cfquery name="qry" datasource="#variables.dsn#" cachedwithin="#createTimeSpan(0,0,arguments.cacheInMins,0)#">rn...some Details...
...
Total files:108
Total lines:55690
Issue counts:1
CFQUERYPARAM_REQ:4
Total issues:4
Total warnings:4
ในการโต้ตอบโดยตรงกับ CFLINT ภายใน JVM ให้ใช้ CFLINT API
import com . cflint . api . CFLintAPI ;
import com . cflint . api . CFLintResult ;
CFLintAPI api = new CFLintAPI ();
CFLintResult result = api . scan ( filename );
String jsonResult = result . getJSON ();สำหรับ เจนกินส์ โปรดดูที่ปลั๊กอิน Jenkins/Hudson ที่กล่าวถึงด้านล่าง
TeamCity ของ Jetbrains มีการสนับสนุนสำหรับ FindBugs รายงานการตรวจสอบรหัส XML พวกเขาสามารถผลิตออกจากกล่องด้วย cflint จาก 1.2.0 เป็นต้นไป (ดูด้านบนในส่วน FindBugs XML)
มีการสนับสนุนสำหรับ Sonarqube ผ่านปลั๊กอิน Sonar Coldfusion ของ Stepstone ที่กล่าวถึงด้านล่าง
สำหรับ Azure DevOps/TFS โปรดดูที่ส่วนขยายของ Azure Pipeline/TFS Build Build ที่กล่าวถึงด้านล่าง
มีเสื้อคลุม NPM สำหรับ CFLINT ด้านล่าง โปรดทราบว่าเสื้อคลุมดูเหมือนว่าจะมาพร้อมกับ Cflint Binary ที่รวมตัวของตัวเองซึ่งอาจไม่ทันสมัยซึ่งอยู่นอกเหนือการควบคุมของเรา
ผลิตภัณฑ์อื่น ๆ ในหมวดหมู่การรวม/สร้างเซิร์ฟเวอร์อาจใช้งานได้เช่นกัน หากคุณใช้ผลิตภัณฑ์เฉพาะที่เหมาะกับคุณด้วย cflint โปรดแจ้งให้เราทราบ หากคุณไม่สามารถให้ Cflint ทำงานในสภาพแวดล้อมที่คุณใช้โปรดแจ้งให้เราทราบเช่นกัน - เราอาจช่วยได้
มีการบูรณาการ IDE หลายประการสำหรับ CFLINT ที่มีอยู่ ด้านล่างนี้เป็นคำอธิบายสั้น ๆ แต่ถ้าคุณต้องการทราบข้อมูลเพิ่มเติมให้ดูโครงการบุคคลที่สามที่น่าสนใจ
มีการสนับสนุน IDE สำหรับ ข้อความประเสริฐ 3 ผ่านโครงการบุคคลที่สามโดยใช้ sublimelinter
นอกจากนี้ยังมีการสนับสนุนสำหรับ Adobe Coldfusion Builder ผ่านโครงการบุคคลที่สาม ผู้ใช้ CFBuilder โปรดดูการสนทนาในปัญหา #327
ผู้ใช้ อะตอม สามารถรวมผ่าน AtomLinter ผ่านโครงการบุคคลที่สาม
ส่วนขยายสำหรับ รหัส Visual Studio นั้นมีให้เป็นโครงการบุคคลที่สาม
การสนับสนุนสำหรับ Intellij ของ Jetbrains มีให้บริการเป็นปลั๊กอินของบุคคลที่สาม
package com . cflint . plugins . core ;
import net . htmlparser . jericho . Element ;
import cfml . parsing . cfscript . script . CFFuncDeclStatement ;
import cfml . parsing . cfscript . script . CFFunctionParameter ;
import cfml . parsing . cfscript . script . CFScriptStatement ;
import com . cflint . BugList ;
import com . cflint . plugins . CFLintScannerAdapter ;
import com . cflint . plugins . Context ;
import com . cflint . tools . CFTool ;
public class ArgDefChecker extends CFLintScannerAdapter {
@ Override
public void expression ( final CFScriptStatement expression , final Context context , final BugList bugs ) {
if ( expression instanceof CFFuncDeclStatement ) {
final CFFuncDeclStatement function = ( CFFuncDeclStatement ) expression ;
for ( final CFFunctionParameter argument : function . getFormals ()) {
// handler.addArgument(param.getName());
final String name = argument . getName ();
if (! argument . toString (). contains ( "required" ) && ! argument . toString (). contains ( "=" )) {
function . getLine ();
function . getColumn ();
context . addMessage ( "ARG_DEFAULT_MISSING" , name );
}
}
}
}
@ Override
public void element ( final Element element , final Context context , final BugList bugs ) {
if ( element . getName (). equals ( "cfargument" )) {
final String name = element . getAttributeValue ( "name" );
final boolean required = CFTool . toBoolean ( element . getAttributeValue ( "required" ));
final String defaultExpr = element . getAttributeValue ( "default" );
if (! required && defaultExpr == null ) {
element . getSource (). getRow ( element . getBegin ());
element . getSource (). getColumn ( element . getBegin ());
context . addMessage ( "ARG_DEFAULT_MISSING" , name );
}
}
}
} เมื่อดูที่ element ฟังก์ชันอาร์กิวเมนต์คือ:
element - แท็ก CFML ปัจจุบันcontext - ไฟล์ปัจจุบันกำลังตรวจสอบbugs - วัตถุต่อท้ายการละเมิด วิธีที่ง่ายที่สุดในการบรรลุเป้าหมายนี้คือไฟล์. .cflintrc ที่กำหนดเอง:
ฟิลด์ includes จะถูกละเว้นหากเป็นรายการที่ว่างเปล่าดังนั้นเพียงเพิ่มรายการเดียวลงในรายการที่ไม่มีอะไรตรงกัน
{
"code" : " NOTHING "
}หรือมากกว่านั้น:
{}ต่อไปนี้จะไม่สนใจกฎทั้งหมดในโฟลเดอร์ปัจจุบันและด้านล่าง
{
"rule" : [ ],
"excludes" : [ ],
"includes" : [ {} ],
"inheritParent" : false ,
"parameters" : {}
} สิ่งนี้สามารถทำให้ง่ายขึ้นโดยใช้ค่าเริ่มต้นของไฟล์ .cflintrc :
{
"includes" : [{}],
"inheritParent" : false
}ดูการสนทนาในปัญหา #290 สำหรับข้อมูลเพิ่มเติม
พารามิเตอร์ภายในกฎสามารถแทนที่ในไฟล์. .cflintrc ใช้ชื่อกฎและพารามิเตอร์เข้าร่วมกับ DOT
{
"parameters" : {
"VariableNameChecker.maxLength" : " 15 "
}
} จัดหาไฟล์ cflintexclude.json ในบรรทัดคำสั่งด้วยอาร์กิวเมนต์ -filterfile
หากต้องการกรองข้อความ global_var ในโฟลเดอร์ "Some package location" ให้เพิ่มสิ่งต่อไปนี้ใน cflintexclude.json
[
other exclude rules...,
{"file":".*some\\package\\location\\.*","code":"GLOBAL_VAR"}
]
หมายเหตุ: การเฉือนด้านหลังจะต้องหลบหนีสองครั้งหนึ่งครั้งสำหรับ JSON หนึ่งครั้งสำหรับการแสดงออกปกติ
[
other exclude rules...,
{"file":".*some/package/location/.*","code":"GLOBAL_VAR"}
]
ยกประเด็นที่นี่ใน GitHub และเราจะดูพวกเขา
ทีม CFML Slack มีช่อง #cflint ที่คุณสามารถเข้าร่วมและพูดคุยกับผู้มีส่วนร่วมทั่วไปและผู้ใช้รายอื่นส่วนใหญ่
ดูการสนับสนุน. MD สำหรับข้อมูลเพิ่มเติม
โปรดทราบว่าห้องสมุดและโครงการส่วนใหญ่ที่กล่าวถึงที่นี่ไม่เกี่ยวข้องโดยตรงกับและดูแลโดยทีมงาน Cflint โปรดดูผู้เขียนและผู้ดูแลโครงการที่เกี่ยวข้องเพื่อรับการสนับสนุนโดยใช้ห้องสมุดก่อน
หากคุณทำงาน (หรือกำลังคิดเกี่ยวกับการเริ่มต้น) โครงการที่เกี่ยวข้องกับ CFLINT โปรดแจ้งให้เราทราบ เรายินดีที่จะรวมโครงการบุคคลที่สามที่เกี่ยวข้องไว้ในรายการด้านบน