การใช้งาน PHP อย่างแท้จริงของโปรโตคอลเซิร์ฟเวอร์ภาษาแบบเปิด ให้การวิเคราะห์โค้ดแบบคงที่สำหรับ PHP สำหรับ IDE ใด ๆ
ใช้ Tolerant PHP Parser ที่ยอดเยี่ยม การสะท้อน DocBlock ของ phpDocumentor และลูปเหตุการณ์สำหรับการทำงานพร้อมกัน
สารบัญ
คำขอโฮเวอร์ส่งคืนบรรทัดประกาศ (ทำเครื่องหมายด้วยภาษา php
) และสรุปของ docblock สำหรับพารามิเตอร์ ก็จะส่งคืนแท็ก @param
ข้อความค้นหาจะถูกจับคู่โดยไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่กับชื่อแบบเต็มของสัญลักษณ์
ไม่เป็นมาตรฐาน: การสืบค้นที่ว่างเปล่าจะส่งกลับสัญลักษณ์ ทั้งหมด ที่พบในพื้นที่ทำงาน
ข้อผิดพลาดในการแยกวิเคราะห์ PHP ถูกรายงานเป็นข้อผิดพลาด ข้อผิดพลาดในการแยกวิเคราะห์ของ docblocks ถูกรายงานเป็นคำเตือน ข้อผิดพลาด/คำเตือนจากไดเรกทอรี vendor
จะถูกละเว้น
การเสร็จสิ้น พิมพ์การแก้ไข ฯลฯ จะใช้ไลบรารี PHP มาตรฐานและส่วนขยายทั่วไป
คำจำกัดความที่สามารถค้นหาได้ทั่วโลกคือ:
const
คำจำกัดความได้รับการแก้ไขทันเวลาเมื่อจำเป็น:
use
การปิดยังไม่รองรับ:
define()
เนมสเปซไม่ถือเป็นการประกาศโดยการออกแบบ เนื่องจากเป็นเพียงส่วนหนึ่งของชื่อที่มีคุณสมบัติครบถ้วนเท่านั้น และไม่ได้แมปกับการประกาศเฉพาะรายการเดียว
คำจำกัดความ/การอ้างอิง/โฮเวอร์ใช้งานได้ในปัจจุบัน
use
)use
คำสั่งสำหรับคลาส ค่าคงที่ และฟังก์ชันimplements
/ extends
instanceof
การตรวจสอบ เซิร์ฟเวอร์ภาษานี้ใช้ส่วนขยายโปรโตคอลไฟล์ หากไคลเอนต์แสดงการสนับสนุนผ่าน ClientCapabilities.xfilesProvider
และ ClientCapabilities.xcontentProvider
เซิร์ฟเวอร์จะร้องขอไฟล์ในพื้นที่ทำงานและเนื้อหาไฟล์ผ่านการร้องขอจากไคลเอนต์ และไม่สามารถเข้าถึงระบบไฟล์โดยตรง ซึ่งช่วยให้เซิร์ฟเวอร์ทำงานในสภาพแวดล้อมที่แยกออกมา เช่น คอนเทนเนอร์ ในพื้นที่ทำงานระยะไกล หรือโปรโตคอลอื่นนอกเหนือจาก file://
เมื่อเริ่มต้น เซิร์ฟเวอร์จะสแกนไดเร็กทอรีโปรเจ็กต์เพื่อหาไฟล์ PHP แบบวนซ้ำ แยกวิเคราะห์และเพิ่มคำจำกัดความและการอ้างอิงทั้งหมดไปยังดัชนีในหน่วยความจำ เวลาที่ใช้ขึ้นอยู่กับขนาดโครงการ ในขณะที่เขียน โปรเจ็กต์นี้ประกอบด้วยไฟล์ 78 ไฟล์ + 1560 ไฟล์ในการอ้างอิง ซึ่งใช้เวลา 97 วินาทีในการแยกวิเคราะห์และใช้ 76 MB บน Surface Pro 3 เซิร์ฟเวอร์ภาษาทำงานได้อย่างสมบูรณ์ในขณะที่จัดทำดัชนี และสามารถตอบสนองต่อคำขอที่มีคำจำกัดความที่จัดทำดัชนีไว้แล้ว คำขอติดตามผลจะเกิดขึ้นเกือบจะในทันทีเนื่องจากดัชนีถูกเก็บไว้ในหน่วยความจำ
การเปิดใช้งาน XDebug จะส่งผลกระทบอย่างมากต่อประสิทธิภาพการทำงาน และอาจทำให้เซิร์ฟเวอร์เสียหายได้หากการตั้งค่า max_nesting_level
ต่ำเกินไป
โปรเจ็กต์นี้ติดตาม semver สำหรับการสื่อสารโปรโตคอลและพารามิเตอร์บรรทัดคำสั่ง เช่น การเพิ่มเวอร์ชันหลักของ LSP จะส่งผลให้ PHP LS เวอร์ชันหลักเพิ่มขึ้น คุณสมบัติใหม่ เช่น การใช้งานคำขอจะส่งผลให้มีเวอร์ชันรองใหม่ ทุกสิ่งทุกอย่างจะเป็นการเปิดตัวแพทช์ คลาสทั้งหมดถือเป็นคลาสภายในและไม่อยู่ภายใต้การควบคุมแบบ Semver
วิธีการติดตั้งที่แนะนำคือผ่าน Composer เพียงแค่เรียกใช้
composer require felixfbecker/language-server
และคุณจะได้รับเวอร์ชันเสถียรล่าสุดและการอ้างอิงทั้งหมด
การเรียกใช้ composer update
จะอัปเดตเซิร์ฟเวอร์เป็นเวอร์ชันล่าสุดที่ไม่เสียหาย
หลังจากติดตั้งเซิร์ฟเวอร์ภาษาและการอ้างอิงแล้ว คุณต้องแยกวิเคราะห์ stub สำหรับสัญลักษณ์ PHP มาตรฐาน และบันทึกดัชนีเพื่อการเริ่มต้นที่รวดเร็ว
composer run-script --working-dir=vendor/felixfbecker/language-server parse-stubs
เริ่มต้นเซิร์ฟเวอร์ภาษาด้วย
php vendor/felixfbecker/language-server/bin/php-language-server.php
--tcp=host:port
(เป็นทางเลือก)ทำให้เซิร์ฟเวอร์ใช้การเชื่อมต่อ TCP สำหรับการสื่อสารกับไคลเอนต์ภาษาแทนการใช้ STDIN/STDOUT เซิร์ฟเวอร์จะพยายามเชื่อมต่อกับที่อยู่ที่ระบุ ขอแนะนำอย่างยิ่งบน Windows เนื่องจากการบล็อก STDIO
ตัวอย่าง:
php bin/php-language-server.php --tcp=127.0.0.1:12345
--tcp-server=host:port
(เป็นทางเลือก)ทำให้เซิร์ฟเวอร์ใช้การเชื่อมต่อ TCP สำหรับการสื่อสารกับไคลเอนต์ภาษาแทนการใช้ STDIN/STDOUT เซิร์ฟเวอร์จะฟังที่อยู่ที่ระบุสำหรับการเชื่อมต่อ หากมี PCNTL จะแยกกระบวนการลูกสำหรับทุกการเชื่อมต่อ ถ้าไม่เช่นนั้น จะยอมรับการเชื่อมต่อเดียวเท่านั้น และไม่สามารถสร้างการเชื่อมต่อใหม่ได้เมื่อปิดแล้ว ให้สร้างกระบวนการใหม่แทน
ตัวอย่าง:
php bin/php-language-server.php --tcp-server=127.0.0.1:12345
--memory-limit=integer
(ไม่บังคับ)ตั้งค่าขีดจำกัดหน่วยความจำสำหรับเซิร์ฟเวอร์ภาษา เทียบเท่ากับคำสั่ง php.ini ที่จำกัดหน่วยความจำ ค่าเริ่มต้นคือ 4GB (ซึ่งเกินความจำเป็น)
ตัวอย่าง:
php bin/php-language-server.php --memory-limit=256M
คุณต้องติดตั้ง PHP 7.0 และ Composer เป็นอย่างน้อย โคลนที่เก็บและรัน
composer install
เพื่อติดตั้งการพึ่งพา
ทำการทดสอบด้วย
composer test
ผ้าสำลีด้วย
composer lint
โปรเจ็กต์แยกวิเคราะห์ PHP stub ของ PHPStorm เพื่อรับการสนับสนุนสำหรับ PHP บิวด์อิน โดยจะแยกวิเคราะห์ใหม่ตามความจำเป็นหลังจากกระบวนการของ Composer แต่หลังจากการเปลี่ยนแปลงโค้ดบางอย่าง (เช่น การเปลี่ยนแปลงที่เกี่ยวข้องกับดัชนีหรือการแยกวิเคราะห์) คุณอาจต้องแยกวิเคราะห์ใหม่อย่างชัดเจน:
composer run-script parse-stubs
หากต้องการดีบักด้วย xDebug ตรวจสอบให้แน่ใจว่าคุณได้ตั้งค่านี้เป็นตัวแปรสภาพแวดล้อม
PHPLS_ALLOW_XDEBUG=1
สิ่งนี้จะบอกเซิร์ฟเวอร์ภาษาไม่ให้รีสตาร์ทโดยไม่มี XDebug หากตรวจพบว่ามีการเปิดใช้งาน XDebug (XDebug มีผลกระทบต่อประสิทธิภาพสูง)