PHPantom — це реалізація PHP Language Server Protocol (LSP), написана на Rust. Головні переваги інструменту — швидкий запуск та низьке споживання пам'яті. У проєкті з 21 000 PHP-файлів та 1,5 млн рядків коду сервер стає до роботи менш ніж за секунду:
| Метрика | PHPantom |
|---|---|
| Час готовності | < 1 секунди |
| Використання RAM | 59 MB |
| Кеш на диску | 0 MB |
Взаємодія відбувається через stdin/stdout за стандартним протоколом LSP, що забезпечує сумісність із будь-яким сучасним редактором. JetBrains phpstorm-stubs вбудовані безпосередньо у бінарний файл, тому розробнику не потрібно завантажувати додаткові дані чи керувати кешем.
# Інтелектуальний аналіз типів
PHPantom розпізнає типи у generics, анотаціях PHPStan, умовних типах повернення та структурах масивів чи об'єктів. Завдяки підтримці тегів @template та @template-covariant, generic-колекції забезпечують коректне автодоповнення при кожному виклику:
/**
* @template T
*/
class Collection
{
/** @var T[] */
private array $items = [];
/**
* @param T $item
*/
public function add(mixed $item): void
{
$this->items[] = $item;
}
/**
* @return T|null
*/
public function first(): mixed
{
return $this->items[0] ?? null;
}
}
/** @var Collection<User> $users */
$users = new Collection();
$users->add(new User());
$user = $users->first(); // тип визначено як User|null
Laravel Eloquent підтримується без жодних плагінів: зв'язки, аксесори та властивості моделей розпізнаються для автодоповнення та швидкого переходу до визначення.
# Рефакторинг
PHPantom дозволяє перейменовувати символи у межах всього робочого простору та змінювати видимість методів. Список функцій у README включає також виділення методів/функцій, роботу зі змінними, Constructor Parameter Promotion та реалізацію інтерфейсів (підтримка залежить від редактора та версії PHP).
Інструмент підсвічує застарілі (@deprecated) символи безпосередньо в коді та пропонує швидкі дії для спрощення виразів.
# Налаштування редактора
Готові бінарні файли для Linux, macOS та Windows доступні на сторінці релізів. Додайте бінарний файл до вашого PATH і налаштуйте редактор:
Neovim — додайте сервер у конфігурацію LSP, вкажіть шлях до файлу, filetypes = { "php" } та маркери кореневої директорії (composer.json або .git).
VS Code — встановіть універсальний LSP-клієнт, завантажте бінарний файл і вкажіть шлях до нього для мови php.
Zed — розширення вже доступне у директорії zed-extension/. Воно автоматично завантажує потрібний файл, але ви можете використовувати локальну збірку через PATH.
PHPStorm — встановіть плагін LSP4IJ, створіть новий запис для language server із вказанням шляху до бінарного файлу та прив'яжіть його до PHP-файлів.
# Конфігурація проєкту
PHPantom автоматично зчитує composer.json для визначення шляхів автозавантаження. Для додаткових налаштувань використовується файл .phpantom.toml:
[project]
php_version = "8.3"
[diagnostics]
unused_variables = true
deprecated_symbols = true
[indexing]
strategy = "composer" # або "self" чи "none"
Створити дефолтний конфіг можна командою:
phpantom_lsp --init
Вихідний код проєкту доступний на GitHub: AJenbo/phpantom_lsp.