تطبيق PHP خالص لبروتوكول خادم اللغة المفتوح. يوفر تحليل التعليمات البرمجية الثابتة لـ PHP لأي IDE.
يستخدم محلل PHP الرائع Tolerant، وانعكاس 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 ميجابايت على Surface Pro 3. خادم اللغة يعمل بكامل طاقته أثناء الفهرسة ويمكنه الاستجابة للطلبات ذات التعريفات المفهرسة بالفعل. ستكون طلبات المتابعة فورية تقريبًا لأن الفهرس محفوظ في الذاكرة.
يؤثر تمكين XDebug بشكل كبير على الأداء وقد يؤدي إلى تعطل الخادم إذا كان إعداد max_nesting_level
منخفضًا جدًا.
يتبع هذا المشروع semver فيما يتعلق باتصالات البروتوكول ومعلمات سطر الأوامر، على سبيل المثال، ستؤدي الزيادة الرئيسية في إصدار LSP إلى زيادة كبيرة في إصدار PHP LS. ستؤدي الميزات الجديدة مثل عمليات تنفيذ الطلب إلى إصدار ثانوي جديد. كل شيء آخر سيكون بمثابة إصدار التصحيح. تعتبر جميع الفئات داخلية ولا تخضع لـ semver.
طريقة التثبيت الموصى بها هي من خلال Composer. تشغيل ببساطة
composer require felixfbecker/language-server
وستحصل على أحدث إصدار مستقر وجميع التبعيات.
سيؤدي تشغيل composer update
إلى تحديث الخادم إلى أحدث إصدار غير قابل للكسر.
بعد تثبيت خادم اللغة وتبعياته، يجب عليك تحليل جذور رموز 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 بحدود الذاكرة. الافتراضي هو 4 جيجابايت (وهو أكثر بكثير من المطلوب).
مثال:
php bin/php-language-server.php --memory-limit=256M
تحتاج على الأقل إلى تثبيت PHP 7.0 وComposer. استنساخ المستودع وتشغيله
composer install
لتثبيت التبعيات.
قم بإجراء الاختبارات باستخدام
composer test
الوبر مع
composer lint
يقوم المشروع بتوزيع جذور PHP الخاصة بـ PHPStorm للحصول على دعم لمكونات PHP المدمجة. يقوم بإعادة تحليلها حسب الحاجة بعد عمليات Composer، ولكن بعد بعض التغييرات في التعليمات البرمجية (مثل تلك التي تتضمن الفهرس أو التحليل) قد تضطر إلى إعادة تحليلها بشكل صريح:
composer run-script parse-stubs
لتصحيح الأخطاء باستخدام xDebug، تأكد من تعيين هذه المجموعة كمتغير بيئة
PHPLS_ALLOW_XDEBUG=1
يخبر هذا خادم اللغة بعدم إعادة التشغيل بدون XDebug إذا اكتشف تمكين XDebug (لدى XDebug تأثير عالي الأداء).