Implementasi PHP murni dari Protokol Server Bahasa terbuka. Menyediakan analisis kode statis untuk PHP untuk IDE apa pun.
Menggunakan Parser PHP Toleransi yang hebat, refleksi DocBlock phpDocumentor, dan loop peristiwa untuk konkurensi.
Daftar isi
Permintaan hover mengembalikan baris deklarasi (ditandai dengan bahasa php
) dan ringkasan docblock. Untuk Parameter, ini akan mengembalikan tag @param
.
Kueri dicocokkan tanpa membedakan huruf besar dan kecil dengan nama simbol yang sepenuhnya memenuhi syarat.
Non-Standar: Kueri kosong akan mengembalikan semua simbol yang ditemukan di ruang kerja.
Kesalahan penguraian PHP dilaporkan sebagai kesalahan, kesalahan penguraian docblock dilaporkan sebagai peringatan. Kesalahan/Peringatan dari direktori vendor
diabaikan.
Penyelesaian, ketik resolval dll. akan menggunakan perpustakaan PHP standar dan ekstensi umum.
Definisi yang dapat dicari secara global adalah:
const
Definisi diselesaikan tepat pada waktunya bila diperlukan:
use
penutupanBelum didukung:
define()
Namespace tidak dianggap sebagai deklarasi karena desainnya hanya merupakan bagian dari nama yang sepenuhnya memenuhi syarat dan tidak dipetakan ke satu deklarasi unik.
Definisi/referensi/hover saat ini berfungsi
use
)use
pernyataan untuk kelas, konstanta, dan fungsiimplements
/ extends
instanceof
pemeriksaan Server bahasa ini mengimplementasikan ekstensi protokol file. Jika klien menyatakan dukungan melalui ClientCapabilities.xfilesProvider
dan ClientCapabilities.xcontentProvider
, server akan meminta file di ruang kerja dan konten file melalui permintaan dari klien dan tidak pernah mengakses sistem file secara langsung. Hal ini memungkinkan server untuk beroperasi di lingkungan yang terisolasi seperti container, di ruang kerja jarak jauh, atau protokol apa pun yang berbeda dari file://
.
Setelah inisialisasi, server akan memindai direktori proyek secara rekursif untuk mencari file PHP, menguraikannya dan menambahkan semua definisi dan referensi ke indeks dalam memori. Waktu yang dibutuhkan tergantung pada ukuran proyek. Pada saat penulisan, proyek ini berisi 78 file + 1560 file dalam dependensi yang membutuhkan waktu 97 detik untuk diurai dan menggunakan 76 MB pada Surface Pro 3. Server bahasa beroperasi penuh saat mengindeks dan dapat merespons permintaan dengan definisi yang sudah diindeks. Permintaan tindak lanjut akan terjadi hampir seketika karena indeks disimpan dalam memori.
Mengaktifkan XDebug sangat berdampak pada kinerja dan bahkan dapat membuat server crash jika pengaturan max_nesting_level
terlalu rendah.
Proyek ini mengikuti semver untuk komunikasi protokol dan parameter baris perintah, misalnya peningkatan versi besar LSP akan menghasilkan peningkatan versi besar PHP LS. Fitur baru seperti implementasi permintaan akan menghasilkan versi minor baru. Segala sesuatu yang lain akan menjadi rilis patch. Semua kelas dianggap internal dan tidak tunduk pada semver.
Metode instalasi yang disarankan adalah melalui Composer. Jalankan saja
composer require felixfbecker/language-server
dan Anda akan mendapatkan rilis stabil terbaru dan semua dependensi.
Menjalankan composer update
akan memperbarui server ke versi terbaru yang tidak dapat rusak.
Setelah menginstal server bahasa dan dependensinya, Anda harus mengurai stub untuk simbol PHP standar dan menyimpan indeks untuk inisialisasi cepat.
composer run-script --working-dir=vendor/felixfbecker/language-server parse-stubs
Mulai server bahasa dengan
php vendor/felixfbecker/language-server/bin/php-language-server.php
--tcp=host:port
(opsional)Menyebabkan server menggunakan koneksi tcp untuk berkomunikasi dengan klien bahasa alih-alih menggunakan STDIN/STDOUT. Server akan mencoba terhubung ke alamat yang ditentukan. Sangat disarankan di Windows karena memblokir STDIO.
Contoh:
php bin/php-language-server.php --tcp=127.0.0.1:12345
--tcp-server=host:port
(opsional)Menyebabkan server menggunakan koneksi tcp untuk berkomunikasi dengan klien bahasa alih-alih menggunakan STDIN/STDOUT. Server akan mendengarkan alamat yang diberikan untuk koneksi. Jika PCNTL tersedia, akan melakukan proses anak untuk setiap koneksi. Jika tidak, hanya akan menerima satu koneksi dan koneksi tidak dapat dibangun kembali setelah ditutup, sebagai gantinya akan munculkan proses baru.
Contoh:
php bin/php-language-server.php --tcp-server=127.0.0.1:12345
--memory-limit=integer
(opsional)Menetapkan batas memori untuk server bahasa. Setara dengan direktif php.ini dengan batas memori. Standarnya adalah 4GB (lebih dari yang dibutuhkan).
Contoh:
php bin/php-language-server.php --memory-limit=256M
Anda memerlukan setidaknya PHP 7.0 dan Composer diinstal. Kloning repositori dan jalankan
composer install
untuk menginstal dependensi.
Jalankan tes dengan
composer test
serat dengan
composer lint
Proyek ini mem-parsing stub PHP PHPStorm untuk mendapatkan dukungan untuk PHP bawaan. Ini akan mem-parsingnya kembali sesuai kebutuhan setelah proses Composer, namun setelah beberapa perubahan kode (seperti yang melibatkan indeks atau penguraian), Anda mungkin harus mengurai ulang secara eksplisit:
composer run-script parse-stubs
Untuk melakukan debug dengan xDebug, pastikan Anda menetapkan ini sebagai variabel lingkungan
PHPLS_ALLOW_XDEBUG=1
Ini memberitahu Server Bahasa untuk tidak memulai ulang tanpa XDebug jika mendeteksi bahwa XDebug diaktifkan (XDebug memiliki dampak kinerja tinggi).