ปลั๊กอินสำหรับเครื่องมือการวิเคราะห์แบบคงที่ php_codesniffer ที่เพิ่มการวิเคราะห์การใช้ตัวแปรที่มีปัญหา
VariableAnalysis.CodeAnalysis.VariableAnalysis.UndefinedVariable )unset() โดยไม่ถูกกำหนด (รหัสสูดดม: VariableAnalysis.CodeAnalysis.VariableAnalysis.UndefinedUnsetVariable )VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable )$this self::$static_member , static::$static_member ถูกใช้นอกขอบเขตชั้นเรียน (รหัสสูดดม: VariableAnalysis.CodeAnalysis.VariableAnalysis.SelfOutsideClass หรือ VariableAnalysis.CodeAnalysis.VariableAnalysis.StaticOutsideClass ) Variableanalysis ต้องใช้ PHP 5.4 หรือสูงกว่าและรหัส PHP เวอร์ชัน 3.5.6 หรือสูงกว่า
นี่เป็นวิธีที่ง่ายที่สุด
ก่อนอื่นให้ติดตั้ง phpcodesniffer-composer-installer สำหรับโครงการของคุณหากคุณยังไม่ได้ สิ่งนี้จะติดตั้ง PHPCs
composer config allow-plugins.dealerdirect/phpcodesniffer-composer-installer true
composer require --dev dealerdirect/phpcodesniffer-composer-installer
จากนั้นติดตั้งมาตรฐานเหล่านี้
composer require --dev sirbrillig/phpcs-variable-analysis
จากนั้นคุณสามารถรวมการดมกลิ่นได้โดยการเพิ่มบรรทัดเช่นไฟล์ phpcs.xml ของคุณต่อไปนี้
<rule ref="VariableAnalysis"/>
มันควรจะทำงานหลังจากนั้น!
ติดตั้ง PHP_CODESNIFFER (PHPCS) โดยทำตามคำแนะนำในการติดตั้ง (ผ่านนักแต่งเพลง, ไฟล์ phar, ลูกแพร์หรือการชำระเงิน GIT)
ตรวจสอบให้แน่ใจว่าเวอร์ชันของ php_codesniffer ตรงกับความต้องการของเรา
ติดตั้ง Variableanalysis ดาวน์โหลดไฟล์ zip หรือ tar.gz จากหน้ารุ่นล่าสุดของ Variableanalysis ขยายไฟล์และเปลี่ยนชื่อไดเรกทอรีผลลัพธ์เป็น phpcs-variable-analysis ย้ายไดเรกทอรีไปยังสถานที่ที่คุณต้องการรักษามาตรฐาน PHPCS ทั้งหมดของคุณ
เพิ่มเส้นทางของมาตรฐานที่ติดตั้งใหม่ไปยังการกำหนดค่า php_codesniffer installed_paths คำสั่งต่อไปนี้ควรผนวกมาตรฐานใหม่เข้ากับมาตรฐานที่มีอยู่ของคุณ (ตรวจสอบให้แน่ใจว่าได้จัดหาเส้นทางจริงไปยังไดเรกทอรีที่คุณสร้างไว้ข้างต้น)
phpcs --config-set installed_paths "$(phpcs --config-show|grep installed_paths|awk '{ print $2 }'),/path/to/phpcs-variable-analysis"
หากคุณไม่ได้ติดตั้งมาตรฐานอื่น ๆ คุณสามารถทำได้ง่ายขึ้น (อีกครั้งอย่าลืมจัดหาเส้นทางจริง):
phpcs --config-set installed_paths /path/to/phpcs-variable-analysis
มีตัวเลือกที่หลากหลายในการปรับแต่งพฤติกรรมของ variableanalysis ลองดูที่ Ruleset.xml.xml.example สำหรับตัวอย่างที่แสดงความคิดเห็นของการกำหนดค่า
ตัวเลือกที่มีอยู่มีดังนี้:
allowUnusedFunctionParameters (บูล, false เริ่มต้นเท็จ): หากตั้งค่าเป็นจริงอาร์กิวเมนต์ฟังก์ชั่นจะไม่ถูกทำเครื่องหมายว่าไม่ได้ใช้allowUnusedCaughtExceptions (บูล, ค่าเริ่มต้น true ): หากตั้งค่าเป็นจริงตัวแปรข้อยกเว้นที่จับได้จะไม่ถูกทำเครื่องหมายว่าไม่ได้ใช้allowUnusedParametersBeforeUsed (บูล, ค่าเริ่มต้น true ): หากตั้งค่าเป็นอาร์กิวเมนต์ฟังก์ชั่นที่ไม่ได้ใช้จริงจะถูกละเว้นหากพวกเขาถูกตามด้วยอาร์กิวเมนต์ฟังก์ชั่นที่ใช้แล้วallowUnusedVariablesBeforeRequire (บูล, ค่าเริ่มต้น false ): หากตั้งค่าเป็นจริงตัวแปรที่กำหนดไว้ก่อนที่ require , require_once , include , หรือ include_once จะไม่ถูกทำเครื่องหมายว่าไม่ได้ใช้ พวกเขาอาจมีไว้สำหรับไฟล์ที่ต้องการallowUndefinedVariablesInFileScope (บูล, false เริ่มต้นเท็จ): หากตั้งค่าเป็นตัวแปรจริงที่ไม่ได้กำหนดในขอบเขตระดับบนสุดของไฟล์จะไม่ถูกทำเครื่องหมายว่าไม่ได้กำหนด สิ่งนี้มีประโยชน์สำหรับไฟล์เทมเพลตที่ใช้ตัวแปรส่วนกลางจำนวนมากที่กำหนดไว้ที่อื่นallowUnusedVariablesInFileScope (บูล, false เริ่มต้นเท็จ): หากตั้งค่าเป็นตัวแปรจริงที่ไม่ได้ใช้ในขอบเขตระดับบนสุดของไฟล์จะไม่ถูกทำเครื่องหมายว่าไม่ได้ใช้ สิ่งนี้จะเป็นประโยชน์เมื่อกำหนดตัวแปรทั่วโลกจำนวนมากที่จะใช้ที่อื่นvalidUnusedVariableNames (สตริง, ค่าเริ่มต้น null ): รายชื่อตัวแปรที่แยกออกจากอวกาศที่คุณต้องการเพิกเฉยจากคำเตือนตัวแปรที่ไม่ได้ใช้ ตัวอย่างเช่นในการละเว้นตัวแปร $junk และ $unused สิ่งนี้สามารถตั้งค่าเป็น 'junk unused'ignoreUnusedRegexp (สตริง, ค่าเริ่ม null ): สตริง PHP regexp (โปรดทราบว่าสิ่งนี้ต้องใช้ตัวคั่นที่ชัดเจน) สำหรับตัวแปรที่คุณต้องการเพิกเฉยจากคำเตือนตัวแปรที่ไม่ได้ใช้ ตัวอย่างเช่นในการละเว้นตัวแปร $_junk และ $_unused สิ่งนี้สามารถตั้งค่าเป็น '/^_/'validUndefinedVariableNames (สตริง, ค่าเริ่มต้น null ): รายชื่อตัวแปรที่แยกออกจากอวกาศที่คุณต้องการเพิกเฉยจากคำเตือนตัวแปรที่ไม่ได้กำหนด ตัวอย่างเช่นในการละเว้นตัวแปร $post และ $undefined สิ่งนี้สามารถตั้งค่าเป็น 'post undefined' สิ่งนี้สามารถใช้ร่วมกับ validUndefinedVariableRegexpvalidUndefinedVariableRegexp (สตริง, ค่าเริ่มต้น null ): สตริง PHP regexp (โปรดทราบว่าสิ่งนี้ต้องมีตัวคั่นที่ชัดเจน) สำหรับตัวแปรที่คุณต้องการเพิกเฉยจากคำเตือนตัวแปรที่ไม่ได้กำหนด ตัวอย่างเช่นในการละเว้นตัวแปร $post และ $undefined สิ่งนี้สามารถตั้งค่าเป็น '/^(post|undefined)$/' สิ่งนี้สามารถใช้ร่วมกับ validUndefinedVariableNamesallowUnusedForeachVariables (บูล, ค่าเริ่มต้น true ): หากตั้งค่าเป็นค่าจริงที่ไม่ได้ใช้จาก key => value ไวยากรณ์ในลูป foreach จะไม่ถูกทำเครื่องหมายว่าไม่ได้ใช้sitePassByRefFunctions (สตริง, ค่าเริ่มต้น null ): รายการของฟังก์ชั่นที่กำหนดเองซึ่งส่งผ่านในตัวแปรที่จะเริ่มต้นโดยการอ้างอิง (เช่น preg_match() ) และดังนั้นจึงไม่ควรกำหนดตัวแปรเหล่านั้นที่จะกำหนดไว้ล่วงหน้า รายการคือพื้นที่คั่นและแต่ละรายการเป็นของ functionName:1,2 ชื่อฟังก์ชั่นมาก่อนตามด้วยลำไส้ใหญ่และรายการหมายเลขอาร์กิวเมนต์ที่คั่นด้วยเครื่องหมายจุลภาค (เริ่มต้นจาก 1) ซึ่งควรได้รับการพิจารณาคำจำกัดความตัวแปร ค่าพิเศษ ... ในรายการอาร์กิวเมนต์จะทำให้อาร์กิวเมนต์ทั้งหมดหลังจากหมายเลขสุดท้ายที่จะพิจารณาคำจำกัดความของตัวแปรallowWordPressPassByRefFunctions (บูล, false ): หากตั้งค่าเป็นจริงรายการของฟังก์ชั่นการอ้างอิงการอ้างอิงแบบพาสเทอร์ทั่วไปจะถูกเพิ่มลงในรายการของ PHP เพื่อให้ผ่านตัวแปรที่ไม่ได้กำหนดไปยังฟังก์ชั่นเหล่านี้ (จะเริ่มต้นโดยการอ้างอิง) จะได้รับอนุญาตในการตั้งค่าตัวเลือกเหล่านี้คุณต้องใช้ XML ในชุดกฎของคุณ สำหรับรายละเอียดดูหน้าคุณสมบัติการดมกลิ่น PHPCS ที่ปรับแต่งได้ นี่คือตัวอย่างที่ไม่สนใจตัวแปรทั้งหมดที่เริ่มต้นด้วยขีดล่าง:
< rule ref = " VariableAnalysis.CodeAnalysis.VariableAnalysis " >
< properties >
< property name = " ignoreUnusedRegexp " value = " /^_/ " />
</ properties >
</ rule >นี่คือการแยกจากงานที่ยอดเยี่ยมใน https://github.com/illusori/php_codesniffer-variableanalysis
กรุณาเปิดปัญหาหรือ PRS ในที่เก็บนี้
การเปลี่ยนแปลงใด ๆ ควรมาพร้อมกับการทดสอบและควรผ่านการวิเคราะห์ผ้าสำลีและการวิเคราะห์แบบคงที่ โปรดใช้ PHPDOC (แทนที่จะเป็นประเภทจริง) สำหรับการประกาศประเภทเนื่องจากจะต้องทำงานใน PHP 5.4
ในการเรียกใช้การทดสอบตรวจสอบให้แน่ใจว่ามีการติดตั้งนักแต่งเพลงจากนั้นเรียกใช้:
composer install # you only need to do this once
composer test
ในการเรียกใช้ผ้าสำลีให้ใช้:
composer lint
ในการเรียกใช้การวิเคราะห์แบบคงที่ใช้:
composer phpstan